Files
EgtNumKernel/MachOptimization.h
T
Riccardo Elitropi afe4648575 EgtNumKernel :
- modifica prototipi in Machining Optimization.
2025-12-18 09:03:57 +01:00

88 lines
4.3 KiB
C++

//----------------------------------------------------------------------------
// 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<INTINTVECTOR>& matDep,
vector<INTINTVECTOR>& 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
} ;