diff --git a/ENkMachOptimization.h b/ENkMachOptimization.h new file mode 100644 index 0000000..94fd718 --- /dev/null +++ b/ENkMachOptimization.h @@ -0,0 +1,111 @@ +//---------------------------------------------------------------------------- +// EgalTech 2025-2025 +//---------------------------------------------------------------------------- +// File : ENkMachOptimization.h Data : 31.03.25 Versione : 2.7a1 +// Contenuto : Classe per calcolo ottimizzato per le lavorazioni. +// +// +// Modifiche : 31.03.2025 RE Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EgtNumCollection.h" + +//----------------------- Macro per import/export ---------------------------- +#undef ENK_EXPORT +#if defined( I_AM_ENK) // da definirsi solo nella DLL + #define ENK_EXPORT __declspec( dllexport) +#else + #define ENK_EXPORT __declspec( dllimport) +#endif + +//---------------------------------------------------------------------------- + +// Definizione utensile +struct ToolOptm { + int nId ; // Id dell'utensile ( univoco) + + double dTCX ; // Coordinata cambio utensile per X + double dTCY ; // Coordinata cambio utensile per Y + double dTCZ ; // Coordinata cambio utensile per Z + double dTCA ; // Coordinata cambio utensile per A + double dTCB ; // Coordinata cambio utensile per B + double dTCC ; // Coordinata cambio utensile per C + + bool bTCX ; // Flag per condsiderare/scartare il controllo sulla coordinata X + bool bTCY ; // Flag per condsiderare/scartare il controllo sulla coordinata Y + bool bTCZ ; // Flag per condsiderare/scartare il controllo sulla coordinata Z + bool bTCA ; // Flag per condsiderare/scartare il controllo sulla coordinata A + bool bTCB ; // Flag per condsiderare/scartare il controllo sulla coordinata B + bool bTCC ; // Flag per condsiderare/scartare il controllo sulla coordinata C + + double dTLoad ; // Tempo di carico + double dTUnLoad ; // Tempo di scarico + + ToolOptm( int nI, double dX, double dY, double dZ, double dA, double dB, double dC, + bool bX, bool bY, bool bZ, bool bA, bool bB, bool bC, double dTL, double dTUL) : + nId( nI), dTCX( dX), dTCY( dY), dTCZ( dZ), dTCA( dA), dTCB( dB), dTCC( dC), + bTCX( bX), bTCY( bY), bTCZ( bZ), bTCA( bA), bTCB( bB), bTCC( bC), dTLoad( dTL), dTUnLoad( dTUL) {} +} ; +typedef std::vector TOOLOPTMVECTOR ; +typedef std::list TOOLOPTMLIST ; + +// Definizione strutta per singola lavorazione +struct MachOptm { + int nId ; // Id della lavorazione corrente + int nIdTool ; // Id dell'utensile corrente + int nGroup ; // Gruppo di appartenenza della lavorazione + + double dX_Start ; // Stato iniziale asse lineare X + double dY_Start ; // Stato iniziale asse lineare Y + double dZ_Start ; // Stato iniziale asse lineare Z + double dA_Start ; // Stato iniziale asse rotante A + double dB_Start ; // Stato iniziale asse rotante B + double dC_Start ; // Stato iniziale asse rotante C + + double dX_End ; // Stato finale asse lineare X + double dY_End ; // Stato finale asse lineare Y + double dZ_End ; // Stato finale asse lineare Z + double dA_End ; // Stato finale asse rotante A + double dB_End ; // Stato finale asse rotante B + double dC_End ; // Stato finale asse rotante C + + MachOptm( int nIdL, int nToolL, int nGroupL, + double dX_Start, double dY_Start, double dZ_Start, double dA_Start, double dB_Start, double dC_Start, + double dX_End, double dY_End, double dZ_End, double dA_End, double dB_End, double dC_End) : + nId( nIdL), nIdTool( nToolL), nGroup( nGroupL), + dX_Start( dX_Start), dY_Start( dY_Start), dZ_Start( dZ_Start), + dA_Start( dA_Start) , dB_Start( dB_Start), dC_Start( dC_Start), + dX_End( dX_End), dY_End( dY_End), dZ_End( dZ_End), + dA_End( dA_End), dB_End( dB_End), dC_End( dC_End) {} +} ; +typedef std::vector MACHOPTMVECTOR ; +typedef std::list MACHOPTMLIST ; + +//---------------------------------------------------------------------------- +class __declspec( novtable) IMachOptimization +{ + public : + virtual ~IMachOptimization( void) {} + virtual bool InsertTool( int nId, double dTCX, double dTCY, double dTCZ, double dTCA, + double dTCB, double dTCC, bool bX, bool bY, bool bZ, bool bA, + bool bB, bool bC, double dTLoad, double dTUnL) ; + virtual bool InsertMachining( int nId, int nToolId, int nGroup, + double dX_Start, double dY_Start, double dZ_Start, + double dA_Start, double dB_Start, double dC_Start, + double dX_End, double dY_End, double dZ_End, + double dA_End, double dB_End, double dC_End) = 0 ; + virtual bool InsertDependence( int nIdPrec, int nIdSucc) = 0 ; + virtual bool InsertSuggestedDependences( int nIdPrec, int nIdSucc) = 0 ; + virtual bool SetFirstMachining( int nId) = 0 ; + virtual bool SetLastMachining( int nId) = 0 ; + virtual bool SetFeeds( double dFeedL, double dFeedA) = 0 ; + virtual bool SetAllGroupsAsMandatory( bool bAllMandatory = false) = 0 ; + virtual bool GetResult( INTVECTOR& vIds) = 0 ; +} ; + +//----------------------------------------------------------------------------- +ENK_EXPORT IMachOptimization* CreateMachOptimization( void) ; \ No newline at end of file diff --git a/ENkShortestPath.h b/ENkShortestPath.h index cfdc3a8..2b74265 100644 --- a/ENkShortestPath.h +++ b/ENkShortestPath.h @@ -39,6 +39,9 @@ class __declspec( novtable) IShortestPath virtual bool Calculate( int nType) = 0 ; virtual bool GetOrder( INTVECTOR& vOrder) = 0 ; virtual bool GetMinLength( double& dMinLen) = 0 ; + virtual bool SetConstraintOrder( int nPrev, int nNext) = 0 ; + virtual bool SetSuggestedOrder( int nPrev, int nNext) = 0 ; + virtual bool SetDistMatrix( const INTMATRIX& mDistMatrix) = 0 ; public : enum SpType{ SP_NONE = 0, diff --git a/EXeExecutor.h b/EXeExecutor.h index 1461092..b6c02ef 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -994,6 +994,25 @@ EXE_EXPORT bool ExeAutoNestPrintResults( const std::string& sHtmlFile) ; EXE_EXPORT bool ExeAutoNestGetResults( int& nNestedParts, int& nParts, int& nSheets, int& nNestings, double& dTotFillRatio) ; EXE_EXPORT bool ExeAutoNestGetOneResult( int nInd, int& nType, int& nId, int& nFlag, double& dX, double& dY, double& dAngRot) ; +// Machining Order Optimization +EXE_EXPORT bool ExeOptMachInit( void) ; +EXE_EXPORT bool ExeOptMachTerminate( void) ; +EXE_EXPORT bool ExeOptMachAddTool( int nId, double dTCX, double dTCY, double dTCZ, double dTCA, + double dTCB, double dTCC, bool bX, bool bY, bool bZ, bool bA, + bool bB, bool bC, double dTLoad, double dTUnL) ; +EXE_EXPORT bool ExeOptMachAddMachining( int nId, int nToolId, int nGroup, + double dX_Start, double dY_Start, double dZ_Start, + double dA_Start, double dB_Start, double dC_Start, + double dX_End, double dY_End, double dZ_End, + double dA_End, double dB_End, double dC_End) ; +EXE_EXPORT bool ExeOptMachSetFirstMachining( int nId) ; +EXE_EXPORT bool ExeOptMachSetLastMachining( int nId) ; +EXE_EXPORT bool ExeOptMachSetFeeds( double dFeedL, double dFeedA) ; +EXE_EXPORT bool ExeOptMachAddDependence( int nIdPrec, int nIdSucc) ; +EXE_EXPORT bool ExeOptMachAddSuggestedDependence( int nIdPrec, int nIdSucc) ; +EXE_EXPORT bool ExeOptMachSetAllGroupDependencesAsMandatory( bool bAllMandatory) ; +EXE_EXPORT bool ExeOptMachGetResult( INTVECTOR& vIds) ; + // Collision Avoidance Tool SurfaceTriMesh EXE_EXPORT bool ExeCAvSetStdTool( double dToolLen, double dToolDiam, double dToolCornR) ; EXE_EXPORT bool ExeCAvSetAdvTool( double dToolLen, double dToolDiam, double dTipLen, double dTipDiam, double dToolCornR) ;