//---------------------------------------------------------------------------- // EgalTech 2025-2025 //---------------------------------------------------------------------------- // File : MachOptimization.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/ENkMachOptimization.h" using namespace std ; //---------------------------------------------------------------------------- class MachOptimization : public IMachOptimization { public : ~MachOptimization( void) override ; // Inserimento 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) override ; 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) override ; bool InsertDependence( int nIdPrec, int nIdNext) override ; bool InsertSuggestedDependences( int nIdPrec, int nIdNext) override ; // Impostazione parametri lavorazione bool SetFirstMachining( int nId) override ; bool SetLastMachining( int nId) override ; bool SetFeeds( double dFeedL, double dFeedA) override ; bool SetAllGroupsAsMandatory( bool bAllMandatory) override ; bool SetOptimizationForGroups( bool bOptForGroups) override ; bool SetOpenBound( bool bStartVsEnd, int nFlag, double dX, double dY, double dZ) override ; bool SetOpenBoundForGroups( int nGroup, bool bStartVsEnd, int nFlag, double dX, double dY, double dZ) override ; // Risultati bool Calculate( INTVECTOR& vIds) override ; public : MachOptimization( void) ; private : // Calcolo dei tempi tra le lavorazioni double CalcTimeLavLav( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin) const ; bool CalcTimeLavLavTC( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin, double& dTimeLav1TC1, double& dTimeTC1TC2, double& dTimeTC2Lav2, double& dTUnload1, double& dTLoad2) const ; bool CalcMachTime( int nInd1, int nInd2, int& nTime) const ; bool CalcMachTime( const MachOptm& Lav1, const MachOptm& Lav2, int& nTime) const ; // Controllo Conflitti tra dipendenze e Gestione Dipendenze bool CheckDependences( int nIdPrev, int nIdNext, const INTINTVECTOR& vDep, bool bBlockMessages, bool& bExist, bool& bConflict) const ; bool SetGroupDependences( void) ; // Calcolo della Matrice dei tempi, Del fattore perso dipendenze suggerite e della soluzione ottimale bool ComputeTimeMatrix( INTMATRIX& mTimes) const ; // Calcolo dei risultati a seconda della modalità bool GetGlobalResult( INTVECTOR& vIds) ; bool GetGroupResult( INTVECTOR& vIds) ; // Utility int GetIndById( int nId) const ; bool SplitMachOptsInGroups( MACHOPTMMATRIX& matMachOpt, vector& matDep, vector& matSuggDep) ; private : MACHOPTMVECTOR m_vMachOptm ; // Vettore delle lavorazioni TOOLOPTMVECTOR m_vToolOptm ; // Vettore degli utensili INTINTVECTOR m_vDependences ; // Vettore di dipendenze ( IdPrev, IdSucc) -> deve essere rispettato INTINTVECTOR m_vSuggDependences ; // Vettore delle dipendenze suggerite ( IdPrev, IdSucc) -> si cerca di rispettarle double m_dFeedL ; // Feed Lineare double m_dFeedA ; // Feed Angolare bool m_bAllMandatory ; // Flag per impostare ogni dipendenza da Gruppo come vincolo bool m_bOptInGroup ; // Flag per ottimizzazione solo interna ai gruppi MACHOPTOPENBOUNDVECTOR m_vOpenBounds ; // Vettore dei punti OpenBound } ;