From 88fa7ef54cb3e8bd779be791807b9ac1b29c8841 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Fri, 15 Mar 2024 13:18:48 +0100 Subject: [PATCH] EgtExecutor : - rimozione codici di test. - modifiche parametri LuaCreateSurfTmSwept. --- EXE_GdbCreateSurf.cpp | 75 +++++++++++++++++-------------------------- LUA_GdbCreateSurf.cpp | 10 ++++-- 2 files changed, 36 insertions(+), 49 deletions(-) diff --git a/EXE_GdbCreateSurf.cpp b/EXE_GdbCreateSurf.cpp index 66658d9..dbfe09b 100644 --- a/EXE_GdbCreateSurf.cpp +++ b/EXE_GdbCreateSurf.cpp @@ -34,11 +34,6 @@ #include "/EgtDev/Include/EgtPointerOwner.h" #include "/EgtDev/Include/EGkExtText.h" -// TEMP ********************* -#include "EgtDev/EgtGeomKernel/RotationMinimizeFrame.h" // togliere ! -#include "EgtDev/EgtGeomKernel/RotationMinimizeFrame.cpp" -// ************************** - using namespace std ; //------------------------------------------------------------------------------- @@ -1257,7 +1252,7 @@ ExeCreateSurfTmRectSwept( int nParentId, double dDimH, double dDimV, double dBev //------------------------------------------------------------------------------- int -ExeCreateSurfTmSwept( int nParentId, int nSectId, int nGuideId, bool bCapEnds, double dLinTol) +ExeCreateSurfTmSwept( int nParentId, int nSectId, int nGuideId, bool bCapEnds, double dLinTol, Vector3d* vtStatic) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) @@ -1266,52 +1261,40 @@ ExeCreateSurfTmSwept( int nParentId, int nSectId, int nGuideId, bool bCapEnds, d // recupero il riferimento locale Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; - // recupero la sezione in locale - CurveLocal CrvSect( pGeomDB, nSectId, frLoc) ; - bOk = bOk && ( CrvSect.Get() != nullptr) ; // recupero la guida in locale CurveLocal CrvGuide( pGeomDB, nGuideId, frLoc) ; bOk = bOk && ( CrvGuide.Get() != nullptr) ; - // creo la superficie trimesh + // inizializzazione superficie e suo Id ISurfTriMesh* pSTM = nullptr ; - pSTM = ( bOk ? GetSurfTriMeshSwept( CrvSect, CrvGuide, bCapEnds, dLinTol) : nullptr) ; - // inserisco la superficie trimesh nel DB - int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, pSTM) : GDB_ID_NULL) ; + int nNewId = GDB_ID_NULL ; + // recupero il tipo di entità della sezione + int nSecType = pGeomDB->GetGeoType( nSectId) ; - - /* RIMUOVERE ! */ - PtrOwner pCrv( CrvGuide.Get()->Clone()) ; - if ( IsNull( pCrv)) - return false ; - Point3d ptStart ; Vector3d vtTan ; - if ( ! pCrv->GetPointD1D2( 0., ICurve::FROM_MINUS, ptStart, &vtTan)) - return false ; - Frame3d frStart ; - frStart.Set( ptStart, vtTan) ; // la tangente è la Z del frame - double dStep = 5 ; - RotationMinimizeFrame RMF( pCrv, frStart, dStep) ; - FRAME3DVECTOR vRMF ; - if ( ! RMF.GetFrames( vRMF)) - return false ; - // disegno i frames ricavati - for ( int i = 0 ; i < int( vRMF.size()) ; ++ i) { - IGeoFrame3d* frCurr( CreateGeoFrame3d()) ; - frCurr->Set( vRMF[i]) ; - /* - Vector3d vtH = vRMF[i].VersZ() ; - vtH.z = 0 ; - vtH.Normalize() ; - Frame3d frCCCCCC ; frCCCCCC.Set( vRMF[i].Orig(), vtH, Z_AX ^ vtH) ; - frCurr->Set( frCCCCCC) ; - */ - pGeomDB->AddGeoObj( GDB_ID_NULL, 3, frCurr->Clone()) ; - delete( frCurr) ; + // controllo se la sezione è definita da una curva + if ( nSecType == CRV_LINE || nSecType == CRV_ARC || + nSecType == CRV_BEZIER || nSecType == CRV_COMPO) { + // recupero la sezione in locale + CurveLocal CrvSect( pGeomDB, nSectId, frLoc) ; + bOk = bOk && ( CrvSect.Get() != nullptr) ; + // calcolo la Swept + pSTM = ( bOk ? GetSurfTriMeshSwept( CrvSect, CrvGuide, bCapEnds, dLinTol, vtStatic) : nullptr) ; + // inserisco la superficie trimesh nel DB + nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, pSTM) : GDB_ID_NULL) ; + } + // controllo se la sezione è definita da una regione piana + else if ( nSecType == SRF_FLATRGN) { + // recupero la sezione e la porto nel frame corrente + ISurfFlatRegion* pSfrSec = GetSurfFlatRegion( pGeomDB->GetGeoObj( nSectId)) ; + Frame3d frSec ; + if ( pSfrSec != nullptr && pGeomDB->GetGlobFrame( nSectId, frSec) && + pSfrSec->LocToLoc( frSec, frLoc)) { + // calcolo la Swept + pSTM = ( bOk ? GetSurfTriMeshSwept( pSfrSec, CrvGuide, bCapEnds, dLinTol, vtStatic) : nullptr) ; + // inserisco la superficie trimesh nel DB + nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, pSTM) : GDB_ID_NULL) ; + } + delete( pSfrSec) ; } - /* RIMUOVERE ! */ - - - - ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente diff --git a/LUA_GdbCreateSurf.cpp b/LUA_GdbCreateSurf.cpp index 1efa9da..579e635 100644 --- a/LUA_GdbCreateSurf.cpp +++ b/LUA_GdbCreateSurf.cpp @@ -660,7 +660,7 @@ LuaCreateSurfTmRectSwept( lua_State* L) static int LuaCreateSurfTmSwept( lua_State* L) { - // 4 o 5 parametri : ParentId, SectId, GuideId, bCapEnds [, dTol] + // 4, 5 o 6 parametri : ParentId, SectId, GuideId, bCapEnds [, dTol] [, vtStatic] int nParentId ; LuaCheckParam( L, 1, nParentId) int nSectId ; @@ -670,10 +670,14 @@ LuaCreateSurfTmSwept( lua_State* L) bool bCapEnds ; LuaCheckParam( L, 4, bCapEnds) double dLinTol = LIN_TOL_SRF ; - LuaGetParam( L, 5, dLinTol) ; + Vector3d vtStatic = V_INVALID ; + if ( LuaGetParam( L, 5, dLinTol)) { + LuaGetParam( L, 6, vtStatic) ; + } LuaClearStack( L) ; // creo STM swept - int nId = ExeCreateSurfTmSwept( nParentId, nSectId, nGuideId, bCapEnds, dLinTol) ; + int nId = ExeCreateSurfTmSwept( nParentId, nSectId, nGuideId, bCapEnds, dLinTol, + vtStatic.IsValid() ? &vtStatic : nullptr) ; // restituisco il risultato if ( nId != GDB_ID_NULL) LuaSetParam( L, nId) ;