EgtGeomKernel 1.6s2 :
- a IntersCurveCurve aggiunta GetRegionCurveClassification.
This commit is contained in:
Binary file not shown.
+58
-1
@@ -642,4 +642,61 @@ IntersCurveCurve::GetCurveOutClass( const ICurve* pCurve, int& nClass)
|
||||
return false ;
|
||||
nClass = (( dArea > 0) ? CRVC_OUT : CRVC_IN) ;
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
IntersCurveCurve::GetRegionCurveClassification( void)
|
||||
{
|
||||
// classifico la prima curva rispetto alla seconda
|
||||
CRVCVECTOR ccClass ;
|
||||
if ( ! GetCurveClassification( 0, ccClass))
|
||||
return CCREGC_NULL ;
|
||||
// derivo la classificazione delle curve come regioni
|
||||
bool bIn = false ;
|
||||
bool bOut = false ;
|
||||
bool bOnP = false ;
|
||||
bool bOnM = false ;
|
||||
for ( auto& ccOne : ccClass) {
|
||||
switch ( ccOne.nClass) {
|
||||
case CRVC_IN :
|
||||
bIn = true ;
|
||||
break ;
|
||||
case CRVC_OUT :
|
||||
bOut = true ;
|
||||
break ;
|
||||
case CRVC_ON_P :
|
||||
bOnP = true ;
|
||||
break ;
|
||||
case CRVC_ON_M :
|
||||
bOnM = true ;
|
||||
break ;
|
||||
default :
|
||||
return CCREGC_NULL ;
|
||||
}
|
||||
}
|
||||
if ( bIn) {
|
||||
if ( bOut)
|
||||
return CCREGC_INTERS ;
|
||||
else
|
||||
return CCREGC_IN1 ;
|
||||
}
|
||||
if ( bOut) {
|
||||
if ( bOnM)
|
||||
return CCREGC_OUT ;
|
||||
if ( bOnP)
|
||||
return CCREGC_IN2 ;
|
||||
CRVCVECTOR ccClass2 ;
|
||||
if ( ! GetCurveClassification( 1, ccClass2) || ccClass2.empty())
|
||||
return CCREGC_NULL ;
|
||||
if ( ccClass2[0].nClass == CRVC_OUT)
|
||||
return CCREGC_OUT ;
|
||||
else
|
||||
return CCREGC_IN2 ;
|
||||
}
|
||||
if ( bOnP)
|
||||
return CCREGC_SAME ;
|
||||
if ( bOnM)
|
||||
return CCREGC_OUT ;
|
||||
return CCREGC_NULL ;
|
||||
}
|
||||
|
||||
+12
-48
@@ -1235,55 +1235,19 @@ SurfFlatRegion::GetChunkSimpleClassification( int nChunk, const ISurfFlatRegion&
|
||||
|
||||
// classifico il loop esterno del chunk della prima regione rispetto a quello del chunk della seconda
|
||||
IntersCurveCurve ccInt( *pCrv1Loc, *pCrv2Loc) ;
|
||||
CRVCVECTOR ccClass ;
|
||||
if ( ! ccInt.GetCurveClassification( 0, ccClass))
|
||||
int nClass = ccInt.GetRegionCurveClassification() ;
|
||||
switch ( nClass){
|
||||
default : // CCREGC_NULL
|
||||
return REGC_NULL ;
|
||||
// derivo la classificazione dei chunk delle regioni
|
||||
bool bIn = false ;
|
||||
bool bOut = false ;
|
||||
bool bOnP = false ;
|
||||
bool bOnM = false ;
|
||||
for ( auto& ccOne : ccClass) {
|
||||
switch ( ccOne.nClass) {
|
||||
case CRVC_IN :
|
||||
bIn = true ;
|
||||
break ;
|
||||
case CRVC_OUT :
|
||||
bOut = true ;
|
||||
break ;
|
||||
case CRVC_ON_P :
|
||||
bOnP = true ;
|
||||
break ;
|
||||
case CRVC_ON_M :
|
||||
bOnM = true ;
|
||||
break ;
|
||||
default :
|
||||
return REGC_NULL ;
|
||||
}
|
||||
}
|
||||
if ( bIn) {
|
||||
if ( bOut)
|
||||
return REGC_INTERS ;
|
||||
else
|
||||
return REGC_IN1 ;
|
||||
}
|
||||
if ( bOut) {
|
||||
if ( bOnM)
|
||||
return REGC_OUT ;
|
||||
if ( bOnP)
|
||||
return REGC_IN2 ;
|
||||
CRVCVECTOR ccClass2 ;
|
||||
if ( ! ccInt.GetCurveClassification( 1, ccClass2) || ccClass2.empty())
|
||||
return REGC_NULL ;
|
||||
if ( ccClass2[0].nClass == CRVC_OUT)
|
||||
return REGC_OUT ;
|
||||
else
|
||||
return REGC_IN2 ;
|
||||
}
|
||||
if ( bOnP)
|
||||
case CCREGC_IN1 :
|
||||
return REGC_IN1 ;
|
||||
case CCREGC_IN2 :
|
||||
return REGC_IN2 ;
|
||||
case CCREGC_SAME :
|
||||
return REGC_SAME ;
|
||||
if ( bOnM)
|
||||
case CCREGC_OUT :
|
||||
return REGC_OUT ;
|
||||
|
||||
return REGC_NULL ;
|
||||
case CCREGC_INTERS :
|
||||
return REGC_INTERS ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user