diff --git a/EXE_GdbModifyCurve.cpp b/EXE_GdbModifyCurve.cpp index c3631bd..ad1e72c 100644 --- a/EXE_GdbModifyCurve.cpp +++ b/EXE_GdbModifyCurve.cpp @@ -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 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 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 ; +} \ No newline at end of file diff --git a/LUA_GdbModifyCurve.cpp b/LUA_GdbModifyCurve.cpp index 28f00ff..c4d9cc5 100644 --- a/LUA_GdbModifyCurve.cpp +++ b/LUA_GdbModifyCurve.cpp @@ -1129,6 +1129,38 @@ LuaCurveGetFatCurve( lua_State* L) return 2 ; } +//---------------------------------------------------------------------------- +static int +LuaCurveBezierIncreaseDegree( lua_State* L) +{ + // 1 parametro : CrvId + int nId ; + LuaCheckParam( L, 1, nId) + LuaClearStack( L) ; + // eseguo + int nCount = 0 ; + bool bOk = ExeCurveBezierIncreaseDegree( nId) ; + LuaSetParam( L, bOk) ; + + return 1 ; +} + +//---------------------------------------------------------------------------- +static int +LuaCurveBezierDecreaseDegree( lua_State* L) +{ + // 1 parametro : CrvId + int nId ; + LuaCheckParam( L, 1, nId) + LuaClearStack( L) ; + // eseguo + int nCount = 0 ; + bool bOk = ExeCurveBezierDecreaseDegree( nId) ; + LuaSetParam( L, bOk) ; + + return 1 ; +} + //------------------------------------------------------------------------------- bool LuaInstallGdbModifyCurve( LuaMgr& luaMgr) @@ -1191,5 +1223,7 @@ LuaInstallGdbModifyCurve( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtCurveGetFatCurve", LuaCurveGetFatCurve) ; bOk = bOk && luaMgr.RegisterFunction( "EgtProjectCurveOnSurfBz", LuaProjectCurveOnSurfBz) ; bOk = bOk && luaMgr.RegisterFunction( "EgtProjectCurveOnSurfBzExt", LuaProjectCurveOnSurfBzExt) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCurveBezierIncreaseDeg", LuaCurveBezierIncreaseDegree) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCurveBezierDecreaseDeg", LuaCurveBezierDecreaseDegree) ; return bOk ; }