diff --git a/Chiseling.cpp b/Chiseling.cpp index 97967fa..fb10684 100644 --- a/Chiseling.cpp +++ b/Chiseling.cpp @@ -588,14 +588,7 @@ Chiseling::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/Drilling.cpp b/Drilling.cpp index dfb43fd..79f84b4 100644 --- a/Drilling.cpp +++ b/Drilling.cpp @@ -607,14 +607,7 @@ Drilling::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index f6e423b..373ae00 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/GenMachining.cpp b/GenMachining.cpp index 084f81b..b99b083 100644 --- a/GenMachining.cpp +++ b/GenMachining.cpp @@ -629,14 +629,7 @@ GenMachining::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/Head.cpp b/Head.cpp index 0000ee6..3e9abae 100644 --- a/Head.cpp +++ b/Head.cpp @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2017 +// EgalTech 2015-2021 //---------------------------------------------------------------------------- -// File : Head.cpp Data : 11.01.17 Versione : 1.6x6 +// File : Head.cpp Data : 14.10.21 Versione : 2.3j5 // Contenuto : Oggetto testa per gruppo testa di macchina. // // @@ -122,6 +122,7 @@ Head::Set( const string& sName, int nType, int nExitCount, const string& sHSet, m_vsHSet.clear() ; m_vsHSet.push_back( sHSet) ; m_vtADir = vtADir ; + m_vtADir.Normalize() ; m_dRot1W = dRot1W ; m_Rot2Stroke = Rot2Stroke ; if ( IsValidHeadScc( nSolCh)) @@ -142,3 +143,12 @@ Head::AddHeadToHSet( const string& sHead) m_vsHSet.emplace_back( sHead) ; return true ; } + +//---------------------------------------------------------------------------- +bool +Head::ModifyHeadAuxDirection( const Vector3d& vtADir) +{ + m_vtADir = vtADir ; + m_vtADir.Normalize() ; + return true ; +} diff --git a/Head.h b/Head.h index 79df95c..72ff153 100644 --- a/Head.h +++ b/Head.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2015 +// EgalTech 2015-2021 //---------------------------------------------------------------------------- -// File : Head.h Data : 25.05.15 Versione : 1.6e7 +// File : Head.h Data : 14.10.21 Versione : 2.3j5 // Contenuto : Dichiarazione della classe Head. // // @@ -34,6 +34,7 @@ class Head : public IUserObj const Vector3d& vtADir, double dRot1W, const STROKE& Rot2Stroke, int nSolCh, const STRVECTOR& vsOthColl) ; bool AddHeadToHSet( const std::string& sHead) ; + bool ModifyHeadAuxDirection( const Vector3d& vtADir) ; const std::string& GetName( void) const { return m_sName ; } int GetType( void) const diff --git a/Machine.cpp b/Machine.cpp index 7c1072b..061e13a 100644 --- a/Machine.cpp +++ b/Machine.cpp @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2015 +// EgalTech 2015-2021 //---------------------------------------------------------------------------- -// File : Machine.cpp Data : 06.05.15 Versione : 1.6e3 +// File : Machine.cpp Data : 14.10.21 Versione : 2.3j5 // Contenuto : Implementazione gestione macchina. // // @@ -801,6 +801,22 @@ Machine::EnableHeadInSet( const string& sHead) return true ; } +//---------------------------------------------------------------------------- +bool +Machine::ModifyMachineHeadAuxDirection( const string& sHead, const Vector3d& vtADir) +{ + // controllo GeomDB + if ( m_pGeomDB == nullptr) + return false ; + // recupero testa + int nHeadId = GetGroup( sHead) ; + Head* pHead = GetHead( nHeadId) ; + if ( pHead == nullptr) + return false ; + // eseguo la modifica + return pHead->ModifyHeadAuxDirection( vtADir) ; +} + //---------------------------------------------------------------------------- bool Machine::AdjustExitFrames( int nLay, const MUEXITVECTOR& vMuExit, const Vector3d& vtADir) diff --git a/Machine.h b/Machine.h index ec80b37..bde783f 100644 --- a/Machine.h +++ b/Machine.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2015 +// EgalTech 2015-2021 //---------------------------------------------------------------------------- -// File : Machine.h Data : 06.05.15 Versione : 1.6e3 +// File : Machine.h Data : 14.10.21 Versione : 2.3j5 // Contenuto : Dichiarazione della classe Machine. // // @@ -230,6 +230,7 @@ class Machine const STRVECTOR& GetHSet( const std::string& sHead) const ; bool EnableHeadInSet( const std::string& sHead) ; bool LoadTool( Exit* pExit, const std::string& sTool) ; + bool ModifyMachineHeadAuxDirection( const std::string& sHead, const Vector3d& vtADir) ; bool AdjustExitFrames( int nLay, const MUEXITVECTOR& vMuExit, const Vector3d& vtADir) ; bool CreateExitGroups( int nLay, const MUEXITVECTOR& vMuExit) ; bool ModifyMachineExitPosition( const std::string& sHead, int nExit, const Point3d& ptPos) ; @@ -310,6 +311,7 @@ class Machine static int LuaEmtModifyAxisDirection( lua_State* L) ; static int LuaEmtModifyAxisStroke( lua_State* L) ; static int LuaEmtModifyAxisHome( lua_State* L) ; + static int LuaEmtModifyHeadAuxDirection( lua_State* L) ; static int LuaEmtModifyExitPosition( lua_State* L) ; static int LuaEmtAddRapidStart( lua_State* L) ; static int LuaEmtAddRapidMove( lua_State* L) ; diff --git a/MachineLua.cpp b/MachineLua.cpp index e8808f1..4e930d5 100644 --- a/MachineLua.cpp +++ b/MachineLua.cpp @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2020 +// EgalTech 2015-2021 //---------------------------------------------------------------------------- -// File : MachineLua.cpp Data : 26.04.20 Versione : 2.2d4 +// File : MachineLua.cpp Data : 14.10.21 Versione : 2.3j5 // Contenuto : Implementazione gestione macchina : funzioni Lua. // // @@ -93,6 +93,7 @@ Machine::LuaInit( const string& sMachineName) m_LuaMgr.RegisterFunction( "EmtModifyAxisDirection", Machine::LuaEmtModifyAxisDirection) ; m_LuaMgr.RegisterFunction( "EmtModifyAxisStroke", Machine::LuaEmtModifyAxisStroke) ; m_LuaMgr.RegisterFunction( "EmtModifyAxisHome", Machine::LuaEmtModifyAxisHome) ; + m_LuaMgr.RegisterFunction( "EmtModifyHeadAuxDirection", Machine::LuaEmtModifyHeadAuxDirection) ; m_LuaMgr.RegisterFunction( "EmtModifyExitPosition", Machine::LuaEmtModifyExitPosition) ; m_LuaMgr.RegisterFunction( "EmtLinkRawPartToGroup", Machine::LuaEmtLinkRawPartToGroup) ; m_LuaMgr.RegisterFunction( "EmtUnlinkRawPartFromGroup", Machine::LuaEmtUnlinkRawPartFromGroup) ; @@ -903,6 +904,26 @@ Machine::LuaEmtModifyAxisHome( lua_State* L) return 1 ; } +//---------------------------------------------------------------------------- +int +Machine::LuaEmtModifyHeadAuxDirection( lua_State* L) +{ + // 2 parametri : sHead, vtADir + string sHead ; + LuaCheckParam( L, 1, sHead) + Vector3d vtADir ; + LuaCheckParam( L, 2, vtADir) + LuaClearStack( L) ; + // verifico ci sia una macchina attiva + if ( m_pMchLua == nullptr) + return luaL_error( L, " Unknown Machine") ; + // modifico la direzione ausiliaria della testa + bool bOk = m_pMchLua->ModifyMachineHeadAuxDirection( sHead, vtADir) ; + // assegno risultato + LuaSetParam( L, bOk) ; + return 1 ; +} + //---------------------------------------------------------------------------- int Machine::LuaEmtModifyExitPosition( lua_State* L) diff --git a/Milling.cpp b/Milling.cpp index 332fee6..7ec3924 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -823,14 +823,7 @@ Milling::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; @@ -3834,9 +3827,10 @@ Milling::AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d& case MILL_LO_AS_LI : /* resta inalterato */ ; break ; default : nType = MILL_LI_NONE ; break ; } - if ( m_Params.m_nLeadOutType != MILL_LO_AS_LI) + if ( m_Params.m_nLeadOutType != MILL_LO_AS_LI) { dTang = m_Params.m_dLoTang ; dPerp = m_Params.m_dLoPerp ; + } } } // senso di rotazione da dir tg a dir esterna diff --git a/Mortising.cpp b/Mortising.cpp index 94b6119..98b9a89 100644 --- a/Mortising.cpp +++ b/Mortising.cpp @@ -627,14 +627,7 @@ Mortising::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/Operation.cpp b/Operation.cpp index ebe96f1..d99ea44 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1209,6 +1209,49 @@ Operation::ExtractHint( const string& sNotes) const return ExtractInfo( sNotes, "Hint:") ; } +//---------------------------------------------------------------------------- +bool +Operation::SetBlockedRotAxis( const string& sBlockedAxis) const +{ + if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) + return false ; + // cancello bloccaggio attuale + m_pMchMgr->ClearRotAxisBlock() ; + // se non ci sono bloccaggi, esco + if ( sBlockedAxis.empty()) + return true ; + // recupero token/nome asse e valore + string sKey, sVal ; + Split( sBlockedAxis, "=", true, sKey, sVal) ; + if ( sKey.empty() || sVal.empty()) + return true ; + double dVal = 0 ; + if ( ! FromString( sVal, dVal)) + return true ; + // imposto l'utensile per i calcoli macchina + if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr())) + return false ; + // recupero numero assi lineari e rotanti correnti + int nLinAxes = m_pMchMgr->GetCurrLinAxes() ; + int nRotAxes = m_pMchMgr->GetCurrRotAxes() ; + // lo cerco tra i token degli assi rotanti correnti + bool bFound = false ; + for ( int i = 0 ; i < nRotAxes && ! bFound ; ++ i) { + string sAxToken ; + if ( m_pMchMgr->GetCurrMachine()->GetCurrAxisToken( i + nLinAxes, sAxToken) && + sKey == Trim( sAxToken)) { + string sAxis ; + m_pMchMgr->GetCurrMachine()->GetCurrAxisName( i + nLinAxes, sAxis) ; + m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; + bFound = true ; + } + } + if ( bFound) + return true ; + // lo cerco tra gli assi rotanti della macchina + return m_pMchMgr->SetRotAxisBlock( sKey, dVal) ; +} + //---------------------------------------------------------------------------- bool Operation::CalculateAxesValues( const string& sHint, bool bSolChExact) @@ -1267,7 +1310,7 @@ Operation::CalculateAxesValues( const string& sHint, bool bSolChExact) if ( ! sHint.empty()) { STRVECTOR vsTok ; Tokenize( sHint, ",;", vsTok) ; - for (const auto& sTok : vsTok) { + for ( const auto& sTok : vsTok) { string szKey, szVal ; Split( sTok, "=", true, szKey, szVal) ; Trim( szKey) ; diff --git a/Operation.h b/Operation.h index 27f468d..3a65767 100644 --- a/Operation.h +++ b/Operation.h @@ -99,6 +99,7 @@ class Operation : public IUserObj bool GetClPathFinalAxesValues( int nClPathId, bool bSkipRise, DBLVECTOR& vAxVal) const ; std::string ExtractInfo( const std::string& sNotes, const std::string& sKey) const ; std::string ExtractHint( const std::string& sNotes) const ; + bool SetBlockedRotAxis( const std::string& sBlockedAxis) const ; bool CalculateAxesValues( const std::string& sHint, bool bSolChExact = false) ; bool CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes, double dRot1W, double dAngDeltaMinForHome, const DBLVECTOR& vAxRotHome, DBLVECTOR& vAxRotPrec, int& nOutStrC) ; diff --git a/Pocketing.cpp b/Pocketing.cpp index 9c20002..c794e12 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -687,14 +687,7 @@ Pocketing::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/SawFinishing.cpp b/SawFinishing.cpp index 87d84fd..70ab75f 100644 --- a/SawFinishing.cpp +++ b/SawFinishing.cpp @@ -600,14 +600,7 @@ SawFinishing::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/SawRoughing.cpp b/SawRoughing.cpp index 8f16025..f96a0ed 100644 --- a/SawRoughing.cpp +++ b/SawRoughing.cpp @@ -564,14 +564,7 @@ SawRoughing::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/Sawing.cpp b/Sawing.cpp index fd70fcf..a92b0da 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -735,14 +735,7 @@ Sawing::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/SurfFinishing.cpp b/SurfFinishing.cpp index 5d57601..b187f9f 100644 --- a/SurfFinishing.cpp +++ b/SurfFinishing.cpp @@ -593,14 +593,7 @@ SurfFinishing::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ; diff --git a/WaterJetting.cpp b/WaterJetting.cpp index c5dd2b4..907edfe 100644 --- a/WaterJetting.cpp +++ b/WaterJetting.cpp @@ -725,14 +725,7 @@ WaterJetting::Update( bool bPostApply) } // imposto eventuale asse bloccato da lavorazione - if ( ! m_Params.m_sBlockedAxis.empty()) { - string sAxis, sVal ; - Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ; - double dVal = 0 ; - FromString( sVal, dVal) ; - m_pMchMgr->ClearRotAxisBlock() ; - m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ; - } + SetBlockedRotAxis( m_Params.m_sBlockedAxis) ; // calcolo gli assi macchina string sHint = ExtractHint( m_Params.m_sUserNotes) ;