EgtGeomKernel :

- aggiunta AdjustCurveSlope.
This commit is contained in:
Dario Sassi
2017-04-05 06:48:11 +00:00
parent d4fbe44da9
commit ed16ca5f3a
+36 -1
View File
@@ -734,4 +734,39 @@ ProjectCurveOnPlane( const ICurve& crCrv, const Plane3d& plPlane)
return nullptr ;
// restituisco la nuova curva
return Release( pCrv) ;
}
}
//----------------------------------------------------------------------------
bool
AdjustCurveSlope( ICurveComposite* pCrv, double dNini, double dNfin)
{
// verifico curva
if ( pCrv == nullptr)
return false ;
// determino versore estrusione
Vector3d vtN ;
if ( ! pCrv->GetExtrusion( vtN) || vtN.IsSmall())
vtN = Z_AX ;
// assegno la corretta pendenza
int i = 0 ;
double dCurrLen = 0 ;
double dLen ; pCrv->GetLength( dLen) ;
const ICurve* pSCrv = pCrv->GetFirstCurve() ;
while ( pSCrv != nullptr) {
double dCrvLen ;
pSCrv->GetLength( dCrvLen) ;
double dCoeff = dCurrLen / dLen ;
double dCurrN = dNini * ( 1.0 - dCoeff) + dNfin * dCoeff ;
Point3d ptJoin ;
pSCrv->GetStartPoint( ptJoin) ;
pCrv->ModifyJoint( i, ptJoin + vtN * ( dCurrN - ( ptJoin - ORIG) * vtN)) ;
// passo al successivo
dCurrLen += dCrvLen ;
pSCrv = pCrv->GetNextCurve() ;
++ i ;
}
Point3d ptFin ; pCrv->GetEndPoint( ptFin) ;
ptFin += vtN * ( dNfin - ( ptFin - ORIG) * vtN) ;
pCrv->ModifyEnd( ptFin) ;
return true ;
}