EgtGeomKernel :
- gestione traslazione, rotazione e cambi di frame per Voronoi - aggiunta funzione per resettare Voronoi degli oggetti.
This commit is contained in:
+47
-39
@@ -75,7 +75,7 @@ SurfFlatRegion::Clear( void)
|
||||
bool
|
||||
SurfFlatRegion::AddExtLoop( const ICurve& cCrv)
|
||||
{
|
||||
// verifico validità curva
|
||||
// verifico validità curva
|
||||
if ( &cCrv == nullptr)
|
||||
return false ;
|
||||
// creo una copia della curva
|
||||
@@ -221,7 +221,7 @@ SurfFlatRegion::MyAddExtLoop( ICurve* pCrv)
|
||||
bool
|
||||
SurfFlatRegion::AddIntLoop( const ICurve& cCrv)
|
||||
{
|
||||
// verifico validità curva
|
||||
// verifico validità curva
|
||||
if ( &cCrv == nullptr)
|
||||
return false ;
|
||||
// creo una copia della curva
|
||||
@@ -435,7 +435,7 @@ SurfFlatRegion::GetTitle( void) const
|
||||
bool
|
||||
SurfFlatRegion::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
{
|
||||
// verifico validità regione
|
||||
// verifico validità regione
|
||||
if ( m_nStatus != OK)
|
||||
sOut += string( "Status=Invalid") + szNewLine ;
|
||||
// area
|
||||
@@ -583,7 +583,7 @@ SurfFlatRegion::GetLocalBBox( BBox3d& b3Loc, int nFlag) const
|
||||
return false ;
|
||||
// reset del bbox
|
||||
b3Loc.Reset() ;
|
||||
// è il bounding box dei loop esterni
|
||||
// è il bounding box dei loop esterni
|
||||
for ( auto i : m_vExtInd) {
|
||||
BBox3d b3Tmp ;
|
||||
if ( m_vpLoop[i]->GetBBox( m_frF, b3Tmp, nFlag))
|
||||
@@ -603,7 +603,7 @@ SurfFlatRegion::GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag) const
|
||||
Frame3d frCompo = m_frF * frRef ;
|
||||
// reset del bbox
|
||||
b3Ref.Reset() ;
|
||||
// è il bounding box dei loop esterni
|
||||
// è il bounding box dei loop esterni
|
||||
for ( auto i : m_vExtInd) {
|
||||
BBox3d b3Tmp ;
|
||||
if ( m_vpLoop[i]->GetBBox( frCompo, b3Tmp, nFlag))
|
||||
@@ -622,8 +622,9 @@ SurfFlatRegion::Translate( const Vector3d& vtMove)
|
||||
// imposto ricalcolo della grafica
|
||||
ResetAuxSurf() ;
|
||||
m_OGrMgr.Reset() ;
|
||||
// imposto ricalcolo Voronoi
|
||||
ResetVoronoiObject() ;
|
||||
// traslo Voronoi
|
||||
if ( m_pVoronoiObj != nullptr)
|
||||
m_pVoronoiObj->Translate( vtMove) ;
|
||||
// traslo il riferimento
|
||||
m_frF.Translate( vtMove) ;
|
||||
return true ;
|
||||
@@ -636,15 +637,16 @@ SurfFlatRegion::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAn
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
// verifico validità dell'asse di rotazione
|
||||
// verifico validità dell'asse di rotazione
|
||||
if ( vtAx.IsSmall())
|
||||
return false ;
|
||||
|
||||
// imposto ricalcolo della grafica
|
||||
ResetAuxSurf() ;
|
||||
m_OGrMgr.Reset() ;
|
||||
// imposto ricalcolo Voronoi
|
||||
ResetVoronoiObject() ;
|
||||
// ruoto Voronoi
|
||||
if ( m_pVoronoiObj != nullptr)
|
||||
m_pVoronoiObj->Rotate( ptAx, vtAx, dCosAng, dSinAng) ;
|
||||
|
||||
// ruoto il riferimento
|
||||
return m_frF.Rotate( ptAx, vtAx, dCosAng, dSinAng) ;
|
||||
@@ -673,7 +675,7 @@ SurfFlatRegion::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, dou
|
||||
return false ;
|
||||
}
|
||||
|
||||
// parziale scalatura del riferimento (non può essere completa)
|
||||
// parziale scalatura del riferimento (non può essere completa)
|
||||
Frame3d frTrasf = m_frF ;
|
||||
m_frF.PseudoScale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;
|
||||
|
||||
@@ -712,7 +714,7 @@ SurfFlatRegion::Mirror( const Point3d& ptOn, const Vector3d& vtNorm)
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK || m_vpLoop.empty())
|
||||
return false ;
|
||||
// verifico validità del piano di specchiatura
|
||||
// verifico validità del piano di specchiatura
|
||||
if ( vtNorm.IsSmall())
|
||||
return false ;
|
||||
|
||||
@@ -722,7 +724,7 @@ SurfFlatRegion::Mirror( const Point3d& ptOn, const Vector3d& vtNorm)
|
||||
// imposto ricalcolo Voronoi
|
||||
ResetVoronoiObject() ;
|
||||
|
||||
// parziale mirror del riferimento (non può essere completa)
|
||||
// parziale mirror del riferimento (non può essere completa)
|
||||
Frame3d frTrasf = m_frF ;
|
||||
m_frF.PseudoMirror( ptOn, vtNorm) ;
|
||||
|
||||
@@ -762,7 +764,7 @@ SurfFlatRegion::Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK || m_vpLoop.empty())
|
||||
return false ;
|
||||
// verifico validità dei parametri
|
||||
// verifico validità dei parametri
|
||||
if ( vtNorm.IsSmall() || vtDir.IsSmall())
|
||||
return false ;
|
||||
|
||||
@@ -778,7 +780,7 @@ SurfFlatRegion::Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector
|
||||
return false ;
|
||||
}
|
||||
|
||||
// parziale scorrimento del riferimento (non può essere completa)
|
||||
// parziale scorrimento del riferimento (non può essere completa)
|
||||
Frame3d frTrasf = m_frF ;
|
||||
m_frF.PseudoShear( ptOn, vtNorm, vtDir, dCoeff) ;
|
||||
|
||||
@@ -832,19 +834,21 @@ SurfFlatRegion::ToGlob( const Frame3d& frRef)
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
// verifico validità del frame
|
||||
// verifico validità del frame
|
||||
if ( frRef.GetType() == Frame3d::ERR)
|
||||
return false ;
|
||||
|
||||
// se frame identità, non devo fare alcunché
|
||||
// se frame identità, non devo fare alcunché
|
||||
if ( IsGlobFrame( frRef))
|
||||
return true ;
|
||||
|
||||
// imposto ricalcolo della grafica
|
||||
ResetAuxSurf() ;
|
||||
m_OGrMgr.Reset() ;
|
||||
// imposto ricalcolo Voronoi
|
||||
ResetVoronoiObject() ;
|
||||
|
||||
// trasformo Voronoi
|
||||
if ( m_pVoronoiObj != nullptr)
|
||||
m_pVoronoiObj->ToGlob( frRef) ;
|
||||
|
||||
// trasformo il riferimento
|
||||
return m_frF.ToGlob( frRef) ; ;
|
||||
@@ -857,19 +861,21 @@ SurfFlatRegion::ToLoc( const Frame3d& frRef)
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
// verifico validità del frame
|
||||
// verifico validità del frame
|
||||
if ( frRef.GetType() == Frame3d::ERR)
|
||||
return false ;
|
||||
|
||||
// se frame identità, non devo fare alcunché
|
||||
// se frame identità, non devo fare alcunché
|
||||
if ( IsGlobFrame( frRef))
|
||||
return true ;
|
||||
|
||||
// imposto ricalcolo della grafica
|
||||
ResetAuxSurf() ;
|
||||
m_OGrMgr.Reset() ;
|
||||
// imposto ricalcolo Voronoi
|
||||
ResetVoronoiObject() ;
|
||||
|
||||
// trasformo Voronoi
|
||||
if ( m_pVoronoiObj != nullptr)
|
||||
m_pVoronoiObj->ToLoc( frRef) ;
|
||||
|
||||
// trasformo il riferimento
|
||||
return m_frF.ToLoc( frRef) ; ;
|
||||
@@ -882,19 +888,21 @@ SurfFlatRegion::LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
// verifico validità dei frame
|
||||
// verifico validità dei frame
|
||||
if ( frOri.GetType() == Frame3d::ERR || frDest.GetType() == Frame3d::ERR)
|
||||
return false ;
|
||||
|
||||
// se i due riferimenti coincidono, non devo fare alcunché
|
||||
// se i due riferimenti coincidono, non devo fare alcunché
|
||||
if ( AreSameFrame( frOri, frDest))
|
||||
return true ;
|
||||
|
||||
// imposto ricalcolo della grafica
|
||||
ResetAuxSurf() ;
|
||||
m_OGrMgr.Reset() ;
|
||||
// imposto ricalcolo Voronoi
|
||||
ResetVoronoiObject() ;
|
||||
|
||||
// trasformo Voronoi
|
||||
if ( m_pVoronoiObj != nullptr)
|
||||
m_pVoronoiObj->LocToLoc( frOri, frDest) ;
|
||||
|
||||
// trasformo il riferimento
|
||||
return m_frF.LocToLoc( frOri, frDest) ; ;
|
||||
@@ -978,7 +986,7 @@ SurfFlatRegion::GetCentroid( Point3d& ptCen) const
|
||||
return false ;
|
||||
// medio il centro
|
||||
ptCen /= dArea ;
|
||||
// lo porto dal riferimento intrinseco a quello in cui è immersa l'entità
|
||||
// lo porto dal riferimento intrinseco a quello in cui è immersa l'entità
|
||||
ptCen.ToGlob( m_frF) ;
|
||||
return true ;
|
||||
}
|
||||
@@ -997,7 +1005,7 @@ SurfFlatRegion::GetChunkCentroid( int nChunk, Point3d& ptCen) const
|
||||
const ICurve* pCrv = GetMyLoop( nChunk, 0) ;
|
||||
if ( pCrv == nullptr || ! pCrv->GetCentroid( ptCen))
|
||||
return false ;
|
||||
// lo porto dal riferimento intrinseco a quello in cui è immersa l'entità
|
||||
// lo porto dal riferimento intrinseco a quello in cui è immersa l'entità
|
||||
ptCen.ToGlob( m_frF) ;
|
||||
return true ;
|
||||
}
|
||||
@@ -1023,7 +1031,7 @@ SurfFlatRegion::GetLoopCount( int nChunk) const
|
||||
int nChunkMax = int( m_vExtInd.size()) - 1 ;
|
||||
if ( nChunk < 0 || nChunk > nChunkMax)
|
||||
return 0 ;
|
||||
// se non è l'ultimo Chunk
|
||||
// se non è l'ultimo Chunk
|
||||
if ( nChunk < nChunkMax)
|
||||
return ( m_vExtInd[nChunk+1] - m_vExtInd[nChunk]) ;
|
||||
// altrimenti
|
||||
@@ -1053,7 +1061,7 @@ SurfFlatRegion::GetChunkLoopFromInd( int nInd, int& nChunk, int& nLoop) const
|
||||
// valori non validi
|
||||
nChunk = - 1 ;
|
||||
nLoop = - 1 ;
|
||||
// verifico validità di nInd
|
||||
// verifico validità di nInd
|
||||
if ( nInd < 0 || nInd >= int( m_vpLoop.size()))
|
||||
return false ;
|
||||
// verifica esistenza array di chunks
|
||||
@@ -1105,7 +1113,7 @@ SurfFlatRegion::GetLoop( int nChunk, int nLoop) const
|
||||
return nullptr ;
|
||||
// assegno la normale alla regione come estrusione
|
||||
pCrv->SetExtrusion( Z_AX) ;
|
||||
// la porto nel riferimento in cui è inserito l'oggetto
|
||||
// la porto nel riferimento in cui è inserito l'oggetto
|
||||
pCrv->ToGlob( m_frF) ;
|
||||
return pCrv ;
|
||||
}
|
||||
@@ -1121,7 +1129,7 @@ SurfFlatRegion::ApproxLoopWithLines( int nChunk, int nLoop, double dLinTol, doub
|
||||
// ne creo una approssimazione
|
||||
if ( ! pMyCrv->ApproxWithLines( dLinTol, dAngTolDeg, nType, PL))
|
||||
return false ;
|
||||
// la porto nel riferimento in cui è inserito l'oggetto
|
||||
// la porto nel riferimento in cui è inserito l'oggetto
|
||||
PL.ToGlob( m_frF) ;
|
||||
return true ;
|
||||
}
|
||||
@@ -1174,7 +1182,7 @@ SurfFlatRegion::GetAuxSurf( void) const
|
||||
// la superficie deve essere validata
|
||||
if ( m_nStatus != OK || m_vpLoop.empty())
|
||||
return nullptr ;
|
||||
// se già calcolata, la restituisco
|
||||
// se già calcolata, la restituisco
|
||||
if ( m_pSTM != nullptr)
|
||||
return m_pSTM ;
|
||||
// la creo e la salvo
|
||||
@@ -1222,7 +1230,7 @@ SurfFlatRegion::CloneChunk( int nChunk) const
|
||||
bool
|
||||
SurfFlatRegion::MyGetCurveClassification( const ICurve& Crv, double dLenMin, CRVCVECTOR& ccClass) const
|
||||
{
|
||||
// la curva deve già essere nel riferimento intrinseco della regione
|
||||
// la curva deve già essere nel riferimento intrinseco della regione
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK || m_vpLoop.empty())
|
||||
return false ;
|
||||
@@ -1254,7 +1262,7 @@ SurfFlatRegion::MyGetCurveClassification( const ICurve& Crv, double dLenMin, CRV
|
||||
for ( auto& ccOne : ccPart) {
|
||||
switch ( ccOne.nClass) {
|
||||
case CRVC_IN :
|
||||
// IN è Remove degli altri
|
||||
// IN è Remove degli altri
|
||||
break ;
|
||||
case CRVC_OUT :
|
||||
// intervallo standard
|
||||
@@ -1383,7 +1391,7 @@ SurfFlatRegion::GetChunkSimpleClassification( int nChunk, const ISurfFlatRegion&
|
||||
if ( ! AreSameVectorApprox( m_frF.VersZ(), Reg2.m_frF.VersZ()))
|
||||
return REGC_NULL ;
|
||||
|
||||
// curva esterna del chunk della prima regione (ovviamente già in locale al riferimento intrinseco)
|
||||
// curva esterna del chunk della prima regione (ovviamente già in locale al riferimento intrinseco)
|
||||
const ICurve* pCrv1Loc = GetMyLoop( nChunk, 0) ;
|
||||
|
||||
// curva esterna del chunk della seconda regione in locale nel riferimento intrinseco della prima
|
||||
@@ -1453,7 +1461,7 @@ SurfFlatRegion::ResetVoronoiObject() const
|
||||
bool
|
||||
SurfFlatRegion::CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound) const
|
||||
{
|
||||
// verifico se è stato calcolato
|
||||
// verifico se è stato calcolato
|
||||
if ( m_pVoronoiObj == nullptr)
|
||||
if ( ! CalcVoronoiObject())
|
||||
return false ;
|
||||
@@ -1465,7 +1473,7 @@ SurfFlatRegion::CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound) const
|
||||
bool
|
||||
SurfFlatRegion::CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const
|
||||
{
|
||||
// verifico se è stato calcolato
|
||||
// verifico se è stato calcolato
|
||||
if ( m_pVoronoiObj == nullptr)
|
||||
if ( ! CalcVoronoiObject())
|
||||
return false ;
|
||||
|
||||
Reference in New Issue
Block a user