EgtMachKernel :
- aggiustamenti per lavorazioni in doppio.
This commit is contained in:
+32
-4
@@ -692,16 +692,16 @@ Drilling::Apply( bool bRecalc, bool bPostApply)
|
||||
// assegno ingombri dei vari percorsi di lavorazione e della lavorazione nel suo complesso
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// se lavorazione in doppio, aggiungo geometria della parte simmetrica
|
||||
if ( ! CalcMirrorByDouble( nClId, m_Params.m_sUserNotes)) {
|
||||
m_pMchMgr->SetLastError( 2115, "Error in Drilling : Mirror for Double calculation failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
@@ -758,6 +758,34 @@ Drilling::Update( bool bPostApply)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se lavorazione in doppio, calcolo assi e movimenti di approccio e retrazione relativi
|
||||
if ( GetDoubleType( m_Params.m_sUserNotes) != 0) {
|
||||
// elimino le entità CLIMB, RISE e HOME della lavorazione in doppio
|
||||
RemoveClimbRiseHome( false) ;
|
||||
// recupero i dati della testa in doppio e la imposto
|
||||
string sDblTool ; string sDblHead ; int nDblExit ;
|
||||
bool bOk = GetDoubleToolData( sDblTool, sDblHead, nDblExit) &&
|
||||
m_pMchMgr->SetCalcTool( sDblTool, sDblHead, nDblExit) ;
|
||||
// imposto eventuale asse bloccato da lavorazione
|
||||
SetBlockedRotAxis( m_Params.m_sBlockedAxis, true) ;
|
||||
// eseguo il calcolo
|
||||
if ( bOk) {
|
||||
if ( ! CalculateDoubleAxesValues( sHint)) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2109, "Error in Drilling : axes values not calculable for double") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2110, "Error in Drilling : double outstroke ") ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
// ripristino testa principale
|
||||
m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
|
||||
// in caso di errore, esco
|
||||
if ( ! bOk)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// esecuzione eventuali personalizzazioni
|
||||
string sErr ;
|
||||
if ( bPostApply && ! PostApply( sErr)) {
|
||||
|
||||
+28
-34
@@ -392,34 +392,32 @@ Machining::ToolPreview( int nEntId, int nStep) const
|
||||
return nEntId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Machining::GetDoubleType( const string& sUserNotes)
|
||||
{
|
||||
int nDouble ;
|
||||
if ( ! GetValInNotes( sUserNotes, UN_DOUBLE, nDouble) ||
|
||||
( nDouble != 1 && nDouble != 2 && nDouble != 3))
|
||||
return 0 ;
|
||||
else
|
||||
return nDouble ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machining::CalcMirrorByDouble( int nClId, const string& sUserNotes)
|
||||
Machining::GetDoubleToolData( string& sDblTool, string& sDblHead, int& nDblExit)
|
||||
{
|
||||
if ( m_pGeomDB == nullptr || m_pMchMgr == nullptr)
|
||||
return false ;
|
||||
// recupero macchina corrente
|
||||
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
// recupero il gestore DB utensili della macchina corrente
|
||||
ToolsMgr* pTMgr = m_pMchMgr->GetCurrToolsMgr() ;
|
||||
if ( pTMgr == nullptr)
|
||||
return false ;
|
||||
|
||||
// verifico se prevista lavorazione in doppio
|
||||
int nDouble ;
|
||||
if ( ! GetValInNotes( sUserNotes, UN_DOUBLE, nDouble) ||
|
||||
( nDouble != 1 && nDouble != 2 && nDouble != 3))
|
||||
return true ;
|
||||
// recupero dati utensile principale
|
||||
string sMainTool ; string sMainHead ; int nMainExit ;
|
||||
if ( ! pMch->GetCurrTool( sMainTool) || ! pMch->GetCurrHead( sMainHead) || ! pMch->GetCurrExit( nMainExit))
|
||||
return false ;
|
||||
// recupero dati utensile in doppio
|
||||
string sDblTool ; string sDblHead ; int nDblExit ; string sDblTcPos ;
|
||||
if ( ! GetValInNotes( GetToolData().m_sUserNotes, "DOUBLE", sDblTool))
|
||||
return false ;
|
||||
string sDblTcPos ;
|
||||
if ( ! m_pMchMgr->GetCurrSetupMgr().GetToolData( sDblTool, sDblTcPos, sDblHead, nDblExit)) {
|
||||
const ToolData* pTdata = pTMgr->GetTool( sDblTool) ;
|
||||
if ( pTdata == nullptr)
|
||||
@@ -427,6 +425,20 @@ Machining::CalcMirrorByDouble( int nClId, const string& sUserNotes)
|
||||
sDblHead = pTdata->m_sHead ;
|
||||
nDblExit = pTdata->m_nExit ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machining::CalcMirrorByDouble( int nClId, const string& sUserNotes)
|
||||
{
|
||||
if ( m_pGeomDB == nullptr || m_pMchMgr == nullptr)
|
||||
return false ;
|
||||
|
||||
// verifico se prevista lavorazione in doppio
|
||||
int nDouble = GetDoubleType( sUserNotes) ;
|
||||
if ( nDouble == 0)
|
||||
return true ;
|
||||
|
||||
// assegno Id entità originali
|
||||
int nPathId = m_pGeomDB->GetFirstNameInGroup( nClId, MCH_PATH + "*") ;
|
||||
@@ -499,24 +511,6 @@ Machining::CalcMirrorByDouble( int nClId, const string& sUserNotes)
|
||||
if ( GetValInNotes( sUserNotes, UN_DELTAZ, dDeltaZ) && abs( dDeltaZ) > EPS_SMALL)
|
||||
m_pGeomDB->TranslateGlob( nDblId, Vector3d( 0, 0, dDeltaZ)) ;
|
||||
|
||||
// elimino approcci e retrazioni (CLIMB e RISE)
|
||||
RemoveClimbRiseHome( false) ;
|
||||
|
||||
// imposto testa in doppio
|
||||
if ( ! pMch->SetCurrTool( sDblTool, sDblHead, nDblExit))
|
||||
return false ;
|
||||
|
||||
// calcolo gli assi macchina
|
||||
string sHint = ExtractHint( sUserNotes) ;
|
||||
string sInitAngs ;
|
||||
if ( GetParam( MPA_INITANGS, sInitAngs) && ! sInitAngs.empty())
|
||||
sHint = sInitAngs ;
|
||||
if ( ! CalculateDoubleAxesValues( sHint))
|
||||
return false ;
|
||||
|
||||
// ripristino testa principale
|
||||
pMch->SetCurrTool( sMainTool, sMainHead, nMainExit) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -53,12 +53,14 @@ class Machining : public Operation
|
||||
bool RemoveToolPreview( void) const ;
|
||||
int GetToolPreviewStepCount( void) const ;
|
||||
int ToolPreview( int nEntId, int nStep) const ;
|
||||
bool CalcMirrorByDouble( int nClId, const std::string& sUserNotes) ;
|
||||
bool ActivateDrillingUnit( int nHeadId, const INTVECTOR& vActExit) const ;
|
||||
|
||||
protected :
|
||||
Machining( void) ;
|
||||
bool PostApply( std::string& sErr) ;
|
||||
int GetDoubleType( const std::string& sUserNotes) ;
|
||||
bool GetDoubleToolData( std::string& sDblTool, std::string& sDblHead, int& nDblExit) ;
|
||||
bool CalcMirrorByDouble( int nClId, const std::string& sUserNotes) ;
|
||||
bool ActivateDrillingUnit( int nHeadId, const INTVECTOR& vActExit) const ;
|
||||
|
||||
private :
|
||||
int GetToolPreviewNext( int nEntId, int nParentId, int nStId) const ;
|
||||
|
||||
+32
-4
@@ -850,16 +850,16 @@ Milling::Apply( bool bRecalc, bool bPostApply)
|
||||
// assegno ingombri dei vari percorsi di lavorazione e della lavorazione nel suo complesso
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// se lavorazione in doppio, aggiungo geometria della parte simmetrica
|
||||
if ( ! CalcMirrorByDouble( nClId, m_Params.m_sUserNotes)) {
|
||||
m_pMchMgr->SetLastError( 2325, "Error in Milling : Mirror for Double calculation failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
@@ -916,6 +916,34 @@ Milling::Update( bool bPostApply)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se lavorazione in doppio, calcolo assi e movimenti di approccio e retrazione relativi
|
||||
if ( GetDoubleType( m_Params.m_sUserNotes) != 0) {
|
||||
// elimino le entità CLIMB, RISE e HOME della lavorazione in doppio
|
||||
RemoveClimbRiseHome( false) ;
|
||||
// recupero i dati della testa in doppio e la imposto
|
||||
string sDblTool ; string sDblHead ; int nDblExit ;
|
||||
bool bOk = GetDoubleToolData( sDblTool, sDblHead, nDblExit) &&
|
||||
m_pMchMgr->SetCalcTool( sDblTool, sDblHead, nDblExit) ;
|
||||
// imposto eventuale asse bloccato da lavorazione
|
||||
SetBlockedRotAxis( m_Params.m_sBlockedAxis, true) ;
|
||||
// eseguo il calcolo
|
||||
if ( bOk) {
|
||||
if ( ! CalculateDoubleAxesValues( sHint)) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2317, "Error in Milling : axes values not calculable for double") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2318, "Error in Milling : double outstroke ") ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
// ripristino testa principale
|
||||
m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
|
||||
// in caso di errore, esco
|
||||
if ( ! bOk)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// esecuzione eventuali personalizzazioni
|
||||
string sErr ;
|
||||
if ( bPostApply && ! PostApply( sErr)) {
|
||||
|
||||
+6
-4
@@ -1723,15 +1723,17 @@ Operation::ExtractHint( const string& sNotes) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::SetBlockedRotAxis( const string& sBlockedAxis) const
|
||||
Operation::SetBlockedRotAxis( const string& sBlockedAxis, bool bToolSetOk) const
|
||||
{
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// cancello bloccaggio attuale
|
||||
m_pMchMgr->ClearRotAxisBlock() ;
|
||||
// imposto l'utensile per i calcoli macchina
|
||||
if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
|
||||
return false ;
|
||||
// se richiesto, imposto l'utensile per i calcoli macchina
|
||||
if ( ! bToolSetOk) {
|
||||
if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
|
||||
return false ;
|
||||
}
|
||||
// se non ci sono bloccaggi, esco
|
||||
if ( sBlockedAxis.empty())
|
||||
return true ;
|
||||
|
||||
+1
-1
@@ -175,7 +175,7 @@ class Operation : public IUserObj
|
||||
|
||||
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 SetBlockedRotAxis( const std::string& sBlockedAxis, bool bToolSetOk = false) const ;
|
||||
bool CalculateAxesValues( const std::string& sHint, bool bSolChExact = false, double dSingConeAng = 0) ;
|
||||
bool CalculateDoubleAxesValues( const std::string& sHint, bool bSolChExact = false, double dSingConeAng = 0) ;
|
||||
bool AdjustStartEndMovements( bool bVerifyPreviousLink = true) ;
|
||||
|
||||
+32
-4
@@ -721,15 +721,15 @@ Pocketing::Apply( bool bRecalc, bool bPostApply)
|
||||
// assegno ingombri dei vari percorsi di lavorazione e della lavorazione nel suo complesso
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// se lavorazione in doppio, aggiungo geometria della parte simmetrica
|
||||
if ( ! CalcMirrorByDouble( nClId, m_Params.m_sUserNotes)) {
|
||||
m_pMchMgr->SetLastError( 2432, "Error in Pocketing : Mirror for Double calculation failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
@@ -787,6 +787,34 @@ Pocketing::Update( bool bPostApply)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se lavorazione in doppio, calcolo assi e movimenti di approccio e retrazione relativi
|
||||
if ( GetDoubleType( m_Params.m_sUserNotes) != 0) {
|
||||
// elimino le entità CLIMB, RISE e HOME della lavorazione in doppio
|
||||
RemoveClimbRiseHome( false) ;
|
||||
// recupero i dati della testa in doppio e la imposto
|
||||
string sDblTool ; string sDblHead ; int nDblExit ;
|
||||
bool bOk = GetDoubleToolData( sDblTool, sDblHead, nDblExit) &&
|
||||
m_pMchMgr->SetCalcTool( sDblTool, sDblHead, nDblExit) ;
|
||||
// imposto eventuale asse bloccato da lavorazione
|
||||
SetBlockedRotAxis( m_Params.m_sBlockedAxis, true) ;
|
||||
// eseguo il calcolo
|
||||
if ( bOk) {
|
||||
if ( ! CalculateDoubleAxesValues( sHint)) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2423, "Error in Pocketing : axes values not calculable for double") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2424, "Error in Pocketing : double outstroke ") ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
// ripristino testa principale
|
||||
m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
|
||||
// in caso di errore, esco
|
||||
if ( ! bOk)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// esecuzione eventuali personalizzazioni
|
||||
string sErr ;
|
||||
if ( bPostApply && ! PostApply( sErr)) {
|
||||
|
||||
+32
-4
@@ -790,15 +790,15 @@ PocketingNT::MyApply( bool bRecalc, bool bPostApply)
|
||||
// assegno ingombri dei vari percorsi di lavorazione e della lavorazione nel suo complesso
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// se lavorazione in doppio, aggiungo geometria della parte simmetrica
|
||||
if ( ! CalcMirrorByDouble( nClId, m_Params.m_sUserNotes)) {
|
||||
m_pMchMgr->SetLastError( 2432, "Error in PocketingNT : Mirror for Double calculation failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
@@ -861,6 +861,34 @@ PocketingNT::Update( bool bPostApply)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se lavorazione in doppio, calcolo assi e movimenti di approccio e retrazione relativi
|
||||
if ( GetDoubleType( m_Params.m_sUserNotes) != 0) {
|
||||
// elimino le entità CLIMB, RISE e HOME della lavorazione in doppio
|
||||
RemoveClimbRiseHome( false) ;
|
||||
// recupero i dati della testa in doppio e la imposto
|
||||
string sDblTool ; string sDblHead ; int nDblExit ;
|
||||
bool bOk = GetDoubleToolData( sDblTool, sDblHead, nDblExit) &&
|
||||
m_pMchMgr->SetCalcTool( sDblTool, sDblHead, nDblExit) ;
|
||||
// imposto eventuale asse bloccato da lavorazione
|
||||
SetBlockedRotAxis( m_Params.m_sBlockedAxis, true) ;
|
||||
// eseguo il calcolo
|
||||
if ( bOk) {
|
||||
if ( ! CalculateDoubleAxesValues( sHint)) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2423, "Error in PocketingNT : axes values not calculable for double") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2424, "Error in PocketingNT : double outstroke ") ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
// ripristino testa principale
|
||||
m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
|
||||
// in caso di errore, esco
|
||||
if ( ! bOk)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// esecuzione eventuali personalizzazioni
|
||||
string sErr ;
|
||||
if ( bPostApply && ! PostApply( sErr)) {
|
||||
|
||||
Reference in New Issue
Block a user