EgtGeomKernel 1.6k2 :
- corretto calcolo bounding box di regioni multi-chunk - corretto offset di regioni multi-chunk.
This commit is contained in:
Binary file not shown.
+18
-4
@@ -527,8 +527,15 @@ SurfFlatRegion::GetLocalBBox( BBox3d& b3Loc, int nFlag) const
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK || m_vpLoop.empty())
|
||||
return false ;
|
||||
// è il bounding box del loop esterno
|
||||
return m_vpLoop[0]->GetBBox( m_frF, b3Loc, nFlag) ;
|
||||
// reset del bbox
|
||||
b3Loc.Reset() ;
|
||||
// è il bounding box dei loop esterni
|
||||
for ( auto i : m_vExtInd) {
|
||||
BBox3d b3Tmp ;
|
||||
if ( m_vpLoop[i]->GetBBox( m_frF, b3Loc, nFlag))
|
||||
b3Loc.Add( b3Tmp) ;
|
||||
}
|
||||
return ( ! b3Loc.IsEmpty()) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -540,8 +547,15 @@ SurfFlatRegion::GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag) const
|
||||
return false ;
|
||||
// frame composito
|
||||
Frame3d frCompo = m_frF * frRef ;
|
||||
// è il bounding box del loop esterno
|
||||
return m_vpLoop[0]->GetBBox( frCompo, b3Ref, nFlag) ;
|
||||
// reset del bbox
|
||||
b3Ref.Reset() ;
|
||||
// è il bounding box dei loop esterni
|
||||
for ( auto i : m_vExtInd) {
|
||||
BBox3d b3Tmp ;
|
||||
if ( m_vpLoop[i]->GetBBox( frCompo, b3Ref, nFlag))
|
||||
b3Ref.Add( b3Tmp) ;
|
||||
}
|
||||
return ( ! b3Ref.IsEmpty()) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -31,9 +31,14 @@ SurfFlatRegion::Offset( double dDist, int nType)
|
||||
PtrOwner<SurfFlatRegion> pSfr( new SurfFlatRegion) ;
|
||||
if ( IsNull( pSfr))
|
||||
return false ;
|
||||
bool bFirstRegion = true ;
|
||||
// ciclo sui chunk
|
||||
bool bFirstCurve = true ;
|
||||
for ( int i = 0 ; i < nChunk ; ++ i) {
|
||||
// creo la regione del chunk
|
||||
PtrOwner<SurfFlatRegion> pSfrChk( new SurfFlatRegion) ;
|
||||
if ( IsNull( pSfrChk))
|
||||
return false ;
|
||||
bool bFirstCurve = true ;
|
||||
// ciclo sui loop di ogni chunk
|
||||
int nLoop = GetLoopCount( i) ;
|
||||
for ( int j = 0 ; j < nLoop ; ++ j) {
|
||||
@@ -47,9 +52,9 @@ SurfFlatRegion::Offset( double dDist, int nType)
|
||||
// recupero le curve di offset
|
||||
PtrOwner<ICurve> pOffs( OffsCrv.GetCurve()) ;
|
||||
while ( bOk && ! IsNull( pOffs)) {
|
||||
// se prima curva esterna in assoluto, è il primo contorno esterno della nuova regione
|
||||
if ( bFirstCurve && j == 0) {
|
||||
if ( ! pSfr->AddExtLoop( Release( pOffs)))
|
||||
// se prima curva esterna, è il primo contorno esterno della nuova regione
|
||||
if ( j == 0 && bFirstCurve) {
|
||||
if ( ! pSfrChk->AddExtLoop( Release( pOffs)))
|
||||
return false ;
|
||||
bFirstCurve = false ;
|
||||
}
|
||||
@@ -64,12 +69,12 @@ SurfFlatRegion::Offset( double dDist, int nType)
|
||||
return false ;
|
||||
// se era loop esterno, lo aggiungo alla nuova regione
|
||||
if ( j == 0) {
|
||||
if ( ! pSfr->Add( *Get( pSfr2)))
|
||||
if ( ! pSfrChk->Add( *Get( pSfr2)))
|
||||
return false ;
|
||||
}
|
||||
// altrimenti loop interno, lo sottraggo alla nuova regione
|
||||
else {
|
||||
if ( ! pSfr->Subtract( *Get( pSfr2)))
|
||||
if ( ! pSfrChk->Subtract( *Get( pSfr2)))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -77,6 +82,23 @@ SurfFlatRegion::Offset( double dDist, int nType)
|
||||
pOffs.Set( OffsCrv.GetCurve()) ;
|
||||
}
|
||||
}
|
||||
// se regione di chunk valida
|
||||
if ( ! bFirstCurve) {
|
||||
// se prima regione di chunk, ne sposto i dati nella nuova regione
|
||||
if ( bFirstRegion) {
|
||||
pSfr->m_vExtInd = pSfrChk->m_vExtInd ;
|
||||
pSfr->m_vpLoop = pSfrChk->m_vpLoop ;
|
||||
for ( auto& pLoop : pSfrChk->m_vpLoop)
|
||||
pLoop = nullptr ;
|
||||
pSfr->m_nStatus = pSfrChk->m_nStatus ;
|
||||
bFirstRegion = false ;
|
||||
}
|
||||
// altrimenti la aggiungo alla nuova regione
|
||||
else {
|
||||
if ( ! pSfr->Add( *Get( pSfrChk)))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// pulisco la superficie corrente
|
||||
|
||||
Reference in New Issue
Block a user