From a3c905c33a8904d92fa4c29fa66a0bde9ed77211 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 19 Apr 2024 17:51:00 +0200 Subject: [PATCH] EgtExecutor : - adattamenti per Surf Bezier - aggiunta funzione Exe/Lua CreateArc2PR. --- EXE_GdbCreateCurve.cpp | 39 +++++++++++++++++++++++++++++++++++++++ EXE_GdbCreateSurf.cpp | 5 ----- LUA_GdbCreateCurve.cpp | 29 +++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 5 deletions(-) diff --git a/EXE_GdbCreateCurve.cpp b/EXE_GdbCreateCurve.cpp index 61a5c4e..d9a9c25 100644 --- a/EXE_GdbCreateCurve.cpp +++ b/EXE_GdbCreateCurve.cpp @@ -1088,6 +1088,45 @@ ExeCreateArc3P( int nParentId, const Point3d& ptP1, return nId ; } +//------------------------------------------------------------------------------- +int +ExeCreateArc2PR( int nParentId, const Point3d& ptStart, const Point3d& ptEnd, + double dRad, bool bCCW, int nRefType) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + nParentId = AdjustId( nParentId) ; + // recupero il riferimento locale + Frame3d frLoc ; + bool bOk = pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; + // porto in locale i punti, il versore normale e quelloe estrusione + Point3d ptStartL = GetPointLocal( pGeomDB, ptStart, nRefType, frLoc) ; + Point3d ptEndL = GetPointLocal( pGeomDB, ptEnd, nRefType, frLoc) ; + Vector3d vtNormL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ; + Vector3d vtExtrL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ; + // creo l'arco + PtrOwner pCrvArc( CreateCurveArc()) ; + bOk = bOk && ( ! IsNull( pCrvArc) && + pCrvArc->Set2PNRS( ptStartL, ptEndL, vtNormL, dRad, bCCW)) ; + // assegno il versore estrusione + bOk = bOk && pCrvArc->SetExtrusion( vtExtrL) ; + // inserisco l'arco nel DB + int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pCrvArc)) : GDB_ID_NULL) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtArc2PR(" + IdToString( nParentId) + ",{" + + ToString( ptStart) + "},{" + + ToString( ptEnd) + "}," + + ToString( dRad) + "," + + RefTypeToString( nRefType) + ")" + + " -- Id=" + ToString( nId) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco l'identificativo della nuova entità + return nId ; +} + //------------------------------------------------------------------------------- int ExeCreateArc2PB( int nParentId, const Point3d& ptStart, const Point3d& ptEnd, diff --git a/EXE_GdbCreateSurf.cpp b/EXE_GdbCreateSurf.cpp index 4136b4d..69f75c1 100644 --- a/EXE_GdbCreateSurf.cpp +++ b/EXE_GdbCreateSurf.cpp @@ -1668,8 +1668,6 @@ ExeCreateSurfBezier( int nParentId, int nDegU, int nDegV, int nSpanU, int nSpanV if ( ! pSurfBez->SetControlPoint( i, ptCtrl)) bOk = false ; } - // calcolo eventuali poli - pSurfBez->CalcPoles() ; // se superficie nulla (ovvero ridotta a punto), errore bOk = bOk && ! pSurfBez->IsAPoint() ; // inserisco la superficie nel DB @@ -1722,8 +1720,6 @@ ExeCreateSurfBezierRational( int nParentId, int nDegU, int nDegV, int nSpanU, in if ( ! pSurfBez->SetControlPoint( i, ptCtrl, vPntW[i].second)) bOk = false ; } - // calcolo eventuali poli - pSurfBez->CalcPoles() ; // se superficie nulla (ovvero ridotta a punto), errore bOk = bOk && ! pSurfBez->IsAPoint() ; // inserisco la superficie nel DB @@ -1899,7 +1895,6 @@ ExeCreateBezierSphere( int nParentId, const Point3d& ptCenter, double dR, int nR Point3d ptCenterLoc = GetPointLocal( pGeomDB, ptCenter, nRefType, frLoc) ; // Creo la superficie PtrOwner pSurfBez( CreateBezierSphere( ptCenterLoc, dR)) ; - pSurfBez->CalcPoles() ; int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pSurfBez)) : GDB_ID_NULL) ; ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente diff --git a/LUA_GdbCreateCurve.cpp b/LUA_GdbCreateCurve.cpp index ec4b9bd..bef8eec 100644 --- a/LUA_GdbCreateCurve.cpp +++ b/LUA_GdbCreateCurve.cpp @@ -425,6 +425,34 @@ LuaCreateArc3P( lua_State* L) return 1 ; } +//------------------------------------------------------------------------------- +static int +LuaCreateArc2PR( lua_State* L) +{ + // 5 o 6 parametri : ParentId, PtStart, PtEnd, dRad, bCCW [, nRefType] + int nParentId ; + LuaCheckParam( L, 1, nParentId) + Point3d ptStart ; + LuaCheckParam( L, 2, ptStart) + Point3d ptEnd ; + LuaCheckParam( L, 3, ptEnd) + double dRad ; + LuaCheckParam( L, 4, dRad) + bool bCCW ; + LuaCheckParam( L, 5, bCCW) ; + int nRefType = RTY_DEFAULT ; + LuaGetParam( L, 6, nRefType) ; + LuaClearStack( L) ; + // creo l'arco + int nId = ExeCreateArc2PR( nParentId, ptStart, ptEnd, dRad, bCCW, nRefType) ; + // restituisco il risultato + if ( nId != GDB_ID_NULL) + LuaSetParam( L, nId) ; + else + LuaSetParam( L) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaCreateArc2PB( lua_State* L) @@ -1083,6 +1111,7 @@ LuaInstallGdbCreateCurve( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtArcC2P", LuaCreateArcC2P) ; bOk = bOk && luaMgr.RegisterFunction( "EgtArcC2PEx", LuaCreateArcC2PEx) ; bOk = bOk && luaMgr.RegisterFunction( "EgtArc3P", LuaCreateArc3P) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtArc2PR", LuaCreateArc2PR) ; bOk = bOk && luaMgr.RegisterFunction( "EgtArc2PB", LuaCreateArc2PB) ; bOk = bOk && luaMgr.RegisterFunction( "EgtArc2PD", LuaCreateArc2PD) ; bOk = bOk && luaMgr.RegisterFunction( "EgtArc2PDEx", LuaCreateArc2PDEx) ;