EgtMachKernel 2.1c4 :
- modifiche per gestire lo stato delle operazioni (ok, da ricalcolare, ....).
This commit is contained in:
+100
-35
@@ -84,6 +84,7 @@ Chiseling::Clone( void) const
|
||||
pChisel->m_nPhase = m_nPhase ;
|
||||
pChisel->m_Params = m_Params ;
|
||||
pChisel->m_TParams = m_TParams ;
|
||||
pChisel->m_nStatus = m_nStatus ;
|
||||
pChisel->m_nChisels = m_nChisels ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -107,6 +108,7 @@ Chiseling::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nChisels) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -116,7 +118,7 @@ bool
|
||||
Chiseling::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -129,6 +131,8 @@ Chiseling::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nChisels, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -169,7 +173,7 @@ Chiseling::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -177,6 +181,10 @@ Chiseling::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nChisels))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -189,6 +197,7 @@ Chiseling::Chiseling( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nChisels = 0 ;
|
||||
}
|
||||
|
||||
@@ -227,9 +236,13 @@ Chiseling::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
case MPA_TOOLINVERT :
|
||||
if ( bVal != m_Params.m_bToolInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bToolInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -244,11 +257,15 @@ Chiseling::SetParam( int nType, int nVal)
|
||||
case MPA_WORKSIDE :
|
||||
if ( ! m_Params.VerifyWorkSide( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nWorkSide)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nWorkSide = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -262,47 +279,63 @@ Chiseling::SetParam( int nType, double dVal)
|
||||
switch ( nType) {
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dEndFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dTipFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsR = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsR) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsL = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsL) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH: {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( abs( dVal - m_Params.m_dStartPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( abs( dVal - m_Params.m_dStep) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_RETURNPOS :
|
||||
if ( abs( dVal - m_Params.m_dReturnPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dReturnPos = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dEndAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndAddLen = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -318,29 +351,39 @@ Chiseling::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} break ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
default :
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
return true ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -365,6 +408,9 @@ Chiseling::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty() || vIds.empty()) ;
|
||||
}
|
||||
|
||||
@@ -437,12 +483,29 @@ bool
|
||||
Chiseling::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero scalpellature generate
|
||||
int nCurrChisels = m_nChisels ;
|
||||
m_nChisels = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2901, "Error in Chiseling : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nChisels = nCurrChisels ;
|
||||
LOG_INFO( GetEMkLogger(), "Chiseling apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
bool bChain = false ;
|
||||
@@ -461,12 +524,6 @@ Chiseling::Apply( bool bRecalc, bool bPostApply)
|
||||
bChain = true ;
|
||||
}
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2901, "Error in Chiseling : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se necessario, eseguo concatenamento ed inserisco i percorsi sotto la geometria ausiliaria
|
||||
if ( bChain && ! Chain( nAuxId)) {
|
||||
m_pMchMgr->SetLastError( 2907, "Error in Chiseling : Chaining failed") ;
|
||||
@@ -501,7 +558,15 @@ Chiseling::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -39,6 +39,8 @@ class Chiseling : public Machining
|
||||
{ return OPER_CHISELING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nChisels == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -91,5 +93,6 @@ class Chiseling : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
ChiselingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nChisels ; // numero di scalpellature generati
|
||||
} ;
|
||||
+75
-26
@@ -92,6 +92,7 @@ Disposition::Clone( void) const
|
||||
pDisp->m_sHead = m_sHead ;
|
||||
pDisp->m_nExit = m_nExit ;
|
||||
pDisp->m_sTcPos = m_sTcPos ;
|
||||
pDisp->m_nStatus = m_nStatus ;
|
||||
pDisp->m_nShifts = m_nShifts ;
|
||||
pDisp->m_bSomeByHand = m_bSomeByHand ;
|
||||
}
|
||||
@@ -109,11 +110,11 @@ bool
|
||||
Disposition::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
{
|
||||
sOut += GetClassName() + "[mm]" + szNewLine ;
|
||||
sOut += "Tab=" + m_sTabName + ( m_bTabOk ? " (ok)" : " (to verify)") + szNewLine ;
|
||||
sOut += "Phase=" + ToString( m_nPhase) + szNewLine ;
|
||||
sOut += "Ref1=(" + ToString( m_ptRef1, 3) + ")" + szNewLine ;
|
||||
sOut += "Area1=(" + ToString( m_b3Area1, 3) + ")" + szNewLine ;
|
||||
sOut += "Area1Offs=" + ToString( m_dAreaOffset) + szNewLine ;
|
||||
sOut += DIS_TABLE + EQUAL + m_sTabName + ( m_bTabOk ? " (ok)" : " (to verify)") + szNewLine ;
|
||||
sOut += DIS_PHASE + EQUAL + ToString( m_nPhase) + szNewLine ;
|
||||
sOut += DIS_REF1 + EQUAL + "(" + ToString( m_ptRef1, 3) + ")" + szNewLine ;
|
||||
sOut += DIS_AREA1 + EQUAL + "(" + ToString( m_b3Area1, 3) + ")" + szNewLine ;
|
||||
sOut += DIS_AREA1_OFFS + EQUAL + "(" + ToString( m_dAreaOffset) + szNewLine ;
|
||||
for ( const auto& FixData : m_vFixData) {
|
||||
sOut += "FxD=" + FixData.sName + "," +
|
||||
ToString( FixData.nId) + ",(" +
|
||||
@@ -138,11 +139,12 @@ Disposition::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
break ;
|
||||
}
|
||||
}
|
||||
sOut += "Num=" + ToString( m_nShifts) + szNewLine ;
|
||||
sOut += "Head=" + m_sHead + szNewLine ;
|
||||
sOut += "Exit=" + ToString( m_nExit) + szNewLine ;
|
||||
sOut += "TcPos=" + m_sTcPos + szNewLine ;
|
||||
sOut += "ByHand=" + ToString( m_bSomeByHand) + szNewLine ;
|
||||
sOut += DIS_NUM + EQUAL + ToString( m_nShifts) + szNewLine ;
|
||||
sOut += DIS_HEAD + EQUAL + m_sHead + szNewLine ;
|
||||
sOut += DIS_EXIT + EQUAL + ToString( m_nExit) + szNewLine ;
|
||||
sOut += DIS_TCPOS + EQUAL + m_sTcPos + szNewLine ;
|
||||
sOut += DIS_SOMEBYHAND + EQUAL + ToString( m_bSomeByHand) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -156,7 +158,7 @@ Disposition::Save( int nBaseId, STRVECTOR& vString) const
|
||||
int nFxdLines = 1 + 4 * nFxdTot ;
|
||||
int nMvdTot = int( m_vMvrData.size()) ;
|
||||
int nMvdLines = 1 + 4 * nMvdTot ;
|
||||
int nOther = 6 ;
|
||||
int nOther = 7 ;
|
||||
vString.insert( vString.begin(), 4 + nFxdLines + nMvdLines + nOther, "") ;
|
||||
// Nome
|
||||
if ( ! SetVal( DIS_TABLE, m_sTabName, vString[++k]))
|
||||
@@ -203,6 +205,8 @@ Disposition::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( DIS_AREA1_OFFS, m_dAreaOffset, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) { return false ; }
|
||||
return true ;
|
||||
@@ -289,13 +293,17 @@ Disposition::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! GetVal( vString[++k], DIS_AREA1_OFFS, m_dAreaOffset))
|
||||
return false ;
|
||||
}
|
||||
if ( k + 1 < int( vString.size())) {
|
||||
if ( ! GetVal( vString[++k], KEY_STAT, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
Disposition::Disposition( void)
|
||||
: m_bTabOk( false), m_nExit( 0), m_nShifts( 0), m_bSomeByHand( false), m_dAreaOffset({{0,0,0,0}})
|
||||
: m_bTabOk( false), m_nExit( 0), m_nStatus( MCH_ST_TO_VERIFY), m_nShifts( 0), m_bSomeByHand( false), m_dAreaOffset({{0,0,0,0}})
|
||||
{
|
||||
}
|
||||
|
||||
@@ -594,8 +602,10 @@ Disposition::AddFixture( const string& sName, const Point3d& ptPos, double dAngD
|
||||
}
|
||||
}
|
||||
// se da aggiungere alla lista
|
||||
if ( bAddToList)
|
||||
if ( bAddToList) {
|
||||
m_vFixData.emplace_back( sName, nFixtId, ptPos, dAngDeg, dMov) ;
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
}
|
||||
return nFixtId ;
|
||||
}
|
||||
|
||||
@@ -668,6 +678,8 @@ Disposition::MoveFixture( int nId, const Vector3d& vtMove)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -690,6 +702,8 @@ Disposition::RotateFixture( int nId, double dDeltaAngDeg)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -720,6 +734,8 @@ Disposition::MoveFixtureMobile( int nId, double dDeltaMov)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -813,6 +829,8 @@ Disposition::RemoveFixture( int nId)
|
||||
else
|
||||
m_vFixData.erase( iIter) ;
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -859,8 +877,11 @@ Disposition::MoveToCornerRawPart( int nRawId, const Point3d& ptP, int nFlag, boo
|
||||
if ( ! vtTotMove.IsSmall())
|
||||
m_pGeomDB->TranslateGlob( nRawId, vtTotMove) ;
|
||||
// se da aggiungere alla lista
|
||||
if ( bAddToList)
|
||||
if ( bAddToList) {
|
||||
InsertMoveInfoInList( nRawId, MoveRawData::COR, ptP, nFlag) ;
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -913,8 +934,11 @@ Disposition::MoveToCenterRawPart( int nRawId, const Point3d& ptP, int nFlag, boo
|
||||
if ( ! vtTotMove.IsSmall())
|
||||
m_pGeomDB->TranslateGlob( nRawId, vtTotMove) ;
|
||||
// se da aggiungere alla lista
|
||||
if ( bAddToList)
|
||||
if ( bAddToList) {
|
||||
InsertMoveInfoInList( nRawId, MoveRawData::CEN, ptP, nFlag) ;
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -955,6 +979,8 @@ Disposition::MoveRawPart( int nRawId, const Vector3d& vtMove)
|
||||
m_pGeomDB->TranslateGlob( nRawId, vtMove) ;
|
||||
// aggiorno comando di movimento
|
||||
rTras->ptP += vtMove ;
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1055,6 +1081,8 @@ Disposition::RotateRawPart( int nRawId, const Vector3d& vtAx, double dAngRotDeg)
|
||||
// aggiungo o modifico nella lista
|
||||
InsertMoveInfoInList( nRawId, MoveRawData::ROT, Point3d( dAngCDeg, dAngADeg, dAngC1Deg), 0) ;
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1084,6 +1112,8 @@ Disposition::ApplyRotationToRawPart( int nRawId, double dAngCDeg, double dAngADe
|
||||
if ( bAddToList) {
|
||||
// non ci sono problemi di compensazione della traslazione perchè già processata precedentemente in RotateRawPart
|
||||
InsertMoveInfoInList( nRawId, MoveRawData::ROT, Point3d( dAngCDeg, dAngADeg, dAngC1Deg), 0) ;
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -1163,6 +1193,8 @@ Disposition::RemoveRawPart( int nRawId)
|
||||
else
|
||||
m_vMvrData.erase( iIter) ;
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1211,6 +1243,7 @@ Disposition::SpecialApply( bool bRecalc)
|
||||
// reset
|
||||
m_sHead.clear() ;
|
||||
m_nExit = 0 ;
|
||||
int nCurrShifts = m_nShifts ;
|
||||
m_nShifts = 0 ;
|
||||
m_bSomeByHand = false ;
|
||||
m_sTcPos.clear() ;
|
||||
@@ -1219,6 +1252,26 @@ Disposition::SpecialApply( bool bRecalc)
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
|
||||
// recupero la macchina corrente
|
||||
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
|
||||
// se non esiste la funzione, non devo fare alcunché
|
||||
static const string ON_SPECIAL_APPLY = "OnSpecialApplyDisposition" ;
|
||||
if ( ! pMch->LuaExistsFunction( ON_SPECIAL_APPLY)) {
|
||||
m_nStatus = MCH_ST_OK ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && m_nStatus == MCH_ST_OK) {
|
||||
m_nShifts = nCurrShifts ;
|
||||
LOG_INFO( GetEMkLogger(), "Disposition postapply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// costanti
|
||||
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
|
||||
static const string EVAR_TABNAME = ".TABNAME" ; // IN (string) nome della tavola macchina
|
||||
@@ -1230,16 +1283,6 @@ Disposition::SpecialApply( bool bRecalc)
|
||||
static const string EVAR_TCPOS = ".TCPOS" ; // OUT (string) nome della posizione nel TC
|
||||
static const string EVAR_SHIFTS = ".SHIFTS" ; // OUT (int) numero di movimenti eseguiti
|
||||
static const string EVAR_SBH = ".SBH" ; // OUT (bool) flag presenza operazioni manuali
|
||||
static const string ON_SPECIAL_APPLY = "OnSpecialApplyDisposition" ;
|
||||
|
||||
// recupero la macchina corrente
|
||||
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
|
||||
// se non esiste la funzione, non devo fare alcunché
|
||||
if ( ! pMch->LuaExistsFunction( ON_SPECIAL_APPLY))
|
||||
return true ;
|
||||
|
||||
// eseguo l'azione
|
||||
bool bOk = true ;
|
||||
@@ -1273,7 +1316,13 @@ Disposition::SpecialApply( bool bRecalc)
|
||||
}
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return SpecialUpdate() ;
|
||||
if ( ! SpecialUpdate())
|
||||
return false ;
|
||||
|
||||
// aggiorno stato
|
||||
m_nStatus = MCH_ST_OK ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -62,6 +62,8 @@ class Disposition : public Operation
|
||||
{ return OPER_DISP ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nShifts == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
const std::string& GetToolName( void) const override ;
|
||||
@@ -126,6 +128,7 @@ class Disposition : public Operation
|
||||
std::string m_sHead ; // eventuale testa usata per muovere i pezzi
|
||||
int m_nExit ; // eventuale uscita sulla testa
|
||||
std::string m_sTcPos ; // eventuale posizione nel cambiautensili
|
||||
int m_nStatus ; // stato di aggiornamento degli eventuali spostamenti con testa
|
||||
int m_nShifts ; // numero eventuali spostamenti con testa
|
||||
bool m_bSomeByHand ; // presenza di operazioni manuali (anche in aggiunta ad automatiche)
|
||||
} ;
|
||||
|
||||
+118
-36
@@ -84,6 +84,7 @@ Drilling::Clone( void) const
|
||||
pDri->m_nPhase = m_nPhase ;
|
||||
pDri->m_Params = m_Params ;
|
||||
pDri->m_TParams = m_TParams ;
|
||||
pDri->m_nStatus = m_nStatus ;
|
||||
pDri->m_nDrillings = m_nDrillings ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -107,6 +108,7 @@ Drilling::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nDrillings) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -116,7 +118,7 @@ bool
|
||||
Drilling::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -129,6 +131,8 @@ Drilling::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nDrillings, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -169,7 +173,7 @@ Drilling::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -177,6 +181,10 @@ Drilling::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nDrillings))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -189,6 +197,7 @@ Drilling::Drilling( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nDrillings = 0 ;
|
||||
m_bAggrBottom = false ;
|
||||
m_dDistBottom = 0 ;
|
||||
@@ -229,6 +238,8 @@ Drilling::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -241,11 +252,15 @@ Drilling::SetParam( int nType, int nVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_SUBTYPE :
|
||||
if ( nVal != m_Params.m_nSubType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSubType = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -261,67 +276,97 @@ Drilling::SetParam( int nType, double dVal)
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR)
|
||||
m_Params.m_dSpeed = 0 ;
|
||||
else
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dSpeed) > EPS_MACH_ANG_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dStartFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dStartFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dEndFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ::ToString( dVal) ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dTipFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH : {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( abs( dVal - m_Params.m_dStartPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTSLOWLEN :
|
||||
if ( abs( dVal - m_Params.m_dStartSlowLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartSlowLen = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDSLOWLEN :
|
||||
if ( abs( dVal - m_Params.m_dEndSlowLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndSlowLen = dVal ;
|
||||
return true ;
|
||||
case MPA_THROUADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dThroughAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dThroughAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( abs( dVal - m_Params.m_dStep) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_RETURNPOS :
|
||||
if ( abs( dVal - m_Params.m_dReturnPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dReturnPos = dVal ;
|
||||
return true ;
|
||||
case MPA_OVERLAP :
|
||||
m_Params.m_sOverlap = ::ToString( dVal) ;
|
||||
return true ;
|
||||
case MPA_OVERLAP : {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sOverlap)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sOverlap = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dStartAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dEndAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSET :
|
||||
m_Params.m_sOffset = ::ToString( dVal) ;
|
||||
return true ;
|
||||
case MPA_OFFSET : {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sOverlap)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sOffset = sVal ;
|
||||
} return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@@ -335,31 +380,47 @@ Drilling::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
return true ;
|
||||
case MPA_OVERLAP_STR :
|
||||
if ( sVal != m_Params.m_sOverlap)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sOverlap = sVal ;
|
||||
return true ;
|
||||
case MPA_OFFSET_STR :
|
||||
if ( sVal != m_Params.m_sOffset)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sOffset = sVal ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@@ -403,7 +464,9 @@ Drilling::SetGeometry( const SELVECTOR& vIds)
|
||||
m_vId.push_back( vIds[i]) ;
|
||||
}
|
||||
}
|
||||
// verifico di aver inserito qualcosa
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty()) ;
|
||||
}
|
||||
|
||||
@@ -451,12 +514,29 @@ bool
|
||||
Drilling::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero forature nella lavorazione
|
||||
int nCurrDrillings = m_nDrillings ;
|
||||
m_nDrillings = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2101, "Error in Drilling : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nDrillings = nCurrDrillings ;
|
||||
LOG_INFO( GetEMkLogger(), "Drilling apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria di lavorazione (Cutter Location)
|
||||
int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ;
|
||||
// se non c'è, lo aggiungo
|
||||
@@ -470,12 +550,6 @@ Drilling::Apply( bool bRecalc, bool bPostApply)
|
||||
else
|
||||
m_pGeomDB->EmptyGroup( nClId) ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2101, "Error in Drilling : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se lavorazione standard
|
||||
if ( m_Params.m_nSubType == DRI_SUB_STD) {
|
||||
if ( ! StdandardProcess( bRecalc, GDB_ID_NULL, nClId))
|
||||
@@ -494,7 +568,15 @@ Drilling::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -38,6 +38,8 @@ class Drilling : public Machining
|
||||
{ return OPER_DRILLING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nDrillings == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -95,6 +97,7 @@ class Drilling : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
DrillingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nDrillings ; // numero di fori generati
|
||||
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
|
||||
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
|
||||
|
||||
Binary file not shown.
+101
-36
@@ -81,8 +81,13 @@ GenMachining::Clone( void) const
|
||||
// eseguo copia dei dati
|
||||
if ( pGenM != nullptr) {
|
||||
try {
|
||||
pGenM->m_vId = m_vId ;
|
||||
pGenM->m_pMchMgr = m_pMchMgr ;
|
||||
pGenM->m_nPhase = m_nPhase ;
|
||||
pGenM->m_Params = m_Params ;
|
||||
pGenM->m_TParams = m_TParams ;
|
||||
pGenM->m_nStatus = m_nStatus ;
|
||||
pGenM->m_nMills = m_nMills ;
|
||||
}
|
||||
catch( ...) {
|
||||
delete pGenM ;
|
||||
@@ -105,6 +110,7 @@ GenMachining::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nMills) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -114,7 +120,7 @@ bool
|
||||
GenMachining::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -127,6 +133,8 @@ GenMachining::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nMills, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -167,7 +175,7 @@ GenMachining::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -175,6 +183,10 @@ GenMachining::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nMills))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -187,6 +199,7 @@ GenMachining::GenMachining( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nMills = 0 ;
|
||||
}
|
||||
|
||||
@@ -225,9 +238,13 @@ GenMachining::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
case MPA_TOOLINVERT :
|
||||
if ( bVal != m_Params.m_bToolInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bToolInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -242,9 +259,13 @@ GenMachining::SetParam( int nType, int nVal)
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
case MPA_SUBTYPE :
|
||||
if ( nVal != m_Params.m_nSubType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSubType = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -260,50 +281,62 @@ GenMachining::SetParam( int nType, double dVal)
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR)
|
||||
m_Params.m_dSpeed = 0 ;
|
||||
else
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dSpeed) > EPS_MACH_ANG_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dStartFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dStartFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dEndFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dTipFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsR = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsR) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsL = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsL) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH: {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( abs( dVal - m_Params.m_dStartPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -319,29 +352,39 @@ GenMachining::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} break ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
default :
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
return true ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -366,6 +409,9 @@ GenMachining::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty() || vIds.empty()) ;
|
||||
}
|
||||
|
||||
@@ -460,6 +506,7 @@ bool
|
||||
GenMachining::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero percorsi di lavoro generati
|
||||
int nCurrMills = m_nMills ;
|
||||
m_nMills = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
@@ -467,11 +514,21 @@ GenMachining::Apply( bool bRecalc, bool bPostApply)
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2801, "Error in GenMachining : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nMills = nCurrMills ;
|
||||
LOG_INFO( GetEMkLogger(), "GenMachining apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria di lavorazione (Cutter Location)
|
||||
int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ;
|
||||
// se non c'è, lo aggiungo
|
||||
@@ -542,7 +599,15 @@ GenMachining::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -37,6 +37,8 @@ class GenMachining : public Machining
|
||||
{ return OPER_GENMACHINING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nMills == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -86,5 +88,6 @@ class GenMachining : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
GenMachiningData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nMills ; // numero di percorsi di lavoro generati
|
||||
} ;
|
||||
@@ -352,8 +352,34 @@ MachMgr::SetOperationMode( int nId, bool bActive)
|
||||
// verifico sia una Operazione
|
||||
if ( GetOperationType( nId) == OPER_NULL)
|
||||
return false ;
|
||||
// recupero lo stato di attivazione corrente
|
||||
int nMode ;
|
||||
if ( ! m_pGeomDB->GetMode( nId, nMode))
|
||||
return false ;
|
||||
bool bPrevActive = ( nMode == GDB_MD_STD) ;
|
||||
// eseguo attivazione/disattivazione
|
||||
m_pGeomDB->SetMode( nId, ( bActive ? GDB_MD_STD : GDB_MD_HIDDEN)) ;
|
||||
// se non cambia l'attivazione, esco
|
||||
if ( bActive == bPrevActive)
|
||||
return true ;
|
||||
// dichiaro da aggiornare questa lavorazione
|
||||
Operation* pOpe = GetOperation( m_pGeomDB->GetUserObj( nId)) ;
|
||||
if ( pOpe != nullptr)
|
||||
pOpe->UpdateStatus( MCH_ST_OTH_MODIF) ;
|
||||
// da aggiornare post apply della precedente attiva
|
||||
int nOpeId = GetPrevActiveOperation( nId) ;
|
||||
if ( nOpeId != GDB_ID_NULL) {
|
||||
Operation* pOpe = GetOperation( m_pGeomDB->GetUserObj( nOpeId)) ;
|
||||
if ( pOpe != nullptr)
|
||||
pOpe->UpdateStatus( MCH_ST_NO_POSTAPPL) ;
|
||||
}
|
||||
// forzo aggiornamento della successiva, le altre seguiranno automaticamente
|
||||
nOpeId = GetNextActiveOperation( nId) ;
|
||||
if ( nOpeId != GDB_ID_NULL) {
|
||||
Operation* pOpe = GetOperation( m_pGeomDB->GetUserObj( nOpeId)) ;
|
||||
if ( pOpe != nullptr)
|
||||
pOpe->UpdateStatus( MCH_ST_OTH_MODIF) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,15 @@ const double EPS_MACH_ANG_PAR = 10 * EPS_ANG_SMALL ;
|
||||
// Valore parametro lavorazione non inizializzato
|
||||
const double UNKNOWN_PAR = 9999999 ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Costanti per stato lavorazione
|
||||
enum Mch_Status { MCH_ST_OK = 0,
|
||||
MCH_ST_NO_POSTAPPL = 1,
|
||||
MCH_ST_TO_VERIFY = 2,
|
||||
MCH_ST_GEO_MODIF = 4,
|
||||
MCH_ST_PARAM_MODIF = 8,
|
||||
MCH_ST_OTH_MODIF = 16} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
inline bool
|
||||
AreSameLenValue( double dLen1, double dLen2)
|
||||
|
||||
+139
-42
@@ -83,6 +83,7 @@ Milling::Clone( void) const
|
||||
pMill->m_nPhase = m_nPhase ;
|
||||
pMill->m_Params = m_Params ;
|
||||
pMill->m_TParams = m_TParams ;
|
||||
pMill->m_nStatus = m_nStatus ;
|
||||
pMill->m_nMills = m_nMills ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -106,6 +107,7 @@ Milling::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nMills) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -115,7 +117,7 @@ bool
|
||||
Milling::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -128,6 +130,8 @@ Milling::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nMills, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -168,7 +172,7 @@ Milling::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -176,6 +180,10 @@ Milling::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nMills))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -190,6 +198,7 @@ Milling::Milling( void)
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_dTHoldLen = 0 ;
|
||||
m_dTHoldDiam = 0 ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nMills = 0 ;
|
||||
m_bStepOn = false ;
|
||||
m_nHeadSolCh = MCH_SCC_NONE ;
|
||||
@@ -231,12 +240,18 @@ Milling::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
case MPA_LEAVETAB :
|
||||
if ( bVal != m_Params.m_bLeaveTab)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bLeaveTab = bVal ;
|
||||
return true ;
|
||||
case MPA_TOOLINVERT :
|
||||
if ( bVal != m_Params.m_bToolInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bToolInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -251,31 +266,43 @@ Milling::SetParam( int nType, int nVal)
|
||||
case MPA_WORKSIDE :
|
||||
if ( ! m_Params.VerifyWorkSide( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nWorkSide)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nWorkSide = nVal ;
|
||||
return true ;
|
||||
case MPA_STEPTYPE :
|
||||
if ( ! m_Params.VerifyStepType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nStepType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nStepType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADINTYPE :
|
||||
if ( ! m_Params.VerifyLeadInType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadInType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadInType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADOUTTYPE :
|
||||
if ( ! m_Params.VerifyLeadOutType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadOutType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadOutType = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
case MPA_FACEUSE :
|
||||
if ( ! m_Params.VerifyFaceUse( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nFaceUse)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nFaceUse = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -291,86 +318,122 @@ Milling::SetParam( int nType, double dVal)
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR)
|
||||
m_Params.m_dSpeed = 0 ;
|
||||
else
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dSpeed) > EPS_MACH_ANG_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dStartFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dStartFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dEndFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dTipFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsR = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsR) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsL = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsL) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH : {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( abs( dVal - m_Params.m_dStartPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_OVERL :
|
||||
if ( abs( dVal - m_Params.m_dOverlap) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOverlap = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( abs( dVal - m_Params.m_dStep) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dStartAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dEndAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_LITANG :
|
||||
if ( abs( dVal - m_Params.m_dLiTang) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLiTang = dVal ;
|
||||
return true ;
|
||||
case MPA_LIPERP :
|
||||
if ( abs( dVal - m_Params.m_dLiPerp) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLiPerp = dVal ;
|
||||
return true ;
|
||||
case MPA_LIELEV :
|
||||
if ( abs( dVal - m_Params.m_dLiElev) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLiElev = dVal ;
|
||||
return true ;
|
||||
case MPA_LICOMPLEN :
|
||||
if ( abs( dVal - m_Params.m_dLiCompLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLiCompLen = dVal ;
|
||||
return true ;
|
||||
case MPA_LOTANG :
|
||||
if ( abs( dVal - m_Params.m_dLoTang) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLoTang = dVal ;
|
||||
return true ;
|
||||
case MPA_LOPERP :
|
||||
if ( abs( dVal - m_Params.m_dLoPerp) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLoPerp = dVal ;
|
||||
return true ;
|
||||
case MPA_LOELEV :
|
||||
if ( abs( dVal - m_Params.m_dLoElev) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLoElev = dVal ;
|
||||
return true ;
|
||||
case MPA_LOCOMPLEN :
|
||||
if ( abs( dVal - m_Params.m_dLoCompLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLoCompLen = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -386,29 +449,39 @@ Milling::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} break ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
default :
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
return true ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -433,6 +506,9 @@ Milling::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty() || vIds.empty()) ;
|
||||
}
|
||||
|
||||
@@ -472,6 +548,8 @@ Milling::Preview( bool bRecalc)
|
||||
}
|
||||
m_nHeadSolCh = m_pMchMgr->GetCurrMachine()->GetHeadSolCh( m_TParams.m_sHead) ;
|
||||
|
||||
// aggiorno anche se non necessario, comunque operazione veloce
|
||||
|
||||
// rendo corrente l'utensile usato nella lavorazione
|
||||
if ( ! m_pMchMgr->SetCalcTool( m_TParams.m_sName, m_TParams.m_sHead, m_TParams.m_nExit)) {
|
||||
m_pMchMgr->SetLastError( 2322, "Error in Milling : Tool loading failed") ;
|
||||
@@ -519,12 +597,30 @@ bool
|
||||
Milling::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero percorsi di lavoro generati
|
||||
int nCurrMills = m_nMills ;
|
||||
m_nMills = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2301, "Error in Milling : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
m_nHeadSolCh = m_pMchMgr->GetCurrMachine()->GetHeadSolCh( m_TParams.m_sHead) ;
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nMills = nCurrMills ;
|
||||
LOG_INFO( GetEMkLogger(), "Milling apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
bool bChain = false ;
|
||||
@@ -543,13 +639,6 @@ Milling::Apply( bool bRecalc, bool bPostApply)
|
||||
bChain = true ;
|
||||
}
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2301, "Error in Milling : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
m_nHeadSolCh = m_pMchMgr->GetCurrMachine()->GetHeadSolCh( m_TParams.m_sHead) ;
|
||||
|
||||
// rendo corrente l'utensile usato nella lavorazione
|
||||
if ( ! m_pMchMgr->SetCalcTool( m_TParams.m_sName, m_TParams.m_sHead, m_TParams.m_nExit)) {
|
||||
m_pMchMgr->SetLastError( 2322, "Error in Milling : Tool loading failed") ;
|
||||
@@ -596,7 +685,15 @@ Milling::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -37,6 +37,8 @@ class Milling : public Machining
|
||||
{ return OPER_MILLING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nMills == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -130,6 +132,7 @@ class Milling : public Machining
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
double m_dTHoldLen ; // lunghezza del porta-utensile
|
||||
double m_dTHoldDiam ; // diametro del porta-utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nMills ; // numero di percorsi di lavoro generati
|
||||
bool m_bStepOn ; // flag per indicare che effettivamente si lavora a step
|
||||
int m_nHeadSolCh ; // criterio scelta soluzione impostato nella testa
|
||||
|
||||
+112
-41
@@ -71,6 +71,7 @@ Mortising::Clone( void) const
|
||||
pMort->m_nPhase = m_nPhase ;
|
||||
pMort->m_Params = m_Params ;
|
||||
pMort->m_TParams = m_TParams ;
|
||||
pMort->m_nStatus = m_nStatus ;
|
||||
pMort->m_nMortises = m_nMortises ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -94,6 +95,7 @@ Mortising::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nMortises) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -103,7 +105,7 @@ bool
|
||||
Mortising::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -116,6 +118,8 @@ Mortising::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nMortises, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -156,7 +160,7 @@ Mortising::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -164,6 +168,10 @@ Mortising::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nMortises))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -176,6 +184,7 @@ Mortising::Mortising( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nMortises = 0 ;
|
||||
}
|
||||
|
||||
@@ -214,9 +223,13 @@ Mortising::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
case MPA_TOOLINVERT :
|
||||
if ( bVal != m_Params.m_bToolInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bToolInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -231,21 +244,29 @@ Mortising::SetParam( int nType, int nVal)
|
||||
case MPA_WORKSIDE :
|
||||
if ( ! m_Params.VerifyWorkSide( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nWorkSide)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nWorkSide = nVal ;
|
||||
return true ;
|
||||
case MPA_STEPTYPE :
|
||||
if ( ! m_Params.VerifyStepType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nStepType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nStepType = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
case MPA_FACEUSE :
|
||||
if ( ! m_Params.VerifyFaceUse( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nFaceUse)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nFaceUse = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -261,59 +282,77 @@ Mortising::SetParam( int nType, double dVal)
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR)
|
||||
m_Params.m_dSpeed = 0 ;
|
||||
else
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dSpeed) > EPS_MACH_ANG_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dStartFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dStartFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dEndFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dTipFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsR = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsR) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsL = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsL) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH: {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( abs( dVal - m_Params.m_dStartPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( abs( dVal - m_Params.m_dStep) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dStartAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDADDLEN :
|
||||
if ( abs( dVal - m_Params.m_dEndAddLen) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndAddLen = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -329,29 +368,39 @@ Mortising::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} break ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
default :
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
return true ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -376,6 +425,9 @@ Mortising::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty() || vIds.empty()) ;
|
||||
}
|
||||
|
||||
@@ -448,12 +500,29 @@ bool
|
||||
Mortising::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero mortasature generate
|
||||
int nCurrMortises = m_nMortises ;
|
||||
m_nMortises = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2501, "Error in Mortising : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nMortises = nCurrMortises ;
|
||||
LOG_INFO( GetEMkLogger(), "Mortising apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
bool bChain = false ;
|
||||
@@ -472,12 +541,6 @@ Mortising::Apply( bool bRecalc, bool bPostApply)
|
||||
bChain = true ;
|
||||
}
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2501, "Error in Mortising : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se necessario, eseguo concatenamento ed inserisco i percorsi sotto la geometria ausiliaria
|
||||
if ( bChain && ! Chain( nAuxId)) {
|
||||
m_pMchMgr->SetLastError( 2507, "Error in Mortising : Chaining failed") ;
|
||||
@@ -512,7 +575,15 @@ Mortising::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -38,6 +38,8 @@ class Mortising : public Machining
|
||||
{ return OPER_MORTISING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nMortises == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -94,5 +96,6 @@ class Mortising : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
MortisingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nMortises ; // numero di mortasature generate
|
||||
} ;
|
||||
@@ -83,6 +83,23 @@ Operation::Operation( void)
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::UpdateFollowingOperationsStatus(int nModif)
|
||||
{
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// modifico lo stato delle operazioni attive successive
|
||||
int nOpeId = m_pMchMgr->GetNextActiveOperation( m_nOwnerId) ;
|
||||
while ( nOpeId != GDB_ID_NULL) {
|
||||
Operation* pOpe = GetOperation( m_pGeomDB->GetUserObj( nOpeId)) ;
|
||||
if ( pOpe != nullptr)
|
||||
pOpe->UpdateStatus( nModif) ;
|
||||
nOpeId = m_pMchMgr->GetNextActiveOperation( nOpeId) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::GetElevation( int nPhase, const Point3d& ptP,
|
||||
|
||||
@@ -45,6 +45,7 @@ class Operation : public IUserObj
|
||||
public :
|
||||
virtual int GetType( void) const = 0 ;
|
||||
virtual bool IsEmpty( void) const = 0 ;
|
||||
virtual bool UpdateStatus( int nModif) = 0 ;
|
||||
|
||||
protected :
|
||||
virtual const std::string& GetToolName( void) const = 0 ;
|
||||
@@ -62,6 +63,7 @@ class Operation : public IUserObj
|
||||
Operation( void) ;
|
||||
|
||||
protected :
|
||||
bool UpdateFollowingOperationsStatus( int nModif) ;
|
||||
bool GetElevation( int nPhase, const Point3d& ptP,
|
||||
const Vector3d& vtDir, double& dElev) ;
|
||||
bool GetElevation( int nPhase, const Point3d& ptP1, const Point3d& ptP2,
|
||||
|
||||
+114
-40
@@ -96,6 +96,7 @@ Pocketing::Clone( void) const
|
||||
pPock->m_nPhase = m_nPhase ;
|
||||
pPock->m_Params = m_Params ;
|
||||
pPock->m_TParams = m_TParams ;
|
||||
pPock->m_nStatus = m_nStatus ;
|
||||
pPock->m_nPockets = m_nPockets ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -119,6 +120,7 @@ Pocketing::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nPockets) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -128,7 +130,7 @@ bool
|
||||
Pocketing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -141,6 +143,8 @@ Pocketing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nPockets, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -181,7 +185,7 @@ Pocketing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -189,6 +193,10 @@ Pocketing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nPockets))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -204,6 +212,7 @@ Pocketing::Pocketing( void)
|
||||
m_dTHoldLen = 0 ;
|
||||
m_dTHoldDiam = 0 ;
|
||||
m_dMaxHelixRad = INFINITO ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nPockets = 0 ;
|
||||
m_bAggrBottom = false ;
|
||||
}
|
||||
@@ -243,9 +252,13 @@ Pocketing::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
case MPA_TOOLINVERT :
|
||||
if ( bVal != m_Params.m_bToolInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bToolInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -260,21 +273,29 @@ Pocketing::SetParam( int nType, int nVal)
|
||||
case MPA_LEADINTYPE :
|
||||
if ( ! m_Params.VerifyLeadInType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadInType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadInType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADOUTTYPE :
|
||||
if ( ! m_Params.VerifyLeadOutType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadOutType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadOutType = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
case MPA_SUBTYPE :
|
||||
if ( ! m_Params.VerifySubType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSubType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSubType = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -290,68 +311,92 @@ Pocketing::SetParam( int nType, double dVal)
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR)
|
||||
m_Params.m_dSpeed = 0 ;
|
||||
else
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dSpeed) > EPS_MACH_ANG_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dStartFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dStartFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dEndFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
dVal = 0 ;
|
||||
if ( abs( dVal - m_Params.m_dTipFeed) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsR = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsR) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsL = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( abs( dVal - m_Params.m_dOffsL) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH : {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( abs( dVal - m_Params.m_dStartPos) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( abs( dVal - m_Params.m_dStep) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_SIDESTEP :
|
||||
if ( abs( dVal - m_Params.m_dSideStep) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSideStep = dVal ;
|
||||
return true ;
|
||||
case MPA_SIDEANGLE :
|
||||
if ( abs( dVal - m_Params.m_dSideAngle) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSideAngle = dVal ;
|
||||
return true ;
|
||||
case MPA_LITANG :
|
||||
if ( abs( dVal - m_Params.m_dLiTang) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLiTang = dVal ;
|
||||
return true ;
|
||||
case MPA_LIELEV :
|
||||
if ( abs( dVal - m_Params.m_dLiElev) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLiElev = dVal ;
|
||||
return true ;
|
||||
case MPA_LOTANG :
|
||||
if ( abs( dVal - m_Params.m_dLoTang) > EPS_MACH_LEN_PAR)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dLoTang = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -367,29 +412,39 @@ Pocketing::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} break ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
default :
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
return true ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -414,6 +469,9 @@ Pocketing::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty() || vIds.empty()) ;
|
||||
}
|
||||
|
||||
@@ -499,6 +557,7 @@ bool
|
||||
Pocketing::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero percorsi di svuotatura generati
|
||||
int nCurrPockets = m_nPockets ;
|
||||
m_nPockets = 0 ;
|
||||
|
||||
// reset raggio massimo attacco ad elica nel caso di cerchi
|
||||
@@ -508,6 +567,22 @@ Pocketing::Apply( bool bRecalc, bool bPostApply)
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2401, "Error in Pocketing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nPockets = nCurrPockets ;
|
||||
LOG_INFO( GetEMkLogger(), "Pocketing apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
bool bChain = false ;
|
||||
@@ -526,12 +601,6 @@ Pocketing::Apply( bool bRecalc, bool bPostApply)
|
||||
bChain = true ;
|
||||
}
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2401, "Error in Pocketing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// rendo corrente l'utensile usato nella lavorazione
|
||||
if ( ! m_pMchMgr->SetCalcTool( m_TParams.m_sName, m_TParams.m_sHead, m_TParams.m_nExit)) {
|
||||
m_pMchMgr->SetLastError( 2428, "Error in Pocketing : Tool loading failed") ;
|
||||
@@ -580,6 +649,11 @@ Pocketing::Apply( bool bRecalc, bool bPostApply)
|
||||
// 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
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,8 @@ class Pocketing : public Machining
|
||||
{ return OPER_POCKETING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nPockets == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -139,6 +141,7 @@ class Pocketing : public Machining
|
||||
double m_dTHoldLen ; // lunghezza del porta-utensile
|
||||
double m_dTHoldDiam ; // diametro del porta-utensile
|
||||
double m_dMaxHelixRad ; // raggio massimo attacco ad elica nel caso di cerchi
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nPockets ; // numero di percorsi di svuotatura generati
|
||||
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
|
||||
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
|
||||
|
||||
+119
-44
@@ -86,6 +86,7 @@ SawFinishing::Clone( void) const
|
||||
pSaw->m_nPhase = m_nPhase ;
|
||||
pSaw->m_Params = m_Params ;
|
||||
pSaw->m_TParams = m_TParams ;
|
||||
pSaw->m_nStatus = m_nStatus ;
|
||||
pSaw->m_nCuts = m_nCuts ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -109,6 +110,7 @@ SawFinishing::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nCuts) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -118,7 +120,7 @@ bool
|
||||
SawFinishing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -131,6 +133,8 @@ SawFinishing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nCuts, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -171,7 +175,7 @@ SawFinishing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -179,6 +183,10 @@ SawFinishing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nCuts))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -191,6 +199,7 @@ SawFinishing::SawFinishing( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nCuts = 0 ;
|
||||
}
|
||||
|
||||
@@ -229,6 +238,8 @@ SawFinishing::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -243,26 +254,36 @@ SawFinishing::SetParam( int nType, int nVal)
|
||||
case MPA_HEADSIDE :
|
||||
if ( ! m_Params.VerifyHeadSide( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nHeadSide)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nHeadSide = nVal ;
|
||||
return true ;
|
||||
case MPA_STEPTYPE :
|
||||
if ( ! m_Params.VerifyStepType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nStepType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nStepType = nVal ;
|
||||
return true ;
|
||||
case MPA_SUBTYPE :
|
||||
if ( ! m_Params.VerifySubType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSubType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSubType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADLINKTYPE :
|
||||
if ( ! m_Params.VerifyLeadLinkType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadLinkType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadLinkType = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -277,66 +298,86 @@ SawFinishing::SetParam( int nType, double dVal)
|
||||
case MPA_SPEED :
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR)
|
||||
m_Params.m_dSpeed = 0 ;
|
||||
else
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
if ( AreSameAngValue( dVal, m_TParams.m_dSpeed))
|
||||
dVal = 0 ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dStartFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dStartFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dEndFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dEndFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dTipFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dTipFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_VERTFEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dVertFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dVertFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dVertFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dVertFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsR = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dOffsR))
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dOffsR))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH: {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartPos))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_SIDESTEP :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dSideStep))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSideStep = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStep))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_APPROX :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dApprox))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dApprox = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTADDLEN :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartAddLen))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDADDLEN :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dEndAddLen))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndAddLen = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -352,25 +393,37 @@ SawFinishing::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@@ -396,6 +449,9 @@ SawFinishing::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty()) ;
|
||||
}
|
||||
|
||||
@@ -412,12 +468,29 @@ bool
|
||||
SawFinishing::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero tagli nella lavorazione
|
||||
int nCurrCuts = m_nCuts ;
|
||||
m_nCuts = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2701, "Error in SawFinishing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nCuts = nCurrCuts ;
|
||||
LOG_INFO( GetEMkLogger(), "SawFinishing apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
// se non c'è, lo aggiungo
|
||||
@@ -434,12 +507,6 @@ SawFinishing::Apply( bool bRecalc, bool bPostApply)
|
||||
m_pGeomDB->EmptyGroup( nAuxId) ;
|
||||
}
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2701, "Error in SawFinishing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se necessario, preparo geometria e la inserisco sotto la geometria ausiliaria
|
||||
if ( bRecalc && ! AdjustGeometry( nAuxId))
|
||||
return false ;
|
||||
@@ -475,7 +542,15 @@ SawFinishing::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -40,6 +40,8 @@ class SawFinishing : public Machining
|
||||
{ return OPER_SAWFINISHING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nCuts == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -120,5 +122,6 @@ class SawFinishing : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
SawFinishingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nCuts ; // numero di passate generate
|
||||
} ;
|
||||
|
||||
+117
-44
@@ -79,6 +79,7 @@ SawRoughing::Clone( void) const
|
||||
pSaw->m_nPhase = m_nPhase ;
|
||||
pSaw->m_Params = m_Params ;
|
||||
pSaw->m_TParams = m_TParams ;
|
||||
pSaw->m_nStatus = m_nStatus ;
|
||||
pSaw->m_nCuts = m_nCuts ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -102,6 +103,7 @@ SawRoughing::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nCuts) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -111,7 +113,7 @@ bool
|
||||
SawRoughing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -124,6 +126,8 @@ SawRoughing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nCuts, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -164,7 +168,7 @@ SawRoughing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -172,6 +176,10 @@ SawRoughing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nCuts))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -184,6 +192,7 @@ SawRoughing::SawRoughing( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nCuts = 0 ;
|
||||
}
|
||||
|
||||
@@ -233,21 +242,29 @@ SawRoughing::SetParam( int nType, int nVal)
|
||||
case MPA_HEADSIDE :
|
||||
if ( ! m_Params.VerifyHeadSide( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nHeadSide)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nHeadSide = nVal ;
|
||||
return true ;
|
||||
case MPA_STEPTYPE :
|
||||
if ( ! m_Params.VerifyStepType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nStepType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nStepType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADLINKTYPE :
|
||||
if ( ! m_Params.VerifyLeadLinkType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadLinkType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadLinkType = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -262,66 +279,88 @@ SawRoughing::SetParam( int nType, double dVal)
|
||||
case MPA_SPEED :
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR)
|
||||
m_Params.m_dSpeed = 0 ;
|
||||
else
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
if ( AreSameAngValue( dVal, m_TParams.m_dSpeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameAngValue( dVal, m_Params.m_dSpeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dStartFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dStartFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dEndFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dEndFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dEndFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dTipFeed = 0 ;
|
||||
else
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dTipFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dTipFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsR = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dOffsR))
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dOffsR))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR)
|
||||
m_Params.m_dOffsL = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dOffsL))
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dOffsL))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH: {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartPos))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_SIDESTEP :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dSideStep))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSideStep = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStep))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_APPROX :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dApprox))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dApprox = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTADDLEN :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartAddLen))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDADDLEN :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dEndAddLen))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndAddLen = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -337,25 +376,37 @@ SawRoughing::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@@ -381,6 +432,9 @@ SawRoughing::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty()) ;
|
||||
}
|
||||
|
||||
@@ -397,12 +451,29 @@ bool
|
||||
SawRoughing::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero tagli nella lavorazione
|
||||
int nCurrCuts = m_nCuts ;
|
||||
m_nCuts = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2601, "Error in SawRoughing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nCuts = nCurrCuts ;
|
||||
LOG_INFO( GetEMkLogger(), "SawRoughing apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
// se non c'è, lo aggiungo
|
||||
@@ -419,12 +490,6 @@ SawRoughing::Apply( bool bRecalc, bool bPostApply)
|
||||
m_pGeomDB->EmptyGroup( nAuxId) ;
|
||||
}
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2601, "Error in SawRoughing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se necessario, preparo geometria e la inserisco sotto la geometria ausiliaria
|
||||
if ( bRecalc && ! AdjustGeometry( nAuxId))
|
||||
return false ;
|
||||
@@ -451,7 +516,15 @@ SawRoughing::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -40,6 +40,8 @@ class SawRoughing : public Machining
|
||||
{ return OPER_SAWROUGHING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nCuts == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -105,5 +107,6 @@ class SawRoughing : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
SawRoughingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nCuts ; // numero di tagli generati
|
||||
} ;
|
||||
|
||||
+150
-29
@@ -89,6 +89,7 @@ Sawing::Clone( void) const
|
||||
pSaw->m_nPhase = m_nPhase ;
|
||||
pSaw->m_Params = m_Params ;
|
||||
pSaw->m_TParams = m_TParams ;
|
||||
pSaw->m_nStatus = m_nStatus ;
|
||||
pSaw->m_nCuts = m_nCuts ;
|
||||
}
|
||||
catch( ...) {
|
||||
@@ -112,6 +113,7 @@ Sawing::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
for ( int i = 0 ; i < m_TParams.GetSize() ; ++ i)
|
||||
sOut += m_TParams.ToString( i) + szNewLine ;
|
||||
sOut += KEY_NUM + EQUAL + ToString( m_nCuts) + szNewLine ;
|
||||
sOut += KEY_STAT + EQUAL + ToString( m_nStatus) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -121,7 +123,7 @@ bool
|
||||
Sawing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 2 ;
|
||||
int nSize = 1 + m_Params.GetSize() + m_TParams.GetSize() + 3 ;
|
||||
vString.insert( vString.begin(), nSize, "") ;
|
||||
int k = - 1 ;
|
||||
if ( ! SetVal( KEY_IDS, m_vId, vString[++k]))
|
||||
@@ -134,6 +136,8 @@ Sawing::Save( int nBaseId, STRVECTOR& vString) const
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_NUM, m_nCuts, vString[++k]))
|
||||
return false ;
|
||||
if ( ! SetVal( KEY_STAT, m_nStatus, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
@@ -174,7 +178,7 @@ Sawing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
string sKey, sVal ;
|
||||
SplitFirst( vString[++k], "=", sKey, sVal) ;
|
||||
// leggo
|
||||
if ( sKey == KEY_PHASE){
|
||||
if ( sKey == KEY_PHASE) {
|
||||
if ( ! FromString( sVal, m_nPhase))
|
||||
return false ;
|
||||
}
|
||||
@@ -182,6 +186,10 @@ Sawing::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! FromString( sVal, m_nCuts))
|
||||
return false ;
|
||||
}
|
||||
else if ( sKey == KEY_STAT) {
|
||||
if ( ! FromString( sVal, m_nStatus))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -194,6 +202,7 @@ Sawing::Sawing( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nCuts = 0 ;
|
||||
}
|
||||
|
||||
@@ -232,6 +241,8 @@ Sawing::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
if ( bVal != m_Params.m_bInvert)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_bInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -246,41 +257,57 @@ Sawing::SetParam( int nType, int nVal)
|
||||
case MPA_WORKSIDE :
|
||||
if ( ! m_Params.VerifyWorkSide( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nWorkSide)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nWorkSide = nVal ;
|
||||
return true ;
|
||||
case MPA_HEADSIDE :
|
||||
if ( ! m_Params.VerifyHeadSide( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nHeadSide)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nHeadSide = nVal ;
|
||||
return true ;
|
||||
case MPA_STEPTYPE :
|
||||
if ( ! m_Params.VerifyStepType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nStepType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nStepType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADINTYPE :
|
||||
if ( ! m_Params.VerifyLeadInType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadInType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadInType = nVal ;
|
||||
return true ;
|
||||
case MPA_EXTLINKTYPE :
|
||||
if ( ! m_Params.VerifyExtLinkType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nExtLinkType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nExtLinkType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADOUTTYPE :
|
||||
if ( ! m_Params.VerifyLeadOutType( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nLeadOutType)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nLeadOutType = nVal ;
|
||||
return true ;
|
||||
case MPA_CURVEUSE :
|
||||
if ( ! m_Params.VerifyCurveUse( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nCurveUse)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nCurveUse = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! m_Params.VerifySolCh( nVal))
|
||||
return false ;
|
||||
if ( nVal != m_Params.m_nSolCh)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_nSolCh = nVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -295,69 +322,129 @@ Sawing::SetParam( int nType, double dVal)
|
||||
case MPA_SPEED :
|
||||
if ( ! m_TParams.VerifySpeed( dVal))
|
||||
return false ;
|
||||
m_Params.m_dSpeed = ( AreSameAngValue( dVal, m_TParams.m_dSpeed) ? 0 : dVal) ;
|
||||
if ( AreSameAngValue( dVal, m_TParams.m_dSpeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameAngValue( dVal, m_Params.m_dSpeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
m_Params.m_dFeed = ( AreSameLenValue( dVal, m_TParams.m_dFeed) ? 0 : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
m_Params.m_dStartFeed = ( AreSameLenValue( dVal, m_TParams.m_dStartFeed) ? 0 : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dStartFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
m_Params.m_dEndFeed = ( AreSameLenValue( dVal, m_TParams.m_dEndFeed) ? 0 : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dEndFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dEndFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
m_Params.m_dTipFeed = ( AreSameLenValue( dVal, m_TParams.m_dTipFeed) ? 0 : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dTipFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dTipFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_BACKFEED :
|
||||
m_Params.m_dBackFeed = ( AreSameLenValue( dVal, m_TParams.m_dFeed) ? 0 : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dFeed))
|
||||
dVal = 0 ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dBackFeed))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dBackFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
m_Params.m_dOffsR = ( AreSameLenValue( dVal, m_TParams.m_dOffsR) ? UNKNOWN_PAR : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dOffsR))
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dOffsR))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
m_Params.m_dOffsL = ( AreSameLenValue( dVal, m_TParams.m_dOffsL) ? UNKNOWN_PAR : dVal) ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_Params.m_sDepth = ToString( dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_TParams.m_dOffsL))
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dOffsL))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH: {
|
||||
string sVal = ToString( dVal) ;
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
} return true ;
|
||||
case MPA_STARTPOS :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartPos))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStep))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_STEPBACK :
|
||||
m_Params.m_dStepBack = ( AreSameLenValue( dVal, m_Params.m_dStep) ? UNKNOWN_PAR : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_Params.m_dStep))
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStepBack))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStepBack = dVal ;
|
||||
return true ;
|
||||
case MPA_STEPEXTARC :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStepExtArc))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStepExtArc = dVal ;
|
||||
return true ;
|
||||
case MPA_STEPINTARC :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStepIntArc))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStepIntArc = dVal ;
|
||||
return true ;
|
||||
case MPA_STEPSIDEANG :
|
||||
m_Params.m_dStepSideAng = ( AreSameLenValue( dVal, m_Params.m_dStep) ? UNKNOWN_PAR : dVal) ;
|
||||
if ( AreSameLenValue( dVal, m_Params.m_dStep))
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStepSideAng))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStepSideAng = dVal ;
|
||||
return true ;
|
||||
case MPA_STEPSIDEANGBACK :
|
||||
if ( AreSameLenValue( dVal, m_Params.m_dStepSideAng) ||
|
||||
( IsUnknownValue( m_Params.m_dStepSideAng) && AreSameLenValue( dVal, m_Params.m_dStep)))
|
||||
m_Params.m_dStepSideAngBack = UNKNOWN_PAR ;
|
||||
else
|
||||
m_Params.m_dStepSideAngBack = dVal ;
|
||||
dVal = UNKNOWN_PAR ;
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStepSideAngBack))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStepSideAngBack = dVal ;
|
||||
return true ;
|
||||
case MPA_SIDEANGLE :
|
||||
if ( ! m_Params.VerifySideAngle( dVal))
|
||||
return false ;
|
||||
if ( ! AreSameAngValue( dVal, m_Params.m_dSideAngle))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dSideAngle = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTADDLEN :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dStartAddLen))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dStartAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDADDLEN :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dEndAddLen))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dEndAddLen = dVal ;
|
||||
return true ;
|
||||
case MPA_APPROX :
|
||||
if ( ! AreSameLenValue( dVal, m_Params.m_dApprox))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_dApprox = dVal ;
|
||||
return true ;
|
||||
}
|
||||
@@ -373,25 +460,37 @@ Sawing::SetParam( int nType, const string& sVal)
|
||||
const ToolData* pTdata ;
|
||||
if ( ! m_Params.VerifyTool( m_pMchMgr->GetCurrToolsMgr(), sVal, pTdata))
|
||||
return false ;
|
||||
if ( ! SameTool( m_TParams, *pTdata))
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sToolName = sVal ;
|
||||
m_Params.m_ToolUuid = pTdata->m_Uuid ;
|
||||
m_TParams = *pTdata ;
|
||||
} return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
if ( sVal != m_Params.m_sDepth)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
if ( sVal != m_Params.m_sSysNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sSysNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
if ( sVal != m_Params.m_sUserNotes)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sUserNotes = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
if ( sVal != m_Params.m_sInitAngs)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sInitAngs = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
if ( sVal != m_Params.m_sBlockedAxis)
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
m_Params.m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@@ -418,6 +517,9 @@ Sawing::SetGeometry( const SELVECTOR& vIds)
|
||||
// posso aggiungere alla lista
|
||||
m_vId.emplace_back( Id) ;
|
||||
}
|
||||
// aggiorno lo stato
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
// restituisco presenza geometria da lavorare
|
||||
return ( ! m_vId.empty() || vIds.empty()) ;
|
||||
}
|
||||
|
||||
@@ -495,12 +597,29 @@ bool
|
||||
Sawing::Apply( bool bRecalc, bool bPostApply)
|
||||
{
|
||||
// reset numero tagli nella lavorazione
|
||||
int nCurrCuts = m_nCuts ;
|
||||
m_nCuts = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
bool bToolChanged = true ;
|
||||
if ( ! UpdateToolData( &bToolChanged)) {
|
||||
m_pMchMgr->SetLastError( 2201, "Error in Sawing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
m_nCuts = nCurrCuts ;
|
||||
LOG_INFO( GetEMkLogger(), "Sawing apply skipped : status already ok") ;
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
bool bChain = false ;
|
||||
@@ -519,12 +638,6 @@ Sawing::Apply( bool bRecalc, bool bPostApply)
|
||||
bChain = true ;
|
||||
}
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
m_pMchMgr->SetLastError( 2201, "Error in Sawing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se necessario, eseguo concatenamento ed inserisco i percorsi sotto la geometria ausiliaria
|
||||
if ( bChain && ! Chain( nAuxId)) {
|
||||
m_pMchMgr->SetLastError( 2214, "Error in Sawing : Chaining failed") ;
|
||||
@@ -563,7 +676,15 @@ Sawing::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcAndSetBBox( nClId) ;
|
||||
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
return Update( bPostApply) ;
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
|
||||
// aggiorno stato della lavorazione
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
// dichiaro successiva da aggiornare
|
||||
UpdateFollowingOperationsStatus( MCH_ST_OTH_MODIF) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -41,6 +41,8 @@ class Sawing : public Machining
|
||||
{ return OPER_SAWING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nCuts == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
@@ -155,5 +157,6 @@ class Sawing : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
SawingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nCuts ; // numero di tagli generati
|
||||
} ;
|
||||
|
||||
Reference in New Issue
Block a user