diff --git a/EXE.h b/EXE.h index fd6ee80..cb95f27 100644 --- a/EXE.h +++ b/EXE.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2014-2023 +// EgalTech 2014-2024 //---------------------------------------------------------------------------- -// File : EXE.h Data : 05.02.23 Versione : 2.5a6 +// File : EXE.h Data : 15.05.24 Versione : 2.6e4 // Contenuto : Dichiarazioni locali per moduli EXE. // // @@ -26,6 +26,7 @@ const std::string& ExeGetIniFile( void) ; const std::string& ExeGetKey( void) ; const std::string& ExeGetNestKey( void) ; const std::string& ExeGetLockId( void) ; +bool ExeVerifyKeyOption( int nOptInd) ; //---------------------------------------------------------------------------- ILogger* GetLogger( void) ; diff --git a/EXE_GdbCreateCurve.cpp b/EXE_GdbCreateCurve.cpp index 95daf41..eb39e19 100644 --- a/EXE_GdbCreateCurve.cpp +++ b/EXE_GdbCreateCurve.cpp @@ -40,13 +40,12 @@ #include "/EgtDev/Include/EGkChainCurves.h" #include "/EgtDev/Include/EGkCurveByInterp.h" #include "/EgtDev/Include/EGkCurveByApprox.h" +#include "/EgtDev/Include/EGkCurveAux.h" #include "/EgtDev/Include/EGkOffsetCurve.h" +#include "/EgtDev/Include/EGkCurveLocal.h" #include "/EgtDev/Include/EGkSurfTriMesh.h" #include "/EgtDev/Include/EGkDistPointCurve.h" #include "/EgtDev/Include/EGkStringUtils3d.h" -#include "/EgtDev/Include/EGkCurveLocal.h" -#include "/EgtDev/Include/EGkCurveAux.h" -#include "/EgtDev/Include/EGkCurve.h" #include "/EgtDev/Include/EgtPointerOwner.h" using namespace std ; diff --git a/EXE_GdbCreateVol.cpp b/EXE_GdbCreateVol.cpp index 66bb808..87a43c2 100644 --- a/EXE_GdbCreateVol.cpp +++ b/EXE_GdbCreateVol.cpp @@ -187,3 +187,57 @@ ExeCreateVolZmapFromSurfTm( int nParentId, int nStmId, double dPrec, bool bTriDe // restituisco l'identificativo della nuova entità return nNewId ; } + +//------------------------------------------------------------------------------- +bool +ExeUpdateVolZmapByAddingSurfTm( int nVolZmapId, int nStmId) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero lo Zmap + IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nVolZmapId)) ; + bool bOk = ( pVZM != nullptr) ; + // recupero la trimesh + PtrOwner pStm( CloneSurfTriMesh( pGeomDB->GetGeoObj( nStmId))) ; + bOk = bOk && !IsNull( pStm) ; + // recupero il frame dello Zmap e della Trimesh + Frame3d frZmap, frStm ; + bOk = bOk && pGeomDB->GetGlobFrame( nVolZmapId, frZmap) && + pGeomDB->GetGlobFrame( nStmId, frStm) ; + // porto la Stm nel frame dello Zmap + bOk = bOk && pStm->LocToLoc( frStm, frZmap) ; + // aggiorno lo Zmap con la nuova superficie + bOk = bOk && pVZM->AddSurfTm( pStm) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtUpdateVolZmapByAddingSurfTm(" + ToString( nVolZmapId) + "," + + ToString( nStmId) + ")" + " -- bOk =" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; +} + +//------------------------------------------------------------------------------- +bool +ExeUniformVolZmap( int nVolZmapId, double dToler) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero lo Zmap + IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nVolZmapId)) ; + bool bOk = ( pVZM != nullptr) ; + // aggiorno lo Zmap + dToler = max( dToler, EPS_SMALL) ; + bOk = bOk && pVZM->MakeUniform( dToler) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtUniformZmap(" + ToString( nVolZmapId) + "," + + ToString( dToler) + ")" + " -- bOk =" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; +} diff --git a/EXE_GdbGetSurf.cpp b/EXE_GdbGetSurf.cpp index 2f5ae6c..cfbba3b 100644 --- a/EXE_GdbGetSurf.cpp +++ b/EXE_GdbGetSurf.cpp @@ -1081,6 +1081,98 @@ ExeSurfTmGetFacetBBoxRef( int nId, int nFacet, int nFlag, const Frame3d& frRef, return pStm->GetFacetBBox( nFacet, frGlobL, b3Box, nFlag) ; } +//----------------------------------------------------------------------------- +bool +ExeSurfTmGetFacetOutlineInfo( int nId, int nFacet, int nRefId, + int& nStatus, BOOLVECTOR& vbOpen, INTVECTOR& vnAdj, DBLVECTOR& vdLen, VCT3DVECTOR& vvtNorm, DBLVECTOR& vdElev) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // recupero la superficie TriMesh + const ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ; + if ( pStm == nullptr) + return false ; + // recupero normale della faccia + Vector3d vtNorm ; + if ( ! pStm->GetFacetNormal( nFacet, vtNorm)) + return false ; + // recupero i loop come polilinee + POLYLINEVECTOR vPL ; + if ( ! pStm->GetFacetLoops( nFacet, vPL) || vPL.empty()) + return false ; + // calcolo lo stato + if ( vPL.size() == 1) + nStatus = 0 ; + else { + nStatus = -1 ; + for ( int i = 1 ; nStatus == -1 && i < int( vPL.size()) ; ++ i) { + double dIni, dFin ; + Point3d ptIni, ptFin ; + bool bFound = vPL[i].GetFirstULine( &dIni, &ptIni, &dFin, &ptFin) ; + while ( bFound) { + int nAdj = lround( dIni) ; + Vector3d vtNf ; + if ( nAdj >= 0 && pStm->GetFacetNormal( nAdj, vtNf)) { + Vector3d vtTg = ptFin - ptIni ; + vtTg.Normalize() ; + if ( ( vtTg ^ vtNf) * vtNorm > EPS_SMALL) { + nStatus = 1 ; + break ; + } + } + bFound = vPL[i].GetNextULine( &dIni, &ptIni, &dFin, &ptFin) ; + } + } + } + // pulisco e prealloco i vettori del risultato + int nDim = vPL[0].GetLineNbr() ; + vbOpen.clear() ; vbOpen.reserve( nDim) ; + vnAdj.clear() ; vnAdj.reserve( nDim) ; + vdLen.clear() ; vdLen.reserve( nDim) ; + vvtNorm.clear() ; vvtNorm.reserve( nDim) ; + vdElev.clear() ; vdElev.reserve( nDim) ; + // recupero riferimento alla lista dei punti + PNTULIST& lstPU = vPL[0].GetUPointList() ; + // ciclo sui lati del loop esterno (il primo) + double dIni, dFin ; + Point3d ptIni, ptFin ; + bool bFound = vPL[0].GetFirstULine( &dIni, &ptIni, &dFin, &ptFin) ; + while ( bFound) { + // faccia adiacente + int nAdj = lround( dIni) ; + // lunghezza lato + double dLen = Dist( ptIni, ptFin) ; + // aperto se senza adiacenza o con faccia adiacente che va da parte negativa (tipo foro) + bool bOpen = true ; + Vector3d vtTg = ptFin - ptIni ; + vtTg.Normalize() ; + Vector3d vtNf ; + if ( nAdj >= 0 && pStm->GetFacetNormal( nAdj, vtNf)) + bOpen = ((vtTg ^ vtNf) * vtNorm < EPS_SMALL) ; + // normale al lato (verso interno se chiuso, verso esterno se aperto) + Vector3d vtN = vtTg ; + vtN.Rotate( vtNorm, 0, ( bOpen ? -1 : 1)) ; + // elevazione secondo direzione della normale al lato + double dElev = 0 ; + for ( const auto& PU : lstPU) { + double dDist = ( PU.first - ptIni) * vtN ; + dElev = ( bOpen ? min( dElev, dDist) : max( dElev, dDist)) ; + } + // porto normale nel riferimento desiderato + TransformVector( pGeomDB, nId, nRefId, vtN) ; + // inserisco dati nei parametri di ritorno + vbOpen.emplace_back( bOpen) ; + vnAdj.emplace_back( nAdj) ; + vdLen.emplace_back( dLen) ; + vvtNorm.emplace_back( vtN) ; + vdElev.emplace_back( dElev) ; + // passo al prossimo lato + bFound = vPL[0].GetNextULine( &dIni, &ptIni, &dFin, &ptFin) ; + } + + return true ; +} + //---------------------------------------------------------------------------- int ExeSurfTmGetEdges( int nId, int nDestGrpId, bool bSmoothAng, int* pnCount) diff --git a/EXE_GdbModifyCurve.cpp b/EXE_GdbModifyCurve.cpp index 80ae05c..c3631bd 100644 --- a/EXE_GdbModifyCurve.cpp +++ b/EXE_GdbModifyCurve.cpp @@ -20,6 +20,8 @@ #include "GeoTools.h" #include "/EgtDev/Include/EXeExecutor.h" #include "/EgtDev/Include/EXeConst.h" +#include "/EgtDev/Include/EGkGeoPoint3d.h" +#include "/EgtDev/Include/EGkGeoVector3d.h" #include "/EgtDev/Include/EGkCurve.h" #include "/EgtDev/Include/EGkCurveArc.h" #include "/EgtDev/Include/EGkCurveBezier.h" @@ -34,17 +36,15 @@ #include "/EgtDev/Include/EGkChainCurves.h" #include "/EgtDev/Include/EGkProjectCurveSurfTm.h" #include "/EgtDev/Include/EGkSurfFlatRegion.h" +#include "/EgtDev/Include/EGkSfrCreate.h" +#include "/EgtDev/Include/EGkSurfBezier.h" #include "/EgtDev/Include/EGkExtTExt.h" #include "/EgtDev/Include/EGkGdbIterator.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EGkIntervals.h" #include "/EgtDev/Include/EGkPolygon3d.h" -#include "/EgtDev/Include/EGkGeoPoint3d.h" -#include "/EgtDev/Include/EGkGeoVector3d.h" -#include "/EgtDev/Include/EgtPointerOwner.h" #include "/EgtDev/Include/EGkCalcPocketing.h" -#include -#include "/EgtDev/Include/EGkSurfBezier.h" +#include "/EgtDev/Include/EgtPointerOwner.h" #include @@ -2494,7 +2494,7 @@ ExeProjectCurveOnSurfTmExt( int nCurveId, int nSurfTmId, int nGuideId, int nDest //------------------------------------------------------------------------------- static bool MyProjectCurveOnSurfBz( int nCurveId, int nSurfBzId, const Vector3d& vtDir, int nDestGrpId, - double dLinTol, double dMaxSegmLen, int nRefType) + double dLinTol, double dMaxSegmLen, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) @@ -2565,7 +2565,7 @@ MyProjectCurveOnSurfBz( int nCurveId, int nSurfBzId, const Vector3d& vtDir, int //------------------------------------------------------------------------------- bool ExeProjectCurveOnSurfBz( int nCurveId, int nSurfBzId, const Vector3d& vtDir, int nDestGrpId, - double dLinTol, double dMaxSegmLen, int nRefType) + double dLinTol, double dMaxSegmLen, int nRefType) { bool bOk = MyProjectCurveOnSurfBz( nCurveId, nSurfBzId, vtDir, nDestGrpId, dLinTol, dMaxSegmLen, nRefType) ; ExeSetModified() ; @@ -2588,7 +2588,7 @@ ExeProjectCurveOnSurfBz( int nCurveId, int nSurfBzId, const Vector3d& vtDir, int //------------------------------------------------------------------------------- static bool MyProjectCurveOnSurfBzExt( int nCurveId, int nSurfBzId, int nGuideId, int nDestGrpId, - double dLinTol, double dMaxSegmLen, bool bDirFromGuide) + double dLinTol, double dMaxSegmLen, bool bDirFromGuide) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) @@ -2695,7 +2695,7 @@ MyProjectCurveOnSurfBzExt( int nCurveId, int nSurfBzId, int nGuideId, int nDestG //------------------------------------------------------------------------------- bool ExeProjectCurveOnSurfBzExt( int nCurveId, int nSurfBzId, int nGuideId, int nDestGrpId, - double dLinTol, double dMaxSegmLen, bool bDirFromGuide) + double dLinTol, double dMaxSegmLen, bool bDirFromGuide) { bool bOk = MyProjectCurveOnSurfBzExt( nCurveId, nSurfBzId, nGuideId, nDestGrpId, dLinTol, dMaxSegmLen, bDirFromGuide) ; ExeSetModified() ; diff --git a/EXE_General.cpp b/EXE_General.cpp index e6bc002..29cd10a 100644 --- a/EXE_General.cpp +++ b/EXE_General.cpp @@ -35,6 +35,7 @@ #include "/EgtDev/Include/EgtIniFile.h" #include "/EgtDev/Include/EgtLogger.h" #include "/EgtDev/Include/EgtStringConverter.h" +#include "/EgtDev/Include/EgtKeyCodes.h" #include "/EgtDev/Include/SELkLockId.h" #include "/EgtDev/Include/SELkKeyProc.h" #include @@ -352,6 +353,34 @@ ExeGetNetHwKey( void) return s_bNetHwKey ; } +//----------------------------------------------------------------------------- +bool +ExeVerifyKeyOption( int nOptInd) +{ + // recupero le opzioni abilitate + unsigned int nOpt1, nOpt2 ; + int nOptExpDays ; + int nRet = GetEGnKeyOptions( KEY_BASELIB_PROD, KEY_BASELIB_VER, KEY_BASELIB_LEV, + nOpt1, nOpt2, nOptExpDays) ; + if ( ! ExeGetNetHwKey()) + nRet = GetKeyOptions( ExeGetKey(), KEY_BASELIB_PROD, KEY_BASELIB_VER, KEY_BASELIB_LEV, + nOpt1, nOpt2, nOptExpDays) ; + // verifico validità chiave con licenza + if ( nRet != KEY_OK || nOptExpDays < GetCurrDay()) + return false ; + // verifico le opzioni (nOptInd = 100 -> bit 0 di Opt1 ... = 200 -> bit 0 di Opt2 ... = 231 -> bit 31 di Opt2) + if ( nOptInd >= 100 && nOptInd <= 131) { + unsigned int nOptVal = ( 1 << ( nOptInd - 100)) ; + return ( ( nOpt1 & nOptVal) != 0) ; + } + else if ( nOptInd >= 200 && nOptInd <= 231) { + unsigned int nOptVal = ( 1 << ( nOptInd - 200)) ; + return ( ( nOpt2 & nOptVal) != 0) ; + } + else + return false ; +} + //----------------------------------------------------------------------------- bool ExeSetFont( const string& sNfeFontDir, const string& sDefaultFont) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 1b7dbb9..6c5ea21 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/LUA_GdbCreateVol.cpp b/LUA_GdbCreateVol.cpp index f5ec104..a9c2aef 100644 --- a/LUA_GdbCreateVol.cpp +++ b/LUA_GdbCreateVol.cpp @@ -140,6 +140,37 @@ LuaCreateVolZmapFromSurfTm( lua_State* L) return 1 ; } +//------------------------------------------------------------------------------- +static int +LuaUpdateVolZmapByAddingSurfTm( lua_State* L) +{ + // 2 parametri : nVolZmapId, StmId, + int nVolZmapId ; + LuaCheckParam( L, 1, nVolZmapId) ; + int nStmId ; + LuaCheckParam( L, 2, nStmId) ; + LuaClearStack( L) ; + bool bOk = ExeUpdateVolZmapByAddingSurfTm( nVolZmapId, nStmId) ; + LuaSetParam( L, bOk) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaUniformVolZmap( lua_State* L) +{ + // 1 o 2 parametri : nVolZmapId [, dToler] + int nVolZmapId ; + LuaCheckParam( L, 1, nVolZmapId) ; + double dToler = EPS_SMALL ; + LuaGetParam( L, 2, dToler) ; + LuaClearStack( L) ; + bool bOk = ExeUniformVolZmap( nVolZmapId, dToler) ; + LuaSetParam( L, bOk) ; + return 1 ; +} + + //------------------------------------------------------------------------------- bool LuaInstallGdbCreateVol( LuaMgr& luaMgr) @@ -149,5 +180,7 @@ LuaInstallGdbCreateVol( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtVolZmapEmpty", LuaCreateVolZmapEmpty) ; bOk = bOk && luaMgr.RegisterFunction( "EgtVolZmapByRegionExtrusion", LuaCreateVolZmapByRegionExtrusion) ; bOk = bOk && luaMgr.RegisterFunction( "EgtVolZmapFromSurfTm", LuaCreateVolZmapFromSurfTm) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtUpdateVolZmapByAddingSurfTm", LuaUpdateVolZmapByAddingSurfTm ) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtUniformZmap", LuaUniformVolZmap) ; return bOk ; } diff --git a/LUA_GdbGetSurf.cpp b/LUA_GdbGetSurf.cpp index b840355..00abcf2 100644 --- a/LUA_GdbGetSurf.cpp +++ b/LUA_GdbGetSurf.cpp @@ -443,6 +443,42 @@ LuaSurfTmGetFacetBBoxRef( lua_State* L) return 1 ; } +//---------------------------------------------------------------------------- +static int +LuaSurfTmGetFacetOutlineInfo( lua_State* L) +{ + // 2 o 3 parametri : Id, nFacet [, nRefId] + int nId ; + LuaCheckParam( L, 1, nId) + int nFacet ; + LuaCheckParam( L, 2, nFacet) + int nRefId = nId ; + LuaGetParam( L, 3, nRefId) ; + LuaClearStack( L) ; + // recupero le informazioni + int nStatus ; + BOOLVECTOR vbOpen ; + INTVECTOR vnAdj ; + VCT3DVECTOR vvtNorm ; + DBLVECTOR vdElev ; + DBLVECTOR vdLen ; + bool bOk = ExeSurfTmGetFacetOutlineInfo( nId, nFacet, nRefId, nStatus, vbOpen, vnAdj, vdLen, vvtNorm, vdElev) ; + // restituisco il risultato + if ( bOk) { + LuaSetParam( L, nStatus) ; + LuaSetParam( L, vbOpen) ; + LuaSetParam( L, vnAdj) ; + LuaSetParam( L, vdLen) ; + LuaSetParam( L, vvtNorm) ; + LuaSetParam( L, vdElev) ; + return 6 ; + } + else { + LuaSetParam( L) ; + return 1 ; + } +} + //---------------------------------------------------------------------------- static int LuaSurfTmFacetAdjacencies( lua_State* L) @@ -1128,6 +1164,7 @@ LuaInstallGdbGetSurf( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmGetFacetBBox", LuaSurfTmGetFacetBBox) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmGetFacetBBoxGlob", LuaSurfTmGetFacetBBoxGlob) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmGetFacetBBoxRef", LuaSurfTmGetFacetBBoxRef) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmGetFacetOutlineInfo", LuaSurfTmGetFacetOutlineInfo) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmFacetAdjacencies", LuaSurfTmFacetAdjacencies) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmFacetNearestEndPoint", LuaSurfTmFacetNearestEndPoint) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmFacetNearestMidPoint", LuaSurfTmFacetNearestMidPoint) ; diff --git a/LUA_General.cpp b/LUA_General.cpp index ce7da97..a643614 100644 --- a/LUA_General.cpp +++ b/LUA_General.cpp @@ -1083,6 +1083,20 @@ LuaGetMsg( lua_State* L) return 1 ; } +//------------------------------------------------------------------------------- +static int +LuaVerifyKeyOption( lua_State* L) +{ + // 1 parametro : nOptInd + int nOptInd ; + LuaCheckParam( L, 1, nOptInd) + LuaClearStack( L) ; + // verifico l'abilitazione dell'opzione (da chiave + licenza) + bool bOk = ExeVerifyKeyOption( nOptInd) ; + LuaSetParam( L, bOk) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaWinExec( lua_State* L) @@ -1384,6 +1398,7 @@ LuaInstallGeneral( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtIs64bit", LuaIs64bit) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetLanguage", LuaGetLanguage) ; bOk = bOk && luaMgr.RegisterFunction( "EgtMsg", LuaGetMsg) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtVerifyKeyOption", LuaVerifyKeyOption) ; bOk = bOk && luaMgr.RegisterFunction( "EgtDialogBox", LuaDialogBox) ; bOk = bOk && luaMgr.RegisterFunction( "EgtWinExec", LuaWinExec) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCloseExe", LuaCloseExe) ;