diff --git a/EXE_CAvTool.cpp b/EXE_CAvTool.cpp new file mode 100644 index 0000000..a285046 --- /dev/null +++ b/EXE_CAvTool.cpp @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------------- +// EgalTech 2018-2018 +//---------------------------------------------------------------------------- +// File : EXE_CAvTool.cpp Data : 28.04.18 Versione : 1.9e1 +// Contenuto : Funzioni per evitare coolisioni dell'utensile. +// +// +// +// Modifiche : 28.04.18 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +//--------------------------- Include ---------------------------------------- +#include "stdafx.h" +#include "EXE.h" +#include "EXE_Macro.h" +#include "EXE_Const.h" +#include "AuxTools.h" +#include "GeoTools.h" +#include "/EgtDev/Include/EXeExecutor.h" +#include "/EgtDev/Include/EXeConst.h" +#include "/EgtDev/Include/EGkCAvToolSurfTm.h" +#include "/EgtDev/Include/EgtPointerOwner.h" + +using namespace std ; + +//---------------------------------------------------------------------------- +double +ExeCAvToolStmPosition( double dToolLen, double dToolDiam, double dToolCornR, int nSurfTmId, + const Point3d& ptP, const Vector3d& vtAx, const Vector3d& vtMove, int nRefType) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // recupero la superficie TriMesh + const ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nSurfTmId)) ; + if ( pStm == nullptr) + return -1 ; + // recupero il riferimento della superficie + Frame3d frSurf ; + if ( ! pGeomDB->GetGlobFrame( nSurfTmId, frSurf)) + return -1 ; + // definizione oggetto per evitare collisioni + PtrOwner pCAvTlStm( CreateCAvToolSurfTm()) ; + if ( IsNull( pCAvTlStm)) + return -1 ; + // porto i dati geometrici in locale + Point3d ptPL = GetPointLocal( pGeomDB, ptP, nRefType, frSurf) ; + Vector3d vtAxL = GetVectorLocal( pGeomDB, vtAx, nRefType, frSurf) ; + Vector3d vtMoveL = GetVectorLocal( pGeomDB, vtMove, nRefType, frSurf) ; + // imposto dati + if ( ! pCAvTlStm->SetStdTool( dToolLen, dToolDiam / 2, dToolCornR)) + return -1 ; + pCAvTlStm->SetSurfTm( *pStm) ; + pCAvTlStm->SetMoveDir( vtMoveL) ; + return pCAvTlStm->TestPosition( ptPL, vtAxL) ; +} diff --git a/EXE_GdbModifySurf.cpp b/EXE_GdbModifySurf.cpp index af7807e..e7ad8ba 100644 --- a/EXE_GdbModifySurf.cpp +++ b/EXE_GdbModifySurf.cpp @@ -28,7 +28,7 @@ #include "/EgtDev/Include/EGkSurfLocal.h" #include "/EgtDev/Include/EgkChainCurves.h" #include "/EgtDev/Include/EGkStmFromTriangleSoup.h" -#include "/EgtDev/Include/EGkCDSimpleSurfFrMove.h" +#include "/EgtDev/Include/EGkCAvSimpleSurfFrMove.h" #include "/EgtDev/Include/EGkIntersPlaneSurfTm.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EgtPointerOwner.h" @@ -375,7 +375,7 @@ ExeSurfFrMoveSimpleNoCollision( int nId1, int nId2, const Vector3d& vtDir, doubl // porto in locale alla prima superficie il versore di movimento Vector3d vtDirL = GetVectorLocal( pGeomDB, vtDir, nRefType, frSurf1) ; // calcolo massima lunghezza di traslazione della prima regione senza semplice collisione con la seconda - return ( bOk && CDSimpleSurfFrMove( *pSfr1, *pSfr2L).Translate( vtDirL, dLen)) ; + return ( bOk && CAvSimpleSurfFrMove( *pSfr1, *pSfr2L).Translate( vtDirL, dLen)) ; } //---------------------------------------------------------------------------- @@ -397,7 +397,7 @@ ExeSurfFrRotateSimpleNoCollision( int nId1, int nId2, const Point3d& ptCen, doub // porto in locale alla prima superficie il versore di movimento Point3d ptCenL = GetPointLocal( pGeomDB, ptCen, nRefType, frSurf1) ; // calcolo massimo angolo di rotazione della prima regione senza semplice collisione con la seconda - return ( bOk && CDSimpleSurfFrMove( *pSfr1, *pSfr2L).Rotate(ptCenL, dAngDeg)) ; + return ( bOk && CAvSimpleSurfFrMove( *pSfr1, *pSfr2L).Rotate(ptCenL, dAngDeg)) ; } //---------------------------------------------------------------------------- diff --git a/EXE_NstMachining.cpp b/EXE_NstMachining.cpp index 1791843..3007ea4 100644 --- a/EXE_NstMachining.cpp +++ b/EXE_NstMachining.cpp @@ -19,7 +19,7 @@ #include "EXE_Nst.h" #include "/EgtDev/Include/EXeExecutor.h" #include "/EgtDev/Include/EXeConst.h" -#include "/EgtDev/Include/EGkCDSimpleSurfFrMove.h" +#include "/EgtDev/Include/EGkCAvSimpleSurfFrMove.h" #include "/EgtDev/Include/EMkOperationConst.h" #include "/EgtDev/Include/EMkMachiningConst.h" #include "/EgtDev/Include/EMkMachiningGeoConst.h" diff --git a/EXE_NstPartNesting.cpp b/EXE_NstPartNesting.cpp index 97c25f7..66febe6 100644 --- a/EXE_NstPartNesting.cpp +++ b/EXE_NstPartNesting.cpp @@ -23,7 +23,7 @@ #include "/EgtDev/Include/EGkCurveComposite.h" #include "/EgtDev/Include/EgkDistPointCurve.h" #include "/EgtDev/Include/EGkSfrCreate.h" -#include "/EgtDev/Include/EGkCDSimpleSurfFrMove.h" +#include "/EgtDev/Include/EGkCAvSimpleSurfFrMove.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EMkMachiningGeoConst.h" #include "/EgtDev/Include/EGkIntervals.h" @@ -1201,7 +1201,7 @@ MySurfFrMoveSimpleNoCollision( int nId1, int nId2, const Vector3d& vtDir, double Vector3d vtDirL = vtDir ; vtDirL.ToLoc( frSurf1) ; // calcolo massima lunghezza di traslazione della prima regione senza semplice collisione con la seconda - CDSimpleSurfFrMove ScdSfrMove( *pSfr1, *pSfr2L) ; + CAvSimpleSurfFrMove ScdSfrMove( *pSfr1, *pSfr2L) ; bOk = bOk && ScdSfrMove.Translate( vtDirL, dLen) ; if ( bOk) { scInfo = ScdSfrMove.GetSCollInfo() ; diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 90a0813..976034a 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/EgtExecutor.vcxproj b/EgtExecutor.vcxproj index 7b2c4f9..fe5bdea 100644 --- a/EgtExecutor.vcxproj +++ b/EgtExecutor.vcxproj @@ -232,6 +232,7 @@ copy $(TargetPath) \EgtProg\Dll64 + @@ -271,6 +272,7 @@ copy $(TargetPath) \EgtProg\Dll64 + diff --git a/EgtExecutor.vcxproj.filters b/EgtExecutor.vcxproj.filters index 2f050e1..e98a6d1 100644 --- a/EgtExecutor.vcxproj.filters +++ b/EgtExecutor.vcxproj.filters @@ -314,6 +314,12 @@ File di origine\LUA + + File di origine\EXE + + + File di origine\LUA + diff --git a/LUA.h b/LUA.h index 64a985c..524683a 100644 --- a/LUA.h +++ b/LUA.h @@ -92,3 +92,7 @@ bool LuaInstallExchange( LuaMgr& luaMgr) ; //-------------------------- Shortest Path ----------------------------------- bool LuaInstallShortestPath( LuaMgr& luaMgr) ; + +//-------------------------- Collision Avoidance Tool ------------------------- +bool LuaInstallCAvTool( LuaMgr& luaMgr) ; + diff --git a/LUA_Base.cpp b/LUA_Base.cpp index c8e3e40..227039f 100644 --- a/LUA_Base.cpp +++ b/LUA_Base.cpp @@ -130,6 +130,10 @@ LuaInstallEgtFunctions( LuaMgr& LuaMgr) LOG_ERROR( GetLogger(), "Error in LuaInstallShortestPath (" __FUNCTION__ ")") return false ; } + if ( ! LuaInstallCAvTool( LuaMgr)) { + LOG_ERROR( GetLogger(), "Error in LuaInstallCAvTool (" __FUNCTION__ ")") + return false ; + } return true ; } diff --git a/LUA_CAvTool.cpp b/LUA_CAvTool.cpp new file mode 100644 index 0000000..034df5f --- /dev/null +++ b/LUA_CAvTool.cpp @@ -0,0 +1,61 @@ +//---------------------------------------------------------------------------- +// EgalTech 2018-2018 +//---------------------------------------------------------------------------- +// File : LUA_CAvTool.cpp Data : 28.04.18 Versione : 1.9e1 +// Contenuto : Funzioni per evitare collisioni utensile-superfici. +// +// +// +// Modifiche : 28.04.18 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +//--------------------------- Include ---------------------------------------- +#include "stdafx.h" +#include "LUA.h" +#include "/EgtDev/Include/EXeExecutor.h" +#include "/EgtDev/Include/EXeConst.h" +#include "/EgtDev/Include/EGkLuaAux.h" +#include "/EgtDev/Include/EgnStringUtils.h" + +using namespace std ; + +//------------------------------------------------------------------------------- +static int +LuaCAvToolStmPosition( lua_State* L) +{ + // 7 o 8 parametri : dToolLen, dToolDiam, dToolCornR, nSurfTmId, ptP, vtAx, vtMove [, nRefType] + double dToolLen ; + LuaCheckParam( L, 1, dToolLen) + double dToolDiam ; + LuaCheckParam( L, 2, dToolDiam) + double dToolCornR ; + LuaCheckParam( L, 3, dToolCornR) + int nSurfTmId ; + LuaCheckParam( L, 4, nSurfTmId) + Point3d ptP ; + LuaCheckParam( L, 5, ptP) + Vector3d vtAx ; + LuaCheckParam( L, 6, vtAx) + Vector3d vtMove ; + LuaCheckParam( L, 7, vtMove) + int nRefType = RTY_DEFAULT ; + LuaGetParam( L, 8, nRefType) ; + LuaClearStack( L) ; + // determino il movimento da dare all'utensile per evitare la collisione con la superficie + double dMove = ExeCAvToolStmPosition( dToolLen, dToolDiam, dToolCornR, nSurfTmId, + ptP, vtAx, vtMove, nRefType) ; + // restituisco il risultato + LuaSetParam( L, dMove) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +bool +LuaInstallCAvTool( LuaMgr& luaMgr) +{ + bool bOk = ( &luaMgr != nullptr) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCAvToolStmPosition", LuaCAvToolStmPosition) ; + return bOk ; +} diff --git a/LUA_GdbCreateSurf.cpp b/LUA_GdbCreateSurf.cpp index 7137511..7ff1f17 100644 --- a/LUA_GdbCreateSurf.cpp +++ b/LUA_GdbCreateSurf.cpp @@ -484,7 +484,7 @@ LuaCreateSurfTmByRevolve( lua_State* L) LuaCheckParam( L, 4, vtAx) bool bCapEnds ; LuaCheckParam( L, 5, bCapEnds) - double dLinTol = 0.1 ; + double dLinTol = LIN_TOL_DEF ; int nRefType = RTY_DEFAULT ; if ( LuaGetParam( L, 6, dLinTol)) LuaGetParam( L, 7, nRefType) ;