EgtGeomKernel :
- correzione a visualizzazione di Zmap (scelta topologia per caso 3 di MC).
This commit is contained in:
+23
-16
@@ -64,8 +64,9 @@ TestOnNormal( const AppliedVector CompoField[], int nCompoElem)
|
||||
}
|
||||
|
||||
// Se la massima deviazione non supera il limite non è feature
|
||||
const double SHARP_COS = 0.866 ;
|
||||
if ( dMinCosTheta >= SHARP_COS)
|
||||
const double SHARP_COS_SUP = 0.866 ;
|
||||
const double SHARP_COS_INF = - 0.985 ; // - 0.6
|
||||
if ( dMinCosTheta >= SHARP_COS_SUP || dMinCosTheta <= SHARP_COS_INF)
|
||||
return NO_FEATURE ;
|
||||
|
||||
// Verifico se Edge o Corner
|
||||
@@ -1405,9 +1406,6 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, VoxelContainer& vV
|
||||
for ( int j = nLimits[2] ; j < nLimits[3] ; ++ j) {
|
||||
for ( int k = nLimits[4] ; k < nLimits[5] ; ++ k) {
|
||||
|
||||
/* if ( ! ( j >= 2 && j <= 8) )
|
||||
continue ;*/
|
||||
|
||||
// Classificazione dei vertici: interni o esterni al materiale
|
||||
int nIndex = CalcIndex( i, j, k) ;
|
||||
|
||||
@@ -1554,18 +1552,27 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, VoxelContainer& vV
|
||||
if ( bReg) {
|
||||
// Configurazione 3
|
||||
if ( nAllConfig[nIndex] == 3) {
|
||||
// Verifico concordanza tra i versori di una stessa componente
|
||||
// (ogni coppia di vettori di una medesima componente deve avere prodotto scalare non inferiore a 0.7)
|
||||
Vector3d vtCmpAvg0, vtCmpAvg1 ;
|
||||
bool bTest0 = DotTest( CompoVert[0], 3, vtCmpAvg0, 0.7) ;
|
||||
bool bTest1 = DotTest( CompoVert[1], 3, vtCmpAvg1, 0.7) ;
|
||||
// Se i versori di entrambe le componenti sono concordi ha senso parlare di vettori medi.
|
||||
// Altrimenti assegno al loro prodotto scalare un valore assurdo come -2
|
||||
double dScProd = - 2 ;
|
||||
if ( bTest0 && bTest1)
|
||||
dScProd = vtCmpAvg0 * vtCmpAvg1 ;
|
||||
// Test sulla topologia
|
||||
|
||||
double dDotSum = 0 ;
|
||||
for ( int nFV = 0 ; nFV < 3 ; ++ nFV) {
|
||||
for ( int nTV = 0 ; nTV < 2 ; ++ nTV) {
|
||||
dDotSum += CompoVert[0][nFV].vtVec * CompoVert[1][nTV].vtVec ;
|
||||
}
|
||||
}
|
||||
for ( int nFVI = 0 ; nFVI < 2 ; ++ nFVI) {
|
||||
for ( int nFVJ = nFVI + 1 ; nFVJ < 3 ; ++ nFVJ) {
|
||||
dDotSum -= CompoVert[0][nFVI].vtVec * CompoVert[0][nFVJ].vtVec ;
|
||||
}
|
||||
}
|
||||
for ( int nTVI = 0 ; nTVI < 2 ; ++ nTVI) {
|
||||
for ( int nTVJ = nTVI + 1 ; nTVJ < 3 ; ++ nTVJ) {
|
||||
dDotSum -= CompoVert[1][nTVI].vtVec * CompoVert[1][nTVJ].vtVec ;
|
||||
}
|
||||
}
|
||||
bool bTestOnSum = dDotSum > 0 ;
|
||||
// Si passa alla seconda topologia
|
||||
if ( ! ( bTest0 && bTest1) || ( bTest0 && bTest1 && dScProd > 0.7)) {
|
||||
if ( bTestOnSum) {
|
||||
// Ricerca del caso corrispondente della nuova topologia
|
||||
int nt = 0 ;
|
||||
while ( nIndexVsIndex3[nt][0] != nIndex)
|
||||
|
||||
Reference in New Issue
Block a user