//---------------------------------------------------------------------------- // 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" //---------------------------------------------------------------------------- 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 ; // Risultati bool GetResult( INTVECTOR& vIds) override ; public : MachOptimization( void) ; private : // Calcolo dei tempi tra le lavorazioni double CalcTimeLavLav( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin) ; bool CalcTimeLavLavTC( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin, double& dTimeLav1TC1, double& dTimeTC1TC2, double& dTimeTC2Lav2, double& dTUnload1, double& dTLoad2) ; bool CalcMachTime( int nInd1, int nInd2, int& nTime) ; // Controllo Conflitti tra dipendenze e Gestione Dipendenze bool CheckDependences( int nIdPrev, int nIdNext, const INTINTVECTOR& vDep, bool bBlockMessages, bool& bExist, bool& bConflict) ; bool SetGroupDependences( void) ; // Calcolo della Matrice dei tempi, Del fattore perso dipendenze suggerite e della soluzione ottimale bool ComputeTimeMatrix( INTMATRIX& mTimes) ; // Utility int GetIndById( int nId) ; 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 } ;