From ddbc2a81e6ed762ae7a3ce4da7aa6f2660ccdbcb Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 16 Jul 2024 11:22:58 +0200 Subject: [PATCH] EgtExecutor : - piccole aggiunte alla chiamata delle funzioni per le bezier - aggiunta della chiamata alla funzione SurfBzByPointCurve. --- EXE_GdbCreateSurf.cpp | 37 +++++++++++++++++++++++++++++++++++++ EXE_GdbGetCurve.cpp | 15 ++++++++++++++- EXE_GdbGetSurf.cpp | 15 ++++++++++++--- EXE_GdbModifyCurve.cpp | 4 ++-- LUA_GdbCreateSurf.cpp | 13 ++++++------- LUA_GdbGetCurve.cpp | 8 +++++--- LUA_GdbGetSurf.cpp | 8 +++++--- 7 files changed, 81 insertions(+), 19 deletions(-) diff --git a/EXE_GdbCreateSurf.cpp b/EXE_GdbCreateSurf.cpp index b31023f..32a5a59 100644 --- a/EXE_GdbCreateSurf.cpp +++ b/EXE_GdbCreateSurf.cpp @@ -1174,6 +1174,43 @@ ExeCreateSurfTmByRevolve( int nParentId, int nCrvId, return nNewId ; } +//------------------------------------------------------------------------------- +int +ExeCreateSurfBzByPointCurve( int nParentId, int nCrvId, const Point3d& ptTop, + bool bCapEnds, double dLinTol, int nRefType) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + nParentId = AdjustId( nParentId) ; + bool bOk = true ; + // recupero il riferimento locale + Frame3d frLoc ; + bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; + // recupero la curva in locale + CurveLocal CrvLoc( pGeomDB, nCrvId, frLoc) ; + bOk = bOk && ( CrvLoc.Get() != nullptr) ; + // porto in locale punto e vettore asse + Point3d ptAxL = GetPointLocal( pGeomDB, ptTop, nRefType, frLoc) ; + // calcolo la superficie + ISurfBezier* pSTM = ( bOk ? GetSurfBezierRuled( ptTop, CrvLoc, dLinTol) : nullptr) ; + // inserisco la superficie nel DB + int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, pSTM) : GDB_ID_NULL) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfBzByPointCurve(" + IdToString( nParentId) + "," + + ToString( nCrvId) + ",{" + + ToString( ptTop) + "},{" + + ( bCapEnds ? "true" : "false") + "," + + ToString( dLinTol) + "," + + RefTypeToString( nRefType) + ")" + + " -- Id=" + ToString( nNewId) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco l'identificativo della nuova entità + return nNewId ; +} + //------------------------------------------------------------------------------- int ExeCreateSurfTmByScrewing( int nParentId, int nCrvId, diff --git a/EXE_GdbGetCurve.cpp b/EXE_GdbGetCurve.cpp index ffc188d..68c9674 100644 --- a/EXE_GdbGetCurve.cpp +++ b/EXE_GdbGetCurve.cpp @@ -739,12 +739,23 @@ ExeCurveCompoGetTempParam( int nId, DBLVECTOR& vParam, int nParamInd) //---------------------------------------------------------------------------- int -ExeShowCurveBezierControlPoints( int nCrvId, int* pnCount) +ExeShowCurveBezierControlPoints( int nCrvId, int nDestGrpId, int* pnCount) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) // recupero la curva di bezier IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nCrvId) ; + if ( pGeoObj->GetType() != CRV_BEZIER) + return GDB_ID_NULL ; + // recupero il riferimento della curva + Frame3d frCrv ; + bool bOk = true ; + bOk = bOk && pGeomDB->GetGlobFrame( nCrvId, frCrv) ; + // recupero il riferimento di destinazione + Frame3d frDest ; + bOk = bOk && pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest) ; + if ( ! bOk) + return GDB_ID_NULL ; int nType = pGeoObj->GetType() ; if ( nType == CRV_COMPO) { const ICurveComposite* pCrvCompo = GetCurveComposite( pGeoObj) ; @@ -769,6 +780,7 @@ ExeShowCurveBezierControlPoints( int nCrvId, int* pnCount) //else // pGeoPt->Set( pCrvBezier->GetControlPoint( i) * pCrvBezier->GetControlWeight( i)) ; pGeoPt->Set( pCrvBezier->GetControlPoint( i)) ; + pGeoPt->LocToLoc( frCrv, frDest) ; int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nParent, pGeoPt) ; if ( nFirstId == GDB_ID_NULL) nFirstId = nId ; @@ -797,6 +809,7 @@ ExeShowCurveBezierControlPoints( int nCrvId, int* pnCount) //else // pGeoPt->Set( pCrvBezier->GetControlPoint( i) * pCrvBezier->GetControlWeight( i)) ; pGeoPt->Set( pCrvBezier->GetControlPoint( i)) ; + pGeoPt->LocToLoc( frCrv, frDest) ; int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nParent, pGeoPt) ; if ( nFirstId == GDB_ID_NULL) nFirstId = nId ; diff --git a/EXE_GdbGetSurf.cpp b/EXE_GdbGetSurf.cpp index 7375c6a..d12a755 100644 --- a/EXE_GdbGetSurf.cpp +++ b/EXE_GdbGetSurf.cpp @@ -1727,7 +1727,7 @@ ExeExtractSurfBezierLoops( int nId, int nDestGrpId, int* pnCount) //---------------------------------------------------------------------------- int -ExeShowSurfBezierControlPoints( int nSrfId, int* pnCount) +ExeShowSurfBezierControlPoints( int nSrfId, int nDestGrpId, int* pnCount) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) @@ -1736,6 +1736,15 @@ ExeShowSurfBezierControlPoints( int nSrfId, int* pnCount) IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nSrfId) ; if ( pGeoObj->GetType() != SRF_BEZIER) return GDB_ID_NULL ; + // recupero il riferimento della superficie + Frame3d frSurf ; + bool bOk = true ; + bOk = bOk && pGeomDB->GetGlobFrame( nSrfId, frSurf) ; + // recupero il riferimento di destinazione + Frame3d frDest ; + bOk = bOk && pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest) ; + if ( ! bOk) + return GDB_ID_NULL ; int nDegU = - 1, nDegV = - 1, nSpanU = - 1, nSpanV = - 1 ; bool bRat = false, bTrimmed = false ; ISurfBezier* pSrfBez = GetSurfBezier( pGeoObj) ; @@ -1743,10 +1752,10 @@ ExeShowSurfBezierControlPoints( int nSrfId, int* pnCount) int nFirstId = -1 ; int nCount = 0 ; for ( int i = 0 ; i < (nDegU * nSpanU + 1) * ( nDegV * nSpanV + 1) ; ++i) { - bool bOk = true ; IGeoPoint3d* pGeoPt( CreateGeoPoint3d()) ; pGeoPt->Set( pSrfBez->GetControlPoint( i, &bOk)) ; - int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nParent, pGeoPt) ; + pGeoPt->LocToLoc( frSurf, frDest) ; + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, pGeoPt) ; if ( nFirstId == GDB_ID_NULL) nFirstId = nId ; if ( nId != GDB_ID_NULL) diff --git a/EXE_GdbModifyCurve.cpp b/EXE_GdbModifyCurve.cpp index c3d3c67..39bd86b 100644 --- a/EXE_GdbModifyCurve.cpp +++ b/EXE_GdbModifyCurve.cpp @@ -2921,7 +2921,7 @@ ExeCurveBezierIncreaseDegree( int nCrvId) // recupero la curva const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nCrvId)) ; if ( pCrv == nullptr) - return GDB_ID_NULL ; + return false ; //// recupero il riferimento della curva //Frame3d frCrv ; //if ( ! pGeomDB->GetGlobFrame( nCrvId, frCrv)) @@ -2961,7 +2961,7 @@ ExeCurveBezierDecreaseDegree( int nCrvId, double dTol) // recupero la curva const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nCrvId)) ; if ( pCrv == nullptr) - return GDB_ID_NULL ; + return false ; //// recupero il riferimento della curva //Frame3d frCrv ; //if ( ! pGeomDB->GetGlobFrame( nCrvId, frCrv)) diff --git a/LUA_GdbCreateSurf.cpp b/LUA_GdbCreateSurf.cpp index 3c74398..bde8c3a 100644 --- a/LUA_GdbCreateSurf.cpp +++ b/LUA_GdbCreateSurf.cpp @@ -1128,16 +1128,14 @@ LuaCreateSurfBzByRevolve( lua_State* L) static int LuaCreateSurfBzByPointCurve( lua_State* L) { - // 4 o 5 o 6 o 7 parametri : ParentId, CrvId, ptAx, vtAx [, bCapEnds] [, dTol] [, nRefType] + // 3 o 4 o 5 o 6 parametri : ParentId, CrvId, ptAx, vtAx [, bCapEnds] [, dTol] [, nRefType] int nParentId ; LuaCheckParam( L, 1, nParentId) int nCrvId ; LuaCheckParam( L, 2, nCrvId) - Point3d ptAx ; - LuaCheckParam( L, 3, ptAx) - Vector3d vtAx ; - LuaCheckParam( L, 4, vtAx) - int nPar = 5 ; + Point3d ptTop ; + LuaCheckParam( L, 3, ptTop) + int nPar = 4 ; bool bCapEnds = false ; if ( LuaGetParam( L, nPar, bCapEnds)) ++ nPar ; @@ -1149,7 +1147,7 @@ LuaCreateSurfBzByPointCurve( lua_State* L) ++ nPar ; LuaClearStack( L) ; // creo STM riempiendo un contorno piano - int nId = ExeCreateSurfBzByRevolve( nParentId, nCrvId, ptAx, vtAx, bCapEnds, dLinTol, nRefType) ; + int nId = ExeCreateSurfBzByPointCurve( nParentId, nCrvId, ptTop, bCapEnds, dLinTol, nRefType) ; // restituisco il risultato if ( nId != GDB_ID_NULL) LuaSetParam( L, nId) ; @@ -1228,6 +1226,7 @@ LuaInstallGdbCreateSurf( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzByExtrusion", LuaCreateSurfBzByExtrusion) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzByScrewing", LuaCreateSurfBzByScrewing) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzByRevolve", LuaCreateSurfBzByRevolve) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzByPointCurve", LuaCreateSurfBzByPointCurve) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzRuled", LuaCreateSurfBzRuled) ; return bOk ; } diff --git a/LUA_GdbGetCurve.cpp b/LUA_GdbGetCurve.cpp index d779ee5..657dd40 100644 --- a/LUA_GdbGetCurve.cpp +++ b/LUA_GdbGetCurve.cpp @@ -588,12 +588,14 @@ LuaCurveCompoGetTempParam( lua_State* L) static int LuaShowCurveBezierControlPoints( lua_State* L) { - // 1 parametro : nCrvId + // 2 parametri : nCrvId, nDestGrpId int nCrvId ; LuaCheckParam( L, 1, nCrvId) - LuaClearStack( L) ; + int nDestGrpId ; + LuaCheckParam( L, 2, nDestGrpId) + LuaClearStack( L) ; int nCount = 0 ; - int nId = ExeShowCurveBezierControlPoints( nCrvId, &nCount) ; + int nId = ExeShowCurveBezierControlPoints( nCrvId, nDestGrpId, &nCount) ; // restituisco il risultato if ( nId != GDB_ID_NULL) { LuaSetParam( L, nId) ; diff --git a/LUA_GdbGetSurf.cpp b/LUA_GdbGetSurf.cpp index a49ea43..f78fb23 100644 --- a/LUA_GdbGetSurf.cpp +++ b/LUA_GdbGetSurf.cpp @@ -1192,12 +1192,14 @@ LuaExtractSurfBezierLoops( lua_State* L) static int LuaShowSurfBezierControlPoints( lua_State* L) { - // 1 parametro : nCrvId + // 2 parametri : nCrvId, nDestGrpId int nCrvId ; LuaCheckParam( L, 1, nCrvId) - LuaClearStack( L) ; + int nDestGrpId ; + LuaCheckParam( L, 2, nDestGrpId) + LuaClearStack( L) ; int nCount = 0 ; - int nId = ExeShowSurfBezierControlPoints( nCrvId, &nCount) ; + int nId = ExeShowSurfBezierControlPoints( nCrvId, nDestGrpId, &nCount) ; // restituisco il risultato if ( nId != GDB_ID_NULL) { LuaSetParam( L, nId) ;