EgtGeomKernel 1.4l1 : Aggiunto Trim di curve a lunghezza e parametro.
This commit is contained in:
+102
@@ -106,6 +106,8 @@ GdbExecutor::Execute( const string& sCmd1, const string& sCmd2, const STRVECTOR&
|
||||
return ExecuteScale( vsParams) ;
|
||||
else if ( sCmd1 == "MIRROR")
|
||||
return ExecuteMirror( vsParams) ;
|
||||
else if ( sCmd1 == "TRIMCURVE" || sCmd1 == "TRC")
|
||||
return ExecuteTrimCurve( sCmd2, vsParams) ;
|
||||
else if ( sCmd1 == "LOAD")
|
||||
return ExecuteLoad( vsParams) ;
|
||||
else if ( sCmd1 == "SAVE")
|
||||
@@ -426,6 +428,45 @@ GdbExecutor::ExecuteCurveBez( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// curva di Bezier equivalente ad un arco
|
||||
else if ( sCmd2 == "ARC" || sCmd2 == "A") {
|
||||
Point3d ptCen ;
|
||||
Vector3d vtN ;
|
||||
double dRad ;
|
||||
Vector3d vtS ;
|
||||
double dAngCenDeg ;
|
||||
double dDeltaZ ;
|
||||
// 8 parametri
|
||||
if ( vsParams.size() != 8)
|
||||
return false ;
|
||||
// centro
|
||||
if ( ! GetPointParam( vsParams[2], ptCen))
|
||||
return false ;
|
||||
// versore ortogonale al piano della circonferenza
|
||||
if ( ! GetVectorParam( vsParams[3], vtN))
|
||||
return false ;
|
||||
// raggio
|
||||
if ( ! FromString( vsParams[4], dRad))
|
||||
return false ;
|
||||
// versore iniziale
|
||||
if ( ! GetVectorParam( vsParams[5], vtS))
|
||||
return false ;
|
||||
// angolo al centro
|
||||
if ( ! FromString( vsParams[6], dAngCenDeg))
|
||||
return false ;
|
||||
// deltaZ
|
||||
if ( ! FromString( vsParams[7], dDeltaZ))
|
||||
return false ;
|
||||
// imposto l'arco
|
||||
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
|
||||
if ( ! IsValid( pCrvArc))
|
||||
return false ;
|
||||
if ( ! pCrvArc->Set( ptCen, vtN, dRad, vtS, dAngCenDeg, dDeltaZ))
|
||||
return false ;
|
||||
// ne deduco la curva di Bezier
|
||||
if ( ! pCrvBez->SetFromArc( *pCrvArc))
|
||||
return false ;
|
||||
}
|
||||
// altrimenti errore
|
||||
else
|
||||
return false ;
|
||||
@@ -798,6 +839,67 @@ GdbExecutor::ExecuteMirror( const STRVECTOR& vsParams)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteTrimCurve( const std::string& sCmd2, const STRVECTOR& vsParams)
|
||||
{
|
||||
enum SeLp { SL, EL, SP, EP} ;
|
||||
SeLp StEnLenPar ;
|
||||
double dPar ;
|
||||
STRVECTOR vsNames ;
|
||||
STRVECTOR::iterator Iter ;
|
||||
ICurve* pCurve ;
|
||||
|
||||
|
||||
// 2 parametri ( Nome, parametro)
|
||||
if ( vsParams.size() != 2)
|
||||
return false ;
|
||||
// recupero lista nomi
|
||||
if ( ! GetNamesParam( vsParams[0], vsNames))
|
||||
return false ;
|
||||
// recupero i dati di inizio
|
||||
if ( ! FromString( vsParams[1], dPar))
|
||||
return false ;
|
||||
// determino il tipo di trim
|
||||
if ( sCmd2 == "STARTLEN" || sCmd2 == "SL")
|
||||
StEnLenPar = SL ;
|
||||
else if ( sCmd2 == "ENDLEN" || sCmd2 == "EL")
|
||||
StEnLenPar = EL ;
|
||||
else if ( sCmd2 == "STARTPAR" || sCmd2 == "SP")
|
||||
StEnLenPar = SP ;
|
||||
else if ( sCmd2 == "ENDPAR" || sCmd2 == "EP")
|
||||
StEnLenPar = EP ;
|
||||
else
|
||||
return false ;
|
||||
// esecuzione trim
|
||||
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; ++Iter) {
|
||||
if ( ( pCurve = GetCurve( m_pGDB->GetGeoObj( GetIdParam( *Iter)))) != nullptr) {
|
||||
switch ( StEnLenPar) {
|
||||
case SL :
|
||||
if ( ! pCurve->TrimStartAtLen( dPar))
|
||||
return false ;
|
||||
break ;
|
||||
case EL :
|
||||
if ( ! pCurve->TrimEndAtLen( dPar))
|
||||
return false ;
|
||||
break ;
|
||||
case SP :
|
||||
if ( ! pCurve->TrimStartAtParam( dPar))
|
||||
return false ;
|
||||
break ;
|
||||
case EP :
|
||||
if ( ! pCurve->TrimEndAtParam( dPar))
|
||||
return false ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteLoad( const STRVECTOR& vsParams)
|
||||
|
||||
Reference in New Issue
Block a user