From 00c0e216b7fb99813d35e101da26f39f8ff85f74 Mon Sep 17 00:00:00 2001 From: DarioS Date: Fri, 4 Nov 2022 19:21:17 +0100 Subject: [PATCH] EgtExecutor 2.4k2 : - aggiunta funzione Exe e Lua ApproxSurface. --- EXE_Const.h | 1 + EXE_GdbModifySurf.cpp | 67 ++++++++++++++++++++++++++++++++++-------- EgtExecutor.rc | Bin 18898 -> 18898 bytes LUA_GdbCreateSurf.cpp | 28 ++++++++---------- LUA_GdbModifySurf.cpp | 19 ++++++++++++ 5 files changed, 88 insertions(+), 27 deletions(-) diff --git a/EXE_Const.h b/EXE_Const.h index 4852ddf..51f6c89 100644 --- a/EXE_Const.h +++ b/EXE_Const.h @@ -18,6 +18,7 @@ //---------------------------------------------------------------------------- // Costanti per tolleranze di appossimazione const double LIN_TOL_STD = 0.1 ; +const double LIN_TOL_SRF = 0.05 ; const double LIN_TOL_FINE = 0.01 ; const double LIN_FEA_STD = 20 ; const double LIN_FEA_MAX = 400 ; diff --git a/EXE_GdbModifySurf.cpp b/EXE_GdbModifySurf.cpp index 85a5a05..8346583 100644 --- a/EXE_GdbModifySurf.cpp +++ b/EXE_GdbModifySurf.cpp @@ -24,6 +24,7 @@ #include "/EgtDev/Include/EGkCurveLocal.h" #include "/EgtDev/Include/EGkSurfFlatRegion.h" #include "/EgtDev/Include/EGkSurfTriMesh.h" +#include "/EgtDev/Include/EGkSurfBezier.h" #include "/EgtDev/Include/EGkSurfLocal.h" #include "/EgtDev/Include/EGkStmFromTriangleSoup.h" #include "/EgtDev/Include/EGkCAvSimpleSurfFrMove.h" @@ -204,12 +205,54 @@ ExeExplodeSurface( int nId, int* pnCount) return nFirstId ; } +//------------------------------------------------------------------------------- +bool +ExeApproxSurface( int nId, double dLinTol) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // opero secondo il tipo di superficie + PtrOwner pStm ; + int nType = pGeomDB->GetGeoType( nId) ; + if ( nType == SRF_TRIMESH) { + // copio la superficie + const ISurfTriMesh* pStri = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ; + pStm.Set( pStri != nullptr ? pStri->Clone() : nullptr) ; + } + else if ( nType == SRF_FLATRGN) { + // recupero la superficie ausiliaria della regione + const ISurfFlatRegion* pSfr = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId)) ; + const ISurfTriMesh* pAuxSurf = ( pSfr != nullptr ? pSfr->GetAuxSurf() : nullptr) ; + pStm.Set( pAuxSurf != nullptr ? pAuxSurf->Clone() : nullptr) ; + } + else if ( nType == SRF_BEZIER) { + // recupero la superficie ausiliaria della Bezier + const ISurfBezier* pSbez = GetSurfBezier( pGeomDB->GetGeoObj( nId)) ; + const ISurfTriMesh* pAuxSurf = ( pSbez != nullptr ? pSbez->GetAuxSurf() : nullptr) ; + pStm.Set( pAuxSurf != nullptr ? pAuxSurf->Clone() : nullptr) ; + } + bool bOk = ( ! IsNull( pStm)) ; + // va inserita la semplificazione di una trimesh + + // sostituisco la vecchia superficie con la nuova + bOk = bOk && pGeomDB->ReplaceGeoObj( nId, Release( pStm)) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtApproxSurf(" + ToString( nId) + "," + + ToString( dLinTol) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; +} + //---------------------------------------------------------------------------- bool ExeSurfFrAdd( int nId1, int nId2) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie FlatRegion ISurfFlatRegion* pSfr1 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pSfr1 != nullptr) ; @@ -238,7 +281,7 @@ bool ExeSurfFrSubtract( int nId1, int nId2) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie FlatRegion ISurfFlatRegion* pSfr1 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pSfr1 != nullptr) ; @@ -270,7 +313,7 @@ bool ExeSurfFrIntersect( int nId1, int nId2) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie FlatRegion ISurfFlatRegion* pSfr1 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pSfr1 != nullptr) ; @@ -302,7 +345,7 @@ bool ExeSurfFrOffset( int nId, double dDist, int nType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la superficie FlatRegion ISurfFlatRegion* pSfr = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId)) ; bool bOk = ( pSfr != nullptr) ; @@ -328,7 +371,7 @@ bool ExeSurfFrMoveSimpleNoCollision( int nId1, int nId2, const Vector3d& vtDir, double& dLen, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie FlatRegion ISurfFlatRegion* pSfr1 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pSfr1 != nullptr) ; @@ -350,7 +393,7 @@ bool ExeSurfFrRotateSimpleNoCollision( int nId1, int nId2, const Point3d& ptCen, double& dAngDeg, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie FlatRegion ISurfFlatRegion* pSfr1 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pSfr1 != nullptr) ; @@ -510,7 +553,7 @@ bool ExeCutSurfTmPlane( int nId, const Point3d& ptOn, const Vector3d& vtN, bool bSaveOnEq, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la superficie TriMesh ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ; bool bOk = ( pStm != nullptr) ; @@ -545,7 +588,7 @@ bool ExeCutSurfTmClosedCurve( int nSurfId, int nCurveId, bool bSaveOnEq) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la superficie TriMesh ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nSurfId)) ; bool bOk = ( pStm != nullptr) ; @@ -575,7 +618,7 @@ bool ExeSurfTmAdd( int nId1, int nId2, bool bTwoColors) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie TriMesh ISurfTriMesh* pStm1 = GetSurfTriMesh( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pStm1 != nullptr) ; @@ -607,7 +650,7 @@ bool ExeSurfTmSubtract( int nId1, int nId2, bool bTwoColors) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie TriMesh ISurfTriMesh* pStm1 = GetSurfTriMesh( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pStm1 != nullptr) ; @@ -644,7 +687,7 @@ bool ExeSurfTmIntersect( int nId1, int nId2, bool bTwoColors) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la prima superficie TriMesh ISurfTriMesh* pStm1 = GetSurfTriMesh( pGeomDB->GetGeoObj( nId1)) ; bool bOk = ( pStm1 != nullptr) ; @@ -681,7 +724,7 @@ bool ExeSurfTmResetTwoColors( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + VERIFY_GEOMDB( pGeomDB, false) // recupero la superficie TriMesh ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ; bool bOk = ( pStm != nullptr) ; diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 3411e6f4c80394726490785c277f9398008de14b..f9fdf093360be7c630be6349a443092f97552439 100644 GIT binary patch delta 99 zcmcaKneozO#tnbi7>zbx6uZte`3h$qqtWC*Zr#lVTs15}(SvfAnI<0)gozp`xiM~D fB&^2_*5C@Hpo;w%H&2oV3m=qogb5ocEm8*n;L{*B delta 99 zcmcaKneozO#tnbi7!5aH6uZte`3h$qqv7O0Zr#lVTs15}(SvfAnI<0)gozp`xiM~D fB&^2_*5C@Hpo;w%H&2oV3m=qogb5ocEm8*n-%TJc diff --git a/LUA_GdbCreateSurf.cpp b/LUA_GdbCreateSurf.cpp index ad5a53d..a449004 100644 --- a/LUA_GdbCreateSurf.cpp +++ b/LUA_GdbCreateSurf.cpp @@ -14,6 +14,7 @@ //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "LUA.h" +#include "EXE_Const.h" #include "/EgtDev/Include/EXeExecutor.h" #include "/EgtDev/Include/EXeConst.h" #include "/EgtDev/Include/EGkLuaAux.h" @@ -22,9 +23,6 @@ using namespace std ; -//------------------------------------------------------------------------------- -static const double LIN_TOL_DEF = 0.05 ; - //------------------------------------------------------------------------------- static int LuaCreateSurfFrRectangle( lua_State* L) @@ -320,7 +318,7 @@ LuaCreateSurfTmCylinder( lua_State* L) LuaCheckParam( L, 4, dRad) double dHeight ; LuaCheckParam( L, 5, dHeight) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; int nRefType = RTY_DEFAULT ; if ( LuaGetParam( L, 6, dLinTol)) LuaGetParam( L, 7, nRefType) ; @@ -352,7 +350,7 @@ LuaCreateSurfTmCone( lua_State* L) LuaCheckParam( L, 4, dRad) double dHeight ; LuaCheckParam( L, 5, dHeight) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; int nRefType = RTY_DEFAULT ; if ( LuaGetParam( L, 6, dLinTol)) LuaGetParam( L, 7, nRefType) ; @@ -380,7 +378,7 @@ LuaCreateSurfTmSphere( lua_State* L) LuaCheckParam( L, 2, ptOrig) double dRad ; LuaCheckParam( L, 3, dRad) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; int nRefType = RTY_DEFAULT ; if ( LuaGetParam( L, 4, dLinTol)) LuaGetParam( L, 5, nRefType) ; @@ -406,7 +404,7 @@ LuaCreateSurfTmByFlatContour( lua_State* L) LuaCheckParam( L, 1, nParentId) int nCrvId ; LuaCheckParam( L, 2, nCrvId) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; if ( lua_gettop( L) >= 3) LuaCheckParam( L, 3, dLinTol) ; LuaClearStack( L) ; @@ -429,7 +427,7 @@ LuaCreateSurfTmByRegion( lua_State* L) LuaCheckParam( L, 1, nParentId) INTVECTOR vCrvIds ; LuaCheckParam( L, 2, vCrvIds) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; if ( lua_gettop( L) >= 3) LuaCheckParam( L, 3, dLinTol) ; LuaClearStack( L) ; @@ -454,7 +452,7 @@ LuaCreateSurfTmByExtrusion( lua_State* L) LuaCheckParam( L, 2, vCrvIds) Vector3d vtExtr ; LuaCheckParam( L, 3, vtExtr) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; int nRefType = RTY_DEFAULT ; if ( LuaGetParam( L, 4, dLinTol)) LuaGetParam( L, 5, nRefType) ; @@ -483,7 +481,7 @@ LuaCreateSurfTmByRegionExtrusion( lua_State* L) LuaCheckParam( L, 2, vCrvIds) Vector3d vtExtr ; LuaCheckParam( L, 3, vtExtr) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; int nRefType = RTY_DEFAULT ; if ( LuaGetParam( L, 4, dLinTol)) LuaGetParam( L, 5, nRefType) ; @@ -515,7 +513,7 @@ LuaCreateSurfTmByRevolve( lua_State* L) LuaCheckParam( L, 4, vtAx) bool bCapEnds ; LuaCheckParam( L, 5, bCapEnds) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; int nRefType = RTY_DEFAULT ; if ( LuaGetParam( L, 6, dLinTol)) LuaGetParam( L, 7, nRefType) ; @@ -553,7 +551,7 @@ LuaCreateSurfTmByScrewing( lua_State* L) bool bCapEnds = false ; if ( LuaGetParam( L, nPar, bCapEnds)) ++ nPar ; - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; if ( LuaGetParam( L, nPar, dLinTol)) ++ nPar ; int nRefType = RTY_DEFAULT ; @@ -589,7 +587,7 @@ LuaCreateSurfTmRectSwept( lua_State* L) LuaCheckParam( L, 6, nGuideId) int nCapType ; LuaCheckParam( L, 7, nCapType) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; LuaGetParam( L, 8, dLinTol) ; LuaClearStack( L) ; // creo STM rectangular swept @@ -615,7 +613,7 @@ LuaCreateSurfTmSwept( lua_State* L) LuaCheckParam( L, 3, nGuideId) bool bCapEnds ; LuaCheckParam( L, 4, bCapEnds) - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; LuaGetParam( L, 5, dLinTol) ; LuaClearStack( L) ; // creo STM swept @@ -640,7 +638,7 @@ LuaCreateSurfTmRuled( lua_State* L) int nPtOrCrvId2 ; LuaCheckParam( L, 3, nPtOrCrvId2) string sType = "IP" ; - double dLinTol = LIN_TOL_DEF ; + double dLinTol = LIN_TOL_SRF ; if ( LuaGetParam( L, 4, sType)) LuaGetParam( L, 5, dLinTol) ; else diff --git a/LUA_GdbModifySurf.cpp b/LUA_GdbModifySurf.cpp index 7c31fe9..db04052 100644 --- a/LUA_GdbModifySurf.cpp +++ b/LUA_GdbModifySurf.cpp @@ -14,6 +14,7 @@ //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "LUA.h" +#include "EXE_Const.h" #include "/EgtDev/Include/EXeExecutor.h" #include "/EgtDev/Include/EXeConst.h" #include "/EgtDev/Include/EGkCurve.h" @@ -57,6 +58,23 @@ LuaExplodeSurf( lua_State* L) return 2 ; } +//------------------------------------------------------------------------------- +static int +LuaApproxSurf( lua_State* L) +{ + // 1 o 2 parametri : Id [, dLinTol] + int nId ; + LuaCheckParam( L, 1, nId) + double dLinTol = LIN_TOL_SRF ; + LuaGetParam( L, 2, dLinTol) ; + LuaClearStack( L) ; + // approssimazione della superficie + bool bOk = ExeApproxSurface( nId, dLinTol) ; + // restituisco il risultato + LuaSetParam( L, bOk) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaSurfFrAdd( lua_State* L) @@ -353,6 +371,7 @@ LuaInstallGdbModifySurf( LuaMgr& luaMgr) bool bOk = ( &luaMgr != nullptr) ; bOk = bOk && luaMgr.RegisterFunction( "EgtInvertSurf", LuaInvertSurf) ; bOk = bOk && luaMgr.RegisterFunction( "EgtExplodeSurf", LuaExplodeSurf) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtApproxSurf", LuaApproxSurf) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrAdd", LuaSurfFrAdd) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrSubtract", LuaSurfFrSubtract) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrIntersect", LuaSurfFrIntersect) ;