EgtExecutor :
- correzioni alla funzione Exe e Lua SurfTmGetFacetOutlineInfo.
This commit is contained in:
+9
-1
@@ -1138,27 +1138,35 @@ ExeSurfTmGetFacetOutlineInfo( int nId, int nFacet, int nRefId,
|
||||
Point3d ptIni, ptFin ;
|
||||
bool bFound = vPL[0].GetFirstULine( &dIni, &ptIni, &dFin, &ptFin) ;
|
||||
while ( bFound) {
|
||||
// faccia adiacente
|
||||
int nAdj = lround( dIni) ;
|
||||
// lunghezza lato
|
||||
double dLen = Dist( ptIni, ptFin) ;
|
||||
// aperto se senza adiacenza o con faccia adiacente che va da parte negativa (tipo foro)
|
||||
bool bOpen = true ;
|
||||
Vector3d vtTg = ptFin - ptIni ;
|
||||
vtTg.Normalize() ;
|
||||
Vector3d vtNf ;
|
||||
if ( nAdj >= 0 && pStm->GetFacetNormal( nAdj, vtNf))
|
||||
bOpen = ((vtTg ^ vtNf) * vtNorm < EPS_SMALL) ;
|
||||
// normale al lato (verso interno se chiuso, verso esterno se aperto)
|
||||
Vector3d vtN = vtTg ;
|
||||
vtN.Rotate( vtNorm, 0, ( bOpen ? -1 : 1)) ;
|
||||
TransformVector( pGeomDB, nId, nRefId, vtN) ;
|
||||
// elevazione secondo direzione della normale al lato
|
||||
double dElev = 0 ;
|
||||
for ( const auto& PU : lstPU) {
|
||||
double dDist = ( PU.first - ptIni) * vtN ;
|
||||
dElev = ( bOpen ? min( dElev, dDist) : max( dElev, dDist)) ;
|
||||
}
|
||||
// porto normale nel riferimento desiderato
|
||||
TransformVector( pGeomDB, nId, nRefId, vtN) ;
|
||||
// inserisco dati nei parametri di ritorno
|
||||
vbOpen.emplace_back( bOpen) ;
|
||||
vnAdj.emplace_back( nAdj) ;
|
||||
vdLen.emplace_back( dLen) ;
|
||||
vvtNorm.emplace_back( vtN) ;
|
||||
vdElev.emplace_back( dElev) ;
|
||||
// passo al prossimo lato
|
||||
bFound = vPL[0].GetNextULine( &dIni, &ptIni, &dFin, &ptFin) ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user