EgtGeomKernel :
- aggiunta AdjustCurveSlope.
This commit is contained in:
+36
-1
@@ -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 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user