diff --git a/Drilling.cpp b/Drilling.cpp index 5570995..ce48a15 100644 --- a/Drilling.cpp +++ b/Drilling.cpp @@ -727,9 +727,10 @@ Drilling::StandardProcess( bool bRecalc, int nPvId, int nClId) if ( ! m_pMchMgr->GetCurrMachine()->GetCurrHead( sCurrHead)) return false ; int nExitCnt = m_pMchMgr->GetCurrMachine()->GetHeadExitCount( sCurrHead) ; + int nSelectType = m_pMchMgr->GetCurrMachine()->GetHeadSelectType( sCurrHead) ; bool bAggrBottom = IsAggrBottom( sCurrHead) ; - // se ho pių uscite e non č aggregato da sotto ... - if ( nExitCnt > 1 && ! bAggrBottom) { + // se ho pių uscite fisse e non č aggregato da sotto ... + if ( nExitCnt > 1 && nSelectType == MCH_SLT_FIXEDEXITS && ! bAggrBottom) { TABMHDRILL tabDrills ; double dMHOff = 0 ; if ( ! MultiHeadDrilling( nExitCnt, m_vId, nClId, tabDrills, dMHOff)) diff --git a/Head.cpp b/Head.cpp index 0d1f37e..1fb614f 100644 --- a/Head.cpp +++ b/Head.cpp @@ -103,7 +103,7 @@ Head::GetGeomDB( void) const //---------------------------------------------------------------------------- Head::Head( void) : m_nOwnerId( GDB_ID_NULL), m_pGeomDB( nullptr), m_nType( MCH_HT_NONE), m_nExitCount( 0), - m_dRot1W( 1), m_bMaxDeltaR2On1( true), m_nSolCh( MCH_SCC_NONE) + m_nSelectType( MCH_SLT_FIXEDEXITS), m_dRot1W( 1), m_bMaxDeltaR2On1( true), m_nSolCh( MCH_SCC_NONE) { m_Rot2Stroke.Min = - INFINITO ; m_Rot2Stroke.Max = INFINITO ; @@ -111,7 +111,7 @@ Head::Head( void) //---------------------------------------------------------------------------- bool -Head::Set( const string& sName, int nType, int nExitCount, const string& sHSet, const Vector3d& vtADir, +Head::Set( const string& sName, int nType, int nExitCount, const string& sHSet, int nSelectType, const Vector3d& vtADir, double dRot1W, bool bMaxDeltaR2On1, const STROKE& Rot2Stroke, int nSolCh, const STRVECTOR& vsOthColl) { m_sName = sName ; @@ -122,6 +122,10 @@ Head::Set( const string& sName, int nType, int nExitCount, const string& sHSet, m_nExitCount = 1 ; m_vsHSet.clear() ; m_vsHSet.push_back( sHSet) ; + if ( nSelectType == MCH_SLT_FIXEDEXITS || nSelectType == MCH_SLT_ONEEXIT || nSelectType == MCH_SLT_MULTIEXITS) + m_nSelectType = nSelectType ; + else + m_nSelectType = MCH_SLT_FIXEDEXITS ; m_vtADir = vtADir ; m_vtADir.Normalize() ; m_dRot1W = dRot1W ; diff --git a/Head.h b/Head.h index 072027a..5ce6fea 100644 --- a/Head.h +++ b/Head.h @@ -30,7 +30,7 @@ class Head : public IUserObj public : Head( void) ; - bool Set( const std::string& sName, int nType, int nExitCount, const std::string& sHSet, + bool Set( const std::string& sName, int nType, int nExitCount, const std::string& sHSet, int nSelectType, const Vector3d& vtADir, double dRot1W, bool bMaxDeltaR2On1, const STROKE& Rot2Stroke, int nSolCh, const STRVECTOR& vsOthColl) ; bool AddHeadToHSet( const std::string& sHead) ; @@ -43,6 +43,8 @@ class Head : public IUserObj { return m_nExitCount ; } const STRVECTOR& GetHSet(void) const { return m_vsHSet ; } + int GetSelectType( void) const + { return m_nSelectType ; } const Vector3d& GetADir( void) const { return m_vtADir ; } double GetRot1W( void) const @@ -63,6 +65,7 @@ class Head : public IUserObj int m_nType ; int m_nExitCount ; STRVECTOR m_vsHSet ; + int m_nSelectType ; Vector3d m_vtADir ; double m_dRot1W ; bool m_bMaxDeltaR2On1 ; diff --git a/Machine.cpp b/Machine.cpp index be64455..7e33bb0 100644 --- a/Machine.cpp +++ b/Machine.cpp @@ -544,7 +544,7 @@ Machine::LoadMachineStdHead( const string& sName, const string& sParent, const s Head* pHead = new(nothrow) Head ; if ( pHead == nullptr) return false ; - pHead->Set( sName, MCH_HT_STD, 1, sHSet, vtADir, dRot1W, bMaxDeltaR2On1, Rot2Stroke, nSolCh, vsOthColl) ; + pHead->Set( sName, MCH_HT_STD, 1, sHSet, 0, vtADir, dRot1W, bMaxDeltaR2On1, Rot2Stroke, nSolCh, vsOthColl) ; m_pGeomDB->SetUserObj( nLay, pHead) ; // aggiorno la testa capostipite if ( ! AddHeadToSet( sHSet, sName)) @@ -564,7 +564,7 @@ Machine::LoadMachineStdHead( const string& sName, const string& sParent, const s //---------------------------------------------------------------------------- bool Machine::LoadMachineMultiHead( const string& sName, const string& sParent, const string& sHSet, - const MUEXITVECTOR& vMuExit, const Vector3d& vtADir, + int nSelectType, const MUEXITVECTOR& vMuExit, const Vector3d& vtADir, double dRot1W, bool bMaxDeltaR2On1, const STROKE& Rot2Stroke, int nSolCh, const STRVECTOR& vsOthColl, const string& sGeo, const STRVECTOR& vsAux) { @@ -593,7 +593,8 @@ Machine::LoadMachineMultiHead( const string& sName, const string& sParent, const Head* pHead = new(nothrow) Head ; if ( pHead == nullptr) return false ; - pHead->Set( sName, MCH_HT_MULTI, int( vMuExit.size()), sHSet, vtADir, dRot1W, bMaxDeltaR2On1, Rot2Stroke, nSolCh, vsOthColl) ; + pHead->Set( sName, MCH_HT_MULTI, int( vMuExit.size()), sHSet, nSelectType, + vtADir, dRot1W, bMaxDeltaR2On1, Rot2Stroke, nSolCh, vsOthColl) ; m_pGeomDB->SetUserObj( nLay, pHead) ; // aggiorno la testa capostipite if ( ! AddHeadToSet( sHSet, sName)) @@ -640,7 +641,7 @@ Machine::LoadMachineSpecialHead( const string& sName, const string& sParent, con Head* pHead = new(nothrow) Head ; if ( pHead == nullptr) return false ; - pHead->Set( sName, MCH_HT_SPECIAL, 1, sHSet, vtADir, dRot1W, bMaxDeltaR2On1, Rot2Stroke, nSolCh, vsOthColl) ; + pHead->Set( sName, MCH_HT_SPECIAL, 1, sHSet, 0, vtADir, dRot1W, bMaxDeltaR2On1, Rot2Stroke, nSolCh, vsOthColl) ; m_pGeomDB->SetUserObj( nLay, pHead) ; // aggiorno la testa capostipite if ( ! AddHeadToSet( sHSet, sName)) diff --git a/Machine.h b/Machine.h index 5d4742d..7159d24 100644 --- a/Machine.h +++ b/Machine.h @@ -67,6 +67,7 @@ class Machine int GetHeadExitCount( const std::string& sHead) const ; int GetHeadExitPosDirAux( const std::string& sHead, int nExit, Point3d& ptPos, Vector3d& vtDir, Vector3d& vtAux) const ; int GetHeadSolCh( const std::string& sHead) const ; + int GetHeadSelectType(const std::string& sHead) const ; double GetAngDeltaMinForHome( void) const { return m_dAngDeltaMinForHome ; } bool LoadTool( const std::string& sHead, int nExit, const std::string& sTool) ; @@ -208,7 +209,7 @@ class Machine double dRot1W, bool bMaxDeltaR2On1, const STROKE& Rot2Stroke, int nSolCh, const STRVECTOR& vsOthColl, const std::string& sGeo, const STRVECTOR& vsAux) ; bool LoadMachineMultiHead( const std::string& sName, const std::string& sParent, const std::string& sHSet, - const MUEXITVECTOR& vMuExit, const Vector3d& vtADir, + int nSelectType, const MUEXITVECTOR& vMuExit, const Vector3d& vtADir, double dRot1W, bool bMaxDeltaR2On1, const STROKE& Rot2Stroke, int nSolCh, const STRVECTOR& vsOthColl, const std::string& sGeo, const STRVECTOR& vsAux) ; bool LoadMachineSpecialHead( const std::string& sName, const std::string& sParent, const std::string& sHSet, diff --git a/MachineHeads.cpp b/MachineHeads.cpp index 565f8bb..edcc83b 100644 --- a/MachineHeads.cpp +++ b/MachineHeads.cpp @@ -98,6 +98,18 @@ Machine::GetHeadSolCh( const string& sHead) const return pHead->GetSolCh() ; } +//---------------------------------------------------------------------------- +int +Machine::GetHeadSelectType( const string& sHead) const +{ + // recupero testa + Head* pHead = GetHead( GetGroup( sHead)) ; + if ( pHead == nullptr) + return MCH_SCC_NONE ; + // recupero tipo di selezione delle uscite della testa + return pHead->GetSelectType() ; +} + //---------------------------------------------------------------------------- bool Machine::LoadTool( const string& sHead, int nExit, const string& sTool) diff --git a/MachineLua.cpp b/MachineLua.cpp index cbe8ff1..4699442 100644 --- a/MachineLua.cpp +++ b/MachineLua.cpp @@ -51,6 +51,7 @@ static const string FLD_STROKE = "Stroke" ; static const string FLD_HOME = "Home" ; static const string FLD_ADJUSTAUX = "AdjustAux" ; static const string FLD_HSET = "HSet" ; +static const string FLD_SEL_TYPE = "SelType" ; static const string FLD_TDIR = "TDir" ; static const string FLD_ADIR = "ADir" ; static const string FLD_ROT1W = "Rot1W" ; @@ -660,6 +661,9 @@ Machine::LuaEmtMultiHead( lua_State* L) // lettura campo 'HSet' dalla tabella string sHSet ; LuaCheckTabFieldParam( L, 1, FLD_HSET, sHSet) + // lettura eventuale campo tipo di selezione ammessa per le uscite + int nSelectType = MCH_SLT_FIXEDEXITS ; + LuaGetTabFieldParam( L, 1, FLD_SEL_TYPE, nSelectType) ; // lettura campo 'ExitNbr' dalla tabella int nExitNbr ; LuaCheckTabFieldParam( L, 1, FLD_EXIT_NBR, nExitNbr) @@ -712,7 +716,7 @@ Machine::LuaEmtMultiHead( lua_State* L) return luaL_error( L, " Unknown Machine") ; // carico i dati della testa multipla - if ( ! m_pMchLua->LoadMachineMultiHead( sName, sParent, sHSet, vMuExit, vtADir, + if ( ! m_pMchLua->LoadMachineMultiHead( sName, sParent, sHSet, nSelectType, vMuExit, vtADir, dRot1W, bMaxDeltaR2On1, Rot2Stroke, nSolCh, vsOthColl, sGeo, vsAux)) return luaL_error( L, " Load Machine Multi Head failed") ; diff --git a/MachineStruConst.h b/MachineStruConst.h index bbd3f5d..f35562d 100644 --- a/MachineStruConst.h +++ b/MachineStruConst.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2015 +// EgalTech 2015-2024 //---------------------------------------------------------------------------- -// File : MachineStruConst.h Data : 25.05.15 Versione : 1.6e7 +// File : MachineStruConst.h Data : 15.01.24 Versione : 2.5l6 // Contenuto : Strutture e costanti di macchina. // // @@ -88,6 +88,12 @@ enum MchHeadType { MCH_HT_NONE = 0, MCH_HT_MULTI = 2, MCH_HT_SPECIAL = 3} ; +//---------------------------------------------------------------------------- +// Tipo di selezione ammessa per le uscite +enum MchSelType { MCH_SLT_FIXEDEXITS = 0, + MCH_SLT_ONEEXIT = 1, + MCH_SLT_MULTIEXITS = 2} ; + //---------------------------------------------------------------------------- // Identificativo iniziale riferimenti di tavola const std::string MCH_TREF = "R" ;