EgtExecutor :
- aggiunte funzioni per aumentare e ridurre di grado le curve di Bezier.
This commit is contained in:
@@ -2865,3 +2865,84 @@ ExeCurveGetFatCurve( int nId, int nDestGrpId, double dRad, bool bSquareEnds, boo
|
||||
*pnCount = nCount ;
|
||||
return nFirstId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeCurveBezierIncreaseDegree( int nCrvId)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
// recupero la curva
|
||||
const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nCrvId)) ;
|
||||
if ( pCrv == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
//// recupero il riferimento della curva
|
||||
//Frame3d frCrv ;
|
||||
//if ( ! pGeomDB->GetGlobFrame( nCrvId, frCrv))
|
||||
// return GDB_ID_NULL ;
|
||||
|
||||
if( pCrv->GetType() != CRV_BEZIER)
|
||||
return false ;
|
||||
|
||||
// aumento il grado della curva
|
||||
bool bOk = true ;
|
||||
PtrOwner<ICurveBezier> pCrvBezierNew ( BezierIncreaseDegree( GetCurveBezier( pCrv))) ;
|
||||
Vector3d vtExtr ;
|
||||
if ( bOk && pCrv->GetExtrusion( vtExtr))
|
||||
pCrvBezierNew->SetExtrusion( vtExtr) ;
|
||||
double dThick = 0 ;
|
||||
if ( bOk && pCrv->GetThickness( dThick))
|
||||
pCrvBezierNew->SetThickness(dThick) ;
|
||||
// sostituisco la vecchia curva con la nuova
|
||||
bOk = bOk && pGeomDB->ReplaceGeoObj( nCrvId, Release( pCrvBezierNew)) ;
|
||||
ExeSetModified() ;
|
||||
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtCurveBezierIncreaseDegree(" + ToString( nCrvId) + ")"
|
||||
" -- Ok=" + ToString( bOk) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeCurveBezierDecreaseDegree( int nCrvId, double dTol)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
// recupero la curva
|
||||
const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nCrvId)) ;
|
||||
if ( pCrv == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
//// recupero il riferimento della curva
|
||||
//Frame3d frCrv ;
|
||||
//if ( ! pGeomDB->GetGlobFrame( nCrvId, frCrv))
|
||||
// return GDB_ID_NULL ;
|
||||
|
||||
if( pCrv->GetType() != CRV_BEZIER)
|
||||
return false ;
|
||||
|
||||
// riduco il grado della curva
|
||||
bool bOk = true ;
|
||||
PtrOwner<ICurveBezier> pCrvBezierNew ( BezierDecreaseDegree( GetCurveBezier( pCrv), dTol)) ;
|
||||
bOk = bOk && ! IsNull( pCrvBezierNew) && pCrvBezierNew->IsValid() ;
|
||||
Vector3d vtExtr ;
|
||||
if ( bOk && pCrv->GetExtrusion( vtExtr))
|
||||
pCrvBezierNew->SetExtrusion( vtExtr) ;
|
||||
double dThick = 0 ;
|
||||
if ( bOk && pCrv->GetThickness( dThick))
|
||||
pCrvBezierNew->SetThickness(dThick) ;
|
||||
// sostituisco la vecchia curva con la nuova
|
||||
bOk = bOk && pGeomDB->ReplaceGeoObj( nCrvId, Release( pCrvBezierNew)) ;
|
||||
ExeSetModified() ;
|
||||
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtCurveBezierDecreaseDegree(" + ToString( nCrvId) + ")"
|
||||
" -- Ok=" + ToString( bOk) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
Reference in New Issue
Block a user