EgtGeomKernel :
- correzione ai CopyFrom di CurveComposite e di SurfBezier.
This commit is contained in:
@@ -604,6 +604,10 @@ CurveComposite::CopyFrom( const CurveComposite& ccSrc)
|
||||
if ( ! AddCurve( *pCrv))
|
||||
return false ;
|
||||
}
|
||||
if ( ccSrc.m_nStatus == IS_A_POINT) {
|
||||
m_ptStart = ccSrc.m_ptStart ;
|
||||
m_nStatus = IS_A_POINT ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
+34
-12
@@ -632,8 +632,21 @@ SurfBezier::CopyFrom( const SurfBezier& sbSrc)
|
||||
m_bTrimmed = true ;
|
||||
m_pTrimReg = sbSrc.m_pTrimReg->Clone() ;
|
||||
}
|
||||
if ( sbSrc.m_pSTM != nullptr)
|
||||
if ( sbSrc.m_pSTM != nullptr) {
|
||||
m_pSTM = sbSrc.m_pSTM->Clone() ;
|
||||
for ( int i = 0 ; i < int( sbSrc.m_mCCEdge.size()) ; ++i) {
|
||||
m_mCCEdge.emplace_back() ;
|
||||
for ( int j = 0 ; j < int( sbSrc.m_mCCEdge[i].size()) ; ++j ) {
|
||||
m_mCCEdge.back().emplace_back( sbSrc.m_mCCEdge[i][j]->Clone()) ;
|
||||
}
|
||||
}
|
||||
if( sbSrc.m_bTrimmed) {
|
||||
for ( int i = 0 ; i < int( sbSrc.m_vCCLoop.size()) ; ++i)
|
||||
m_vCCLoop.emplace_back( sbSrc.m_vCCLoop[i]->Clone());
|
||||
}
|
||||
}
|
||||
m_bClosedU = sbSrc.m_bClosedU ;
|
||||
m_bClosedV = sbSrc.m_bClosedV ;
|
||||
m_nTempProp[0] = sbSrc.m_nTempProp[0] ;
|
||||
m_nTempProp[1] = sbSrc.m_nTempProp[1] ;
|
||||
m_dTempParam[0] = sbSrc.m_dTempParam[0] ;
|
||||
@@ -1883,6 +1896,9 @@ SurfBezier::ResetAuxSurf( void) const
|
||||
if ( m_pSTM != nullptr)
|
||||
delete( m_pSTM) ;
|
||||
m_pSTM = nullptr ;
|
||||
|
||||
m_mCCEdge.clear() ;
|
||||
m_vCCLoop.clear() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -1896,6 +1912,9 @@ SurfBezier::ResetTrimRegion( void)
|
||||
m_bTrimmed = false ;
|
||||
// imposto ricalcolo della grafica
|
||||
m_OGrMgr.Reset() ;
|
||||
|
||||
m_mCCEdge.clear() ;
|
||||
m_vCCLoop.clear() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -2362,16 +2381,18 @@ SurfBezier::CreateTrimRegionFromCuts( ICRVCOMPOPOVECTOR& vpCCOpen, ICRVCOMPOPOVE
|
||||
|
||||
// devo verificare se devo aggiungere anche il bordo ( basta verificare se il primo loop chiuso è CCW)
|
||||
double dArea ;
|
||||
vpCCClosed[0]->GetAreaXY( dArea) ;
|
||||
if ( dArea < EPS_SMALL ) {
|
||||
PolyLine plEdge ;
|
||||
plEdge.AddUPoint( 0, ORIG) ;
|
||||
plEdge.AddUPoint( 1, Point3d( m_nSpanU * SBZ_TREG_COEFF, 0)) ;
|
||||
plEdge.AddUPoint( 2, Point3d( m_nSpanU * SBZ_TREG_COEFF, m_nSpanV * SBZ_TREG_COEFF)) ;
|
||||
plEdge.AddUPoint( 3, Point3d( 0, m_nSpanV * SBZ_TREG_COEFF)) ;
|
||||
plEdge.Close() ;
|
||||
vpCCClosed.emplace_back( CreateCurveComposite()) ;
|
||||
vpCCClosed.back()->FromPolyLine( plEdge) ;
|
||||
if( vpCCClosed.size() != 0) {
|
||||
vpCCClosed[0]->GetAreaXY( dArea) ;
|
||||
if ( dArea < EPS_SMALL ) {
|
||||
PolyLine plEdge ;
|
||||
plEdge.AddUPoint( 0, ORIG) ;
|
||||
plEdge.AddUPoint( 1, Point3d( m_nSpanU * SBZ_TREG_COEFF, 0)) ;
|
||||
plEdge.AddUPoint( 2, Point3d( m_nSpanU * SBZ_TREG_COEFF, m_nSpanV * SBZ_TREG_COEFF)) ;
|
||||
plEdge.AddUPoint( 3, Point3d( 0, m_nSpanV * SBZ_TREG_COEFF)) ;
|
||||
plEdge.Close() ;
|
||||
vpCCClosed.emplace_back( CreateCurveComposite()) ;
|
||||
vpCCClosed.back()->FromPolyLine( plEdge) ;
|
||||
}
|
||||
}
|
||||
|
||||
// aggiungo i loop chiusi
|
||||
@@ -2610,7 +2631,8 @@ SurfBezier::UnprojectPointFromStm( int nT, const Point3d& ptI, Point3d& ptSP, in
|
||||
}
|
||||
|
||||
// se ho tre intersezioni vuol dire che un lato è collassato in un punto e il punto di cui voglio la controimmagine è esattamente nel polo
|
||||
if ( nInters == 3 || ( m_bClosedU && ( vInters[1] == 1 || vInters[3] == 1)) || ( m_bClosedV && ( vInters[1] == 1 || vInters[3] == 1))) {
|
||||
// oppure sono su un lato di chiusura
|
||||
if ( nInters == 3 || ( m_bClosedU && ( vInters[1] == 1 || vInters[3] == 1)) || ( m_bClosedV && ( vInters[0] == 1 || vInters[2] == 1))) {
|
||||
if ( nInters == 3)
|
||||
bIsPole = true ;
|
||||
// visto che sono in un polo o su un lato di chiusura devo verificare di aver ricevuto il triangolo giusto
|
||||
|
||||
Reference in New Issue
Block a user