EgtGeomKernel : migliorata scalatura non uniforme, con conservazione del piano XY dei riferimenti di gruppo.
This commit is contained in:
+17
-9
@@ -199,23 +199,31 @@ GdbGroup::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, dou
|
||||
bool
|
||||
GdbGroup::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ)
|
||||
{
|
||||
bool bOk ;
|
||||
bool bUniform ;
|
||||
Frame3d frRefLoc ;
|
||||
GdbNode* pGdbNode ;
|
||||
|
||||
|
||||
// non è possibile scalare il riferimento, devo agire sui nodi sottostanti
|
||||
// parziale scalatura del riferimento (non può essere completa)
|
||||
Frame3d frFrameS = m_gfrFrame.m_frF ;
|
||||
frFrameS.PartialScale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;
|
||||
|
||||
// determino se la scalatura è uniforme
|
||||
bUniform = fabs( dCoeffX - dCoeffY) < EPS_SMALL && fabs( dCoeffX - dCoeffZ) < EPS_SMALL ;
|
||||
// porto i nodi nel nuovo riferimento, senza modificarne la geometria in globale
|
||||
Frame3d frTrasf = m_gfrFrame.m_frF ;
|
||||
frTrasf.ToLoc( frFrameS) ;
|
||||
pGdbNode = GetFirstNode() ;
|
||||
while ( pGdbNode != nullptr) {
|
||||
pGdbNode->ToGlob( frTrasf) ;
|
||||
pGdbNode = pGdbNode->GetNext() ;
|
||||
}
|
||||
|
||||
// basta portare il riferimento di scalatura nel riferimento del gruppo
|
||||
frRefLoc = frRef ;
|
||||
// assegno il nuovo riferimento
|
||||
m_gfrFrame.m_frF = frFrameS ;
|
||||
|
||||
// porto il riferimento di scalatura nel riferimento del gruppo
|
||||
Frame3d frRefLoc = frRef ;
|
||||
frRefLoc.ToLoc( m_gfrFrame.m_frF) ;
|
||||
|
||||
// ciclo sui nodi
|
||||
bOk = true ;
|
||||
bool bOk = true ;
|
||||
pGdbNode = GetFirstNode() ;
|
||||
while ( pGdbNode != nullptr) {
|
||||
if ( ! pGdbNode->Scale( frRefLoc, dCoeffX, dCoeffY, dCoeffZ))
|
||||
|
||||
Reference in New Issue
Block a user