Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ca72ddf1a4 |
+8
-14
@@ -503,15 +503,13 @@ Chiseling::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || m_nStatus == MCH_ST_NO_POSTAPPL)) {
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
// confermo i percorsi di lavorazione
|
||||
m_nChisels = nCurrChisels ;
|
||||
string sLog = string( "Chiseling apply skipped : status ") + ( m_nStatus == MCH_ST_OK ? "already ok" : "no postapply") ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), sLog.c_str()) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Chiseling apply skipped : status already ok") ;
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Update done") ;
|
||||
// esco con successo
|
||||
return true ;
|
||||
@@ -769,14 +767,10 @@ Chiseling::UpdateToolData( bool* pbChanged)
|
||||
ToolsMgr* pTMgr = m_pMchMgr->GetCurrToolsMgr() ;
|
||||
if ( pTMgr == nullptr)
|
||||
return false ;
|
||||
// recupero l'utensile nel DB utensili (se fallisce con UUID provo con il nome)
|
||||
// recupero l'utensile nel DB utensili
|
||||
const ToolData* pTdata = pTMgr->GetTool( m_Params.m_ToolUuid) ;
|
||||
if ( pTdata == nullptr) {
|
||||
pTdata = pTMgr->GetTool( m_Params.m_sToolName) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
m_Params.m_ToolUuid = m_TParams.m_Uuid ;
|
||||
}
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
// salvo posizione TC, testa e uscita originali
|
||||
string sOrigTcPos = m_TParams.m_sTcPos ;
|
||||
string sOrigHead = m_TParams.m_sHead ;
|
||||
@@ -1016,7 +1010,7 @@ Chiseling::GetCurves( SelData Id, ICURVEPLIST& lstPC)
|
||||
// la porto in globale
|
||||
pCrvCompo->ToGlob( frGlob) ;
|
||||
// sistemazioni varie
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, V_NULL, 0) ;
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, 0) ;
|
||||
// la restituisco
|
||||
lstPC.emplace_back( Release( pCrvCompo)) ;
|
||||
return true ;
|
||||
@@ -1052,7 +1046,7 @@ Chiseling::GetCurves( SelData Id, ICURVEPLIST& lstPC)
|
||||
// la porto in globale
|
||||
pCrvCompo->ToGlob( frGlob) ;
|
||||
// sistemazioni varie
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, V_NULL, 0) ;
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, 0) ;
|
||||
// la restituisco
|
||||
lstPC.emplace_back( Release( pCrvCompo)) ;
|
||||
}
|
||||
@@ -1523,7 +1517,7 @@ Chiseling::GenerateChiselingCl( const SqHole& hole, int nPathId)
|
||||
SetAuxDir( hole.vtAux) ;
|
||||
// 1 -> punto approccio
|
||||
SetFlag( 1) ;
|
||||
double dAppr = GetSafeZ() ;
|
||||
double dAppr = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
Point3d ptP1 = hole.ptIni + hole.vtExtr * dAppr ;
|
||||
if ( AddRapidStart( ptP1) == GDB_ID_NULL)
|
||||
return false ;
|
||||
|
||||
+50
-271
@@ -21,24 +21,22 @@
|
||||
#include "/EgtDev/Include/EGkAngle.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
#include "/EgtDev/Include/EGkUserObjFactory.h"
|
||||
#include "/EgtDev/Include/EgtNumUtils.h"
|
||||
#include "/EgtDev/Include/EGnStringKeyVal.h"
|
||||
#include "/EgtDev/Include/EGnFileUtils.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//------------------------------ Errors --------------------------------------
|
||||
// 2001 = "Error moving axis xx"
|
||||
// 2002 = "Error adding fixture xx"
|
||||
// 2003 = "Error placing fixture xx"
|
||||
// 2004 = "Error in MoveToCornerRawPart xx"
|
||||
// 2005 = "Error in MoveToCenterRawPart xx"
|
||||
// 2006 = "Error in ApplyRotationToRawPart xx"
|
||||
// 2007 = "Error in OnSpecialApplyDisposition (xxx)"
|
||||
// 2008 = "Error in Disposition : axes values not calculable"
|
||||
// 2009 = "Error in Disposition : outstroke xxx"
|
||||
// 2010 = "Error in Disposition : link movements not calculable"
|
||||
// 2011 = "Error in Disposition : link outstroke xxx"
|
||||
// 2001 = "Error adding fixture xx"
|
||||
// 2002 = "Error placing fixture xx"
|
||||
// 2003 = "Error in MoveToCornerRawPart xx"
|
||||
// 2004 = "Error in MoveToCenterRawPart xx"
|
||||
// 2005 = "Error in ApplyRotationToRawPart xx"
|
||||
// 2006 = "Error in OnSpecialApplyDisposition (xxx)"
|
||||
// 2007 = "Error in Disposition : axes values not calculable"
|
||||
// 2008 = "Error in Disposition : outstroke xxx"
|
||||
// 2009 = "Error in Disposition : link movements not calculable"
|
||||
// 2010 = "Error in Disposition : link outstroke xxx"
|
||||
// 2051 = "Table Ref1 changed : (xyz) -> (XYZ)"
|
||||
// 2052 = "Warning in Disposition : No shifts"
|
||||
// 2053 = "Warning in OnSpecialApplyDisposition (xxx)"
|
||||
@@ -48,15 +46,11 @@ static string DIS_TABLE = "Tab" ;
|
||||
static string DIS_PHASE = "Ph" ;
|
||||
static string DIS_REF1 = "Ref1" ;
|
||||
static string DIS_AREA1 = "Area1" ;
|
||||
static string DIS_AXD_TOT = "AxT" ;
|
||||
static string DIS_AXD_NAME = "AxN" ;
|
||||
static string DIS_AXD_POS = "AxP" ;
|
||||
static string DIS_FXD_TOT = "FxT" ;
|
||||
static string DIS_FXD_NAME = "FxN" ;
|
||||
static string DIS_FXD_POS = "FxP" ;
|
||||
static string DIS_FXD_ANG = "FxA" ;
|
||||
static string DIS_FXD_MOV = "FxM" ;
|
||||
static string DIS_FXD_LINK = "FxL" ;
|
||||
static string DIS_MVD_TOT = "MvT" ;
|
||||
static string DIS_MVD_ID = "MvI" ;
|
||||
static string DIS_MVD_TYPE = "MvT" ;
|
||||
@@ -98,7 +92,6 @@ Disposition::Clone( void) const
|
||||
pDisp->m_b3Area1 = m_b3Area1 ;
|
||||
pDisp->m_dAreaOffset = m_dAreaOffset ;
|
||||
pDisp->m_bTabOk = m_bTabOk ;
|
||||
pDisp->m_vAxData = m_vAxData ;
|
||||
pDisp->m_vFixData = m_vFixData ;
|
||||
pDisp->m_vMvrData = m_vMvrData ;
|
||||
pDisp->m_sHead = m_sHead ;
|
||||
@@ -127,17 +120,12 @@ Disposition::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
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& AxData : m_vAxData) {
|
||||
sOut += "AxD=" + AxData.sName + "," +
|
||||
ToString( AxData.dPos) + szNewLine ;
|
||||
}
|
||||
for ( const auto& FixData : m_vFixData) {
|
||||
sOut += "FxD=" + FixData.sName + "," +
|
||||
ToString( FixData.nId) + ",(" +
|
||||
ToString( FixData.ptPos) + ")," +
|
||||
ToString( FixData.dAng) + "," +
|
||||
ToString( FixData.dMov) + "," +
|
||||
( IsEmptyOrSpaces( FixData.sTaLink) ? "__" : FixData.sTaLink) + szNewLine ;
|
||||
ToString( FixData.dMov) + szNewLine ;
|
||||
}
|
||||
for ( const auto& MvrData : m_vMvrData) {
|
||||
sOut += "MvD=" + ToString( MvrData.nRawId) + "," ;
|
||||
@@ -171,14 +159,12 @@ Disposition::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int k = - 1 ;
|
||||
int nAxdTot = int( m_vAxData.size()) ;
|
||||
int nAxdLines = ( nAxdTot == 0 ? 0 : 1 + 2 * nAxdTot) ;
|
||||
int nFxdTot = int( m_vFixData.size()) ;
|
||||
int nFxdLines = 1 + 5 * nFxdTot ;
|
||||
int nFxdLines = 1 + 4 * nFxdTot ;
|
||||
int nMvdTot = int( m_vMvrData.size()) ;
|
||||
int nMvdLines = 1 + 4 * nMvdTot ;
|
||||
int nOther = 7 ;
|
||||
vString.insert( vString.begin(), 4 + nAxdLines + nFxdLines + nMvdLines + nOther, "") ;
|
||||
vString.insert( vString.begin(), 4 + nFxdLines + nMvdLines + nOther, "") ;
|
||||
// Nome
|
||||
if ( ! SetVal( DIS_TABLE, m_sTabName, vString[++k]))
|
||||
return false ;
|
||||
@@ -191,16 +177,6 @@ Disposition::Save( int nBaseId, STRVECTOR& vString) const
|
||||
// Prima area
|
||||
if ( ! SetVal( DIS_AREA1, m_b3Area1, vString[++k]))
|
||||
return false ;
|
||||
// Dati assi (se presenti)
|
||||
if ( nAxdTot > 0) {
|
||||
if ( ! SetVal( DIS_AXD_TOT, nAxdTot, vString[++k]))
|
||||
return false ;
|
||||
for ( const auto& AxData : m_vAxData) {
|
||||
if ( ! SetVal( DIS_AXD_NAME, AxData.sName, vString[++k]) ||
|
||||
! SetVal( DIS_AXD_POS, AxData.dPos, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// Dati sottopezzi
|
||||
if ( ! SetVal( DIS_FXD_TOT, nFxdTot, vString[++k]))
|
||||
return false ;
|
||||
@@ -208,8 +184,7 @@ Disposition::Save( int nBaseId, STRVECTOR& vString) const
|
||||
if ( ! SetVal( DIS_FXD_NAME, FixData.sName, vString[++k]) ||
|
||||
! SetVal( DIS_FXD_POS, FixData.ptPos, vString[++k]) ||
|
||||
! SetVal( DIS_FXD_ANG, FixData.dAng, vString[++k]) ||
|
||||
! SetVal( DIS_FXD_MOV, FixData.dMov, vString[++k]) ||
|
||||
! SetVal( DIS_FXD_LINK, FixData.sTaLink, vString[++k]))
|
||||
! SetVal( DIS_FXD_MOV, FixData.dMov, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
// Dati posizionamento grezzi
|
||||
@@ -262,27 +237,12 @@ Disposition::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
// prima area
|
||||
if ( ! GetVal( vString[++k], DIS_AREA1, m_b3Area1))
|
||||
return false ;
|
||||
// dati assi opzionali
|
||||
int nAxdTot = 0 ;
|
||||
if ( ! GetVal( vString[++k], DIS_AXD_TOT, nAxdTot))
|
||||
-- k ;
|
||||
int nAxdLines = ( nAxdTot == 0 ? 0 : 1 + 2 * nAxdTot) ;
|
||||
if ( nAxdTot > 0) {
|
||||
if ( int( vString.size()) < 3 + nAxdLines + 1)
|
||||
return false ;
|
||||
m_vAxData.insert( m_vAxData.begin(), nAxdTot, AxisData()) ;
|
||||
for ( auto& AxData : m_vAxData) {
|
||||
if ( ! GetVal( vString[++k], DIS_AXD_NAME, AxData.sName) ||
|
||||
! GetVal( vString[++k], DIS_AXD_POS, AxData.dPos))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// dati sottopezzi
|
||||
int nFxdTot ;
|
||||
if ( ! GetVal( vString[++k], DIS_FXD_TOT, nFxdTot))
|
||||
return false ;
|
||||
int nFxdLines = 1 + 3 * nFxdTot ;
|
||||
if ( int( vString.size()) < 3 + nAxdLines + nFxdLines + 1)
|
||||
if ( int( vString.size()) < 3 + nFxdLines + 1)
|
||||
return false ;
|
||||
m_vFixData.insert( m_vFixData.begin(), nFxdTot, FixtureData()) ;
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
@@ -296,17 +256,13 @@ Disposition::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! GetVal( vString[++k], DIS_FXD_MOV, FixData.dMov))
|
||||
-- k ;
|
||||
}
|
||||
if ( k + 1 < int( vString.size())) {
|
||||
if ( ! GetVal( vString[++k], DIS_FXD_LINK, FixData.sTaLink))
|
||||
-- k ;
|
||||
}
|
||||
}
|
||||
// dati posizionamento grezzi
|
||||
int nMvdTot ;
|
||||
if ( ! GetVal( vString[++k], DIS_MVD_TOT, nMvdTot))
|
||||
return false ;
|
||||
int nMvdLines = 1 + 4 * nMvdTot ;
|
||||
if ( int( vString.size()) < 3 + nAxdLines + nFxdLines + nMvdLines)
|
||||
if ( int( vString.size()) < 3 + nFxdLines + nMvdLines)
|
||||
return false ;
|
||||
m_vMvrData.insert( m_vMvrData.begin(), nMvdTot, MoveRawData()) ;
|
||||
for ( auto& MvrData : m_vMvrData) {
|
||||
@@ -479,16 +435,6 @@ Disposition::Apply( bool bVerifyTab)
|
||||
if ( ( ! m_bTabOk || bVerifyTab) && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
bool bOk = true ;
|
||||
// annullo movimento assi
|
||||
m_pMchMgr->ResetAllAxesPos( false, true) ;
|
||||
// aggiornamento movimenti assi
|
||||
for ( auto& AxData : m_vAxData) {
|
||||
if ( ! m_pMchMgr->SetAxisPos( AxData.sName, AxData.dPos)) {
|
||||
string sOut = "Error moving axis " + AxData.sName ;
|
||||
m_pMchMgr->SetLastError( 2001, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
// aggiornamento sottopezzi
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
// se sottopezzo da caricare
|
||||
@@ -496,7 +442,7 @@ Disposition::Apply( bool bVerifyTab)
|
||||
int nId = AddFixture( FixData.sName, GDB_ID_NULL, FixData.ptPos, FixData.dAng, FixData.dMov, false) ;
|
||||
if ( nId == GDB_ID_NULL) {
|
||||
string sOut = "Error adding fixture " + FixData.sName ;
|
||||
m_pMchMgr->SetLastError( 2002, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2001, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
else
|
||||
@@ -506,7 +452,7 @@ Disposition::Apply( bool bVerifyTab)
|
||||
else {
|
||||
if ( ! PlaceFixture( FixData.nId, FixData.ptPos, FixData.dAng, FixData.dMov)) {
|
||||
string sOut = "Error placing fixture " + ToString( FixData.nId) ;
|
||||
m_pMchMgr->SetLastError( 2003, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2002, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
@@ -528,21 +474,21 @@ Disposition::Apply( bool bVerifyTab)
|
||||
case MoveRawData::COR :
|
||||
if ( ! MoveToCornerRawPart( vMvrData.nRawId, vMvrData.ptP, vMvrData.nFlag, false, false)) {
|
||||
string sOut = "Error in MoveToCornerRawPart " + ToString( vMvrData.nRawId) ;
|
||||
m_pMchMgr->SetLastError( 2004, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2003, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
break ;
|
||||
case MoveRawData::CEN :
|
||||
if ( ! MoveToCenterRawPart( vMvrData.nRawId, vMvrData.ptP, vMvrData.nFlag, false, false)) {
|
||||
string sOut = "Error in MoveToCenterRawPart " + ToString( vMvrData.nRawId) ;
|
||||
m_pMchMgr->SetLastError( 2005, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2004, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
break ;
|
||||
case MoveRawData::ROT :
|
||||
if ( ! ApplyRotationToRawPart( vMvrData.nRawId, vMvrData.ptP.x, vMvrData.ptP.y, vMvrData.ptP.z, false)) {
|
||||
string sOut = "Error in ApplyRotationToRawPart " + ToString( vMvrData.nRawId) ;
|
||||
m_pMchMgr->SetLastError( 2006, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2005, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
break ;
|
||||
@@ -574,69 +520,6 @@ Disposition::IsInTable( const BBox3d& b3B)
|
||||
return b3AllArea.EnclosesXY( b3B) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::MoveAxis( const string& sName, double dPos)
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// verifico tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// verifico sia un asse di disposizione (ovvero dipendente dalla tavola)
|
||||
if ( ! m_pMchMgr->IsDispositionAxis( sName, m_sTabName))
|
||||
return false ;
|
||||
// cerco eventuale movimento dello stesso asse già inserito
|
||||
int nInd = -1 ;
|
||||
for ( int i = 0 ; i < int( m_vAxData.size()) ; ++ i) {
|
||||
if ( m_vAxData[i].sName == sName) {
|
||||
nInd = i ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// eseguo movimento
|
||||
if ( ! m_pMchMgr->SetAxisPos( sName, dPos))
|
||||
return false ;
|
||||
// salvo movimento
|
||||
if ( nInd < 0)
|
||||
m_vAxData.emplace_back( sName, dPos) ;
|
||||
else
|
||||
m_vAxData[nInd].dPos = dPos ;
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::RemoveAxis( const string& sName)
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// verifico tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// verifico sia un asse di disposizione (ovvero dipendente dalla tavola)
|
||||
if ( ! m_pMchMgr->IsDispositionAxis( sName, m_sTabName))
|
||||
return false ;
|
||||
// cerco eventuale movimento dello stesso asse già inserito
|
||||
int nInd = -1 ;
|
||||
for ( int i = 0 ; i < int( m_vAxData.size()) ; ++ i) {
|
||||
if ( m_vAxData[i].sName == sName) {
|
||||
nInd = i ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// se non trovato, non devo fare alcunché
|
||||
if ( nInd < 0)
|
||||
return true ;
|
||||
// rimetto asse in home e rimuovo movimento dalla lista
|
||||
m_pMchMgr->ResetAxisPos( sName) ;
|
||||
m_vAxData.erase( m_vAxData.begin() + nInd) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Disposition::AddFixture( const string& sName, int nId, const Point3d& ptPos, double dAngDeg,
|
||||
@@ -734,26 +617,20 @@ Disposition::AddFixture( const string& sName, int nId, const Point3d& ptPos, dou
|
||||
return GDB_ID_NULL ;
|
||||
}
|
||||
// muovo eventuale parte mobile
|
||||
double dMovEff = dMov ;
|
||||
int nMobId = m_pGeomDB->GetFirstNameInGroup( nFixtId, FXT_MOBILE) ;
|
||||
if ( nMobId != GDB_ID_NULL) {
|
||||
double dMinVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MINPOS, dMinVal) ;
|
||||
double dMaxVal = INFINITO ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MAXPOS, dMaxVal) ;
|
||||
double dCurrVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_CPOS, dCurrVal) ;
|
||||
dMovEff = Clamp( dMov, dMinVal, dMaxVal) ;
|
||||
if ( abs( dMovEff - dCurrVal) > EPS_SMALL) {
|
||||
if ( abs( dMov - dCurrVal) > EPS_SMALL) {
|
||||
Vector3d vtDir = Z_AX ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MOVEDIR, vtDir) ;
|
||||
m_pGeomDB->TranslateGroup( nMobId, ( dMovEff - dCurrVal) * vtDir) ;
|
||||
m_pGeomDB->SetInfo( nMobId, FXT_MOB_CPOS, dMovEff) ;
|
||||
m_pGeomDB->TranslateGroup( nMobId, (dMov - dCurrVal) * vtDir) ;
|
||||
m_pGeomDB->SetInfo( nMobId, FXT_MOB_CPOS, dMov) ;
|
||||
}
|
||||
}
|
||||
// se da aggiungere alla lista
|
||||
if ( bAddToList) {
|
||||
m_vFixData.emplace_back( sName, nFixtId, ptPos, dAngDeg, dMovEff) ;
|
||||
m_vFixData.emplace_back( sName, nFixtId, ptPos, dAngDeg, dMov) ;
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
}
|
||||
return nFixtId ;
|
||||
@@ -857,31 +734,6 @@ Disposition::RotateFixture( int nId, double dDeltaAngDeg)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::SetFixtureLink( int nId, const string& sTaLink)
|
||||
{
|
||||
// verifica validità sottopezzo
|
||||
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixtureInGroup( nId, false))
|
||||
return false ;
|
||||
// verifico aggiornamento tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// verifico ch eil link sia un asse di disposizione (ovvero dipendente dalla tavola)
|
||||
if ( ! m_pMchMgr->IsDispositionAxis( sTaLink, m_sTabName))
|
||||
return false ;
|
||||
// aggiorno la posizione dell'oggetto nel vettore dei comandi
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
if ( FixData.nId == nId) {
|
||||
FixData.sTaLink = sTaLink ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::MoveFixtureMobile( int nId, double dDeltaMov)
|
||||
@@ -892,72 +744,22 @@ Disposition::MoveFixtureMobile( int nId, double dDeltaMov)
|
||||
// verifico aggiornamento tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// recupero la parte mobile
|
||||
// muovo eventuale parte mobile
|
||||
int nMobId = m_pGeomDB->GetFirstNameInGroup( nId, FXT_MOBILE) ;
|
||||
if ( nMobId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// recupero limiti di corsa e posizione
|
||||
double dMinVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MINPOS, dMinVal) ;
|
||||
double dMaxVal = INFINITO ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MAXPOS, dMaxVal) ;
|
||||
double dCurrVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_CPOS, dCurrVal) ;
|
||||
// verifico movimento richiesto e fattibile non nullo
|
||||
double dDeltaEff = Clamp( dCurrVal + dDeltaMov, dMinVal, dMaxVal) - dCurrVal ;
|
||||
if ( abs( dDeltaEff) < EPS_SMALL)
|
||||
return true ;
|
||||
// eseguo il movimento
|
||||
Vector3d vtDir = Z_AX ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MOVEDIR, vtDir) ;
|
||||
m_pGeomDB->TranslateGroup( nMobId, dDeltaEff * vtDir) ;
|
||||
m_pGeomDB->SetInfo( nMobId, FXT_MOB_CPOS, ( dCurrVal + dDeltaEff)) ;
|
||||
// aggiorno la posizione dell'oggetto nel vettore dei comandi
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
if ( FixData.nId == nId) {
|
||||
FixData.dMov += dDeltaEff ;
|
||||
break ;
|
||||
}
|
||||
if ( nMobId != GDB_ID_NULL) {
|
||||
double dCurrVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_CPOS, dCurrVal) ;
|
||||
if ( abs( dDeltaMov) > EPS_SMALL) {
|
||||
Vector3d vtDir = Z_AX ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MOVEDIR, vtDir) ;
|
||||
m_pGeomDB->TranslateGroup( nMobId, dDeltaMov * vtDir) ;
|
||||
m_pGeomDB->SetInfo( nMobId, FXT_MOB_CPOS, ( dCurrVal + dDeltaMov)) ;
|
||||
}
|
||||
}
|
||||
// imposto stato a modificato
|
||||
m_nStatus |= MCH_ST_PARAM_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::SetFixtureMobile( int nId, double dMov)
|
||||
{
|
||||
// verifica validità sottopezzo
|
||||
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixtureInGroup( nId, false))
|
||||
return false ;
|
||||
// verifico aggiornamento tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// recupero la parte mobile
|
||||
int nMobId = m_pGeomDB->GetFirstNameInGroup( nId, FXT_MOBILE) ;
|
||||
if ( nMobId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// recupero limiti di corsa e posizione
|
||||
double dMinVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MINPOS, dMinVal) ;
|
||||
double dMaxVal = INFINITO ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MAXPOS, dMaxVal) ;
|
||||
double dCurrVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_CPOS, dCurrVal) ;
|
||||
// verifico movimento richiesto e fattibile non nullo
|
||||
double dMovEff = Clamp( dMov, dMinVal, dMaxVal) ;
|
||||
if ( abs( dMovEff - dCurrVal) < EPS_SMALL)
|
||||
return true ;
|
||||
// eseguo il movimento
|
||||
Vector3d vtDir = Z_AX ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MOVEDIR, vtDir) ;
|
||||
m_pGeomDB->TranslateGroup( nMobId, ( dMovEff - dCurrVal) * vtDir) ;
|
||||
m_pGeomDB->SetInfo( nMobId, FXT_MOB_CPOS, dMovEff) ;
|
||||
// aggiorno la posizione dell'oggetto nel vettore dei comandi
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
if ( FixData.nId == nId) {
|
||||
FixData.dMov = dMovEff ;
|
||||
FixData.dMov += dDeltaMov ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
@@ -1005,21 +807,15 @@ Disposition::PlaceFixture( int nId, const Point3d& ptPos, double dAngDeg, double
|
||||
if ( abs( dAngDeg) > EPS_ANG_SMALL)
|
||||
m_pGeomDB->RotateGroup( nId, ORIG, Z_AX, dAngDeg) ;
|
||||
// muovo eventuale parte mobile
|
||||
double dMovEff = dMov ;
|
||||
int nMobId = m_pGeomDB->GetFirstNameInGroup( nId, FXT_MOBILE) ;
|
||||
if ( nMobId != GDB_ID_NULL) {
|
||||
double dMinVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MINPOS, dMinVal) ;
|
||||
double dMaxVal = INFINITO ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MAXPOS, dMaxVal) ;
|
||||
double dCurrVal = 0 ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_CPOS, dCurrVal) ;
|
||||
dMovEff = Clamp( dMov, dMinVal, dMaxVal) ;
|
||||
if ( abs( dMovEff - dCurrVal) > EPS_SMALL) {
|
||||
if ( abs( dMov - dCurrVal) > EPS_SMALL) {
|
||||
Vector3d vtDir = Z_AX ;
|
||||
m_pGeomDB->GetInfo( nMobId, FXT_MOB_MOVEDIR, vtDir) ;
|
||||
m_pGeomDB->TranslateGroup( nMobId, ( dMovEff - dCurrVal) * vtDir) ;
|
||||
m_pGeomDB->SetInfo( nMobId, FXT_MOB_CPOS, dMovEff) ;
|
||||
m_pGeomDB->TranslateGroup( nMobId, ( dMov - dCurrVal) * vtDir) ;
|
||||
m_pGeomDB->SetInfo( nMobId, FXT_MOB_CPOS, dMov) ;
|
||||
}
|
||||
}
|
||||
// aggiorno la posizione dell'oggetto nel vettore dei comandi
|
||||
@@ -1027,7 +823,7 @@ Disposition::PlaceFixture( int nId, const Point3d& ptPos, double dAngDeg, double
|
||||
if ( FixData.nId == nId) {
|
||||
FixData.ptPos = ptPos ;
|
||||
FixData.dAng = dAngDeg ;
|
||||
FixData.dMov = dMovEff ;
|
||||
FixData.dMov = dMov ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
@@ -1091,7 +887,7 @@ Disposition::MoveToCornerRawPart( int nRawId, const Point3d& ptP, int nFlag, boo
|
||||
case MCH_CR_TR :
|
||||
vtMove = ( m_ptRef1 + ptP) - Point3d( b3Raw.GetMax().x, b3Raw.GetMax().y, b3Raw.GetMin().z) ;
|
||||
break ;
|
||||
default : // MCH_CR_BL
|
||||
default : // RPCP_BL
|
||||
vtMove = ( m_ptRef1 + ptP) - b3Raw.GetMin() ;
|
||||
break ;
|
||||
case MCH_CR_BR :
|
||||
@@ -1142,7 +938,7 @@ Disposition::MoveToCenterRawPart( int nRawId, const Point3d& ptP, int nFlag, boo
|
||||
case MCH_CE_TC :
|
||||
vtMove = ( m_ptRef1 + ptP) - Point3d( ptCen.x, b3Raw.GetMax().y, ptCen.z) ;
|
||||
break ;
|
||||
default : // MCH_CE_ML
|
||||
default : // RPCE_ML
|
||||
vtMove = ( m_ptRef1 + ptP) - Point3d( b3Raw.GetMin().x, ptCen.y, ptCen.z) ;
|
||||
break ;
|
||||
case MCH_CE_MR :
|
||||
@@ -1266,7 +1062,7 @@ Disposition::RotateRawPart( int nRawId, const Vector3d& vtAx, double dAngRotDeg)
|
||||
case MCH_CR_TR :
|
||||
vtCorr = Vector3d( b3Raw.GetMax().x - b3OriRaw.GetMax().x, b3Raw.GetMax().y - b3OriRaw.GetMax().y, b3Raw.GetMin().z - b3OriRaw.GetMin().z) ;
|
||||
break ;
|
||||
default : // MCH_CR_BL
|
||||
default : // RPCP_BL
|
||||
vtCorr = Vector3d( b3Raw.GetMin().x - b3OriRaw.GetMin().x, b3Raw.GetMin().y - b3OriRaw.GetMin().y, b3Raw.GetMin().z - b3OriRaw.GetMin().z) ;
|
||||
break ;
|
||||
case MCH_CR_BR :
|
||||
@@ -1281,7 +1077,7 @@ Disposition::RotateRawPart( int nRawId, const Vector3d& vtAx, double dAngRotDeg)
|
||||
case MCH_CE_TC :
|
||||
vtCorr = Vector3d( ptCen.x - ptOriCen.x, b3Raw.GetMax().y - b3OriRaw.GetMax().y, ptCen.z - ptOriCen.z) ;
|
||||
break ;
|
||||
default : // MCH_CE_ML
|
||||
default : // RPCE_ML
|
||||
vtCorr = Vector3d( b3Raw.GetMin().x - b3OriRaw.GetMin().x, ptCen.y - ptOriCen.y, ptCen.z - ptOriCen.z) ;
|
||||
break ;
|
||||
case MCH_CE_MR :
|
||||
@@ -1450,26 +1246,10 @@ Disposition::RemoveRawPart( int nRawId)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::GetMoveAxisData( int nInd, string& sName, double& dPos) const
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// verifico l'indice
|
||||
if ( nInd < 0 || nInd >= int( m_vAxData.size()))
|
||||
return false ;
|
||||
// recupero i dati
|
||||
sName = m_vAxData[nInd].sName ;
|
||||
dPos = m_vAxData[nInd].dPos ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::GetFixtureData( int nInd, string& sName, int& nId, Point3d& ptPos,
|
||||
double& dAngDeg, double& dMov, string& sTaLink) const
|
||||
double& dAngDeg, double& dMov) const
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
@@ -1483,7 +1263,6 @@ Disposition::GetFixtureData( int nInd, string& sName, int& nId, Point3d& ptPos,
|
||||
ptPos = m_vFixData[nInd].ptPos ;
|
||||
dAngDeg = m_vFixData[nInd].dAng ;
|
||||
dMov = m_vFixData[nInd].dMov ;
|
||||
sTaLink = m_vFixData[nInd].sTaLink ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1598,7 +1377,7 @@ Disposition::SpecialApply( bool bRecalc)
|
||||
string sOut = sMsg ;
|
||||
if ( IsEmptyOrSpaces( sOut))
|
||||
sOut = " Error in " + ON_SPECIAL_APPLY + " (" + ToString( nErr) + ")" ;
|
||||
m_pMchMgr->SetLastError( 2007, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2006, sOut) ;
|
||||
return false ;
|
||||
}
|
||||
// recupero eventuale warning
|
||||
@@ -1642,18 +1421,18 @@ Disposition::SpecialUpdate( void)
|
||||
if ( ! CalculateAxesValues( "", false)) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2008, "Error in Disposition : axes values not calculable") ;
|
||||
m_pMchMgr->SetLastError( 2007, "Error in Disposition : axes values not calculable") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2009, "Error in Disposition : outstroke ") ;
|
||||
m_pMchMgr->SetLastError( 2008, "Error in Disposition : outstroke ") ;
|
||||
return false ;
|
||||
}
|
||||
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine di tutti
|
||||
if ( ! AdjustStartEndMovements()) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2010, "Error in Disposition : link movements not calculable") ;
|
||||
m_pMchMgr->SetLastError( 2009, "Error in Disposition : link movements not calculable") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2011, "Error in Disposition : link outstroke ") ;
|
||||
m_pMchMgr->SetLastError( 2010, "Error in Disposition : link outstroke ") ;
|
||||
return false ;
|
||||
}
|
||||
// assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
|
||||
|
||||
+2
-21
@@ -15,18 +15,6 @@
|
||||
|
||||
#include "Operation.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct AxisData
|
||||
{
|
||||
std::string sName ; // nome dell'asse ausiliario da muovere
|
||||
double dPos ; // posizione dell'asse
|
||||
AxisData( void)
|
||||
: sName(), dPos( 0) {}
|
||||
AxisData( const std::string& sN, double dP)
|
||||
: sName( sN), dPos( dP) {}
|
||||
} ;
|
||||
typedef std::vector<AxisData> AXDATAVECTOR ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct FixtureData
|
||||
{
|
||||
@@ -35,9 +23,8 @@ struct FixtureData
|
||||
Point3d ptPos ; // posizione nel riferimento tavola
|
||||
double dAng ; // angolo di rotazione attorno al centro
|
||||
double dMov ; // posizione eventuale parte mobile
|
||||
std::string sTaLink ; // eventuale asse di tavola a cui è fissata
|
||||
FixtureData( void)
|
||||
: sName(), nId( GDB_ID_NULL), ptPos(), dAng( 0), dMov( 0), sTaLink() {}
|
||||
: sName(), nId( GDB_ID_NULL), ptPos(), dAng( 0), dMov( 0) {}
|
||||
FixtureData( const std::string& sN, int nI, const Point3d& ptP, double dA, double dM)
|
||||
: sName( sN), nId( nI), ptPos( ptP), dAng( dA), dMov( dM) {}
|
||||
} ;
|
||||
@@ -101,17 +88,13 @@ class Disposition : public Operation
|
||||
bool GetTableRef1( Point3d& ptRef1) const ;
|
||||
bool GetTableArea1( BBox3d& b3Area1) const ;
|
||||
bool GetTableAreaOffset1( BBox3d& b3AreaOffs1) const ;
|
||||
bool MoveAxis( const std::string& sName, double dPos) ;
|
||||
bool RemoveAxis( const std::string& sName) ;
|
||||
int AddFixture( const std::string& sName, int nId, const Point3d& ptPos, double dAngDeg = 0,
|
||||
double dMov = 0, bool bAddToList = true) ;
|
||||
int GetFirstFixture( void) ;
|
||||
int GetNextFixture( int nId) ;
|
||||
bool MoveFixture( int nId, const Vector3d& vtMove) ;
|
||||
bool RotateFixture( int nId, double dDeltaAngDeg) ;
|
||||
bool SetFixtureLink( int nId, const std::string& sTaLink) ;
|
||||
bool MoveFixtureMobile( int nId, double dDeltaMov) ;
|
||||
bool SetFixtureMobile( int nId, double dMov) ;
|
||||
bool PlaceFixture( int nId, const Point3d& ptPos, double dAngDeg, double dMov) ;
|
||||
bool RemoveFixture( int nId) ;
|
||||
bool MoveToCornerRawPart( int nRawId, const Point3d& ptP, int nFlag, bool bAddToList = true, bool bVerify = true) ;
|
||||
@@ -121,9 +104,8 @@ class Disposition : public Operation
|
||||
bool ApplyRotationToRawPart( int nRawId, double dAngCDeg, double dAngADeg, double dAngC1Deg, bool bAddToList = true) ;
|
||||
bool UpdateRawPartId( int nRawId, int nNewRawId) ;
|
||||
bool RemoveRawPart( int nRawId) ;
|
||||
bool GetMoveAxisData( int nInd, std::string& sName, double& dPos) const ;
|
||||
bool GetFixtureData( int nInd, std::string& sName, int& nId, Point3d& ptPos,
|
||||
double& dAngDeg, double& dMov, std::string& sTaLink) const ;
|
||||
double& dAngDeg, double& dMov) const ;
|
||||
bool GetMoveRawData( int nInd, int& nRawId, int& nType, Point3d& ptPos, int& nFlag) const ;
|
||||
bool SpecialApply( bool bRecalc) ;
|
||||
bool SpecialUpdate( void) ;
|
||||
@@ -144,7 +126,6 @@ class Disposition : public Operation
|
||||
Point3d m_ptRef1 ; // origine 1 della tavola
|
||||
BBox3d m_b3Area1 ; // area utile 1 della tavola
|
||||
std::array<double,4> m_dAreaOffset ; // eventuali allargamenti dell'area sui 4 lati (0=XP, 1=YP, 2=XM, 3=YM)
|
||||
AXDATAVECTOR m_vAxData ; // elenco movimenti assi ausiliari
|
||||
FIXDATAVECTOR m_vFixData ; // elenco posizionamento bloccaggi
|
||||
MVRDATAVECTOR m_vMvrData ; // elenco movimenti grezzi
|
||||
std::string m_sHead ; // eventuale testa usata per muovere i pezzi
|
||||
|
||||
+375
-1688
File diff suppressed because it is too large
Load Diff
+18
-57
@@ -18,24 +18,15 @@
|
||||
#include "ToolData.h"
|
||||
#include "MachiningConst.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// definizione strutture e vettori per fori, utensili e maschere
|
||||
struct Hole ;
|
||||
struct MHDrill ;
|
||||
struct HoleInfo ;
|
||||
struct ToolInfo ;
|
||||
class ICurve ;
|
||||
typedef std::vector<MHDrill> TABMHDRILL ;
|
||||
typedef std::vector<std::vector<MHDrill>> TABMHDRILL ;
|
||||
typedef std::vector<HoleInfo> VECTORHOLE ;
|
||||
typedef std::vector<ToolInfo> VECTORTOOL ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// definizione tipologia foratura
|
||||
const int DRILL_TYPE_ERR = 0 ;
|
||||
const int DRILL_TYPE_STD = 1 ; // 1 tool
|
||||
const int DRILL_TYPE_MULTI_FIXED = 2 ; // più utensili fissi
|
||||
const int DRILL_TYPE_MULTI_SEL = 3 ; // più utensili selezionabili
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class Drilling : public Machining
|
||||
{
|
||||
@@ -77,7 +68,6 @@ class Drilling : public Machining
|
||||
bool UpdateToolData( bool* pbChanged = nullptr) override ;
|
||||
const ToolData& GetToolData( void) const override ;
|
||||
bool GetGeometry( SELVECTOR& vIds) const override ;
|
||||
bool GetSkippedGeometry( SELVECTOR& vIds) const override ;
|
||||
|
||||
public :
|
||||
Drilling( void) ;
|
||||
@@ -90,44 +80,18 @@ class Drilling : public Machining
|
||||
ICurve* GetCurve( SelData Id) ;
|
||||
bool ProcessPath( int nPathId, int nPvId, int nClId) ;
|
||||
bool GenerateHolePv( int nInd, const SelData& nCircId, const std::string& sPName, int nPvId) ;
|
||||
bool GenerateHoleCl( int nInd, const SelData& nCircId, const std::string& sPName, int nClId,
|
||||
double dMHOff = 0, const Vector3d& vtAux = V_NULL, int nDrillType = DRILL_TYPE_STD,
|
||||
INTVECTOR* pvActiveExit = nullptr, ToolInfo* currToolData = nullptr) ;
|
||||
bool AdapthPathToMainTool( int nInd, const SelData& nCircId, const std::string& sPName, int nClId,
|
||||
double dMHOff, const Vector3d& vtAux, int nDrillType,
|
||||
INTVECTOR* pvActiveExit, ToolData* currToolData) ;
|
||||
bool GenerateHoleCl( int nInd, const SelData& nCircId, const std::string& sPName, int nClId, double dMHOff = .0, Vector3d vtAux = V_NULL) ;
|
||||
bool GenerateHoleRegionPv( int nFirstId, int nCount, int nPvId) ;
|
||||
bool VerifyDiameter( double dHdiam, double dTdiam, double ddiamTol) ;
|
||||
bool VerifyHoleFromBottom( const Hole& hole, SelData Id) ;
|
||||
bool DoStandardDrilling( const Hole& hole, SelData Id, int nPathId, double nMHOff, const Vector3d& vtA, const ToolData& currToolData) ;
|
||||
bool DoPeckDrilling( const Hole& hole, SelData Id, int nPathId, double dMHOff, const Vector3d& vtA, const ToolData& currToolData) ;
|
||||
bool MultiHeadDrilling( const SELVECTOR& vId, int nClId, bool bFixed, TABMHDRILL& vDrills, double& dMHOff) ;
|
||||
bool DoStandardDrilling( const Hole& hole, SelData Id, int nPathId, double nMHOff, Vector3d vtA) ;
|
||||
bool DoPeckDrilling( const Hole& hole, SelData Id, int nPathId) ;
|
||||
bool MultiHeadDrilling( const SELVECTOR& vId, int nClId, TABMHDRILL& vDrills, double& dMHOff, bool bOrd = true) ;
|
||||
bool CalcMask( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndMT, const Vector3d& vtTool, const Vector3d& vtAux) ;
|
||||
bool CalcMaskSel( VECTORHOLE& vHoles, const VECTORTOOL& vTools, const Vector3d& vtTool, const Vector3d& vtAux) ;
|
||||
bool CalcDrilledHolesByConfig( VECTORHOLE& vHoles, int nMyInd, int nIndConfig, INTVECTOR& vIndDrilled) ;
|
||||
bool EraseDuplicatedConfigs( VECTORHOLE& vHoles) ;
|
||||
bool KeepMinRotatedConfigs( VECTORHOLE& vHoles, const Vector3d& vtAux, const Vector3d& vtTool) ;
|
||||
bool CalcMultiHeadUndrilledHoles( const VECTORHOLE& vHoles, INTVECTOR& vIdUndrilledHoles) ;
|
||||
bool CalcMultiHeadPartialDrilledHoles( const TABMHDRILL& vDrills, const VECTORHOLE& vHoles, const VECTORTOOL& vTools,
|
||||
const INTVECTOR& vIdUndrilledHoles, INTDBLVECTOR& vIdPartialdrilledHoles) ;
|
||||
bool CheckBasedConfig( const VECTORHOLE& vHoles, int nHoleInd, int& nValidConfig, bool& bBaseCase) ;
|
||||
bool GetClosestHolesToHole( const VECTORHOLE& vHoles, int nMyInd, bool bDrilled, INTVECTOR& vInds) ;
|
||||
bool OrderConfigsForSelectableTools( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndToolMain, TABMHDRILL& vDrills) ;
|
||||
bool GetConfigsWithMoreDrilledHoles( const VECTORHOLE& vHoles, INTVECTOR& vInds) ;
|
||||
bool ChooseBestConfigForSelectableTools( const VECTORHOLE& vHoles, int nIndToolMain, INTVECTOR& vConfInds, int& nBestConf) ;
|
||||
bool CheckOtherHolesWithTools( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndTM, int nIndHTM, Hole holeICP,
|
||||
const Frame3d& frHTM, const Frame3d& frHMTOP, double dDiamToler, int& nDrills) ;
|
||||
bool GetHoleBestConfig( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nInd, TABMHDRILL& tabDrills, const Vector3d& vtAux, const Vector3d& vtTool, int& nOkHole) ;
|
||||
bool MultiHeadVerifyHole( Hole& hole, const ToolData* Tool, double dDiamToler, SelData Id) ;
|
||||
bool MultiHeadOrderConfig( TABMHDRILL& tabDrills, const VECTORHOLE& vHoles, const Vector3d& vtTool, const Vector3d& vtAux) ;
|
||||
bool MultiHeadHoleToolsConfig( const VECTORHOLE& vHoles, int nConfig, INTINTVECTOR& vConfMask) ;
|
||||
int VerifyMultiParallelDrills( void) ;
|
||||
|
||||
/* debug functions */
|
||||
void PrintConfigs( const VECTORHOLE& vHoles) ;
|
||||
void PrintDescent( const MHDrill& myMHDescent) ;
|
||||
/* end debug functions */
|
||||
|
||||
bool VerifyMultiParallelFixedDrills( void) ;
|
||||
|
||||
private :
|
||||
double GetSpeed() const
|
||||
@@ -142,19 +106,16 @@ class Drilling : public Machining
|
||||
{ return ( IsNullLenValue( m_Params.m_dTipFeed) ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; }
|
||||
|
||||
private :
|
||||
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_bTiltingTab ; // flag utilizzo tavola basculante
|
||||
Vector3d m_vtTiltingAx ; // versore direzione eventuale asse basculante
|
||||
bool m_bAboveHead ; // flag utilizzo testa da sopra
|
||||
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
|
||||
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
|
||||
double m_dDistBottom ; // distanza del foro dal bordo del grezzo
|
||||
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
|
||||
INTVECTOR m_vUndrilledId ; // vettore degli identificativi dei fori non svuotati
|
||||
INTDBLVECTOR m_vPartialDrilledId ; // vettore degli identificatii dei fori lavorati parzialmente
|
||||
// con profodnità mancante
|
||||
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_bTiltingTab ; // flag utilizzo tavola basculante
|
||||
Vector3d m_vtTiltingAx ; // versore direzione eventuale asse basculante
|
||||
bool m_bAboveHead ; // flag utilizzo testa da sopra
|
||||
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
|
||||
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
|
||||
double m_dDistBottom ; // distanza del foro dal bordo del grezzo
|
||||
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
|
||||
} ;
|
||||
|
||||
Binary file not shown.
+2
-2
@@ -1,7 +1,7 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.12.35527.113
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.28307.645
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EgtMachKernel", "EgtMachKernel.vcxproj", "{0BD58222-92F3-48B2-B656-4497D1956874}"
|
||||
EndProject
|
||||
|
||||
+5
-38
@@ -21,13 +21,13 @@
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{0BD58222-92F3-48B2-B656-4497D1956874}</ProjectGuid>
|
||||
<RootNamespace>EgtMachKernel</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformVersion>10.0.20348.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<PlatformToolset>v141_xp</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
@@ -39,7 +39,7 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<PlatformToolset>v141_xp</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
@@ -237,8 +237,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClCompile Include="EMkDllMain.cpp" />
|
||||
<ClCompile Include="Estimator.cpp" />
|
||||
<ClCompile Include="Exit.cpp" />
|
||||
<ClCompile Include="FiveAxisMilling.cpp" />
|
||||
<ClCompile Include="FiveAxisMillingData.cpp" />
|
||||
<ClCompile Include="Generator.cpp" />
|
||||
<ClCompile Include="GenMachining.cpp" />
|
||||
<ClCompile Include="GenMachiningData.cpp" />
|
||||
@@ -275,7 +273,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClCompile Include="OperationCL.cpp" />
|
||||
<ClCompile Include="Pocketing.cpp" />
|
||||
<ClCompile Include="PocketingData.cpp" />
|
||||
<ClCompile Include="PocketingNT.cpp" />
|
||||
<ClCompile Include="Processor.cpp" />
|
||||
<ClCompile Include="SawFinishing.cpp" />
|
||||
<ClCompile Include="SawFinishingData.cpp" />
|
||||
@@ -284,8 +281,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClCompile Include="SawRoughing.cpp" />
|
||||
<ClCompile Include="SawRoughingData.cpp" />
|
||||
<ClCompile Include="SetupMgr.cpp" />
|
||||
<ClCompile Include="SimulatorSP.cpp" />
|
||||
<ClCompile Include="SimulatorMP.cpp" />
|
||||
<ClCompile Include="Simulator.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
@@ -295,8 +291,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClCompile Include="Head.cpp" />
|
||||
<ClCompile Include="SurfFinishing.cpp" />
|
||||
<ClCompile Include="SurfFinishingData.cpp" />
|
||||
<ClCompile Include="SurfRoughing.cpp" />
|
||||
<ClCompile Include="SurfRoughingData.cpp" />
|
||||
<ClCompile Include="Table.cpp" />
|
||||
<ClCompile Include="TcPos.cpp" />
|
||||
<ClCompile Include="ToolData.cpp" />
|
||||
@@ -309,15 +303,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkArcSpecial.h" />
|
||||
<ClInclude Include="..\Include\EGkBBox1d.h" />
|
||||
<ClInclude Include="..\Include\EGkBBox3d.h" />
|
||||
<ClInclude Include="..\Include\EGkBiArcs.h" />
|
||||
<ClInclude Include="..\Include\EGkCalcPocketing.h" />
|
||||
<ClInclude Include="..\Include\EGkCAvSilhouetteSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCAvToolSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeBoxClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeClosedSurfTmClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeConeFrustumClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeCylClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeSpheClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeBoxPolyhedron.h" />
|
||||
<ClInclude Include="..\Include\EGkChainCurves.h" />
|
||||
<ClInclude Include="..\Include\EGkColor.h" />
|
||||
<ClInclude Include="..\Include\EGkCurve.h" />
|
||||
@@ -325,11 +311,8 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkCurveAux.h" />
|
||||
<ClInclude Include="..\Include\EGkCurveComposite.h" />
|
||||
<ClInclude Include="..\Include\EGkCurveLine.h" />
|
||||
<ClInclude Include="..\Include\EGkCurveLocal.h" />
|
||||
<ClInclude Include="..\Include\EGkCurvePointDiffGeom.h" />
|
||||
<ClInclude Include="..\Include\EGkDistPointCurve.h" />
|
||||
<ClInclude Include="..\Include\EGkDistPointLine.h" />
|
||||
<ClInclude Include="..\Include\EGkDistPointSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkExtText.h" />
|
||||
<ClInclude Include="..\Include\EGkFrame3d.h" />
|
||||
<ClInclude Include="..\Include\EGkGdbConst.h" />
|
||||
@@ -342,13 +325,10 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkGeoObjType.h" />
|
||||
<ClInclude Include="..\Include\EGkGeoPoint3d.h" />
|
||||
<ClInclude Include="..\Include\EGkGeoVector3d.h" />
|
||||
<ClInclude Include="..\Include\EGkHashGrids1d.h" />
|
||||
<ClInclude Include="..\Include\EGkHashGrids2d.h" />
|
||||
<ClInclude Include="..\Include\EGkIntersCurves.h" />
|
||||
<ClInclude Include="..\Include\EGkIntersCurveSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkIntersLineSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkIntersLineTria.h" />
|
||||
<ClInclude Include="..\Include\EGkIntersPlaneSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkIntervals.h" />
|
||||
<ClInclude Include="..\Include\EGkLuaAux.h" />
|
||||
<ClInclude Include="..\Include\EGkMaterial.h" />
|
||||
@@ -359,10 +339,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkPoint3d.h" />
|
||||
<ClInclude Include="..\Include\EGkPointGrid3d.h" />
|
||||
<ClInclude Include="..\Include\EGkPolyArc.h" />
|
||||
<ClInclude Include="..\Include\EGkPolygon3d.h" />
|
||||
<ClInclude Include="..\Include\EGkPolygonElevation.h" />
|
||||
<ClInclude Include="..\Include\EGkPolyLine.h" />
|
||||
<ClInclude Include="..\Include\EGkQuaternion.h" />
|
||||
<ClInclude Include="..\Include\EGkSelection.h" />
|
||||
<ClInclude Include="..\Include\EGkSfrCreate.h" />
|
||||
<ClInclude Include="..\Include\EGkStmFromCurves.h" />
|
||||
@@ -370,7 +347,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkStringUtils3d.h" />
|
||||
<ClInclude Include="..\Include\EGkSurf.h" />
|
||||
<ClInclude Include="..\Include\EGkSurfFlatRegion.h" />
|
||||
<ClInclude Include="..\Include\EGkSurfLocal.h" />
|
||||
<ClInclude Include="..\Include\EGkSurfTriMesh.h" />
|
||||
<ClInclude Include="..\Include\EGkTriangle3d.h" />
|
||||
<ClInclude Include="..\Include\EGkUiUnits.h" />
|
||||
@@ -380,7 +356,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkVolZmap.h" />
|
||||
<ClInclude Include="..\Include\EGnEgtUUID.h" />
|
||||
<ClInclude Include="..\Include\EGnFileUtils.h" />
|
||||
<ClInclude Include="..\Include\EGnGetKeyData.h" />
|
||||
<ClInclude Include="..\Include\EGnGetModuleVer.h" />
|
||||
<ClInclude Include="..\Include\EGnLuaAux.h" />
|
||||
<ClInclude Include="..\Include\EGnLuaMgr.h" />
|
||||
@@ -395,7 +370,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EgtLibVer.h" />
|
||||
<ClInclude Include="..\Include\EgtNumCollection.h" />
|
||||
<ClInclude Include="..\Include\EgtNumUtils.h" />
|
||||
<ClInclude Include="..\Include\EgtPerfCounter.h" />
|
||||
<ClInclude Include="..\Include\EgtPointerOwner.h" />
|
||||
<ClInclude Include="..\Include\EgtStringBase.h" />
|
||||
<ClInclude Include="..\Include\EgtStringConverter.h" />
|
||||
@@ -423,8 +397,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="DrillingData.h" />
|
||||
<ClInclude Include="Estimator.h" />
|
||||
<ClInclude Include="Exit.h" />
|
||||
<ClInclude Include="FiveAxisMilling.h" />
|
||||
<ClInclude Include="FiveAxisMillingData.h" />
|
||||
<ClInclude Include="Generator.h" />
|
||||
<ClInclude Include="GenMachining.h" />
|
||||
<ClInclude Include="GenMachiningData.h" />
|
||||
@@ -449,7 +421,6 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="OutputConst.h" />
|
||||
<ClInclude Include="Pocketing.h" />
|
||||
<ClInclude Include="PocketingData.h" />
|
||||
<ClInclude Include="PocketingNT.h" />
|
||||
<ClInclude Include="Processor.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
<ClInclude Include="SawFinishing.h" />
|
||||
@@ -462,14 +433,10 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="SetTempPhase.h" />
|
||||
<ClInclude Include="SetupMgr.h" />
|
||||
<ClInclude Include="Simulator.h" />
|
||||
<ClInclude Include="SimulatorSP.h" />
|
||||
<ClInclude Include="SimulatorMP.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="Head.h" />
|
||||
<ClInclude Include="SurfFinishing.h" />
|
||||
<ClInclude Include="SurfFinishingData.h" />
|
||||
<ClInclude Include="SurfRoughing.h" />
|
||||
<ClInclude Include="SurfRoughingData.h" />
|
||||
<ClInclude Include="Table.h" />
|
||||
<ClInclude Include="TcPos.h" />
|
||||
<ClInclude Include="ToolData.h" />
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
<ClCompile Include="MachMgrDBTools.cpp">
|
||||
<Filter>Source Files\MachMgr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SimulatorSP.cpp">
|
||||
<ClCompile Include="Simulator.cpp">
|
||||
<Filter>Source Files\Output</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MachMgrPhases.cpp">
|
||||
@@ -234,24 +234,6 @@
|
||||
<ClCompile Include="TcPos.cpp">
|
||||
<Filter>Source Files\Machine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FiveAxisMillingData.cpp">
|
||||
<Filter>Source Files\Machinings</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FiveAxisMilling.cpp">
|
||||
<Filter>Source Files\Operations</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SurfRoughingData.cpp">
|
||||
<Filter>Source Files\Machinings</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SurfRoughing.cpp">
|
||||
<Filter>Source Files\Operations</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SimulatorMP.cpp">
|
||||
<Filter>Source Files\Output</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="PocketingNT.cpp">
|
||||
<Filter>Source Files\Operations</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="DllMain.h">
|
||||
@@ -347,7 +329,7 @@
|
||||
<ClInclude Include="..\Include\EMkDispositionConst.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SimulatorSP.h">
|
||||
<ClInclude Include="Simulator.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Generator.h">
|
||||
@@ -428,6 +410,9 @@
|
||||
<ClInclude Include="..\Include\EGkBBox3d.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeBoxPolyhedron.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkChainCurves.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
@@ -683,90 +668,6 @@
|
||||
<ClInclude Include="..\Include\EGkBBox1d.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FiveAxisMillingData.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="FiveAxisMilling.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SurfRoughingData.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SurfRoughing.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkBiArcs.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCalcPocketing.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCAvSilhouetteSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCAvToolSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeBoxClosedSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeClosedSurfTmClosedSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeConeFrustumClosedSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeCylClosedSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeSpheClosedSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCurveLocal.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkDistPointLine.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkDistPointSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkHashGrids1d.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkIntersCurveSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkIntersPlaneSurfTm.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkPolygon3d.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkPolygonElevation.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkQuaternion.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkSurfLocal.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGnGetKeyData.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EgtPerfCounter.h">
|
||||
<Filter>Header Files\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SimulatorMP.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Simulator.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="PocketingNT.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="EgtMachKernel.rc">
|
||||
|
||||
+12
-76
@@ -15,12 +15,9 @@
|
||||
#include "stdafx.h"
|
||||
#include "DllMain.h"
|
||||
#include "Estimator.h"
|
||||
#include "MachMgr.h"
|
||||
#include "Machine.h"
|
||||
#include "OutputConst.h"
|
||||
#include "/EgtDev/Include/EGnFileUtils.h"
|
||||
#include "/EgtDev/Include/EGnGetKeyData.h"
|
||||
#include "/EgtDev/Include/EgtKeyCodes.h"
|
||||
#include "/EgtDev/Include/SELkKeyProc.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -48,75 +45,23 @@ Estimator::Init( MachMgr* pMchMgr)
|
||||
bool
|
||||
Estimator::Run( const string& sCncFile, const string& sInfo)
|
||||
{
|
||||
// Controllo della licenza
|
||||
unsigned int nOpt1, nOpt2 ;
|
||||
int nOptExpDays ;
|
||||
int nRet = GetEGnKeyOptions( KEY_BASELIB_PROD, KEY_BASELIB_VER, KEY_BASELIB_LEV,
|
||||
nOpt1, nOpt2, nOptExpDays) ;
|
||||
if ( ! GetEMkNetHwKey())
|
||||
nRet = GetKeyOptions( GetEMkKey(), KEY_BASELIB_PROD, KEY_BASELIB_VER, KEY_BASELIB_LEV,
|
||||
nOpt1, nOpt2, nOptExpDays) ;
|
||||
|
||||
// Verifica della abilitazione
|
||||
bool bMinTime = false ;
|
||||
if ( nOptExpDays >= GetMinDay())
|
||||
bMinTime = true ;
|
||||
bool bCurrTime = false ;
|
||||
if ( nOptExpDays >= GetCurrDay())
|
||||
bCurrTime = true ;
|
||||
bool bKey = false ;
|
||||
if ( nRet == KEY_OK)
|
||||
bKey = true ;
|
||||
bool bAdvMach = false ;
|
||||
if ( ( nOpt1 & KEYOPT_EMK_ADV) != 0)
|
||||
bAdvMach = true ;
|
||||
|
||||
// Esecuzione
|
||||
if ( bMinTime && bCurrTime && bKey) {
|
||||
// se non previste lavorazioni avanzate, verifico la loro assenza
|
||||
if ( ! bAdvMach) {
|
||||
int nOpId = m_pMchMgr->GetFirstActiveOperation() ;
|
||||
while ( nOpId != GDB_ID_NULL) {
|
||||
int nType = m_pMchMgr->GetOperationType( nOpId) ;
|
||||
if ( nType == OPER_SURFROUGHING || nType == OPER_SURFFINISHING || nType == OPER_FIVEAXISMILLING) {
|
||||
m_pMchMgr->SetLastError( 1001, "ADVANCED_MACH_OFF") ;
|
||||
std::string sErr = "Warning on Key (MKC/AMO)" ;
|
||||
LOG_ERROR( GetEMkLogger(), sErr.c_str()) ;
|
||||
return false ;
|
||||
}
|
||||
nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ;
|
||||
}
|
||||
}
|
||||
|
||||
// emetto info di log
|
||||
{ string sOut = "Estimator Run : " + sCncFile ;
|
||||
LOG_INFO( GetEMkLogger(), sOut.c_str()) ; }
|
||||
|
||||
// cancello l'eventuale file di uscita (e anche il file errore)
|
||||
EraseFile( sCncFile) ;
|
||||
string sErrFile = ChangeFileExtension( sCncFile, ERR_EXT) ;
|
||||
EraseFile( sErrFile) ;
|
||||
|
||||
// lancio il processore
|
||||
bool bOk = Processor::Run( sCncFile, sInfo) ;
|
||||
|
||||
// in caso di errore rinomino il file di output
|
||||
if ( ! bOk)
|
||||
RenameFile( sCncFile, sErrFile) ;
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
// emetto info di log
|
||||
{ string sOut = "Estimator Run : " + sCncFile ;
|
||||
LOG_INFO( GetEMkLogger(), sOut.c_str()) ; }
|
||||
|
||||
// cancello l'eventuale file di uscita (e anche il file errore)
|
||||
EraseFile( sCncFile) ;
|
||||
string sErrFile = ChangeFileExtension( sCncFile, ERR_EXT) ;
|
||||
EraseFile( sErrFile) ;
|
||||
|
||||
// Generazione non abilitata
|
||||
m_pMchMgr->SetLastError( 1000, "NC_OFF") ;
|
||||
std::string sErr = "Warning on Key (MKC/KYO)" ;
|
||||
LOG_ERROR( GetEMkLogger(), sErr.c_str()) ;
|
||||
return false ;
|
||||
// lancio il processore
|
||||
bool bOk = Processor::Run( sCncFile, sInfo) ;
|
||||
|
||||
// in caso di errore rinomino il file di output
|
||||
if ( ! bOk)
|
||||
RenameFile( sCncFile, sErrFile) ;
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -179,15 +124,6 @@ Estimator::CallOnTableData( void)
|
||||
return m_pMachine->LuaCallFunction( ON_ESTIM_TABLE_DATA) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Estimator::CallOnTableAxisData( void)
|
||||
{
|
||||
if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_TABLE_AXIS_DATA))
|
||||
return true ;
|
||||
return m_pMachine->LuaCallFunction( ON_ESTIM_TABLE_AXIS_DATA) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Estimator::CallOnFixtureData( void)
|
||||
|
||||
@@ -33,7 +33,6 @@ class Estimator : public Processor
|
||||
bool CallOnDispositionStart( void) override ;
|
||||
bool CallOnDispositionEnd( void) override ;
|
||||
bool CallOnTableData( void) override ;
|
||||
bool CallOnTableAxisData( void) override ;
|
||||
bool CallOnFixtureData( void) override ;
|
||||
bool CallOnRawMoveData( void) override ;
|
||||
bool CallOnToolSelect( void) override ;
|
||||
|
||||
-1021
File diff suppressed because it is too large
Load Diff
@@ -1,97 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2024-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : FiveAxisMilling.h Data : 22.05.24 Versione : 2.6e5
|
||||
// Contenuto : Dichiarazione della classe FiveAxisMilling.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 22.05.24 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Machining.h"
|
||||
#include "FiveAxisMillingData.h"
|
||||
#include "ToolData.h"
|
||||
|
||||
class ICurve ;
|
||||
class ICurveComposite ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class FiveAxisMilling : public Machining
|
||||
{
|
||||
public : // IUserObj
|
||||
FiveAxisMilling* Clone( void) const override ;
|
||||
const std::string& GetClassName( void) const override ;
|
||||
bool Dump( std::string& sOut, bool bMM = true, const char* szNewLine = "\n") const override ;
|
||||
bool ToSave( void) const override
|
||||
{ return true ; }
|
||||
bool Save( int nBaseId, STRVECTOR& vString) const override ;
|
||||
bool Load( const STRVECTOR& vString, int nBaseGdbId) override ;
|
||||
|
||||
public : // Operation
|
||||
int GetType( void) const override
|
||||
{ return OPER_FIVEAXISMILLING ; }
|
||||
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
|
||||
{ return m_Params.m_nSolCh ; }
|
||||
bool AdjustEndPointForAxesCalc( const CamData* pCamData, Point3d& ptP) const override ;
|
||||
|
||||
public : // Machining
|
||||
bool Prepare( const std::string& sMillName) override ;
|
||||
bool SetParam( int nType, bool bVal) override ;
|
||||
bool SetParam( int nType, int nVal) override ;
|
||||
bool SetParam( int nType, double dVal) override ;
|
||||
bool SetParam( int nType, const std::string& sVal) override ;
|
||||
bool SetGeometry( const SELVECTOR& vIds) override ;
|
||||
bool Preview( bool bRecalc) override ;
|
||||
bool Apply( bool bRecalc, bool bPostApply) override ;
|
||||
bool Update( bool bPostApply) override ;
|
||||
bool GetParam( int nType, bool& bVal) const override ;
|
||||
bool GetParam( int nType, int& nVal) const override ;
|
||||
bool GetParam( int nType, double& dVal) const override ;
|
||||
bool GetParam( int nType, std::string& sVal) const override ;
|
||||
bool UpdateToolData( bool* pbChanged = nullptr) override ;
|
||||
const ToolData& GetToolData( void) const override ;
|
||||
bool GetGeometry( SELVECTOR& vIds) const override ;
|
||||
|
||||
public :
|
||||
FiveAxisMilling( void) ;
|
||||
|
||||
private :
|
||||
bool MyApply( bool bRecalc, bool bPostApply) ;
|
||||
bool VerifyGeometry( SelData Id, int& nSubs, int& nType) ;
|
||||
double GetApproxLinTol( void) const override ;
|
||||
|
||||
private :
|
||||
double GetSpeed() const
|
||||
{ return ( IsNullAngValue( m_Params.m_dSpeed) ? m_TParams.m_dSpeed : m_Params.m_dSpeed) ; }
|
||||
double GetFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dFeed) ? m_TParams.m_dFeed : m_Params.m_dFeed) ; }
|
||||
double GetStartFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dStartFeed) ? m_TParams.m_dStartFeed : m_Params.m_dStartFeed) ; }
|
||||
double GetEndFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dEndFeed) ? m_TParams.m_dEndFeed : m_Params.m_dEndFeed) ; }
|
||||
double GetTipFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dTipFeed) ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; }
|
||||
double GetOffsL() const
|
||||
{ return ( IsUnknownValue( m_Params.m_dOffsL) ? m_TParams.m_dOffsL : m_Params.m_dOffsL) ; }
|
||||
double GetOffsR() const
|
||||
{ return ( IsUnknownValue( m_Params.m_dOffsR) ? m_TParams.m_dOffsR : m_Params.m_dOffsR) ; }
|
||||
|
||||
private :
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
FiveAxisMillingData 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
|
||||
bool m_bRunning ; // flag di calcoli in corso
|
||||
} ;
|
||||
@@ -1,557 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2024-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : FiveAxisMillingData.cpp Data : 22.05.24 Versione : 2.6e5
|
||||
// Contenuto : Implementazione struttura dati fresatura a 5 assi.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 22.05.24 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "FiveAxisMillingData.h"
|
||||
#include "MachiningDataFactory.h"
|
||||
#include "MachiningConst.h"
|
||||
#include "/EgtDev/Include/EmkToolConst.h"
|
||||
#include "/EgtDev/Include/EmkSimuGenConst.h"
|
||||
#include "/EgtDev/Include/EGnStringUtils.h"
|
||||
#include <array>
|
||||
#include <cassert>
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
enum nFiveAxisMillingKey {
|
||||
KEY_AB = 0,
|
||||
KEY_AI,
|
||||
KEY_DH,
|
||||
KEY_F,
|
||||
KEY_FE,
|
||||
KEY_FS,
|
||||
KEY_FT,
|
||||
KEY_INV,
|
||||
KEY_NAME,
|
||||
KEY_NNS,
|
||||
KEY_NNU,
|
||||
KEY_OL,
|
||||
KEY_OR,
|
||||
KEY_PS,
|
||||
KEY_S,
|
||||
KEY_SCC,
|
||||
KEY_SUBTYPE,
|
||||
KEY_TI,
|
||||
KEY_TNAME,
|
||||
KEY_TUUID,
|
||||
KEY_UUID,
|
||||
KEY_ZZZ} ; // rappresenta il numero di elementi
|
||||
|
||||
static const array<string,KEY_ZZZ> sFiveAxisMillingKey = {
|
||||
"AB",
|
||||
"AI",
|
||||
"DH",
|
||||
"F",
|
||||
"FE",
|
||||
"FS",
|
||||
"FT",
|
||||
"INV",
|
||||
"NAME",
|
||||
"NNS",
|
||||
"NNU",
|
||||
"OL",
|
||||
"OR",
|
||||
"PS",
|
||||
"S",
|
||||
"SCC",
|
||||
"SUB",
|
||||
"TI",
|
||||
"TN",
|
||||
"TU",
|
||||
"UUID"} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
MCHDATA_REGISTER( MT_FIVEAXISMILLING, "FIVEAXISMILLING", FiveAxisMillingData) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
FiveAxisMillingData*
|
||||
FiveAxisMillingData::Clone( void) const
|
||||
{
|
||||
// alloco oggetto
|
||||
FiveAxisMillingData* pDdata = new(nothrow) FiveAxisMillingData ;
|
||||
// copio i dati
|
||||
if ( pDdata != nullptr) {
|
||||
if ( ! pDdata->CopyFrom( this)) {
|
||||
delete pDdata ;
|
||||
return nullptr ;
|
||||
}
|
||||
}
|
||||
return pDdata ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::CopyFrom( const MachiningData* pMdata)
|
||||
{
|
||||
// è inutile copiare se sorgente coincide con destinazione
|
||||
if ( pMdata == this)
|
||||
return true ;
|
||||
// la sorgente deve essere dello stesso tipo
|
||||
const FiveAxisMillingData* pFdata = GetFiveAxisMillingData( pMdata) ;
|
||||
if ( pFdata == nullptr)
|
||||
return false ;
|
||||
// eseguo copia
|
||||
m_Uuid = pFdata->m_Uuid ;
|
||||
m_sName = pFdata->m_sName ;
|
||||
m_ToolUuid = pFdata->m_ToolUuid ;
|
||||
m_sToolName = pFdata->m_sToolName ;
|
||||
m_sBlockedAxis = pFdata->m_sBlockedAxis ;
|
||||
m_sInitAngs = pFdata->m_sInitAngs ;
|
||||
m_nSolCh = pFdata->m_nSolCh ;
|
||||
m_dSpeed = pFdata->m_dSpeed ;
|
||||
m_dFeed = pFdata->m_dFeed ;
|
||||
m_dEndFeed = pFdata->m_dEndFeed ;
|
||||
m_dStartFeed = pFdata->m_dStartFeed ;
|
||||
m_dTipFeed = pFdata->m_dTipFeed ;
|
||||
m_dOffsL = pFdata->m_dOffsL ;
|
||||
m_dOffsR = pFdata->m_dOffsR ;
|
||||
m_bToolInvert = pFdata->m_bToolInvert ;
|
||||
m_bInvert = pFdata->m_bInvert ;
|
||||
m_sDepth = pFdata->m_sDepth ;
|
||||
m_dStartPos = pFdata->m_dStartPos ;
|
||||
m_nSubType = pFdata->m_nSubType ;
|
||||
m_sSysNotes = pFdata->m_sSysNotes ;
|
||||
m_sUserNotes = pFdata->m_sUserNotes ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::SameAs(const MachiningData* pMdata) const
|
||||
{
|
||||
// se coincide con altro -> uguali
|
||||
if ( pMdata == this)
|
||||
return true ;
|
||||
// se sono di tipo diverso -> diversi
|
||||
const FiveAxisMillingData* pFdata = GetFiveAxisMillingData( pMdata) ;
|
||||
if ( pFdata == nullptr)
|
||||
return false ;
|
||||
// confronto termine a termine
|
||||
return ( m_Uuid == pFdata->m_Uuid &&
|
||||
m_sName == pFdata->m_sName &&
|
||||
m_ToolUuid == pFdata->m_ToolUuid &&
|
||||
m_sToolName == pFdata->m_sToolName &&
|
||||
m_sBlockedAxis == pFdata->m_sBlockedAxis &&
|
||||
m_sInitAngs == pFdata->m_sInitAngs &&
|
||||
m_nSolCh == pFdata->m_nSolCh &&
|
||||
abs( m_dSpeed - pFdata->m_dSpeed) < EPS_MACH_ANG_PAR &&
|
||||
abs( m_dFeed - pFdata->m_dFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dEndFeed - pFdata->m_dEndFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dStartFeed - pFdata->m_dStartFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dTipFeed - pFdata->m_dTipFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dOffsL - pFdata->m_dOffsL) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dOffsR - pFdata->m_dOffsR) < EPS_MACH_LEN_PAR &&
|
||||
m_bToolInvert == pFdata->m_bToolInvert &&
|
||||
m_bInvert == pFdata->m_bInvert &&
|
||||
m_sDepth == pFdata->m_sDepth &&
|
||||
abs( m_dStartPos - pFdata->m_dStartPos) < EPS_MACH_LEN_PAR &&
|
||||
m_nSubType == pFdata->m_nSubType &&
|
||||
m_sSysNotes == pFdata->m_sSysNotes &&
|
||||
m_sUserNotes == pFdata->m_sUserNotes) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
FiveAxisMillingData::GetSize( void) const
|
||||
{
|
||||
// in debug verifico validità ultimo campo
|
||||
assert( sFiveAxisMillingKey[KEY_UUID] == "UUID") ;
|
||||
return KEY_ZZZ ;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
string
|
||||
FiveAxisMillingData::GetTitle( void) const
|
||||
{
|
||||
return MCHDATA_GETNAME( FiveAxisMillingData) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
FindFiveAxisMillingKey( const string& sKey)
|
||||
{
|
||||
auto TheRange = equal_range( sFiveAxisMillingKey.cbegin(), sFiveAxisMillingKey.cend(), sKey) ;
|
||||
if ( TheRange.first == TheRange.second)
|
||||
return - 1 ;
|
||||
return int( TheRange.first - sFiveAxisMillingKey.cbegin()) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::FromString( const string& sString, int& nKey)
|
||||
{
|
||||
// separo chiave da valore
|
||||
string sKey, sVal ;
|
||||
SplitFirst( sString, "=", sKey, sVal) ;
|
||||
// riconosco la chiave
|
||||
nKey = FindFiveAxisMillingKey( ToUpper( sKey)) ;
|
||||
bool bOk = ( nKey >= 0) ;
|
||||
switch ( nKey) {
|
||||
case KEY_AB :
|
||||
m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
case KEY_AI :
|
||||
m_sInitAngs = sVal ;
|
||||
break ;
|
||||
case KEY_DH :
|
||||
m_sDepth = sVal ;
|
||||
if ( m_sDepth.empty())
|
||||
m_sDepth = "0" ;
|
||||
break ;
|
||||
case KEY_F :
|
||||
bOk = ::FromString( sVal, m_dFeed) ;
|
||||
break ;
|
||||
case KEY_FE :
|
||||
bOk = ::FromString( sVal, m_dEndFeed) ;
|
||||
break ;
|
||||
case KEY_FS :
|
||||
bOk = ::FromString( sVal, m_dStartFeed) ;
|
||||
break ;
|
||||
case KEY_FT :
|
||||
bOk = ::FromString( sVal, m_dTipFeed) ;
|
||||
break ;
|
||||
case KEY_INV :
|
||||
bOk = ::FromString( sVal, m_bInvert) ;
|
||||
break ;
|
||||
case KEY_NAME :
|
||||
m_sName = sVal ;
|
||||
bOk = ! m_sName.empty() ;
|
||||
break ;
|
||||
case KEY_NNS :
|
||||
m_sSysNotes = sVal ;
|
||||
break ;
|
||||
case KEY_NNU :
|
||||
m_sUserNotes = sVal ;
|
||||
break ;
|
||||
case KEY_OL :
|
||||
bOk = ::FromString( sVal, m_dOffsL) ;
|
||||
break ;
|
||||
case KEY_OR :
|
||||
bOk = ::FromString( sVal, m_dOffsR) ;
|
||||
break ;
|
||||
case KEY_PS :
|
||||
bOk = ::FromString( sVal, m_dStartPos) ;
|
||||
break ;
|
||||
case KEY_S :
|
||||
bOk = ::FromString( sVal, m_dSpeed) ;
|
||||
break ;
|
||||
case KEY_SCC :
|
||||
bOk = ::FromString( sVal, m_nSolCh) ;
|
||||
break ;
|
||||
case KEY_SUBTYPE :
|
||||
bOk = ::FromString( sVal, m_nSubType) ;
|
||||
break ;
|
||||
case KEY_TNAME :
|
||||
m_sToolName = sVal ;
|
||||
break ;
|
||||
case KEY_TI :
|
||||
bOk = ::FromString( sVal, m_bToolInvert) ;
|
||||
break ;
|
||||
case KEY_TUUID :
|
||||
bOk = ::FromString( sVal, m_ToolUuid) ;
|
||||
break ;
|
||||
case KEY_UUID :
|
||||
bOk = ::FromString( sVal, m_Uuid) ;
|
||||
break ;
|
||||
default :
|
||||
bOk = false ;
|
||||
break ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
string
|
||||
FiveAxisMillingData::ToString( int nKey) const
|
||||
{
|
||||
switch ( nKey) {
|
||||
case KEY_AB : return ( sFiveAxisMillingKey[KEY_AB] + "=" + m_sBlockedAxis) ;
|
||||
case KEY_AI : return ( sFiveAxisMillingKey[KEY_AI] + "=" + m_sInitAngs) ;
|
||||
case KEY_DH : return ( sFiveAxisMillingKey[KEY_DH] + "=" + m_sDepth) ;
|
||||
case KEY_F : return ( sFiveAxisMillingKey[KEY_F] + "=" + ::ToString( m_dFeed)) ;
|
||||
case KEY_FE : return ( sFiveAxisMillingKey[KEY_FE] + "=" + ::ToString( m_dEndFeed)) ;
|
||||
case KEY_FS : return ( sFiveAxisMillingKey[KEY_FS] + "=" + ::ToString( m_dStartFeed)) ;
|
||||
case KEY_FT : return ( sFiveAxisMillingKey[KEY_FT] + "=" + ::ToString( m_dTipFeed)) ;
|
||||
case KEY_INV : return ( sFiveAxisMillingKey[KEY_INV] + "=" + ::ToString( m_bInvert)) ;
|
||||
case KEY_NAME : return ( sFiveAxisMillingKey[KEY_NAME] + "=" + m_sName) ;
|
||||
case KEY_NNS : return ( sFiveAxisMillingKey[KEY_NNS] + "=" + m_sSysNotes) ;
|
||||
case KEY_NNU : return ( sFiveAxisMillingKey[KEY_NNU] + "=" + m_sUserNotes) ;
|
||||
case KEY_OL : return ( sFiveAxisMillingKey[KEY_OL] + "=" + ::ToString( m_dOffsL)) ;
|
||||
case KEY_OR : return ( sFiveAxisMillingKey[KEY_OR] + "=" + ::ToString( m_dOffsR)) ;
|
||||
case KEY_PS : return ( sFiveAxisMillingKey[KEY_PS] + "=" + ::ToString( m_dStartPos)) ;
|
||||
case KEY_S : return ( sFiveAxisMillingKey[KEY_S] + "=" + ::ToString( m_dSpeed)) ;
|
||||
case KEY_SCC : return ( sFiveAxisMillingKey[KEY_SCC] + "=" + ::ToString( m_nSolCh)) ;
|
||||
case KEY_SUBTYPE : return ( sFiveAxisMillingKey[KEY_SUBTYPE] + "=" + ::ToString( m_nSubType)) ;
|
||||
case KEY_TI : return ( sFiveAxisMillingKey[KEY_TI] + "=" + ::ToString( m_bToolInvert)) ;
|
||||
case KEY_TNAME : return ( sFiveAxisMillingKey[KEY_TNAME] + "=" + m_sToolName) ;
|
||||
case KEY_TUUID : return ( sFiveAxisMillingKey[KEY_TUUID] + "=" + ::ToString( m_ToolUuid)) ;
|
||||
case KEY_UUID : return ( sFiveAxisMillingKey[KEY_UUID] + "=" + ::ToString( m_Uuid)) ;
|
||||
default : return "" ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::IsOptional( int nKey) const
|
||||
{
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::VerifySolCh( int nVal) const
|
||||
{
|
||||
return IsValidOperationScc( nVal) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::VerifyTool( const ToolsMgr* pToolsMgr, const string& sVal, const ToolData*& pTdata) const
|
||||
{
|
||||
if ( pToolsMgr == nullptr)
|
||||
return false ;
|
||||
pTdata = pToolsMgr->GetTool( sVal) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
if ( ( pTdata->m_nType & TF_MILL) == 0 && ( pTdata->m_nType & TF_SAWBLADE) == 0)
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const
|
||||
{
|
||||
if ( pToolsMgr == nullptr)
|
||||
return false ;
|
||||
pTdata = pToolsMgr->GetTool( m_ToolUuid) ;
|
||||
return ( pTdata != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
m_bInvert = bVal ;
|
||||
return true ;
|
||||
case MPA_TOOLINVERT :
|
||||
m_bToolInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::SetParam( int nType, int nVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_SCC :
|
||||
if ( ! VerifySolCh( nVal))
|
||||
return false ;
|
||||
m_nSolCh = nVal ;
|
||||
return true ;
|
||||
case MPA_SUBTYPE :
|
||||
m_nSubType = nVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::SetParam( int nType, double dVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_SPEED :
|
||||
m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_sDepth = ::ToString( dVal) ;
|
||||
return true ;
|
||||
case MPA_STARTPOS :
|
||||
m_dStartPos = dVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::SetParam( int nType, const string& sVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_NAME :
|
||||
m_sName = sVal ;
|
||||
return true ;
|
||||
case MPA_TOOL :
|
||||
m_sToolName = sVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_TUUID :
|
||||
return ::FromString( sVal, m_ToolUuid) ;
|
||||
case MPA_UUID :
|
||||
return ::FromString( sVal, m_Uuid) ;
|
||||
case MPA_SYSNOTES :
|
||||
m_sSysNotes = sVal ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
m_sUserNotes = sVal ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
m_sInitAngs = sVal ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
m_sBlockedAxis = sVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::ResetTool( void)
|
||||
{
|
||||
m_sToolName.clear() ;
|
||||
m_ToolUuid.Clear() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::GetParam( int nType, bool& bVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
bVal = m_bInvert ;
|
||||
return true ;
|
||||
case MPA_TOOLINVERT :
|
||||
bVal = m_bToolInvert ;
|
||||
return true ;
|
||||
}
|
||||
bVal = false ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::GetParam( int nType, int& nVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_TYPE :
|
||||
nVal = MT_FIVEAXISMILLING ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
nVal = m_nSolCh ;
|
||||
return true ;
|
||||
case MPA_SUBTYPE :
|
||||
nVal = m_nSubType ;
|
||||
return true ;
|
||||
}
|
||||
nVal = 0 ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::GetParam( int nType, double& dVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_SPEED :
|
||||
dVal = m_dSpeed ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
dVal = m_dFeed ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
dVal = m_dStartFeed ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
dVal = m_dEndFeed ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
dVal = m_dTipFeed ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
dVal = m_dOffsL ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
dVal = m_dOffsR ;
|
||||
return true ;
|
||||
case MPA_STARTPOS :
|
||||
dVal = m_dStartPos ;
|
||||
return true ;
|
||||
}
|
||||
dVal = 0 ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
FiveAxisMillingData::GetParam( int nType, string& sVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_NAME :
|
||||
sVal = m_sName ;
|
||||
return true ;
|
||||
case MPA_TOOL :
|
||||
sVal = m_sToolName ;
|
||||
return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
sVal = m_sDepth ;
|
||||
return true ;
|
||||
case MPA_TUUID :
|
||||
sVal = ::ToString( m_ToolUuid) ;
|
||||
return true ;
|
||||
case MPA_UUID :
|
||||
sVal = ::ToString( m_Uuid) ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
sVal = m_sSysNotes ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
sVal = m_sUserNotes ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
sVal = m_sInitAngs ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
sVal = m_sBlockedAxis ;
|
||||
return true ;
|
||||
}
|
||||
sVal = "" ;
|
||||
return false ;
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2024-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : FiveAxisMillingData.h Data : 22.05.24 Versione : 2.6e5
|
||||
// Contenuto : Dichiarazione della struct FiveAxisMillingData e costanti associate.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 22.05.24 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "MachiningData.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct FiveAxisMillingData : public MachiningData
|
||||
{
|
||||
EgtUUID m_ToolUuid ; // identificativo universale dell'utensile
|
||||
std::string m_sToolName ; // nome dell'utensile
|
||||
std::string m_sInitAngs ; // angoli iniziali suggeriti (Nome1=val1,Nome2=val2)
|
||||
std::string m_sBlockedAxis ; // eventuale asse rotante bloccato (Nome=val)
|
||||
int m_nSolCh ; // criterio scelta soluzione (quando possibili molteplici)
|
||||
double m_dSpeed ; // velocità di rotazione (+ se CCW, - se CW) ( se 0 da utensile)
|
||||
double m_dFeed ; // velocità di lavorazione normale ( se 0 da utensile)
|
||||
double m_dStartFeed ; // velocità di lavorazione iniziale ( se 0 da utensile)
|
||||
double m_dEndFeed ; // velocità di lavorazione finale ( se 0 da utensile)
|
||||
double m_dTipFeed ; // velocità di lavorazione di sfondamento ( se 0 da utensile)
|
||||
double m_dOffsR ; // offset radiale ( se UNKNOWN_PAR da utensile)
|
||||
double m_dOffsL ; // offset longitudinale ( se UNKNOWN_PAR da utensile)
|
||||
bool m_bToolInvert ; // flag per inversione direzione utensile da geometria
|
||||
bool m_bInvert ; // flag di inversione direzione lavorazione
|
||||
std::string m_sDepth ; // affondamento (espressione numerica)
|
||||
double m_dStartPos ; // quota di inizio lavorazione (sempre >= 0)
|
||||
int m_nSubType ; // da [GenMachining] di Ini di macchina
|
||||
std::string m_sSysNotes ; // note interne
|
||||
std::string m_sUserNotes ; // note dell'utente
|
||||
|
||||
FiveAxisMillingData( void)
|
||||
: m_ToolUuid(), m_nSolCh( 0), m_dSpeed( 0), m_dFeed( 0), m_dStartFeed( 0), m_dEndFeed( 0), m_dTipFeed( 0),
|
||||
m_dOffsR( 0), m_dOffsL( 0), m_bToolInvert( false), m_bInvert( false), m_dStartPos( 0), m_nSubType( 0) {}
|
||||
FiveAxisMillingData* Clone( void) const override ;
|
||||
bool CopyFrom( const MachiningData* pMdata) override ;
|
||||
bool SameAs(const MachiningData* pMdata) const override ;
|
||||
int GetType( void) const override
|
||||
{ return MT_FIVEAXISMILLING ; }
|
||||
int GetSize( void) const override ;
|
||||
std::string GetTitle( void) const override ;
|
||||
bool FromString( const std::string& sString, int& nKey) override ;
|
||||
std::string ToString( int nKey) const override ;
|
||||
bool IsOptional( int nKey) const override ;
|
||||
bool SetParam( int nType, bool bVal) override ;
|
||||
bool SetParam( int nType, int nVal) override ;
|
||||
bool SetParam( int nType, double dVal) override ;
|
||||
bool SetParam( int nType, const std::string& sVal) override ;
|
||||
bool ResetTool( void) override ;
|
||||
bool GetParam( int nType, bool& bVal) const override ;
|
||||
bool GetParam( int nType, int& nVal) const override ;
|
||||
bool GetParam( int nType, double& dVal) const override ;
|
||||
bool GetParam( int nType, std::string& sVal) const override ;
|
||||
bool GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const override ;
|
||||
bool VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, const ToolData*& pTdata) const override ;
|
||||
bool VerifySolCh( int nVal) const ;
|
||||
} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
inline const FiveAxisMillingData* GetFiveAxisMillingData( const MachiningData* pMdata)
|
||||
{ if ( pMdata == nullptr || pMdata->GetType() != MT_FIVEAXISMILLING)
|
||||
return nullptr ;
|
||||
return ( static_cast<const FiveAxisMillingData*>( pMdata)) ; }
|
||||
inline FiveAxisMillingData* GetFiveAxisMillingData( MachiningData* pMdata)
|
||||
{ if ( pMdata == nullptr || pMdata->GetType() != MT_FIVEAXISMILLING)
|
||||
return nullptr ;
|
||||
return ( static_cast<FiveAxisMillingData*>( pMdata)) ; }
|
||||
+13
-46
@@ -39,7 +39,6 @@ using namespace std ;
|
||||
// 2806 = "Error in GenMachining : link movements not calculable"
|
||||
// 2807 = "Error in GenMachining : link outstroke xx"
|
||||
// 2808 = "Error in GenMachining : post apply not calculable"
|
||||
// 2809 = "Error in GenMachining : Tool loading failed"
|
||||
// 2851 = "Warning in GenMachining : Skipped entity (xx)"
|
||||
// 2852 = "Warning in GenMachining : No machinable path"
|
||||
// 2853 = "Warning in GenMachining : Tool name changed (xx)"
|
||||
@@ -55,8 +54,6 @@ static const string EVAR_INVERT = ".INVERT" ; // IN (bool) flag di inversio
|
||||
static const string EVAR_STARTPOS = ".STARTPOS" ; // IN (num) quota di inizio lavorazione (sempre >= 0)
|
||||
static const string EVAR_OFFSR = ".OFFSR" ; // IN (num) offset radiale
|
||||
static const string EVAR_OFFSL = ".OFFSL" ; // IN (num) offset longitudinale
|
||||
static const string EVAR_SYSNOTES = ".SYSNOTES" ; // IN (string) note interne
|
||||
static const string EVAR_USERNOTES = ".USERNOTES" ;// IN (string) note dell'utente
|
||||
static const string EVAR_TOOL = ".TOOL" ; // IN (string) nome dell'utensile
|
||||
static const string EVAR_HEAD = ".HEAD" ; // IN (string) nome testa
|
||||
static const string EVAR_EXIT = ".EXIT" ; // IN (int) indice uscita
|
||||
@@ -73,9 +70,10 @@ static const string EVAR_FEED = ".FEED" ; // IN (num) feed dell'utensil
|
||||
static const string EVAR_STARTFEED = ".STARTFEED" ;// IN (num) feed di inizio dell'utensile
|
||||
static const string EVAR_ENDFEED = ".ENDFEED" ; // IN (num) feed di fine dell'utensile
|
||||
static const string EVAR_TIPFEED = ".TIPFEED" ; // IN (num) feed di punta dell'utensile
|
||||
static const string EVAR_ISROBOT = ".ISROBOT" ; // IN (bool) flag per indicare che la cinematica è di tipo robot
|
||||
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok)
|
||||
static const string EVAR_MILLS = ".MILLS" ; // OUT (int) numero di percorsi di lavoro
|
||||
static const string EVAR_SYSNOTES = ".SYSNOTES" ; // IN (string) note interne
|
||||
static const string EVAR_USERNOTES = ".USERNOTES" ;// IN (string) note dell'utente
|
||||
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok)
|
||||
static const string EVAR_MILLS = ".MILLS" ; // OUT (int) numero di percorsi di lavoro
|
||||
static const string ON_PREVIEW = "OnPreview_" ;
|
||||
static const string ON_APPLY = "OnApply_" ;
|
||||
|
||||
@@ -449,12 +447,6 @@ GenMachining::Preview( bool bRecalc)
|
||||
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( 2809, "Error in GenMachining : Tool loading failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// recupero gruppo per geometria di Preview
|
||||
int nPvId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_PV) ;
|
||||
// se non c'è, lo aggiungo
|
||||
@@ -499,8 +491,6 @@ GenMachining::Preview( bool bRecalc)
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_STARTPOS, m_Params.m_dStartPos) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_OFFSR, GetOffsR()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_OFFSL, GetOffsL()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_SYSNOTES, m_Params.m_sSysNotes) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_USERNOTES, m_Params.m_sUserNotes) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TOOL, m_TParams.m_sName) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_HEAD, m_TParams.m_sHead) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_EXIT, m_TParams.m_nExit) ;
|
||||
@@ -517,7 +507,8 @@ GenMachining::Preview( bool bRecalc)
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_STARTFEED, GetStartFeed()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_ENDFEED, GetEndFeed()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TIPFEED, GetTipFeed()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_ISROBOT, m_pMchMgr->GetCurrIsRobot()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_SYSNOTES, m_Params.m_sSysNotes) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_USERNOTES, m_Params.m_sUserNotes) ;
|
||||
// eseguo
|
||||
bOk = bOk && pMch->LuaCallFunction( sPreview, false) ;
|
||||
// recupero valori parametri obbligatori
|
||||
@@ -557,27 +548,19 @@ GenMachining::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || m_nStatus == MCH_ST_NO_POSTAPPL)) {
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
// confermo i percorsi di lavorazione
|
||||
m_nMills = nCurrMills ;
|
||||
string sLog = string( "GenMachining apply skipped : status ") + ( m_nStatus == MCH_ST_OK ? "already ok" : "no postapply") ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), sLog.c_str()) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "GenMachining apply skipped : status already ok") ;
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Update done") ;
|
||||
// esco con successo
|
||||
return true ;
|
||||
}
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
|
||||
// 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( 2809, "Error in GenMachining : Tool loading failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// recupero gruppo per geometria di lavorazione (Cutter Location)
|
||||
int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ;
|
||||
// se non c'è, lo aggiungo
|
||||
@@ -622,8 +605,6 @@ GenMachining::Apply( bool bRecalc, bool bPostApply)
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_STARTPOS, m_Params.m_dStartPos) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_OFFSR, GetOffsR()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_OFFSL, GetOffsL()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_SYSNOTES, m_Params.m_sSysNotes) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_USERNOTES, m_Params.m_sUserNotes) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TOOL, m_TParams.m_sName) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_HEAD, m_TParams.m_sHead) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_EXIT, m_TParams.m_nExit) ;
|
||||
@@ -640,7 +621,8 @@ GenMachining::Apply( bool bRecalc, bool bPostApply)
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_STARTFEED, GetStartFeed()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_ENDFEED, GetEndFeed()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TIPFEED, GetTipFeed()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_ISROBOT, m_pMchMgr->GetCurrIsRobot()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_SYSNOTES, m_Params.m_sSysNotes) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_USERNOTES, m_Params.m_sUserNotes) ;
|
||||
// eseguo
|
||||
bOk = bOk && pMch->LuaCallFunction( sApply, false) ;
|
||||
// recupero valori parametri obbligatori
|
||||
@@ -856,14 +838,10 @@ GenMachining::UpdateToolData( bool* pbChanged)
|
||||
ToolsMgr* pTMgr = m_pMchMgr->GetCurrToolsMgr() ;
|
||||
if ( pTMgr == nullptr)
|
||||
return false ;
|
||||
// recupero l'utensile nel DB utensili (se fallisce con UUID provo con il nome)
|
||||
// recupero l'utensile nel DB utensili
|
||||
const ToolData* pTdata = pTMgr->GetTool( m_Params.m_ToolUuid) ;
|
||||
if ( pTdata == nullptr) {
|
||||
pTdata = pTMgr->GetTool( m_Params.m_sToolName) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
m_Params.m_ToolUuid = m_TParams.m_Uuid ;
|
||||
}
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
// salvo posizione TC, testa e uscita originali
|
||||
string sOrigTcPos = m_TParams.m_sTcPos ;
|
||||
string sOrigHead = m_TParams.m_sHead ;
|
||||
@@ -970,14 +948,3 @@ GenMachining::VerifyGeometry( SelData Id, int& nSubs, int& nType)
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
double
|
||||
GenMachining::GetApproxLinTol( void) const
|
||||
{
|
||||
double dLinTol ;
|
||||
if ( GetValInNotes( m_Params.m_sUserNotes, "LinTol", dLinTol))
|
||||
return dLinTol ;
|
||||
else
|
||||
return Operation::GetApproxLinTol() ;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,6 @@ class GenMachining : public Machining
|
||||
|
||||
private :
|
||||
bool VerifyGeometry( SelData Id, int& nSubs, int& nType) ;
|
||||
double GetApproxLinTol( void) const override ;
|
||||
|
||||
private :
|
||||
double GetSpeed() const
|
||||
|
||||
+8
-34
@@ -17,10 +17,9 @@
|
||||
#include "Generator.h"
|
||||
#include "MachMgr.h"
|
||||
#include "OutputConst.h"
|
||||
#include "/EgtDev/Include/EMkDllMain.h"
|
||||
#include "/EgtDev/Include/EGnFileUtils.h"
|
||||
#include "/EgtDev/Include/EGnGetKeyData.h"
|
||||
#include "/EgtDev/Include/EgtKeyCodes.h"
|
||||
#include "/EgtDev/Include/SELkKeyProc.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -54,8 +53,8 @@ Generator::Run( const string& sCncFile, const string& sInfo)
|
||||
int nRet = GetEGnKeyOptions( KEY_BASELIB_PROD, KEY_BASELIB_VER, KEY_BASELIB_LEV,
|
||||
nOpt1, nOpt2, nOptExpDays) ;
|
||||
if ( ! GetEMkNetHwKey())
|
||||
nRet = GetKeyOptions( GetEMkKey(), KEY_BASELIB_PROD, KEY_BASELIB_VER, KEY_BASELIB_LEV,
|
||||
nOpt1, nOpt2, nOptExpDays) ;
|
||||
int nRet = GetKeyOptions( GetEMkKey(), KEY_BASELIB_PROD, KEY_BASELIB_VER, KEY_BASELIB_LEV,
|
||||
nOpt1, nOpt2, nOptExpDays) ;
|
||||
|
||||
// Verifica della abilitazione
|
||||
bool bMinTime = false ;
|
||||
@@ -67,30 +66,12 @@ Generator::Run( const string& sCncFile, const string& sInfo)
|
||||
bool bKey = false ;
|
||||
if ( nRet == KEY_OK)
|
||||
bKey = true ;
|
||||
bool bNcOff = false ;
|
||||
if ( ( nOpt1 & KEYOPT_EMK_NC_OFF) != 0)
|
||||
bNcOff = true ;
|
||||
bool bAdvMach = false ;
|
||||
if ( ( nOpt1 & KEYOPT_EMK_ADV) != 0)
|
||||
bAdvMach = true ;
|
||||
bool bOption = false ;
|
||||
if ( ( nOpt1 & KEYOPT_EMK_NC_OFF) == 0)
|
||||
bOption = true ;
|
||||
|
||||
// Esecuzione
|
||||
if ( bMinTime && bCurrTime && bKey && ! bNcOff) {
|
||||
|
||||
// se non previste lavorazioni avanzate, verifico la loro assenza
|
||||
if ( ! bAdvMach) {
|
||||
int nOpId = m_pMchMgr->GetFirstActiveOperation() ;
|
||||
while ( nOpId != GDB_ID_NULL) {
|
||||
int nType = m_pMchMgr->GetOperationType( nOpId) ;
|
||||
if ( nType == OPER_SURFROUGHING || nType == OPER_SURFFINISHING || nType == OPER_FIVEAXISMILLING) {
|
||||
m_pMchMgr->SetLastError( 1001, "ADVANCED_MACH_OFF") ;
|
||||
std::string sErr = "Warning on Key (MKC/AMO)" ;
|
||||
LOG_ERROR( GetEMkLogger(), sErr.c_str()) ;
|
||||
return false ;
|
||||
}
|
||||
nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ;
|
||||
}
|
||||
}
|
||||
if ( bMinTime && bCurrTime && bKey && bOption) {
|
||||
|
||||
// emetto info di log
|
||||
{ string sOut = "Generator Run : " + sCncFile ;
|
||||
@@ -118,7 +99,7 @@ Generator::Run( const string& sCncFile, const string& sInfo)
|
||||
|
||||
// Generazione non abilitata
|
||||
m_pMchMgr->SetLastError( 1000, "NC_OFF") ;
|
||||
std::string sErr = ( bNcOff ? "Warning on Key (MKC/NCO)" : "Warning on Key (MKC/KYO)") ;
|
||||
std::string sErr = "Warning on Key (MKC/NCO)" ;
|
||||
LOG_ERROR( GetEMkLogger(), sErr.c_str()) ;
|
||||
return false ;
|
||||
}
|
||||
@@ -181,13 +162,6 @@ Generator::CallOnTableData( void)
|
||||
return m_pMachine->LuaCallFunction( ON_TABLE_DATA) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Generator::CallOnTableAxisData( void)
|
||||
{
|
||||
return m_pMachine->LuaCallFunction( ON_TABLE_AXIS_DATA) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Generator::CallOnFixtureData( void)
|
||||
|
||||
@@ -33,7 +33,6 @@ class Generator : public Processor
|
||||
bool CallOnDispositionStart( void) override ;
|
||||
bool CallOnDispositionEnd( void) override ;
|
||||
bool CallOnTableData( void) override ;
|
||||
bool CallOnTableAxisData( void) override ;
|
||||
bool CallOnFixtureData( void) override ;
|
||||
bool CallOnRawMoveData( void) override ;
|
||||
bool CallOnToolSelect( void) override ;
|
||||
|
||||
@@ -16,9 +16,6 @@
|
||||
//----------------- Costanti generali ----------------------------------------
|
||||
#include "/EgtDev/Include/EGkGeoConst.h"
|
||||
|
||||
//----------- Minima distanza di sicurezza ----------------------------------
|
||||
const double MIN_SAFEDIST = 5.0 ;
|
||||
|
||||
//----------- Costanti per approssimazioni con polilinee o poliarchi --------
|
||||
const double LIN_TOL_STD = 0.1 ;
|
||||
const double LIN_TOL_MID = 0.05 ;
|
||||
|
||||
-15
@@ -84,12 +84,6 @@ const std::string GENMACHINING_SEC = "GenMachining" ;
|
||||
// Chiave (radice) per nome lavorazione generica i-esima
|
||||
const std::string GENMACHINING_SCRIPT_KEY = "GenScript" ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Sezione fresature 5assi nel file INI di macchina
|
||||
const std::string FIVEAXISMILLING_SEC = "5AxMilling" ;
|
||||
// Chiave (radice) per nome lavorazione 5assi i-esima
|
||||
const std::string FIVEAXISMILLING_SCRIPT_KEY = "5AxScript" ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Sezione di attrezzaggio nel file INI di macchina
|
||||
const std::string SETUP_SEC = "Setup" ;
|
||||
@@ -122,12 +116,6 @@ const std::string MILLHOLDER_KEY = "MillHolder" ;
|
||||
// Sezione portautensili nel file INI di macchina
|
||||
const std::string TOOLHOLDER_SEC = "ToolHolder" ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Sezione lavorazioni nel file INI di macchina
|
||||
const std::string MACHININGS_SEC = "Machinings" ;
|
||||
// Chiave per abilitare discesa e risalita in rapido da fresature con estremi fuori dal grezzo
|
||||
const std::string RAPIDONOUT_KEY = "RapidOnOut" ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Minimo spessore del grezzo
|
||||
const double RAW_MIN_H = 1 ;
|
||||
@@ -143,7 +131,6 @@ const double MAX_ANG_CEN = 150.001 ;
|
||||
//----------------------------------------------------------------------------
|
||||
// Tolleranza su elevazione per attacchi e uscite
|
||||
const double LIO_ELEV_TOL = 2.0 ;
|
||||
const double LIO_ELEV_FLOAT = 10.0 ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Per FlatParts (vedi Nesting di EgtExecutor)
|
||||
@@ -153,5 +140,3 @@ const std::string NST_PARTREG_LAYER = "Region" ;
|
||||
//----------------------------------------------------------------------------
|
||||
// Minima componente zeta di versore utensile per lavorazione da sopra (-45deg)
|
||||
const double MIN_ZDIR_TOP_TOOL = -0.7072 ;
|
||||
// Minima componente zeta di versose utensile èer mortasatura quasi verticale (45deg)
|
||||
const double MIN_ZDIR_VERT_CHSAW = 0.7072 ;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2015-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : MachMgr.h Data : 25.11.24 Versione : 2.6k5
|
||||
// File : MachMgr.h Data : 02.04.24 Versione : 2.6d1
|
||||
// Contenuto : Dichiarazione della classe MachMgr.
|
||||
//
|
||||
//
|
||||
@@ -15,8 +15,6 @@
|
||||
// 28.10.23 DS Aggiunte GetClEntAxesVal e GetToolSetupPosInCurrSetup.
|
||||
// 30.03.24 DS Aggiunte GetAllAxesNames e GetCalcTable.
|
||||
// 02.04.24 DS Aggiunta GetClEntAxesMask.
|
||||
// 22.04.24 DS Aggiunta GetExitId.
|
||||
// 25.11.24 DS Aggiunta GetMachiningSkippedGeometry.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -157,9 +155,6 @@ class MachMgr : public IMachMgr
|
||||
bool GetTableAreaOffset( int nInd, BBox3d& b3AreaOffs) const override ;
|
||||
bool ChangeTable( const std::string& sTable, bool bUpdateDisp) override ;
|
||||
bool ShowOnlyTable( bool bVal) override ;
|
||||
bool MoveDispAxis( const std::string& sName, double dPos) override ;
|
||||
bool RemoveDispAxis( const std::string& sName) override ;
|
||||
bool KeepAllDispAxes( int nSouPhase) override ;
|
||||
int AddFixture( const std::string& sName, const Point3d& ptPos, double dAngRotDeg, double dMov) override ;
|
||||
bool KeepFixture( int nFxtId, int nSouPhase) override ;
|
||||
bool RemoveFixture( int nFxtId) override ;
|
||||
@@ -168,9 +163,7 @@ class MachMgr : public IMachMgr
|
||||
int GetNextFixture( int nFxtId) const override ;
|
||||
bool MoveFixture( int nId, const Vector3d& vtMove) override ;
|
||||
bool RotateFixture( int nId, double dDeltaAngDeg) override ;
|
||||
bool SetFixtureLink( int nId, const std::string& sTaLink) override ;
|
||||
bool MoveFixtureMobile( int nId, double dDeltaMov) override ;
|
||||
bool SetFixtureMobile( int nId, double dMov) override ;
|
||||
// Tools DataBase
|
||||
bool TdbGetToolNewName( std::string& sName) const override ;
|
||||
bool TdbAddTool( const std::string& sName, int nType) override ;
|
||||
@@ -285,7 +278,6 @@ class MachMgr : public IMachMgr
|
||||
int GetPhaseDisposition( int nPhase) const override ;
|
||||
bool DispositionSpecialApply( int nId, bool bRecalc) override ;
|
||||
bool DispositionSpecialUpdate( int nId) override ;
|
||||
bool GetDispositionToolData( int nId, std::string& sName, std::string& sHead, int& nExit, std::string& sTcPos) override ;
|
||||
// Operations : machinings
|
||||
int AddMachining( const std::string& sName, const std::string& sMachining) override ;
|
||||
int AddMachining( const std::string& sName, int nMchType, const std::string& sTool) override ;
|
||||
@@ -305,14 +297,12 @@ class MachMgr : public IMachMgr
|
||||
bool MachiningUpdate( bool bPostApply = true) override ;
|
||||
bool PreparePreviewMachiningTool( void) const override ;
|
||||
bool RemovePreviewMachiningTool( void) const override ;
|
||||
int GetPreviewMachiningToolStepCount( void) const override ;
|
||||
int PreviewMachiningTool( int nEntId, int nStep) const override ;
|
||||
int PreviewMachiningTool( int nEntId, int nFlag) const override ;
|
||||
bool GetMachiningParam( int nType, bool& bVal) const override ;
|
||||
bool GetMachiningParam( int nType, int& nVal) const override ;
|
||||
bool GetMachiningParam( int nType, double& dVal) const override ;
|
||||
bool GetMachiningParam( int nType, std::string& sVal) const override ;
|
||||
bool GetMachiningGeometry( SELVECTOR& vIds) const override ;
|
||||
bool GetMachiningSkippedGeometry( SELVECTOR& vIds) const override ;
|
||||
bool IsMachiningEmpty( void) const override ;
|
||||
bool GetMachiningStartPoint( Point3d& ptStart) const override ;
|
||||
bool GetMachiningEndPoint( Point3d& ptEnd) const override ;
|
||||
@@ -320,7 +310,6 @@ class MachMgr : public IMachMgr
|
||||
bool GetClEntMove( int nEntId, int& nMove) const override ;
|
||||
bool GetClEntFlag( int nEntId, int& nFlag, int& nFlag2) const override ;
|
||||
bool GetClEntIndex( int nEntId, int& nIndex) const override ;
|
||||
bool GetClEntAxesStatus( int nEntId, int& nStatus) const override ;
|
||||
bool GetClEntAxesMask( int nEntId, int& nMask) const override ;
|
||||
bool GetClEntAxesVal( int nEntId, DBLVECTOR& vAxes) const override ;
|
||||
// Simulation
|
||||
@@ -372,11 +361,9 @@ class MachMgr : public IMachMgr
|
||||
int GetAxisId( const std::string& sAxis) const override ;
|
||||
int GetHeadId( const std::string& sHead) const override ;
|
||||
int GetHeadExitCount( const std::string& sHead) const override ;
|
||||
int GetExitId( const std::string& sHead, int nExit) const override ;
|
||||
int GetTcPosId( const std::string& sTcPos) const override ;
|
||||
bool GetAxisToken( const std::string& sAxis, std::string& sToken) const override ;
|
||||
bool GetAxisType( const std::string& sAxis, bool& bLinear) const override ;
|
||||
bool GetAxisDir( const std::string& sAxis, Vector3d& vtDir) const override ;
|
||||
bool GetAxisInvert( const std::string& sAxis, bool& bInvert) const override ;
|
||||
bool GetAxisOffset( const std::string& sAxis, double& dOffset) const override ;
|
||||
bool SetAxisPos( const std::string& sAxis, double dVal, double* pdNewVal = nullptr) override ;
|
||||
@@ -457,8 +444,6 @@ class MachMgr : public IMachMgr
|
||||
int GetCurrRotAxes( void) const ;
|
||||
bool GetAllCurrAxesHomePos( DBLVECTOR& vAxHomeVal) const ;
|
||||
bool GetCurrAxisHomePos( int nInd, double& dHome) const ;
|
||||
bool GetCurrAxisMax( int nInd, double& dHome) const ;
|
||||
bool GetCurrAxisMin( int nInd, double& dHome) const ;
|
||||
const Frame3d& GetCurrLinAxesFrame( void) const ;
|
||||
bool GetCurrIsCenter( void) const ;
|
||||
bool GetCurrIsRobot( void) const ;
|
||||
@@ -483,15 +468,11 @@ class MachMgr : public IMachMgr
|
||||
bool SimAddCollisionObj( int nInd, bool bToolOn, int nFrameId, int nType, const Vector3d& vtMove, double dPar1, double dPar2, double dPar3) ;
|
||||
bool SimExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) ;
|
||||
bool SimOnCollision( int nCdInd, int nObjInd, int& nErr) ;
|
||||
bool SimSetToolForVmill( const std::string& sTool, const std::string& sHead, int nExit, int nFlag, double dPar1, double dPar2,
|
||||
const INTVECTOR& vVmill, bool bFirst) ;
|
||||
bool SimEnableToolsForVmill( bool bEnable) ;
|
||||
bool SimSetToolForVmill( const std::string& sTool, const std::string& sHead, int nExit, const INTVECTOR& vVmill, bool bFirst) ;
|
||||
int SimMoveAxes( int nMoveType, const SAMVECTOR& vAxNaEpSt) ;
|
||||
bool SimSaveCmd( int nType, int nPar, const std::string& sPar, const std::string& sPar2) ;
|
||||
// Machine
|
||||
bool ResetAllAxesPos( bool bStdAxes, bool bDispAxes) ;
|
||||
bool IsDispositionAxis( const std::string& sAxis, const std::string& sTable = "") const ;
|
||||
bool GetHeadAbove( const std::string& sHead) const ;
|
||||
double GetDeltaSafeZ( const std::string& sHead) const ;
|
||||
double GetAngDeltaMinForHome( void) const ;
|
||||
|
||||
private :
|
||||
@@ -565,5 +546,5 @@ class MachMgr : public IMachMgr
|
||||
int m_nCurrDispId ; // identificativo della disposizione corrente
|
||||
int m_nCurrMachiningId ; // identificativo della lavorazione corrente
|
||||
AXBLOCKVECTOR m_vAxisBlock ; // elenco assi da bloccare
|
||||
ISimulator* m_pSimul ; // puntatore al simulatore attivo
|
||||
Simulator* m_pSimul ; // puntatore al simulatore attivo
|
||||
} ;
|
||||
|
||||
+1
-5
@@ -311,11 +311,7 @@ MachMgr::SetLastError( int nErr, const string& sErr)
|
||||
{
|
||||
m_nLastError = nErr ;
|
||||
m_sLastError = sErr ;
|
||||
string sInfo ;
|
||||
if ( sErr._Starts_with( "Error"))
|
||||
sInfo = m_sLastError + " (" + ToString( nErr) + ")" ;
|
||||
else
|
||||
sInfo = "Error " + ToString( nErr) + " : " + m_sLastError ;
|
||||
string sInfo = m_sLastError + " (" + ToString( nErr) + ")" ;
|
||||
LOG_ERROR( GetEMkLogger(), sInfo.c_str()) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include "DllMain.h"
|
||||
#include "MachMgr.h"
|
||||
#include "MachConst.h"
|
||||
#include "CamData.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -76,24 +75,6 @@ MachMgr::GetClEntIndex( int nEntId, int& nIndex) const
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetClEntAxesStatus( int nEntId, int& nStatus) const
|
||||
{
|
||||
// default
|
||||
nStatus = 0 ;
|
||||
// verifico validita GeomDB
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero l'oggetto CamData
|
||||
const CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ;
|
||||
if ( pCamData == nullptr)
|
||||
return false ;
|
||||
// recupero il tipo di movimento
|
||||
nStatus = pCamData->GetAxesStatus() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetClEntAxesMask( int nEntId, int& nMask) const
|
||||
|
||||
@@ -667,7 +667,6 @@ MachMgr::UpdateStandardToolDraw( const ToolData* pTdata, int nGenCtx, int nToolC
|
||||
bool bOk = ExeLuaSetGlobIntVar( "TOOL.TYPE", nType) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.SPEED", dSpeed) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.TIPFEED", dTipFeed) ;
|
||||
bOk = bOk && ExeLuaSetGlobStringVar( "TOOL.USERNOTES", sUserNotes) ;
|
||||
switch ( nType) {
|
||||
case TT_DRILL_STD :
|
||||
case TT_DRILL_LONG :
|
||||
@@ -763,8 +762,6 @@ MachMgr::UpdateCustomToolDraw( const ToolData* pTdata, int nGenCtx, int nToolCtx
|
||||
pTdata->GetParam( TPA_DIST, dDist) ;
|
||||
double dSpeed = 0 ;
|
||||
pTdata->GetParam( TPA_SPEED, dSpeed) ;
|
||||
string sUserNotes ;
|
||||
pTdata->GetParam( TPA_USERNOTES, sUserNotes) ;
|
||||
// Imposto contesto per il disegno utensile
|
||||
if ( ! ExeSetCurrentContext( nToolCtx))
|
||||
return TD_INT_ERR ;
|
||||
@@ -775,7 +772,6 @@ MachMgr::UpdateCustomToolDraw( const ToolData* pTdata, int nGenCtx, int nToolCtx
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.DIAM", dDiam) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.DIST", dDist) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.SPEED", dSpeed) ;
|
||||
bOk = bOk && ExeLuaSetGlobStringVar( "TOOL.USERNOTES", sUserNotes) ;
|
||||
// Eseguo aggiornamento utensile
|
||||
bOk = bOk && ExeLuaCallFunction( "AdjustCustomTool") ;
|
||||
// Recupero errore
|
||||
|
||||
+4
-75
@@ -135,52 +135,6 @@ MachMgr::ShowOnlyTable( bool bVal)
|
||||
return pMch->SetLook( bVal ? MCH_LOOK_TAB : MCH_LOOK_ALL) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::MoveDispAxis( const string& sName, double dPos)
|
||||
{
|
||||
// recupero l'oggetto disposizione corrente
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( m_nCurrDispId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// eseguo l'operazione
|
||||
return pDisp->MoveAxis( sName, dPos) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::RemoveDispAxis( const string& sName)
|
||||
{
|
||||
// recupero l'oggetto disposizione corrente
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( m_nCurrDispId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// eseguo l'operazione
|
||||
return pDisp->RemoveAxis( sName) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::KeepAllDispAxes( int nSouPhase)
|
||||
{
|
||||
// se fase di origine non definita o uguale alla corrente, esco con successo
|
||||
if ( nSouPhase == 0 || nSouPhase == m_nCurrPhase)
|
||||
return true ;
|
||||
// copio il posizionamento
|
||||
Disposition* pSouDisp = GetDisposition( m_pGeomDB->GetUserObj( GetPhaseDisposition( nSouPhase))) ;
|
||||
Disposition* pDisp = GetDisposition( m_pGeomDB->GetUserObj( GetPhaseDisposition( m_nCurrPhase))) ;
|
||||
if ( pSouDisp == nullptr || pDisp == nullptr)
|
||||
return false ;
|
||||
for ( int i = 0 ; ; ++ i) {
|
||||
string sName ; double dPos ;
|
||||
if ( pSouDisp->GetMoveAxisData( i, sName, dPos))
|
||||
pDisp->MoveAxis( sName, dPos) ;
|
||||
else
|
||||
break ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::AddFixture( const string& sName, const Point3d& ptPos, double dAngRotDeg, double dMov)
|
||||
@@ -204,8 +158,8 @@ MachMgr::KeepFixture( int nFxtId, int nSouPhase)
|
||||
// se fase corrente già presente, non devo fare alcunché
|
||||
if ( find( vPhase.begin(), vPhase.end(), m_nCurrPhase) != vPhase.end())
|
||||
return true ;
|
||||
// se fase di origine non definita o uguale alla corrente, esco con successo
|
||||
if ( nSouPhase == 0 || nSouPhase == m_nCurrPhase)
|
||||
// se fase di origine non definita, esco con successo
|
||||
if ( nSouPhase == 0)
|
||||
return true ;
|
||||
// copio il posizionamento
|
||||
Disposition* pSouDisp = GetDisposition( m_pGeomDB->GetUserObj( GetPhaseDisposition( nSouPhase))) ;
|
||||
@@ -213,11 +167,10 @@ MachMgr::KeepFixture( int nFxtId, int nSouPhase)
|
||||
if ( pSouDisp == nullptr || pDisp == nullptr)
|
||||
return false ;
|
||||
for ( int i = 0 ; ; ++ i) {
|
||||
string sName ; int nId ; Point3d ptPos ; double dAngDeg ; double dMov ; string sTaLink ;
|
||||
if ( pSouDisp->GetFixtureData( i, sName, nId, ptPos, dAngDeg, dMov, sTaLink)) {
|
||||
string sName ; int nId ; Point3d ptPos ; double dAngDeg ; double dMov ;
|
||||
if ( pSouDisp->GetFixtureData( i, sName, nId, ptPos, dAngDeg, dMov)) {
|
||||
if ( nId == nFxtId) {
|
||||
pDisp->AddFixture( sName, nId, ptPos, dAngDeg, dMov) ;
|
||||
pDisp->SetFixtureLink( nId, sTaLink) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
@@ -301,18 +254,6 @@ MachMgr::RotateFixture( int nId, double dDeltaAngDeg)
|
||||
return pDisp->RotateFixture( nId, dDeltaAngDeg) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::SetFixtureLink( int nId, const string& sTaLink)
|
||||
{
|
||||
// recupero l'oggetto disposizione corrente
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( m_nCurrDispId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return false ;
|
||||
// eseguo l'operazione
|
||||
return pDisp->SetFixtureLink( nId, sTaLink) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::MoveFixtureMobile( int nId, double dDeltaMov)
|
||||
@@ -325,18 +266,6 @@ MachMgr::MoveFixtureMobile( int nId, double dDeltaMov)
|
||||
return pDisp->MoveFixtureMobile( nId, dDeltaMov) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::SetFixtureMobile( int nId, double dMov)
|
||||
{
|
||||
// recupero l'oggetto disposizione corrente
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( m_nCurrDispId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return false ;
|
||||
// eseguo l'operazione
|
||||
return pDisp->SetFixtureMobile( nId, dMov) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::VerifyFixtureInGroup( int nFxtId, bool bLinkedAllowed) const
|
||||
|
||||
+2
-10
@@ -18,7 +18,6 @@
|
||||
#include "MachConst.h"
|
||||
#include "Generator.h"
|
||||
#include "Estimator.h"
|
||||
#include "/EgtDev/Include/EGnFileUtils.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -26,13 +25,6 @@ using namespace std ;
|
||||
bool
|
||||
MachMgr::Generate( const string& sCncFile, const string& sInfo)
|
||||
{
|
||||
// se macchina multiprocesso è necessaria stima speciale
|
||||
if ( GetCurrMachine() != nullptr && GetCurrMachine()->GetMultiProcess()) {
|
||||
string sEstFile = ChangeFileExtension( sCncFile, "sest") ;
|
||||
if ( ! Estimate( sEstFile, sInfo))
|
||||
return false ;
|
||||
}
|
||||
|
||||
// inizializzazione generatore
|
||||
Generator genPP ;
|
||||
if ( ! genPP.Init( this)) {
|
||||
@@ -52,13 +44,13 @@ MachMgr::Generate( const string& sCncFile, const string& sInfo)
|
||||
bool
|
||||
MachMgr::Estimate( const string& sEstFile, const string& sInfo)
|
||||
{
|
||||
// inizializzazione stimatore
|
||||
// inizializzazione generatore
|
||||
Estimator estPP ;
|
||||
if ( ! estPP.Init( this)) {
|
||||
LOG_ERROR( GetEMkLogger(), "Error on Estimate Init")
|
||||
return false ;
|
||||
}
|
||||
// esecuzione della stima
|
||||
// esecuzione della generazione
|
||||
if ( ! estPP.Run( sEstFile, sInfo)) {
|
||||
LOG_ERROR( GetEMkLogger(), "Error on Estimate Run")
|
||||
return false ;
|
||||
|
||||
+15
-52
@@ -274,15 +274,6 @@ MachMgr::GetHeadExitCount( const string& sHead) const
|
||||
return ( ( pMch != nullptr) ? pMch->GetHeadExitCount( sHead) : 0) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::GetExitId( const string& sHead, int nExit) const
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
// recupero identificativo dell'uscita della testa indicata nella macchina corrente
|
||||
return ( ( pMch != nullptr) ? pMch->GetExitId( sHead, nExit) : GDB_ID_NULL) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::GetTcPosId( const string& sTcPos) const
|
||||
@@ -303,6 +294,18 @@ MachMgr::GetHeadAbove( const string& sHead) const
|
||||
return ( ! m_pGeomDB->GetInfo( GetHeadId( sHead), MCH_ABOVE, bAbove) || bAbove) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
double
|
||||
MachMgr::GetDeltaSafeZ( const string& sHead) const
|
||||
{
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return 0 ;
|
||||
// Leggo da testa Info ZSAFEDELTA
|
||||
double dDeltaSafeZ = 0 ;
|
||||
m_pGeomDB->GetInfo( GetHeadId( sHead), MCH_ZSAFEDELTA, dDeltaSafeZ) ;
|
||||
return dDeltaSafeZ ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
double
|
||||
MachMgr::GetAngDeltaMinForHome( void) const
|
||||
@@ -330,15 +333,6 @@ MachMgr::GetAxisType( const string& sAxis, bool& bLinear) const
|
||||
return ( ( pMch != nullptr) ? pMch->GetAxisType( sAxis, bLinear) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetAxisDir( const string& sAxis, Vector3d& vtDir) const
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
// restituisco la direzione dell'asse indicato nella macchina corrente
|
||||
return ( ( pMch != nullptr) ? pMch->GetAxisDir( sAxis, vtDir) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetAxisInvert( const string& sAxis, bool& bInvert) const
|
||||
@@ -405,27 +399,12 @@ MachMgr::ResetAxisPos( const string& sAxis)
|
||||
return ( ( pMch != nullptr) ? pMch->ResetAxisPos( sAxis) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::IsDispositionAxis( const string& sAxis, const string& sTable) const
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
return ( ( pMch != nullptr) ? pMch->IsDispositionAxis( sAxis, sTable) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::ResetAllAxesPos( void)
|
||||
{
|
||||
return ResetAllAxesPos( true, false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::ResetAllAxesPos( bool bStdAxes, bool bDispAxes)
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
return ( ( pMch != nullptr) ? pMch->ResetAllAxesPos( bStdAxes, bDispAxes) : false) ;
|
||||
return ( ( pMch != nullptr) ? pMch->ResetAllAxesPos() : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -711,22 +690,6 @@ MachMgr::GetCurrAxisHomePos( int nInd, double& dHome) const
|
||||
return ( ( pMch != nullptr) ? pMch->GetCurrAxisHomePos( nInd, dHome) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetCurrAxisMax( int nInd, double& dMax) const
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
return ( ( pMch != nullptr) ? pMch->GetCurrAxisMax( nInd, dMax) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetCurrAxisMin( int nInd, double& dMin) const
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
return ( ( pMch != nullptr) ? pMch->GetCurrAxisMin( nInd, dMin) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const Frame3d&
|
||||
MachMgr::GetCurrLinAxesFrame( void) const
|
||||
@@ -803,7 +766,7 @@ MachMgr::GetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA,
|
||||
{
|
||||
DBLVECTOR vAng( 2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, false, ptTip) : false) ;
|
||||
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, ptTip) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -812,7 +775,7 @@ MachMgr::GetCalcTipFromPositions( double dX, double dY, double dZ, const DBLVECT
|
||||
bool bOverall, bool bBottom, Point3d& ptTip) const
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, false, ptTip) : false) ;
|
||||
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, ptTip) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
+2
-47
@@ -601,7 +601,6 @@ MachMgr::AddDisposition( const string& sName)
|
||||
m_pGeomDB->SetUserObj( nId, pDisp) ;
|
||||
pDisp->Init( this) ;
|
||||
pDisp->SetPhase( m_nCurrPhase) ;
|
||||
ResetAllAxesPos( false, true) ;
|
||||
return nId ;
|
||||
}
|
||||
|
||||
@@ -673,18 +672,6 @@ MachMgr::DispositionSpecialUpdate( int nId)
|
||||
return pDisp->SpecialUpdate() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetDispositionToolData( int nId, string& sName, string& sHead, int& nExit, string& sTcPos)
|
||||
{
|
||||
// recupero la disposizione
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( nId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return false ;
|
||||
// recupero i dati utensile
|
||||
return pDisp->GetToolData( sName, sHead, nExit, sTcPos) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Machinings
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -1135,23 +1122,7 @@ MachMgr::RemovePreviewMachiningTool( void) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::GetPreviewMachiningToolStepCount( void) const
|
||||
{
|
||||
// recupero la lavorazione corrente
|
||||
int nCurrMchId = GetCurrMachining() ;
|
||||
if ( nCurrMchId == GDB_ID_NULL)
|
||||
return 0 ;
|
||||
// ne recupero il gestore
|
||||
Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( nCurrMchId)) ;
|
||||
if ( pMch == nullptr)
|
||||
return 0 ;
|
||||
// eseguo
|
||||
return pMch->GetToolPreviewStepCount() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::PreviewMachiningTool( int nEntId, int nStep) const
|
||||
MachMgr::PreviewMachiningTool( int nEntId, int nFlag) const
|
||||
{
|
||||
// recupero la lavorazione corrente
|
||||
int nCurrMchId = GetCurrMachining() ;
|
||||
@@ -1162,7 +1133,7 @@ MachMgr::PreviewMachiningTool( int nEntId, int nStep) const
|
||||
if ( pMch == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// eseguo
|
||||
return pMch->ToolPreview( nEntId, nStep) ;
|
||||
return pMch->ToolPreview( nEntId, nFlag) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -1261,22 +1232,6 @@ MachMgr::GetMachiningGeometry( SELVECTOR& vIds) const
|
||||
return pMch->GetGeometry( vIds) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetMachiningSkippedGeometry( SELVECTOR& vIds) const
|
||||
{
|
||||
// recupero la lavorazione corrente
|
||||
int nCurrMchId = GetCurrMachining() ;
|
||||
if ( nCurrMchId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// ne recupero il gestore
|
||||
Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( nCurrMchId)) ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
// restituisco la geometria non lavorata
|
||||
return pMch->GetSkippedGeometry( vIds) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::IsMachiningEmpty( void) const
|
||||
|
||||
+2
-2
@@ -737,8 +737,8 @@ MachMgr::KeepRawPart( int nRawId, int nSouPhase)
|
||||
return false ;
|
||||
if ( ! SwapRawPartParts( nRawId, true))
|
||||
return false ;
|
||||
// se fase di origine non definita o uguale alla corrente, esco con successo
|
||||
if ( nSouPhase == 0 || nSouPhase == m_nCurrPhase)
|
||||
// se fase di origine non definita, esco con successo
|
||||
if ( nSouPhase == 0)
|
||||
return true ;
|
||||
// copio il posizionamento
|
||||
Disposition* pSouDisp = GetDisposition( m_pGeomDB->GetUserObj( GetPhaseDisposition( nSouPhase))) ;
|
||||
|
||||
@@ -155,7 +155,6 @@ MachMgr::UpdateCurrSetup( void)
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
pMch->ResetCurrTool() ;
|
||||
return pMch->LoadAllTools() ;
|
||||
}
|
||||
|
||||
|
||||
+4
-33
@@ -16,8 +16,7 @@
|
||||
#include "DllMain.h"
|
||||
#include "MachMgr.h"
|
||||
#include "MachConst.h"
|
||||
#include "SimulatorSP.h"
|
||||
#include "SimulatorMP.h"
|
||||
#include "Simulator.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -28,12 +27,7 @@ MachMgr::SimInit( void)
|
||||
// alloco o rialloco il simulatore
|
||||
if ( m_pSimul != nullptr)
|
||||
delete m_pSimul ;
|
||||
if ( GetCurrMachine() == nullptr)
|
||||
return false ;
|
||||
if ( GetCurrMachine()->GetMultiProcess( 2))
|
||||
m_pSimul = CreateSimulatorMP() ;
|
||||
else
|
||||
m_pSimul = CreateSimulatorSP() ;
|
||||
m_pSimul = new( nothrow) Simulator ;
|
||||
if ( m_pSimul == nullptr)
|
||||
return false ;
|
||||
// lo inizializzo
|
||||
@@ -189,25 +183,13 @@ MachMgr::SimOnCollision( int nCdInd, int nObjInd, int& nErr)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::SimSetToolForVmill( const string& sTool, const string& sHead, int nExit, int nFlag, double dPar1, double dPar2,
|
||||
const INTVECTOR& vVmill, bool bFirst)
|
||||
MachMgr::SimSetToolForVmill( const string& sTool, const string& sHead, int nExit, const INTVECTOR& vVmill, bool bFirst)
|
||||
{
|
||||
// verifico simulatore
|
||||
if ( m_pSimul == nullptr)
|
||||
return false ;
|
||||
// imposto utensile per Vmill
|
||||
return m_pSimul->SetToolForVmill( sTool, sHead, nExit, nFlag, dPar1, dPar2, vVmill, bFirst) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::SimEnableToolsForVmill( bool bEnable)
|
||||
{
|
||||
// verifico simulatore
|
||||
if ( m_pSimul == nullptr)
|
||||
return false ;
|
||||
// imposto abilitazione Vmill
|
||||
return m_pSimul->EnableToolsForVmill( bEnable) ;
|
||||
return m_pSimul->SetToolForVmill( sTool, sHead, nExit, vVmill, bFirst) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -220,14 +202,3 @@ MachMgr::SimMoveAxes( int nMoveType, const SAMVECTOR& vAxNaEpSt)
|
||||
// lancio movimento assi
|
||||
return m_pSimul->MoveAxes( nMoveType, vAxNaEpSt) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::SimSaveCmd( int nType, int nPar, const string& sPar, const string& sPar2)
|
||||
{
|
||||
// verifico simulatore
|
||||
if ( m_pSimul == nullptr)
|
||||
return false ;
|
||||
// salvo il comando
|
||||
return m_pSimul->SaveCmd( nType, nPar, sPar, sPar2) ;
|
||||
}
|
||||
|
||||
+3
-5
@@ -41,8 +41,6 @@ Machine::Machine( void)
|
||||
m_dExitMaxAdjust = EPS_SMALL ;
|
||||
m_dExitMaxRotAdj = 10 * EPS_ANG_SMALL ;
|
||||
m_dAngDeltaMinForHome = INFINITO ;
|
||||
m_nMultiProcess = 0 ;
|
||||
m_nNewLinkMgr = 0 ;
|
||||
m_nCalcTabId = GDB_ID_NULL ;
|
||||
m_nCalcHeadId = GDB_ID_NULL ;
|
||||
m_nCalcExitId = GDB_ID_NULL ;
|
||||
@@ -144,7 +142,7 @@ Machine::Init( const string& sMachineName, const string& sMachineDir, MachMgr* p
|
||||
// imposto stato di visualizzazione
|
||||
m_nMachineLook = ( bOk ? MCH_LOOK_ALL : MCH_LOOK_NONE) ;
|
||||
// metto tutti gli assi in posizione home
|
||||
bOk = bOk && ResetAllAxesPos( true, true) ;
|
||||
bOk = bOk && ResetAllAxesPos() ;
|
||||
// reset catena cinematica corrente
|
||||
m_nCalcChainType = KIN_CHAIN_NONE ;
|
||||
return bOk ;
|
||||
@@ -1005,8 +1003,8 @@ Machine::CreateExitGroups( int nLay, const MUEXITVECTOR& vMuExit)
|
||||
m_pGeomDB->SetName( nGT, sName) ;
|
||||
// copio le info
|
||||
m_pGeomDB->CopyAllInfoFrom( nGT, nT) ;
|
||||
// assegno info per eventuale movimento (sempre in Z globale)
|
||||
m_pGeomDB->SetInfo( nGT, MCH_EXIT_VAL, 0) ;
|
||||
// assegno info per eventuale movimento
|
||||
m_pGeomDB->SetInfo( nGT, "Val", 0) ;
|
||||
// installo e inizializzo il gestore dell'uscita
|
||||
Exit* pExit = new(nothrow) Exit ;
|
||||
if ( pExit == nullptr)
|
||||
|
||||
@@ -50,7 +50,6 @@ class Machine
|
||||
int GetAxisId( const std::string& sAxis) const
|
||||
{ int nId = GetGroup( sAxis) ;
|
||||
return ( IsAxisGroup( nId) ? nId : GDB_ID_NULL) ; }
|
||||
bool GetAxisName( int nAxId, std::string& sAxis) const ;
|
||||
int GetHeadId( const std::string& sHead) const
|
||||
{ int nId = GetGroup( sHead) ;
|
||||
return ( IsHeadGroup( nId) ? nId : GDB_ID_NULL) ; }
|
||||
@@ -61,20 +60,6 @@ class Machine
|
||||
int GetTcPosId( const std::string& sTcPos) const
|
||||
{ int nId = GetGroup( sTcPos) ;
|
||||
return ( IsTcPosGroup( nId) ? nId : GDB_ID_NULL) ; }
|
||||
bool IsBaseGroup( int nGroup) const ;
|
||||
bool IsAxisGroup( int nGroup) const
|
||||
{ return ( GetAxis( nGroup) != nullptr) ; }
|
||||
bool IsLinearAxisGroup( int nGroup) const ;
|
||||
bool IsRotaryAxisGroup( int nGroup) const ;
|
||||
bool IsTableGroup( int nGroup) const
|
||||
{ return ( GetTable( nGroup) != nullptr) ; }
|
||||
bool IsHeadGroup( int nGroup) const
|
||||
{ return ( GetHead( nGroup) != nullptr) ; }
|
||||
bool IsTcPosGroup( int nGroup) const
|
||||
{ return ( GetTcPos( nGroup) != nullptr) ; }
|
||||
bool IsExitGroup( int nGroup) const
|
||||
{ return ( GetExit( nGroup) != nullptr) ; }
|
||||
bool GetAllAxesIds( INTVECTOR& vIds) const ;
|
||||
bool GetAllTablesNames( STRVECTOR& vNames) const ;
|
||||
bool GetAllAxesNames( STRVECTOR& vNames) const ;
|
||||
bool GetAllHeadsNames( STRVECTOR& vNames) const ;
|
||||
@@ -86,10 +71,6 @@ class Machine
|
||||
int GetHeadSelectType(const std::string& sHead) const ;
|
||||
double GetAngDeltaMinForHome( void) const
|
||||
{ return m_dAngDeltaMinForHome ; }
|
||||
bool GetMultiProcess( int nOpt = 1) const
|
||||
{ return ( m_nMultiProcess >= nOpt) ; }
|
||||
bool GetNewLinkMgr( int nOpt = 1) const
|
||||
{ return ( m_nNewLinkMgr >= nOpt) ; }
|
||||
bool LoadTool( const std::string& sHead, int nExit, const std::string& sTool) ;
|
||||
bool GetLoadedTool( const std::string& sHead, int nExit, std::string& sTool) const ;
|
||||
bool UnloadTool( const std::string& sHead, int nExit) ;
|
||||
@@ -102,16 +83,13 @@ class Machine
|
||||
bool GetAxisInvert( const std::string& sAxis, bool& bInvert) const ;
|
||||
bool GetAxisOffset( const std::string& sAxis, double& dOffset) const ;
|
||||
bool GetAxisType( const std::string& sAxis, bool& bLinear) const ;
|
||||
bool GetAxisDir( const std::string& sAxis, Vector3d& vtDir) const ;
|
||||
bool SetAxisPos( const std::string& sAxis, double dVal, bool bInStroke = true, double* pdNewVal = nullptr) ;
|
||||
bool GetAxisPos( const std::string& sAxis, double& dVal) const ;
|
||||
bool GetAxisMin( const std::string& sAxis, double& dMin) const ;
|
||||
bool GetAxisMax( const std::string& sAxis, double& dMax) const ;
|
||||
bool GetAxisHomePos( const std::string& sAxis, double& dHomeVal) const ;
|
||||
bool IsDispositionAxis( int nAxisId, int nTableId = GDB_ID_NULL) const ;
|
||||
bool IsDispositionAxis( const std::string& sAxis, const std::string& sTable = "") const ;
|
||||
bool ResetAxisPos( const std::string& sAxis) ;
|
||||
bool ResetAllAxesPos( bool bStdAxes, bool bDispAxes) ;
|
||||
bool ResetAllAxesPos( void) ;
|
||||
bool SetCurrTable( const std::string& sTable) ;
|
||||
bool ResetCurrTable( void) ;
|
||||
int GetCurrTable( void) const ;
|
||||
@@ -130,7 +108,6 @@ class Machine
|
||||
int GetCurrExit( void) const ;
|
||||
bool GetCurrExit( int& nExit) const ;
|
||||
bool GetCurrHeadCollGroups( INTVECTOR& vIds) const ;
|
||||
bool IsCurrToolFloating( void) const ;
|
||||
double GetCurrRot1W( void) const
|
||||
{ return m_dCalcRot1W ; }
|
||||
bool GetCurrMaxDeltaR2OnFirst( void) const
|
||||
@@ -149,7 +126,6 @@ class Machine
|
||||
bool GetAllCurrAxesNames( STRVECTOR& vAxName) const ;
|
||||
bool GetCurrAxisToken( int nInd, std::string& sAxToken) const ;
|
||||
bool GetAllCurrAxesTokens( STRVECTOR& vAxToken) const ;
|
||||
bool GetCurrAxisType( int nInd, bool& bLinear, bool& bHead) const ;
|
||||
bool GetCurrAxisMin( int nInd, double& dMin) const ;
|
||||
bool GetCurrAxisMax( int nInd, double& dMax) const ;
|
||||
bool GetCurrAxisOffset( int nInd, double& dOffset) const ;
|
||||
@@ -171,7 +147,7 @@ class Machine
|
||||
bool GetNoseFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
|
||||
Point3d& ptNose) const ;
|
||||
bool GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
|
||||
bool bOverall, bool bBottom, bool bBack, Point3d& ptTip) const ;
|
||||
bool bBottom, bool bOverall, Point3d& ptTip) const ;
|
||||
bool GetToolDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const ;
|
||||
bool GetAuxDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const ;
|
||||
bool GetPartDirFromAngles( const Vector3d& vtPart, const DBLVECTOR& vAng, Vector3d& vtDir) const ;
|
||||
@@ -182,7 +158,7 @@ class Machine
|
||||
bool VerifyAngleOutstroke( int nInd, double dAng) const ;
|
||||
bool VerifyOutstroke( double dX, double dY, double dZ, const DBLVECTOR& vAng, bool bClear, int& nStat) const ;
|
||||
bool ExistProtectedAreas( void) const ;
|
||||
bool VerifyProtectedAreas( double dX, double dY, double dZ, const DBLVECTOR& vAng, int nLinkType, int& nStat) ;
|
||||
bool VerifyProtectedAreas( double dX, double dY, double dZ, const DBLVECTOR& vAng, int& nStat) ;
|
||||
bool VerifyOutstroke( const std::string& sAxName, double dVal) const ;
|
||||
std::string GetOutstrokeInfo( bool bMM = true) const ;
|
||||
void ResetOutstrokeInfo( void) const
|
||||
@@ -253,11 +229,24 @@ class Machine
|
||||
const MUEXITVECTOR& vMuExit, const Vector3d& vtADir,
|
||||
const std::string& sGeo, const STRVECTOR& vsAux) ;
|
||||
int GetGroup( const std::string& sGroup) const ;
|
||||
bool IsBaseGroup( int nGroup) const ;
|
||||
Axis* GetAxis( int nGroup) const ;
|
||||
bool IsAxisGroup( int nGroup) const
|
||||
{ return ( GetAxis( nGroup) != nullptr) ; }
|
||||
bool IsLinearAxisGroup( int nGroup) const ;
|
||||
bool IsRotaryAxisGroup( int nGroup) const ;
|
||||
Table* GetTable( int nGroup) const ;
|
||||
bool IsTableGroup( int nGroup) const
|
||||
{ return ( GetTable( nGroup) != nullptr) ; }
|
||||
Head* GetHead( int nGroup) const ;
|
||||
bool IsHeadGroup( int nGroup) const
|
||||
{ return ( GetHead( nGroup) != nullptr) ; }
|
||||
TcPos* GetTcPos( int nGroup) const ;
|
||||
bool IsTcPosGroup( int nGroup) const
|
||||
{ return ( GetTcPos( nGroup) != nullptr) ; }
|
||||
Exit* GetExit( int nGroup) const ;
|
||||
bool IsExitGroup( int nGroup) const
|
||||
{ return ( GetExit( nGroup) != nullptr) ; }
|
||||
bool AddHeadToSet( const std::string& sHSet, const std::string& sName) ;
|
||||
const STRVECTOR& GetHSet( const std::string& sHead) const ;
|
||||
bool EnableHeadInSet( const std::string& sHead) ;
|
||||
@@ -266,7 +255,6 @@ class Machine
|
||||
bool AdjustExitFrames( int nLay, const MUEXITVECTOR& vMuExit, const Vector3d& vtADir) ;
|
||||
bool CreateExitGroups( int nLay, const MUEXITVECTOR& vMuExit) ;
|
||||
bool ModifyMachineExitPosition( const std::string& sHead, int nExit, const Point3d& ptPos) ;
|
||||
bool ClearKinematicChain( void) ;
|
||||
bool CalculateKinematicChain( void) ;
|
||||
bool AddKinematicAxis( bool bOnHead, int nId) ;
|
||||
bool GetMyAngles( const Vector3d& vtDirT, const Vector3d& vtDirA,
|
||||
@@ -302,8 +290,6 @@ class Machine
|
||||
double m_dExitMaxAdjust ; // massimo aggiustamento uscita da geometria a descrizione cinematica
|
||||
double m_dExitMaxRotAdj ; // massima rotazione di aggiustamento uscita da geometria a descrizione cinematica
|
||||
double m_dAngDeltaMinForHome ; // minima differenza angolare da valore precedente per scegliere di stare vicino a home
|
||||
int m_nMultiProcess ; // codice di macchina multi-processo (con stima speciale e simulazione ad hoc)
|
||||
int m_nNewLinkMgr ; // codice del nuovo gestore link tra lavorazioni (0=vecchio, 1=nuovo)
|
||||
INTVECTOR m_vLinkedRawParts ; // elenco dei grezzi agganciati a gruppi della macchina
|
||||
INTVECTOR m_vLinkedFixtures ; // elenco dei bloccaggi agganciati a gruppi della macchina
|
||||
INTVECTOR m_vLinkedParts ; // elenco dei pezzi agganciati a gruppi della macchina
|
||||
@@ -388,9 +374,8 @@ class Machine
|
||||
static int LuaEmtOnCollision( lua_State* L) ;
|
||||
static int LuaEmtSetToolForVmill( lua_State* L) ;
|
||||
static int LuaEmtAddToolForVmill( lua_State* L) ;
|
||||
static int LuaEmtEnableToolsForVmill( lua_State* L) ;
|
||||
static int LuaEmtMoveAxes( lua_State* L) ;
|
||||
static int LuaEmtSaveCmd( lua_State* L) ;
|
||||
|
||||
} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
+14
-108
@@ -23,22 +23,6 @@
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetAllAxesIds( INTVECTOR& vIds) const
|
||||
{
|
||||
// reset lista identificativi
|
||||
vIds.clear() ;
|
||||
// ricerca degli assi
|
||||
for ( const auto& snGro : m_mapGroups) {
|
||||
if ( IsAxisGroup( snGro.second))
|
||||
vIds.push_back( snGro.second) ;
|
||||
}
|
||||
// se richiesto, ordino alfabeticamente
|
||||
sort( vIds.begin(), vIds.end()) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetAllAxesNames( STRVECTOR& vNames) const
|
||||
@@ -50,22 +34,10 @@ Machine::GetAllAxesNames( STRVECTOR& vNames) const
|
||||
if ( IsAxisGroup( snGro.second))
|
||||
vNames.push_back( snGro.first) ;
|
||||
}
|
||||
// se richiesto, ordino alfabeticamente
|
||||
// ordino alfabeticamente
|
||||
sort( vNames.begin(), vNames.end()) ;
|
||||
return true ;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetAxisName( int nAxId, string& sName) const
|
||||
{
|
||||
// recupero il relativo gestore
|
||||
const Axis* pAx = GetAxis( nAxId) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero il token dell'asse
|
||||
sName = pAx->GetName() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
@@ -75,7 +47,7 @@ Machine::GetAxisToken( const string& sAxis, string& sToken) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il relativo gestore
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero il token dell'asse
|
||||
@@ -91,7 +63,7 @@ Machine::GetAxisInvert( const string& sAxis, bool& bInvert) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il relativo gestore
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero il flag di inversione dell'asse in visualizzazione
|
||||
@@ -107,7 +79,7 @@ Machine::GetAxisOffset( const string& sAxis, double& dOffset) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il relativo gestore
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero il valore di offset dell'asse in visualizzazione
|
||||
@@ -123,7 +95,7 @@ Machine::GetAxisType( const string& sAxis, bool& bLinear) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il relativo gestore
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero il tipo dell'asse
|
||||
@@ -131,22 +103,6 @@ Machine::GetAxisType( const string& sAxis, bool& bLinear) const
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetAxisDir( const string& sAxis, Vector3d& vtDir) const
|
||||
{
|
||||
// controllo GeomDB
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il relativo gestore
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero la direzione dell'asse
|
||||
vtDir = pAx->GetDir() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::SetAxisPos( const string& sAxis, double dVal, bool bInStroke, double* pdNewVal)
|
||||
@@ -166,15 +122,6 @@ Machine::SetAxisPos( const string& sAxis, double dVal, bool bInStroke, double* p
|
||||
double dCurrVal = pAx->GetCurrVal() ;
|
||||
// limiti della corsa
|
||||
STROKE Stroke = pAx->GetStroke() ;
|
||||
// se rotante e corrente, verifico se ci sono limitazioni aggiuntive (dalla testa)
|
||||
if ( ! bLinear) {
|
||||
for ( const auto& CalcRotAx : m_vCalcRotAx) {
|
||||
if ( CalcRotAx.nGrpId == nAxGrp) {
|
||||
Stroke.Min = max( Stroke.Min, CalcRotAx.stroke.Min) ;
|
||||
Stroke.Max = min( Stroke.Max, CalcRotAx.stroke.Max) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
// recupero il vettore dell'asse
|
||||
int nV = m_pGeomDB->GetFirstNameInGroup( nAxGrp, sAxis) ;
|
||||
const IGeoVector3d* pGV = GetGeoVector3d( m_pGeomDB->GetGeoObj( nV)) ;
|
||||
@@ -183,9 +130,8 @@ Machine::SetAxisPos( const string& sAxis, double dVal, bool bInStroke, double* p
|
||||
Point3d ptPos = pGV->GetBase() ;
|
||||
Vector3d vtDir = pGV->GetVector() ;
|
||||
vtDir.Normalize() ;
|
||||
// se richiesto, limito il movimento alla corsa dell'asse
|
||||
if ( bInStroke)
|
||||
dVal = Clamp( dVal, Stroke.Min, Stroke.Max) ;
|
||||
// limito il movimento alla corsa dell'asse
|
||||
dVal = Clamp( dVal, Stroke.Min, Stroke.Max) ;
|
||||
// eseguo il movimento
|
||||
if ( bLinear)
|
||||
m_pGeomDB->TranslateGroup( nAxGrp, vtDir * ( dVal - dCurrVal)) ;
|
||||
@@ -206,7 +152,7 @@ Machine::GetAxisPos( const string& sAxis, double& dVal) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il relativo gestore
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero la posizione corrente
|
||||
@@ -222,7 +168,7 @@ Machine::GetAxisMin( const string& sAxis, double& dMin) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il gestore dell'asse
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero il minimo
|
||||
@@ -238,7 +184,7 @@ Machine::GetAxisMax( const string& sAxis, double& dMax) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il gestore dell'asse
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero il massimo
|
||||
@@ -254,7 +200,7 @@ Machine::GetAxisHomePos( const string& sAxis, double& dHomeVal) const
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero il gestore dell'asse
|
||||
const Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
Axis* pAx = GetAxis( GetGroup( sAxis)) ;
|
||||
if ( pAx == nullptr)
|
||||
return false ;
|
||||
// recupero la posizione home
|
||||
@@ -262,42 +208,6 @@ Machine::GetAxisHomePos( const string& sAxis, double& dHomeVal) const
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::IsDispositionAxis( int nAxisId, int nTableId) const
|
||||
{
|
||||
// se direttamente dipendente dalla tavola
|
||||
int nParentId = m_pGeomDB->GetParentId( nAxisId) ;
|
||||
if ( ( nTableId != GDB_ID_NULL && nParentId == nTableId) || IsTableGroup( nParentId))
|
||||
return true ;
|
||||
// altrimenti deve dipendere da asse dipendente dalla tavola
|
||||
if ( ! IsAxisGroup( nParentId))
|
||||
return false ;
|
||||
int nGrParId = m_pGeomDB->GetParentId( nParentId) ;
|
||||
return ( ( nTableId != GDB_ID_NULL && nGrParId == nTableId) || IsTableGroup( nGrParId)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::IsDispositionAxis( const string& sAxis, const string& sTable) const
|
||||
{
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// recupero Id asse
|
||||
int nAxId = GetAxisId( sAxis) ;
|
||||
if ( nAxId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// recupero eventuale Id tavola
|
||||
int nTabId = GDB_ID_NULL ;
|
||||
if ( ! sTable.empty()) {
|
||||
nTabId = GetTableId( sTable) ;
|
||||
if ( nTabId == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// eseguo
|
||||
return IsDispositionAxis( nAxId, nTabId) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::ResetAxisPos( const string& sAxis)
|
||||
@@ -315,17 +225,13 @@ Machine::ResetAxisPos( const string& sAxis)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::ResetAllAxesPos( bool bStdAxes, bool bDispAxes)
|
||||
Machine::ResetAllAxesPos( void)
|
||||
{
|
||||
// ciclo sui gruppi della macchina
|
||||
for ( auto Iter = m_mapGroups.cbegin() ; Iter != m_mapGroups.cend() ; ++ Iter) {
|
||||
if ( IsAxisGroup( Iter->second)) {
|
||||
if ( ( bStdAxes && bDispAxes) ||
|
||||
( bStdAxes && ! IsDispositionAxis( Iter->first)) ||
|
||||
( bDispAxes && IsDispositionAxis( Iter->first))) {
|
||||
if ( ! ResetAxisPos( Iter->first))
|
||||
return false ;
|
||||
}
|
||||
if ( ! ResetAxisPos( Iter->first))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
|
||||
+7
-78
@@ -48,7 +48,6 @@ static const string EVAR_R1 = ".R1" ; // (num) valore del pri
|
||||
static const string EVAR_R2 = ".R2" ; // (num) valore del secondo asse rotante
|
||||
static const string EVAR_R3 = ".R3" ; // (num) valore del terzo asse rotante
|
||||
static const string EVAR_R4 = ".R4" ; // (num) valore del quarto asse rotante
|
||||
static const string EVAR_LINKTYPE = ".LINKTYPE" ; // (int) tipo collegamento (0=No, 1=Inizio, 2=Fine, 3=Link))
|
||||
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok)
|
||||
static const string EVAR_STAT = ".STAT" ; // OUT (int) codice di stato ( 0 = ok)
|
||||
static const string EVAR_AUXINFO = ".AUXINFO" ; // OUT (string) stringa con info ausiliarie
|
||||
@@ -481,20 +480,11 @@ Machine::GetCurrHeadCollGroups( INTVECTOR& vIds) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::IsCurrToolFloating( void) const
|
||||
Machine::CalculateKinematicChain( void)
|
||||
{
|
||||
// controllo GeomDB
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// leggo info con tipo
|
||||
string sType ;
|
||||
return ( m_pGeomDB->GetInfo( m_nCalcToolId, TTH_TYPE, sType) && sType == TTH_TYPE_FLOAT) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::ClearKinematicChain( void)
|
||||
{
|
||||
// azzero tutti gli assi della catena cinematica
|
||||
m_nTabLinAxes = 0 ;
|
||||
m_nTabRotAxes = 0 ;
|
||||
@@ -506,18 +496,6 @@ Machine::ClearKinematicChain( void)
|
||||
m_frLinAx.Reset( false) ;
|
||||
m_frRobot.Reset( false) ;
|
||||
m_nCalcChainType = KIN_CHAIN_NONE ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::CalculateKinematicChain( void)
|
||||
{
|
||||
// controllo GeomDB
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// azzero tutti gli assi della catena cinematica
|
||||
ClearKinematicChain() ;
|
||||
// recupero gli assi di tavola
|
||||
if ( m_nCalcTabId == GDB_ID_NULL)
|
||||
return false ;
|
||||
@@ -1391,11 +1369,10 @@ Machine::GetNoseFromPositions( double dX, double dY, double dZ, const DBLVECTOR&
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
|
||||
bool bOverall, bool bBottom, bool bBack, Point3d& ptTip) const
|
||||
bool bOverall, bool bBottom, Point3d& ptTip) const
|
||||
{
|
||||
// la posizione deve essere espressa rispetto allo ZERO MACCHINA
|
||||
// è espressa nel riferimento di macchina (tiene conto delle sole rotazioni di testa)
|
||||
// se bBack vero, allora è nel riferimento pezzo
|
||||
|
||||
// verifico dimensione vettore angoli rispetto al numero di assi rotanti
|
||||
if ( vAng.size() < m_vCalcRotAx.size())
|
||||
@@ -1442,33 +1419,12 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR&
|
||||
if ( m_nCalcChainType == KIN_CHAIN_ROBOT)
|
||||
ptTip.ToGlob( m_frRobot) ;
|
||||
|
||||
// Se richiesto nel riferimento pezzo
|
||||
if ( bBack) {
|
||||
// ciclo sugli assi lineari di tavola all'indietro
|
||||
DBLVECTOR vMov( {dX, dY, dZ}) ;
|
||||
for ( int i = int( m_vCalcLinAx.size()) ; i > 0 ; -- i) {
|
||||
if ( ! m_vCalcLinAx[i-1].bHead)
|
||||
ptTip += m_vCalcLinAx[i-1].vtDir * ( vMov[i-1] - m_vCalcLinAx[i-1].dHomeVal) ;
|
||||
}
|
||||
// ciclo sugli assi rotanti di tavola all'indietro !!! NON VERIFICATO !!!
|
||||
for ( int i = int( m_vCalcRotAx.size()) ; i > 0 ; -- i) {
|
||||
if ( ! m_vCalcRotAx[i-1].bHead)
|
||||
ptTip.Rotate( m_vCalcRotAx[i-1].ptPos, m_vCalcRotAx[i-1].vtDir, -vAng[i-1]) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Se richiesto ingombro totale o punto sotto del tip utensile
|
||||
if ( bOverall || bBottom) {
|
||||
// calcolo la direzione fresa
|
||||
Vector3d vtDirT ;
|
||||
if ( bBack) {
|
||||
if ( ! GetBackDirection( m_vtCalcDir, vAng, vtDirT))
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
if ( ! GetDirection( m_vtCalcDir, vAng, vtDirT))
|
||||
return false ;
|
||||
}
|
||||
if ( ! GetDirection( m_vtCalcDir, vAng, vtDirT))
|
||||
return false ;
|
||||
// se richiesto ingombro totale
|
||||
if ( bOverall)
|
||||
ptTip -= vtDirT * max( m_dCalcTOvLen - m_dCalcTLen, 0.) ;
|
||||
@@ -1740,7 +1696,7 @@ Machine::VerifyOutstroke( double dX, double dY, double dZ, const DBLVECTOR& vAng
|
||||
}
|
||||
// verifica delle aree protette
|
||||
if ( nStat == 0)
|
||||
return const_cast<Machine*>( this)->VerifyProtectedAreas( dX, dY, dZ, vAng, 0, nStat) ;
|
||||
return const_cast<Machine*>( this)->VerifyProtectedAreas( dX, dY, dZ, vAng, nStat) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -1754,26 +1710,19 @@ Machine::VerifyOutstroke( double dX, double dY, double dZ, const DBLVECTOR& vAng
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::VerifyProtectedAreas( double dX, double dY, double dZ, const DBLVECTOR& vAng, int nLinkType, int& nStat)
|
||||
Machine::VerifyProtectedAreas( double dX, double dY, double dZ, const DBLVECTOR& vAng, int& nStat)
|
||||
{
|
||||
// se non esiste funzione gestione aree protette, non devo fare alcunchè
|
||||
if ( ! LuaExistsFunction( ON_VERIFY_PROTECTEDAREAS))
|
||||
return true ;
|
||||
// se non è collegamento e aree protette solo per questi, non devo fare alcunchè
|
||||
if ( nLinkType == 0 && m_nNewLinkMgr == 1)
|
||||
return true ;
|
||||
// default
|
||||
bool bOk = true ;
|
||||
int nErr = 99 ;
|
||||
// salvo eventuale variabile EMC_VAR già presente
|
||||
bool bOldEMC = LuaChangeNameGlobVar( EMC_VAR, EMC_VAR_BACKUP) ;
|
||||
// definisco variabili (nelle disposizioni l'utensile non è definito e non ha nome)
|
||||
string sTool, sHead ; int nExit ;
|
||||
// definisco variabili
|
||||
bOk = bOk && LuaCreateGlobTable( EMC_VAR) ;
|
||||
bOk = bOk && LuaSetGlobVar( EMC_VAR + EVAR_VER, GetEMkVer()) ;
|
||||
bOk = bOk && GetCurrHead( sHead) && LuaSetGlobVar( EMC_VAR + EVAR_HEAD, sHead) ;
|
||||
bOk = bOk && GetCurrExit( nExit) && LuaSetGlobVar( EMC_VAR + EVAR_EXIT, nExit) ;
|
||||
bOk = bOk && ( GetCurrTool( sTool) || true) && LuaSetGlobVar( EMC_VAR + EVAR_TOOL, sTool) ;
|
||||
bOk = bOk && LuaSetGlobVar( EMC_VAR + EVAR_L1, dX) ;
|
||||
bOk = bOk && LuaSetGlobVar( EMC_VAR + EVAR_L2, dY) ;
|
||||
bOk = bOk && LuaSetGlobVar( EMC_VAR + EVAR_L3, dZ) ;
|
||||
@@ -1785,7 +1734,6 @@ Machine::VerifyProtectedAreas( double dX, double dY, double dZ, const DBLVECTOR&
|
||||
bOk = bOk && LuaSetGlobVar( EMC_VAR + EVAR_R3, vAng[2]) ;
|
||||
if ( vAng.size() >= 4)
|
||||
bOk = bOk && LuaSetGlobVar( EMC_VAR + EVAR_R4, vAng[3]) ;
|
||||
bOk = bOk && LuaSetGlobVar( EMC_VAR + EVAR_LINKTYPE, nLinkType) ;
|
||||
// chiamo funzione
|
||||
bOk = bOk && LuaCallFunction( ON_VERIFY_PROTECTEDAREAS) ;
|
||||
// recupero il risultato
|
||||
@@ -1977,25 +1925,6 @@ Machine::GetAllCurrAxesTokens( STRVECTOR& vAxToken) const
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetCurrAxisType( int nInd, bool& bLinear, bool& bHead) const
|
||||
{
|
||||
int nLinAxes = int( m_vCalcLinAx.size()) ;
|
||||
int nRotAxes = int( m_vCalcRotAx.size()) ;
|
||||
if ( nInd >= 0 && nInd < nLinAxes) {
|
||||
bLinear = true ;
|
||||
bHead = m_vCalcLinAx[nInd].bHead ;
|
||||
return true ;
|
||||
}
|
||||
else if ( nInd >= nLinAxes && nInd < nLinAxes + nRotAxes) {
|
||||
bLinear = false ;
|
||||
bHead = m_vCalcRotAx[nInd-nLinAxes].bHead ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetCurrAxisMin( int nInd, double& dMin) const
|
||||
|
||||
+1
-3
@@ -182,7 +182,7 @@ Machine::LoadTool( Exit* pExit, const string& sTool)
|
||||
if ( nSolidId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// sposto eventuali info relative al porta utensile (ToolHolder) nel gruppo SOLID
|
||||
double dVal ; string sVal ;
|
||||
double dVal ;
|
||||
if ( m_pGeomDB->GetInfo( nTGrpId, TTH_BASE, dVal))
|
||||
m_pGeomDB->SetInfo( nSolidId, TTH_BASE, dVal) ;
|
||||
if ( m_pGeomDB->GetInfo( nTGrpId, TTH_LEN, dVal))
|
||||
@@ -191,8 +191,6 @@ Machine::LoadTool( Exit* pExit, const string& sTool)
|
||||
m_pGeomDB->SetInfo( nSolidId, TTH_DIAM, dVal) ;
|
||||
if ( m_pGeomDB->GetInfo( nTGrpId, TTH_STEM_DIAM, dVal))
|
||||
m_pGeomDB->SetInfo( nSolidId, TTH_STEM_DIAM, dVal) ;
|
||||
if ( m_pGeomDB->GetInfo( nTGrpId, TTH_TYPE, sVal))
|
||||
m_pGeomDB->SetInfo( nSolidId, TTH_TYPE, sVal) ;
|
||||
// sposto il gruppo SOLID nell'uscita ed elimino la sua vecchia base
|
||||
m_pGeomDB->RelocateGlob( nSolidId, nExGrp, GDB_FIRST_SON) ;
|
||||
m_pGeomDB->Erase( nTGrpId) ;
|
||||
|
||||
+7
-117
@@ -1,15 +1,13 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2015-2024
|
||||
// EgalTech 2015-2021
|
||||
//----------------------------------------------------------------------------
|
||||
// File : MachineLua.cpp Data : 01.09.24 Versione : 2.6i1
|
||||
// File : MachineLua.cpp Data : 14.10.21 Versione : 2.3j5
|
||||
// Contenuto : Implementazione gestione macchina : funzioni Lua.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 06.05.15 DS Creazione modulo.
|
||||
// 26.04.20 DS Aggiunta gestione TcPos.
|
||||
// 05.08.24 DS Aggiunta gestione SpecialEstimate.
|
||||
// 01.09.24 DS SpecialEstimate è diventato MultiProcess.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -36,8 +34,6 @@ static const string FLD_AXISMAXROTADJ = "AxisMaxRotAdj" ;
|
||||
static const string FLD_EXITMAXADJUST = "ExitMaxAdjust" ;
|
||||
static const string FLD_EXITMAXROTADJ = "ExitMaxRotAdj" ;
|
||||
static const string FLD_ANGDELTAMINFORHOME = "AngDeltaMinForHome" ;
|
||||
static const string FLD_MULTIPROCESS = "MultiProcess" ;
|
||||
static const string FLD_NEWLINKMGR = "NewLinkMgr" ;
|
||||
static const string FLD_NAME = "Name" ;
|
||||
static const string FLD_PARENT = "Parent" ;
|
||||
static const string FLD_GEO = "Geo" ;
|
||||
@@ -143,12 +139,8 @@ Machine::LuaInit( const string& sMachineName)
|
||||
m_LuaMgr.RegisterFunction( "EmtSetToolForVmill", Machine::LuaEmtSetToolForVmill) ;
|
||||
// registro la funzione di impostazione di utensile aggiuntivo per virtual milling in simulazione
|
||||
m_LuaMgr.RegisterFunction( "EmtAddToolForVmill", Machine::LuaEmtAddToolForVmill) ;
|
||||
// registro la funzione per abilitare/disabilitare l'esecuzione del virtual milling
|
||||
m_LuaMgr.RegisterFunction( "EmtEnableToolsForVmill", Machine::LuaEmtEnableToolsForVmill) ;
|
||||
// registro la funzione di movimento assi in simulazione
|
||||
m_LuaMgr.RegisterFunction( "EmtMoveAxes", Machine::LuaEmtMoveAxes) ;
|
||||
// registro la funzione di salvataggio comandi in simulazione MP
|
||||
m_LuaMgr.RegisterFunction( "EmtSaveCmd", Machine::LuaEmtSaveCmd) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -348,13 +340,6 @@ Machine::LuaEmtGeneral( lua_State* L)
|
||||
// lettura eventuale campo 'AngDeltaForHome' dalla tabella (default INFINITO)
|
||||
double dAngDeltaMinForHome = INFINITO ;
|
||||
LuaGetTabFieldParam( L, 1, FLD_ANGDELTAMINFORHOME, dAngDeltaMinForHome) ;
|
||||
// lettura eventuale campo 'MultiProcess' dalla tabella (0=no, 1=si, 2=si con simulazione MP)
|
||||
int nMultiProcess = 0 ;
|
||||
LuaGetTabFieldParam( L, 1, FLD_MULTIPROCESS, nMultiProcess) ;
|
||||
// lettura eventuale campo 'NewLinkMgr' dalla tabella (0=old, 1 =new)
|
||||
int nNewLinkMgr = 0 ;
|
||||
LuaGetTabFieldParam( L, 1, FLD_NEWLINKMGR, nNewLinkMgr) ;
|
||||
// pulizia stack
|
||||
LuaClearStack( L) ;
|
||||
|
||||
// info
|
||||
@@ -404,11 +389,6 @@ Machine::LuaEmtGeneral( lua_State* L)
|
||||
// imposto minima differenza angolare da posizione precedente per stare vivino a posizione home
|
||||
m_pMchLua->m_dAngDeltaMinForHome = dAngDeltaMinForHome ;
|
||||
|
||||
// imposto codice per macchina multiprocesso
|
||||
m_pMchLua->m_nMultiProcess = nMultiProcess ;
|
||||
// imposto codice per gestione link tra lavorazioni
|
||||
m_pMchLua->m_nNewLinkMgr = nNewLinkMgr ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
@@ -1458,7 +1438,7 @@ Machine::LuaEmtOnCollision( lua_State* L)
|
||||
int
|
||||
Machine::LuaEmtSetToolForVmill( lua_State* L)
|
||||
{
|
||||
// 4 o 7 parametri : sTool, sHead, nExit, vVmill [, nFlag , dPar1, dPar2]
|
||||
// 4 parametri : sTool, sHead, nExit, vVmill
|
||||
string sTool ;
|
||||
LuaGetParam( L, 1, sTool) ;
|
||||
string sHead ;
|
||||
@@ -1467,19 +1447,12 @@ Machine::LuaEmtSetToolForVmill( lua_State* L)
|
||||
LuaGetParam( L, 3, nExit) ;
|
||||
INTVECTOR vVmill ;
|
||||
LuaGetParam( L, 4, vVmill) ;
|
||||
int nFlag = 0 ;
|
||||
LuaGetParam( L, 5, nFlag) ;
|
||||
double dPar1 = 0 ;
|
||||
LuaGetParam( L, 6, dPar1) ;
|
||||
double dPar2 = 0 ;
|
||||
LuaGetParam( L, 7, dPar2) ;
|
||||
LuaClearStack( L) ;
|
||||
// verifico ci sia una macchina attiva
|
||||
if ( m_pMchLua == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// imposto dati primo utensile per virtual milling in simulazione
|
||||
bool bOk = ( m_pMchLua->m_pMchMgr != nullptr &&
|
||||
m_pMchLua->m_pMchMgr->SimSetToolForVmill( sTool, sHead, nExit, nFlag, dPar1, dPar2, vVmill, true)) ;
|
||||
bool bOk = ( m_pMchLua->m_pMchMgr != nullptr && m_pMchLua->m_pMchMgr->SimSetToolForVmill( sTool, sHead, nExit, vVmill, true)) ;
|
||||
// assegno risultato
|
||||
LuaSetParam( L, bOk) ;
|
||||
return 1 ;
|
||||
@@ -1489,7 +1462,7 @@ Machine::LuaEmtSetToolForVmill( lua_State* L)
|
||||
int
|
||||
Machine::LuaEmtAddToolForVmill( lua_State* L)
|
||||
{
|
||||
// 4 o 7 parametri : sTool, sHead, nExit, vVmill [, nFlag, dPar1, dPar2]
|
||||
// 4 parametri : sTool, sHead, nExit, vVmill
|
||||
string sTool ;
|
||||
LuaGetParam( L, 1, sTool) ;
|
||||
string sHead ;
|
||||
@@ -1498,37 +1471,12 @@ Machine::LuaEmtAddToolForVmill( lua_State* L)
|
||||
LuaGetParam( L, 3, nExit) ;
|
||||
INTVECTOR vVmill ;
|
||||
LuaGetParam( L, 4, vVmill) ;
|
||||
int nFlag = 0 ;
|
||||
LuaGetParam( L, 5, nFlag) ;
|
||||
double dPar1 = 0 ;
|
||||
LuaGetParam( L, 6, dPar1) ;
|
||||
double dPar2 = 0 ;
|
||||
LuaGetParam( L, 7, dPar2) ;
|
||||
LuaClearStack( L) ;
|
||||
// verifico ci sia una macchina attiva
|
||||
if ( m_pMchLua == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// imposto dati utensile aggiuntivo per virtual milling in simulazione
|
||||
bool bOk = ( m_pMchLua->m_pMchMgr != nullptr &&
|
||||
m_pMchLua->m_pMchMgr->SimSetToolForVmill( sTool, sHead, nExit, nFlag, dPar1, dPar2, vVmill, false)) ;
|
||||
// assegno risultato
|
||||
LuaSetParam( L, bOk) ;
|
||||
return 1 ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Machine::LuaEmtEnableToolsForVmill( lua_State* L)
|
||||
{
|
||||
// 1 parametro : bEnable
|
||||
bool bEnable = false ;
|
||||
LuaGetParam( L, 1, bEnable) ;
|
||||
LuaClearStack( L) ;
|
||||
// verifico ci sia una macchina attiva
|
||||
if ( m_pMchLua == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// imposto abilitazione utensili per virtual milling in simulazione
|
||||
bool bOk = ( m_pMchLua->m_pMchMgr != nullptr && m_pMchLua->m_pMchMgr->SimEnableToolsForVmill( bEnable)) ;
|
||||
bool bOk = ( m_pMchLua->m_pMchMgr != nullptr && m_pMchLua->m_pMchMgr->SimSetToolForVmill( sTool, sHead, nExit, vVmill, false)) ;
|
||||
// assegno risultato
|
||||
LuaSetParam( L, bOk) ;
|
||||
return 1 ;
|
||||
@@ -1563,65 +1511,7 @@ Machine::LuaEmtMoveAxes( lua_State* L)
|
||||
// assegno risultato
|
||||
if ( nRes == SIM_AXMV_RES_STOP)
|
||||
return luaL_error( L, "STOP") ;
|
||||
else {
|
||||
else
|
||||
LuaSetParam( L, ( nRes == SIM_AXMV_RES_OK)) ;
|
||||
LuaSetParam( L, m_pMchLua->GetMultiProcess()) ;
|
||||
}
|
||||
return 2 ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Machine::LuaEmtSaveCmd( lua_State* L)
|
||||
{
|
||||
// parametri : nType,
|
||||
int nType = 0 ;
|
||||
LuaGetParam( L, 1, nType) ;
|
||||
int nPar = 0 ;
|
||||
LuaGetParam( L, 2, nPar) ;
|
||||
string sPar ;
|
||||
LuaGetParam( L, 3, sPar) ;
|
||||
string sPar2 ;
|
||||
if ( nType == 4) {
|
||||
switch ( lua_type( L, 4)) {
|
||||
case LUA_TNIL :
|
||||
nPar = 0 ;
|
||||
break ;
|
||||
case LUA_TBOOLEAN :
|
||||
{ nPar = 1 ;
|
||||
bool bVal ;
|
||||
LuaGetParam( L, 4, bVal) ;
|
||||
sPar2 = ( bVal ? "1" : "0") ;
|
||||
} break ;
|
||||
case LUA_TNUMBER :
|
||||
if ( lua_isinteger( L, 4)) {
|
||||
nPar = 2 ;
|
||||
int nVal ;
|
||||
LuaGetParam( L, 4, nVal) ;
|
||||
sPar2 = ToString( nVal) ;
|
||||
}
|
||||
else {
|
||||
nPar = 3 ;
|
||||
double dVal ;
|
||||
LuaGetParam( L, 4, dVal) ;
|
||||
sPar2 = ToString( dVal, 9) ;
|
||||
}
|
||||
break ;
|
||||
case LUA_TSTRING :
|
||||
{ nPar = 4 ;
|
||||
LuaGetParam( L, 4, sPar2) ;
|
||||
} break ;
|
||||
default :
|
||||
return luaL_error( L, " Unknown Type") ;
|
||||
}
|
||||
}
|
||||
LuaClearStack( L) ;
|
||||
// verifico ci sia una macchina attiva
|
||||
if ( m_pMchLua == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// salvo il comando
|
||||
bool bOk = ( m_pMchLua->m_pMchMgr != nullptr && m_pMchLua->m_pMchMgr->SimSaveCmd( nType, nPar, sPar, sPar2)) ;
|
||||
// assegno risultato
|
||||
LuaSetParam( L, bOk) ;
|
||||
return 1 ;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "stdafx.h"
|
||||
#include "MachMgr.h"
|
||||
#include "DllMain.h"
|
||||
#include "CamData.h"
|
||||
#include "/EgtDev/Include/EXeExecutor.h"
|
||||
#include "/EgtDev/Include/EGkGeoPoint3d.h"
|
||||
#include "/EgtDev/Include/EGkCurveLine.h"
|
||||
|
||||
@@ -153,7 +153,3 @@ const std::string MCH_AGB_ENCV = "AGB_ENCV" ;
|
||||
// Info in rinvio rotante da sotto per definire la direzione di approccio preferenziale (consentito delta max di 95deg)
|
||||
const std::string MCH_AGB_MDIR = "AGB_MDIR" ;
|
||||
const double MCH_AGB_DELTAMAX_MDIR = cos( 95 * DEGTORAD) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Info di uscita per indicare quanto mossa lungo la sua Z locale
|
||||
const std::string MCH_EXIT_VAL = "Val" ;
|
||||
|
||||
+65
-182
@@ -176,125 +176,68 @@ Machining::RemoveToolPreview( void) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Machining::GetToolPreviewStepCount( void) const
|
||||
{
|
||||
// verifico validità gestori DB geometrico e CAM
|
||||
if ( m_pGeomDB == nullptr || m_pMchMgr == nullptr)
|
||||
return 0 ;
|
||||
// recupero gruppo per geometria di lavorazione (Cutter Location)
|
||||
int nClId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_CL) ;
|
||||
if ( nClId == GDB_ID_NULL)
|
||||
return 0 ;
|
||||
// determino il numero di entità di tutti i sottogruppi, escludendo CLIMB e RISE
|
||||
int nCount = 0 ;
|
||||
int nPxId = m_pGeomDB->GetFirstGroupInGroup( nClId) ;
|
||||
while ( nPxId != GDB_ID_NULL) {
|
||||
// aggiungo tutte le entità del truppo
|
||||
nCount += m_pGeomDB->GetGroupObjs( nPxId) ;
|
||||
// tolgo le entità CLIMB
|
||||
int nClimbId = m_pGeomDB->GetFirstNameInGroup( nPxId, MCH_CL_CLIMB) ;
|
||||
while ( nClimbId != GDB_ID_NULL) {
|
||||
-- nCount ;
|
||||
nClimbId = m_pGeomDB->GetNextName( nClimbId, MCH_CL_CLIMB) ;
|
||||
}
|
||||
// tolgo le entità RISE
|
||||
int nRiseId = m_pGeomDB->GetFirstNameInGroup( nPxId, MCH_CL_RISE) ;
|
||||
while ( nRiseId != GDB_ID_NULL) {
|
||||
-- nCount ;
|
||||
nRiseId = m_pGeomDB->GetNextName( nRiseId, MCH_CL_RISE) ;
|
||||
}
|
||||
// passo al successivo sottogruppo
|
||||
nPxId = m_pGeomDB->GetNextGroup( nPxId) ;
|
||||
}
|
||||
|
||||
return nCount ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Machining::GetToolPreviewNext( int nEntId, int nParentId, int nStId) const
|
||||
GetToolPreviewNext( IGeomDB* pGeomDB, int nEntId, int nParentId)
|
||||
{
|
||||
// recupero la successiva
|
||||
int nNewId = (( nEntId != GDB_ID_NULL) ? m_pGeomDB->GetNext( nEntId) : m_pGeomDB->GetFirstInGroup( nParentId)) ;
|
||||
int nNewId = (( nEntId != GDB_ID_NULL) ? pGeomDB->GetNext( nEntId) : pGeomDB->GetFirstInGroup( nParentId)) ;
|
||||
int nNewParentId = nParentId ;
|
||||
// ciclo nei gruppi successivi
|
||||
do {
|
||||
// ciclo nel gruppo
|
||||
while ( nNewId != GDB_ID_NULL) {
|
||||
string sName ; m_pGeomDB->GetName( nNewId, sName) ;
|
||||
string sName ; pGeomDB->GetName( nNewId, sName) ;
|
||||
if ( sName != MCH_CL_CLIMB && sName != MCH_CL_RISE)
|
||||
break ;
|
||||
nNewId = m_pGeomDB->GetNext( nNewId) ;
|
||||
nNewId = pGeomDB->GetNext( nNewId) ;
|
||||
}
|
||||
// se trovata, esco
|
||||
if ( nNewId != GDB_ID_NULL) {
|
||||
// se prima entità, eventuale attivazione uscite di gruppo a forare
|
||||
if ( nEntId == GDB_ID_NULL && m_pGeomDB->ExistsInfo( nNewParentId, KEY_DRACEX)) {
|
||||
INTVECTOR vActExit ;
|
||||
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit))
|
||||
ActivateDrillingUnit( nStId, vActExit) ;
|
||||
}
|
||||
if ( nNewId != GDB_ID_NULL)
|
||||
return nNewId ;
|
||||
}
|
||||
// passo al gruppo successivo
|
||||
nNewParentId = m_pGeomDB->GetNextGroup( nNewParentId) ;
|
||||
// eventuale attivazione uscite di gruppo a forare
|
||||
if ( m_pGeomDB->ExistsInfo( nNewParentId, KEY_DRACEX)) {
|
||||
INTVECTOR vActExit ;
|
||||
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit))
|
||||
ActivateDrillingUnit( nStId, vActExit) ;
|
||||
}
|
||||
// recupero la prima entità del successivo gruppo
|
||||
nNewId = m_pGeomDB->GetFirstInGroup( nNewParentId) ;
|
||||
nNewParentId = pGeomDB->GetNextGroup( nNewParentId) ;
|
||||
nNewId = pGeomDB->GetFirstInGroup( nNewParentId) ;
|
||||
} while ( nNewId != GDB_ID_NULL) ;
|
||||
return GDB_ID_NULL ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Machining::GetToolPreviewPrev( int nEntId, int nParentId, int nStId) const
|
||||
GetToolPreviewPrev( IGeomDB* pGeomDB, int nEntId, int nParentId)
|
||||
{
|
||||
// recupero la precedente
|
||||
int nNewId = (( nEntId != GDB_ID_NULL) ? m_pGeomDB->GetPrev( nEntId) : m_pGeomDB->GetLastInGroup( nParentId)) ;
|
||||
int nNewId = (( nEntId != GDB_ID_NULL) ? pGeomDB->GetPrev( nEntId) : pGeomDB->GetLastInGroup( nParentId)) ;
|
||||
int nNewParentId = nParentId ;
|
||||
// ciclo nei gruppi precedenti
|
||||
do {
|
||||
// ciclo nel gruppo
|
||||
while ( nNewId != GDB_ID_NULL) {
|
||||
string sName ; m_pGeomDB->GetName( nNewId, sName) ;
|
||||
string sName ; pGeomDB->GetName( nNewId, sName) ;
|
||||
if ( sName != MCH_CL_CLIMB && sName != MCH_CL_RISE)
|
||||
break ;
|
||||
nNewId = m_pGeomDB->GetPrev( nNewId) ;
|
||||
nNewId = pGeomDB->GetPrev( nNewId) ;
|
||||
}
|
||||
// se trovata, esco
|
||||
if ( nNewId != GDB_ID_NULL)
|
||||
return nNewId ;
|
||||
// passo al gruppo precedente
|
||||
nNewParentId = m_pGeomDB->GetPrevGroup( nNewParentId) ;
|
||||
// eventuale attivazione uscite di gruppo a forare
|
||||
if ( m_pGeomDB->ExistsInfo( nNewParentId, KEY_DRACEX)) {
|
||||
INTVECTOR vActExit ;
|
||||
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit))
|
||||
ActivateDrillingUnit( nStId, vActExit) ;
|
||||
}
|
||||
// recupero l'ultima entità del precedente gruppo
|
||||
nNewId = m_pGeomDB->GetLastInGroup( nNewParentId) ;
|
||||
nNewParentId = pGeomDB->GetPrevGroup( nNewParentId) ;
|
||||
nNewId = pGeomDB->GetLastInGroup( nNewParentId) ;
|
||||
} while ( nNewId != GDB_ID_NULL) ;
|
||||
return GDB_ID_NULL ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Machining::ToolPreview( int nEntId, int nStep) const
|
||||
Machining::ToolPreview( int nEntId, int nFlag) const
|
||||
{
|
||||
// verifico validità gestori DB geometrico e CAM
|
||||
if ( m_pGeomDB == nullptr || m_pMchMgr == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// recupero la testa nel gruppo per anteprima utensile
|
||||
int nStId = m_pGeomDB->GetFirstGroupInGroup( m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_ST)) ;
|
||||
if ( nStId == GDB_ID_NULL)
|
||||
int nId = m_pGeomDB->GetFirstGroupInGroup( m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_ST)) ;
|
||||
if ( nId == GDB_ID_NULL)
|
||||
return GDB_ID_NULL ;
|
||||
m_pGeomDB->SetStatus( nStId, GDB_ST_OFF) ;
|
||||
m_pGeomDB->SetStatus( nId, GDB_ST_OFF) ;
|
||||
// recupero gruppo per geometria di lavorazione (Cutter Location)
|
||||
int nClId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_CL) ;
|
||||
if ( nClId == GDB_ID_NULL)
|
||||
@@ -305,11 +248,11 @@ Machining::ToolPreview( int nEntId, int nStep) const
|
||||
// recupero il gruppo di appartenenza
|
||||
nParentId = m_pGeomDB->GetFirstGroupInGroup( nClId) ;
|
||||
// se richiesta successiva
|
||||
if ( nStep > 0)
|
||||
nEntId = GetToolPreviewNext( nEntId, nParentId, nStId) ;
|
||||
if ( nFlag == MCH_TPM_AFTER)
|
||||
nEntId = GetToolPreviewNext( m_pGeomDB, nEntId, nParentId) ;
|
||||
// se richiesta precedente
|
||||
else if ( nStep < 0)
|
||||
nEntId = GetToolPreviewPrev( nEntId, nParentId, nStId) ;
|
||||
else if ( nFlag == MCH_TPM_BEFORE)
|
||||
nEntId = GetToolPreviewPrev( m_pGeomDB, nEntId, nParentId) ;
|
||||
// altrimenti richiesta corrente
|
||||
else
|
||||
nEntId = GDB_ID_NULL ;
|
||||
@@ -317,39 +260,21 @@ Machining::ToolPreview( int nEntId, int nStep) const
|
||||
// altrimenti
|
||||
else {
|
||||
// verifico che l'entità stia in un sottogruppo di CL
|
||||
nParentId = m_pGeomDB->GetParentId( nEntId) ;
|
||||
nParentId = m_pGeomDB->GetParentId( nEntId) ;
|
||||
if ( m_pGeomDB->GetParentId( nParentId) == nClId) {
|
||||
// se richiesta successiva
|
||||
if ( nStep > 0) {
|
||||
while ( nStep > 0) {
|
||||
int nOldId = nEntId ;
|
||||
nEntId = GetToolPreviewNext( nEntId, nParentId, nStId) ;
|
||||
-- nStep ;
|
||||
if ( nEntId == GDB_ID_NULL) {
|
||||
nEntId = nOldId ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( nFlag == MCH_TPM_AFTER)
|
||||
nEntId = GetToolPreviewNext( m_pGeomDB, nEntId, nParentId) ;
|
||||
// se richiesta precedente
|
||||
else if ( nStep < 0) {
|
||||
while ( nStep < 0) {
|
||||
int nOldId = nEntId ;
|
||||
nEntId = GetToolPreviewPrev( nEntId, nParentId, nStId) ;
|
||||
++ nStep ;
|
||||
if ( nEntId == GDB_ID_NULL) {
|
||||
nEntId = nOldId ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( nFlag == MCH_TPM_BEFORE)
|
||||
nEntId = GetToolPreviewPrev( m_pGeomDB, nEntId, nParentId) ;
|
||||
}
|
||||
else
|
||||
nEntId = GDB_ID_NULL ;
|
||||
}
|
||||
// se esiste il gruppo genitore, visualizzo testa preview
|
||||
if ( nParentId != GDB_ID_NULL)
|
||||
m_pGeomDB->SetStatus( nStId, GDB_ST_ON) ;
|
||||
m_pGeomDB->SetStatus( nId, GDB_ST_ON) ;
|
||||
// recupero i dati di questa entità
|
||||
const CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ;
|
||||
if ( pCamData == nullptr)
|
||||
@@ -359,21 +284,17 @@ Machining::ToolPreview( int nEntId, int nStep) const
|
||||
Vector3d vtTool = pCamData->GetToolDir() ;
|
||||
Vector3d vtBAux = pCamData->GetBackAuxDir() ;
|
||||
// dati correnti testa/uscita
|
||||
int nExitId = m_pGeomDB->GetFirstNameInGroup( nStId, MCH_EXIT + ToString( GetExitNbr())) ;
|
||||
int nExitId = m_pGeomDB->GetFirstNameInGroup( nId, MCH_EXIT + ToString( GetExitNbr())) ;
|
||||
Frame3d frExit ;
|
||||
m_pGeomDB->GetGroupGlobFrame( nExitId, frExit) ;
|
||||
// correggo eventuale movimento di disattivazione sempre in Z globale
|
||||
double dVal ;
|
||||
if ( m_pGeomDB->GetInfo( nExitId, MCH_EXIT_VAL, dVal))
|
||||
frExit.Translate( -dVal * Z_AX) ;
|
||||
Point3d ptOrig = frExit.Orig() ;
|
||||
Vector3d vtDir = frExit.VersZ() ;
|
||||
Vector3d vtAux ;
|
||||
int nAvId = m_pGeomDB->GetFirstNameInGroup( nStId, MCH_AUX_VECT) ;
|
||||
int nAvId = m_pGeomDB->GetFirstNameInGroup( nId, MCH_AUX_VECT) ;
|
||||
ExeStartVector( nAvId, GDB_ID_ROOT, vtAux) ;
|
||||
// rototraslo opportunamente
|
||||
Frame3d frHead ;
|
||||
m_pGeomDB->GetGroupGlobFrame( nStId, frHead) ;
|
||||
m_pGeomDB->GetGroupGlobFrame( nId, frHead) ;
|
||||
Frame3d frRef ;
|
||||
if ( vtAux.IsSmall() || AreSameOrOppositeVectorApprox( vtAux, vtDir))
|
||||
frRef.Set( ptOrig, vtDir) ;
|
||||
@@ -386,49 +307,11 @@ Machining::ToolPreview( int nEntId, int nStep) const
|
||||
frShow.Set( ptEnd + vtTool * GetToolData().m_dLen, vtTool, vtBAux) ;
|
||||
frHead.ToLoc( frRef) ;
|
||||
frHead.ToGlob( frShow) ;
|
||||
*(m_pGeomDB->GetGroupFrame( nStId)) = frHead ;
|
||||
*(m_pGeomDB->GetGroupFrame( nId)) = frHead ;
|
||||
|
||||
return nEntId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machining::ActivateDrillingUnit( int nHeadId, const INTVECTOR& vActExit) const
|
||||
{
|
||||
// recupero la macchina corrente
|
||||
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
// costanti
|
||||
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
|
||||
static const string EVAR_VER = ".VER" ; // IN (string) versione della Dll
|
||||
static const string EVAR_HEADID = ".HEADID" ; // IN (int) identificativo testa
|
||||
static const string EVAR_DRACEX = ".DRACEX" ; // IN (ints) vettore indici uscite attive
|
||||
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok, > 0 errore)
|
||||
static const string ON_ACTIVATE_DRILLING_UNIT = "OnActivateDrillingUnit" ;
|
||||
|
||||
// se non esiste la funzione, esco
|
||||
if ( ! pMch->LuaExistsFunction( ON_ACTIVATE_DRILLING_UNIT))
|
||||
return true ;
|
||||
|
||||
// eseguo l'azione
|
||||
bool bOk = true ;
|
||||
int nErr = 99 ;
|
||||
// imposto valori parametri
|
||||
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_VER, GetEMkVer()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_HEADID, nHeadId) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_DRACEX, vActExit) ;
|
||||
// eseguo
|
||||
bOk = bOk && pMch->LuaCallFunction( ON_ACTIVATE_DRILLING_UNIT) ;
|
||||
// recupero valori parametri obbligatori
|
||||
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
|
||||
// reset
|
||||
bOk = pMch->LuaResetGlobVar( EMC_VAR) && bOk ;
|
||||
// segnalo errori
|
||||
return ( bOk && nErr == 0) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machining::PostApply( string& sErr)
|
||||
@@ -445,39 +328,39 @@ Machining::PostApply( string& sErr)
|
||||
static const string EVAR_MSG = ".MSG" ; // OUT (string) stringa di errore ( opzionale)
|
||||
static const string ON_POST_APPLY = "OnPostApplyMachining" ;
|
||||
|
||||
// se non esiste la funzione, esco
|
||||
if ( ! pMch->LuaExistsFunction( ON_POST_APPLY))
|
||||
return true ;
|
||||
|
||||
// eseguo l'azione
|
||||
bool bOk = true ;
|
||||
int nErr = 99 ;
|
||||
// imposto valori parametri
|
||||
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PHASE, m_nPhase) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_MCHID, m_nOwnerId) ;
|
||||
// eseguo
|
||||
bOk = bOk && pMch->LuaCallFunction( ON_POST_APPLY, false) ;
|
||||
// recupero valori parametri obbligatori
|
||||
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
|
||||
// recupero valori parametri opzionali
|
||||
string sMsg ;
|
||||
bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_MSG, sMsg) ;
|
||||
// reset
|
||||
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
|
||||
// segnalo errori
|
||||
if ( ! bOk || nErr > 0) {
|
||||
bOk = false ;
|
||||
sErr = sMsg ;
|
||||
if ( IsEmptyOrSpaces( sErr))
|
||||
sErr = " Error in " + ON_POST_APPLY + " (" + ToString( nErr) + ")" ;
|
||||
if ( pMch->LuaExistsFunction( ON_POST_APPLY)) {
|
||||
bool bOk = true ;
|
||||
int nErr = 99 ;
|
||||
// imposto valori parametri
|
||||
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PHASE, m_nPhase) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_MCHID, m_nOwnerId) ;
|
||||
// eseguo
|
||||
bOk = bOk && pMch->LuaCallFunction( ON_POST_APPLY, false) ;
|
||||
// recupero valori parametri obbligatori
|
||||
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
|
||||
// recupero valori parametri opzionali
|
||||
string sMsg ;
|
||||
bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_MSG, sMsg) ;
|
||||
// reset
|
||||
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
|
||||
// segnalo errori
|
||||
if ( ! bOk || nErr > 0) {
|
||||
bOk = false ;
|
||||
sErr = sMsg ;
|
||||
if ( IsEmptyOrSpaces( sErr))
|
||||
sErr = " Error in " + ON_POST_APPLY + " (" + ToString( nErr) + ")" ;
|
||||
}
|
||||
// recupero eventuale warning
|
||||
else if ( nErr < 0) {
|
||||
string sOut = sMsg ;
|
||||
if ( IsEmptyOrSpaces( sOut))
|
||||
sOut = " Warning in " + ON_POST_APPLY + " (" + ToString( abs( nErr)) + ")" ;
|
||||
m_pMchMgr->SetWarning( abs( nErr), sOut) ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
// recupero eventuale warning
|
||||
else if ( nErr < 0) {
|
||||
string sOut = sMsg ;
|
||||
if ( IsEmptyOrSpaces( sOut))
|
||||
sOut = " Warning in " + ON_POST_APPLY + " (" + ToString( abs( nErr)) + ")" ;
|
||||
m_pMchMgr->SetWarning( abs( nErr), sOut) ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
else
|
||||
return true ;
|
||||
}
|
||||
+1
-9
@@ -43,25 +43,17 @@ class Machining : public Operation
|
||||
virtual bool UpdateToolData( bool* pbChanged = nullptr) = 0 ;
|
||||
virtual const ToolData& GetToolData( void) const = 0 ;
|
||||
virtual bool GetGeometry( SELVECTOR& vIds) const = 0 ;
|
||||
virtual bool GetSkippedGeometry( SELVECTOR& vIds) const
|
||||
{ vIds.clear() ; return false ; }
|
||||
|
||||
public :
|
||||
bool GetStartPoint( Point3d& ptStart) const ;
|
||||
bool GetEndPoint( Point3d& ptEnd) const ;
|
||||
bool PrepareToolPreview( void) const ;
|
||||
int ToolPreview( int nEntId, int nFlag) const ;
|
||||
bool RemoveToolPreview( void) const ;
|
||||
int GetToolPreviewStepCount( void) const ;
|
||||
int ToolPreview( int nEntId, int nStep) const ;
|
||||
bool ActivateDrillingUnit( int nHeadId, const INTVECTOR& vActExit) const ;
|
||||
|
||||
protected :
|
||||
Machining( void) ;
|
||||
bool PostApply( std::string& sErr) ;
|
||||
|
||||
private :
|
||||
int GetToolPreviewNext( int nEntId, int nParentId, int nStId) const ;
|
||||
int GetToolPreviewPrev( int nEntId, int nParentId, int nStId) const ;
|
||||
} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
+2
-2
@@ -107,7 +107,7 @@ GetMachiningTitle( int nMchType)
|
||||
"SurfRoughing",
|
||||
"SurfFinishing",
|
||||
"Waterjetting",
|
||||
"5AxisMilling"} ;
|
||||
"5axMachining"} ;
|
||||
switch ( nMchType) {
|
||||
case MT_DRILLING : return MchTitle[1] ;
|
||||
case MT_SAWING : return MchTitle[2] ;
|
||||
@@ -121,7 +121,7 @@ GetMachiningTitle( int nMchType)
|
||||
case MT_SURFROUGHING : return MchTitle[10] ;
|
||||
case MT_SURFFINISHING : return MchTitle[11] ;
|
||||
case MT_WATERJETTING : return MchTitle[12] ;
|
||||
case MT_FIVEAXISMILLING : return MchTitle[13] ;
|
||||
case MT_5AXMACHINING : return MchTitle[13] ;
|
||||
|
||||
}
|
||||
return MchTitle[0] ;
|
||||
|
||||
+155
-254
File diff suppressed because it is too large
Load Diff
@@ -124,13 +124,13 @@ class Milling : public Machining
|
||||
bool AddTabsLine( const ICurveLine* pLine, const Vector3d& vtTool, const DBLVECTOR& vdTabs, const TabData& tdTabs) ;
|
||||
bool AddTabsArc( const ICurveArc* pArc, const Vector3d& vtTool, const DBLVECTOR& vdTabs, const TabData& tdTabs) ;
|
||||
double GetRadiusForStartEndElevation( bool bExtra = true) const ;
|
||||
bool GetSimplePointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, const Vector3d& vtRetr) const ;
|
||||
bool GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, const Vector3d& vtRetr, double dSafeZ) const ;
|
||||
bool GetSimplePointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, const Vector3d& vtCorr) const ;
|
||||
bool GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, const Vector3d& vtCorr, double dElev, double dSafeZ) const ;
|
||||
bool GetPointAboveRaw( const Point3d& ptP, const Vector3d& vtTool) const ;
|
||||
bool GetPointBelowRaw( const Point3d& ptP, const Vector3d& vtTool) const ;
|
||||
bool CalcAndSetCorrAuxDir( const ICurveComposite* pCompo, double dU, bool bInvertSide = false, bool bSawSpecial = false) ;
|
||||
Vector3d CalcCorrDir( const ICurveComposite* pCompo, double dU, bool bInvertSide = false, bool bSawSpecial = false) const ;
|
||||
bool CalcOffset( ICurveComposite* pCompo, double dSignOffs) const ;
|
||||
Vector3d CalcCorrDir( const ICurveComposite* pCompo, double dU, bool bInvertSide = false, bool bSawSpecial = false) ;
|
||||
bool CalcOffset( ICurveComposite* pCompo, double dSignOffs) ;
|
||||
bool TrimExtendCurveToClosedStm( ICurveComposite* pCompo, int nCstmId, bool bInvert) ;
|
||||
|
||||
private :
|
||||
@@ -163,9 +163,7 @@ class Milling : public Machining
|
||||
return true ;
|
||||
return ( IsLeadInHelixOrZigzag() &&
|
||||
m_Params.m_dLiTang >= 0.9 * m_TParams.m_dDiam && m_Params.m_dLiElev <= 2) ; }
|
||||
double GetLeadInOutToler( void) const
|
||||
{ return ( m_bTHoldFloating ? LIO_ELEV_FLOAT : LIO_ELEV_TOL) ; }
|
||||
friend class LeadIOStatus ;
|
||||
friend class LeadIOStatus ;
|
||||
|
||||
private :
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
@@ -174,7 +172,6 @@ class Milling : public Machining
|
||||
double m_dTHoldBase ; // posizione base del porta-utensile
|
||||
double m_dTHoldLen ; // lunghezza del porta-utensile
|
||||
double m_dTHoldDiam ; // diametro del porta-utensile
|
||||
bool m_bTHoldFloating ; // flag di portautensili flottante
|
||||
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
|
||||
|
||||
+9
-15
@@ -523,15 +523,13 @@ Mortising::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || m_nStatus == MCH_ST_NO_POSTAPPL)) {
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
// confermo i percorsi di lavorazione
|
||||
m_nMortises = nCurrMortises ;
|
||||
string sLog = string( "Mortising apply skipped : status ") + ( m_nStatus == MCH_ST_OK ? "already ok" : "no postapply") ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), sLog.c_str()) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Mortising apply skipped : status already ok") ;
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Update done") ;
|
||||
// esco con successo
|
||||
return true ;
|
||||
@@ -817,14 +815,10 @@ Mortising::UpdateToolData( bool* pbChanged)
|
||||
ToolsMgr* pTMgr = m_pMchMgr->GetCurrToolsMgr() ;
|
||||
if ( pTMgr == nullptr)
|
||||
return false ;
|
||||
// recupero l'utensile nel DB utensili (se fallisce con UUID provo con il nome)
|
||||
// recupero l'utensile nel DB utensili
|
||||
const ToolData* pTdata = pTMgr->GetTool( m_Params.m_ToolUuid) ;
|
||||
if ( pTdata == nullptr) {
|
||||
pTdata = pTMgr->GetTool( m_Params.m_sToolName) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
m_Params.m_ToolUuid = m_TParams.m_Uuid ;
|
||||
}
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
// salvo posizione TC, testa e uscita originali
|
||||
string sOrigTcPos = m_TParams.m_sTcPos ;
|
||||
string sOrigHead = m_TParams.m_sHead ;
|
||||
@@ -1022,7 +1016,7 @@ Mortising::GetCurve( SelData Id)
|
||||
else
|
||||
nToolDir = TOOL_PAR_SLANT ;
|
||||
int nFaceUse = ( m_Params.m_nFaceUse & 31) ;
|
||||
AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, V_NULL, m_TParams.m_dThick, 2) ;
|
||||
AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, m_TParams.m_dThick, 2) ;
|
||||
// la restituisco
|
||||
return Release( pCrvCompo) ;
|
||||
}
|
||||
@@ -1325,7 +1319,7 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
return false ;
|
||||
// eventuale imposizione massima elevazione da note utente
|
||||
double dMaxElev ;
|
||||
if ( GetValInNotes( m_Params.m_sUserNotes, "MaxElev", dMaxElev) && dElev > dMaxElev)
|
||||
if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxElev="), dMaxElev) && dElev > dMaxElev)
|
||||
dElev = dMaxElev ;
|
||||
|
||||
// ingombro aggiuntivo da larghezza sega a catena quando inclinata rispetto al movimento
|
||||
@@ -1336,7 +1330,7 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
|
||||
// affondamento speciale da note utente (!!! da trasformare in parametro come gli altri !!!)
|
||||
int nPlunge = 0 ;
|
||||
GetValInNotes( m_Params.m_sUserNotes, "Plunge", nPlunge) ;
|
||||
FromString( ExtractInfo( m_Params.m_sUserNotes, "Plunge="), nPlunge) ;
|
||||
|
||||
// verifico che lo step dell'utensile sia sensato
|
||||
double dOkStep = ( nPlunge == MORTISE_PLUNGE_STEP ? m_Params.m_dStep : 0) ;
|
||||
@@ -1563,7 +1557,7 @@ Mortising::GenerateOnePlungeCl( const Point3d& ptStart, const Point3d& ptEnd, co
|
||||
double dDelta = dElev - dDepth ;
|
||||
|
||||
// determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione
|
||||
double dSafeZ = GetSafeZ() + GetDeltaSafeZ( vtTool) ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() + m_pMchMgr->GetDeltaSafeZ( m_TParams.m_sHead) ;
|
||||
double dStartElev = 0 ;
|
||||
Point3d ptLi = ( nPlunge != MORTISE_PLUNGE_END ? ptStart : ptEnd) + vtTool * dDelta ;
|
||||
bool bUnderStart = GetAhPointUnderRaw( ptLi, vtTool, 0,
|
||||
|
||||
+389
-1074
File diff suppressed because it is too large
Load Diff
+12
-82
@@ -17,7 +17,6 @@
|
||||
#include "MachMgr.h"
|
||||
#include "MachConst.h"
|
||||
#include "MachineStruConst.h"
|
||||
#include "CamData.h"
|
||||
#include "/EgtDev/Include/EGkPoint3d.h"
|
||||
#include "/EgtDev/Include/EGkUserObj.h"
|
||||
#include "/EgtDev/Include/EGkSelection.h"
|
||||
@@ -66,66 +65,21 @@ class Operation : public IUserObj
|
||||
{ return ( bSplit && ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrIsRobot())) ; }
|
||||
virtual double GetMaxSplitLen( bool bSplit = true, bool bFeed = true) const
|
||||
{ return ( bSplit && ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrIsRobot()) ? ( bFeed ? 5 : 50) : 0) ; }
|
||||
virtual double GetSafeZ( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 100 ; // MF_CURR_SAFEZ in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ; }
|
||||
virtual double GetSafeAggrBottZ( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 10 ; // MF_CURR_SAFEAGGRBOTTZ in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetSafeAggrBottZ() ; }
|
||||
virtual double GetExtraLOnCutRegion( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 0 ; // MF_CURR_EXTRALCR in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetExtraLOnCutRegion() ; }
|
||||
virtual double GetExtraROnDrillRegion( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 0 ; // MF_CURR_EXTRARDR in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetExtraROnDrillRegion() ; }
|
||||
virtual double GetHoleDiamToler( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 10 * EPS_SMALL ; // MF_CURR_HOLEDTOL in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetHoleDiamToler() ; }
|
||||
virtual double GetExtSawArcMinRad( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 200 ; // MF_CURR_EXTSAWARCMINRAD in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetExtSawArcMinRad() ; }
|
||||
virtual double GetIntSawArcMaxSideAng( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 45 ; // MF_CURR_INTSAWARCMAXSIDEANG in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetIntSawArcMaxSideAng() ; }
|
||||
virtual bool GetSplitArcs( const Vector3d& vtTool) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrIsRobot() ||
|
||||
m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrIsRobot())
|
||||
return true ;
|
||||
int nSplitArcs = m_pMchMgr->GetCurrMachiningsMgr()->GetSplitArcs() ;
|
||||
return ( nSplitArcs == SPLAR_ALWAYS ||
|
||||
( nSplitArcs == SPLAR_NO_XY_PLANE && ! vtTool.IsZplus()) ||
|
||||
( nSplitArcs == SPLAR_GEN_PLANE && vtTool.IsGeneric())) ; }
|
||||
virtual double GetApproxLinTol( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 50 * EPS_SMALL ; // MF_APPROX_LINTOL in MachiningsMgr
|
||||
{ if ( m_pMchMgr == nullptr)
|
||||
return 50 * EPS_SMALL ;
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetApproxLinTol() ; }
|
||||
virtual double GetMaxDepthSafe( void) const
|
||||
{ if ( m_pMchMgr == nullptr || m_pMchMgr->GetCurrMachiningsMgr() == nullptr)
|
||||
return 2 ; // MF_CURR_MAXDEPTHSAFE in MachiningsMgr
|
||||
return m_pMchMgr->GetCurrMachiningsMgr()->GetMaxDepthSafe() ; }
|
||||
|
||||
protected :
|
||||
Operation( void) ;
|
||||
|
||||
protected :
|
||||
struct Position {
|
||||
int nSide ;
|
||||
DBLVECTOR vAxis ;
|
||||
int nFlag ;
|
||||
int nFlag2 ;
|
||||
int nMask ;
|
||||
std::string sInfo ;
|
||||
Position() : nSide( 0), nFlag( 0), nFlag2( 0), nMask( -1) {}
|
||||
} ;
|
||||
typedef std::vector<Position> POSVECTOR ;
|
||||
|
||||
protected :
|
||||
bool UpdateFollowingOperationsStatus( int nModif) ;
|
||||
bool GetElevation( int nPhase, const Point3d& ptP,
|
||||
@@ -144,8 +98,6 @@ class Operation : public IUserObj
|
||||
const Vector3d& vtDir, double& dElev) const ;
|
||||
bool GetElevation( int nPhase, const Point3d& ptP, const Vector3d& vtTool, double dRad, double dLen,
|
||||
const Vector3d& vtDir, double& dElev) const ;
|
||||
bool GetElevation( int nPhase, const Point3d& ptP, const Vector3d& vtTool, double dRad, double dLen, double dSafeDist,
|
||||
const Vector3d& vtDir, double& dElev) const ;
|
||||
bool GetElevation( int nPhase, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtTool, double dRad, double dLen,
|
||||
const Vector3d& vtDir, double& dElev) const ;
|
||||
bool GetAhPointUnderRaw( const Point3d& ptP, const Vector3d& vtTool, double dToolRad, double dToolRadForElev,
|
||||
@@ -153,7 +105,6 @@ class Operation : public IUserObj
|
||||
bool GetUhPointAboveRaw( const Point3d& ptP, const Vector3d& vtTool, double dToolRad, double dToolRadForElev,
|
||||
double dToolLen, bool bIsSaw, double dSafeZ, const Vector3d& vtDir, double& dElev) const ;
|
||||
bool GetDistanceFromRawSide( int nPhase, const Point3d& ptP, const Vector3d& vtDir, double& dDist) const ;
|
||||
bool GetAggrBottDistanceFromRawSide( int nPhase, const Point3d& ptP, const Vector3d& vtDir, double dEncSafeH, double& dDist) const ;
|
||||
bool GetMinDistanceFromRawSide( int nPhase, const Point3d& ptP, double dExpand,
|
||||
double& dDist, Vector3d& vtDir) const ;
|
||||
bool GetMinDistanceFromRawSide( int nPhase, const Point3d& ptP, double dExpand,
|
||||
@@ -167,8 +118,7 @@ class Operation : public IUserObj
|
||||
bool GetRawGlobBox( int nPhase, const BBox3d& b3Test, double dToler, BBox3d& b3Raw) const ;
|
||||
bool GetCurrRawsGlobBox( BBox3d& b3Raw) const ;
|
||||
|
||||
bool AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nFaceUse, const Vector3d& vtFaceUse,
|
||||
double dToolThick, int nGrade = 3) ;
|
||||
bool AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nFaceUse, double dToolThick, int nGrade = 3) ;
|
||||
bool ApproxWithArcsIfUseful( ICurveComposite* pCompo, bool bCareTempProp = false) const ;
|
||||
bool ApproxWithLines( ICurveComposite* pCompo, bool bFeed = true) const ;
|
||||
bool VerifyArcs( ICurveComposite* pCompo, double dMaxAngCen = MAX_ANG_CEN) const ;
|
||||
@@ -200,29 +150,19 @@ class Operation : public IUserObj
|
||||
bool CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes, double dRot1W,
|
||||
bool bMaxDeltaR2OnFirst, bool bRotContOnNext, double dAngDeltaMinForHome,
|
||||
const DBLVECTOR& vAxRotHome, DBLVECTOR& vAxRotPrec, int& nOutStrC) ;
|
||||
bool CalculateRotAxesValues( bool bFirst, const Vector3d& vtTool, const Vector3d& vtAux,
|
||||
double dRot1W, bool bMaxDeltaR2OnFirst, bool bRotContOnNext, double dAngDeltaMinForHome,
|
||||
const DBLVECTOR& vAxRotHome, const DBLVECTOR& vAxRotPrec, DBLVECTOR& vAxRot) ;
|
||||
bool VerifyLineMidPoint( const Point3d& ptPrec, const Vector3d& vtDirPrec, const Vector3d& vtAuxPrec, const Vector3d& vtCorrPrec, const DBLVECTOR& vAxPrec,
|
||||
const Point3d& ptP, const Vector3d& vtDir, const Vector3d& vtAux, const Vector3d& vtCorr, const DBLVECTOR& vAxVal,
|
||||
int nCnt, int nEntId, double dRot1W, int nMoveType, bool& bAdded, bool& bAxError) ;
|
||||
bool CalculateClPathRobotAxesValues( int nClPathId, int nLinAxes, int nRotAxes, double dRot1W,
|
||||
bool bMaxDeltaR2OnFirst, bool bRotContOnNext, double dAngDeltaMinForHome,
|
||||
const DBLVECTOR& vAxRotHome, DBLVECTOR& vAxRotPrec) ;
|
||||
bool AdjustStartEndMovements( bool bVerifyPreviousLink = true) ;
|
||||
bool ManageProtectedAreas( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, Operation* pPrevOp, Operation* pNextOp, bool& bClimbDone) ;
|
||||
bool AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operation* pPrevOp, const DBLVECTOR& vAxPrev, bool bMaxZ) ;
|
||||
bool AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation* pPrevOp, const DBLVECTOR& vAxPrev, bool bMaxZ) ;
|
||||
bool ToolChangeNeeded( const Operation& Op1, const Operation& Op2) const ;
|
||||
bool AddSpecialClimb( const DBLVECTOR& vAxVal, bool bOk = true, int nClPathId = GDB_ID_NULL,
|
||||
int nFlag = 0, int nFlag2 = 0, int nMask = -1, const std::string& sInfo = "") ;
|
||||
bool RemoveClimb( int nClPathId = GDB_ID_NULL) ;
|
||||
bool AddRise( DBLVECTOR& vAxVal, double dDelta = NAN, int nClPathId = GDB_ID_NULL, int nToMinMaxZ = 0) ;
|
||||
bool AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk = true, int nClPathId = GDB_ID_NULL,
|
||||
int nFlag = 0, int nFlag2 = 0, int nMask = -1, const std::string& sInfo = "") ;
|
||||
bool RemoveClimb( int nClPathId) ;
|
||||
bool AddRise( DBLVECTOR& vAxVal, double dDelta = - 1, int nClPathId = GDB_ID_NULL, bool bZHomeDown = false) ;
|
||||
bool AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk = true, int nClPathId = GDB_ID_NULL, int nFlag = 0) ;
|
||||
bool RemoveRise( int nClPathId = GDB_ID_NULL) ;
|
||||
bool AddHome( void) ;
|
||||
bool RemoveClimbRiseHome( void) ;
|
||||
bool AddRobotClimb( int nEntId, double dDeltaZ = NAN) ;
|
||||
bool AddRobotClimb( int nEntId, double dDeltaZ) ;
|
||||
bool CalcRobotAxesAbovePos( const Point3d& ptP, const Vector3d& vtT, const Vector3d& vtA, double dDeltaZ,
|
||||
DBLVECTOR& vAx, double* pdNewDeltaZ = nullptr) const ;
|
||||
bool CalcDeltaZForHeadRotation( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, double& dDeltaZ) const ;
|
||||
@@ -235,23 +175,15 @@ class Operation : public IUserObj
|
||||
bool GetRotationAtZmax( void) const ;
|
||||
bool ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, const BBox3d& b3Raws) const ;
|
||||
int GetUserNotesZmax( void) const ;
|
||||
double GetDeltaSafeZ( const Vector3d& vtTool) const ;
|
||||
bool GetZHomeDown( void) const ;
|
||||
bool TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ;
|
||||
int SpecialTestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ;
|
||||
bool SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, int& nFlag2, bool& bModif) ;
|
||||
bool SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int nOutstroke, int nLinkType,
|
||||
POSVECTOR& vNewPos) ;
|
||||
bool SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, DBLVECTOR& vAxNew, bool& bModif) ;
|
||||
|
||||
bool GetAggrBottomData( const std::string& sHead, AggrBottom& agbData) const ;
|
||||
bool IsAggrBottom( const std::string& sHead) const ;
|
||||
|
||||
private :
|
||||
bool GetAxisMidForTestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int nAxisOrder, Machine* pMch,
|
||||
DBLVECTOR& vAxMid) const ;
|
||||
bool OneMoveTestCollisionAvoid( const STRVECTOR& vAxName, const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd,
|
||||
Machine* pMch, const INTVECTOR& vRawId, const INTVECTOR& vFxtId) const ;
|
||||
|
||||
protected :
|
||||
int m_nOwnerId ; // identificativo dell'oggetto geometrico possessore
|
||||
IGeomDB* m_pGeomDB ; // puntatore al DB geometrico
|
||||
@@ -326,8 +258,6 @@ inline Operation* GetOperation( IUserObj* pUserObj)
|
||||
// tipo posizione utensile
|
||||
enum { TOOL_PARAL = 1, TOOL_ORTHO = 2, TOOL_ORTUP = 3, TOOL_PAR_SLANT= 4} ;
|
||||
// tipo di utilizzo contorno faccia
|
||||
enum { FACE_DOWN = 1, FACE_TOP = 2, FACE_FRONT = 3, FACE_BACK = 4, FACE_LEFT = 5, FACE_RIGHT = 6, FACE_CONT = 7, FACE_VERSOR = 8} ;
|
||||
enum { FACE_DOWN = 1, FACE_TOP = 2, FACE_FRONT = 3, FACE_BACK = 4, FACE_LEFT = 5, FACE_RIGHT = 6, FACE_CONT = 7} ;
|
||||
// risultato di SpecialTestCollisionAvoid
|
||||
enum { SCAV_ERROR = -1, SCAV_COLLIDE = 0, SCAV_AVOID = 1, SCAV_TOTEST = 2} ;
|
||||
// ordine di movimento assi nei link
|
||||
enum { LKAO_INTERP = 0, LKAO_HEAD_BEFORE = -1, LKAO_HEAD_AFTER = +1, LKAO_HEAD_BOTH = 11} ;
|
||||
enum { SCAV_ERROR = -1, SCAV_COLLIDE = 0, SCAV_AVOID = 1, SCAV_TOTEST = 2};
|
||||
|
||||
+4
-10
@@ -1,7 +1,7 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2017-2024
|
||||
// EgalTech 2017-2019
|
||||
//----------------------------------------------------------------------------
|
||||
// File : OperationConst.h Data : 22.05.24 Versione : 2.6e5
|
||||
// File : OperationConst.h Data : 08.07.19 Versione : 2.1g2
|
||||
// Contenuto : Costanti per le operazioni.
|
||||
//
|
||||
//
|
||||
@@ -9,7 +9,6 @@
|
||||
// Modifiche : 17.08.17 DS Creazione modulo.
|
||||
// 25.05.19 DS Aggiunte SurfRoughing e SurfFinishing.
|
||||
// 25.05.19 DS Aggiunta WaterJetting.
|
||||
// 22.05.24 DS Aggiunta FiveAxisMilling.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -18,7 +17,6 @@
|
||||
#include "/EgtDev/Include/EMkOperationConst.h"
|
||||
#include <string>
|
||||
|
||||
#define POCKETING_NT 0
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static const std::string s_OpeClass[] = {"",
|
||||
@@ -34,8 +32,7 @@ static const std::string s_OpeClass[] = {"",
|
||||
"EMkChiseling",
|
||||
"EMkSurfRoughing",
|
||||
"EMkSurfFinishing",
|
||||
"EMkWaterJetting",
|
||||
"EMkFiveAxisMilling"} ;
|
||||
"EMkWaterJetting"} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Dal tipo numerico restituisce la classe della operazione
|
||||
@@ -56,7 +53,6 @@ GetOperationClass( int nOpeType)
|
||||
case OPER_SURFROUGHING : return s_OpeClass[11] ;
|
||||
case OPER_SURFFINISHING : return s_OpeClass[12] ;
|
||||
case OPER_WATERJETTING : return s_OpeClass[13] ;
|
||||
case OPER_FIVEAXISMILLING : return s_OpeClass[14] ;
|
||||
}
|
||||
return s_OpeClass[0] ;
|
||||
}
|
||||
@@ -92,8 +88,6 @@ GetOperationType( const std::string& sOpeClass)
|
||||
return OPER_SURFFINISHING ;
|
||||
else if ( sOpeClass == s_OpeClass[13])
|
||||
return OPER_WATERJETTING ;
|
||||
else if ( sOpeClass == s_OpeClass[14])
|
||||
return OPER_FIVEAXISMILLING ;
|
||||
else
|
||||
return OPER_NULL ;
|
||||
}
|
||||
}
|
||||
@@ -45,17 +45,12 @@ static const std::string GVAR_EMPTY = ".EMPTY" ; // (bool) flag disp
|
||||
static const std::string GVAR_SBH = ".SBH" ; // (bool) flag disposizione con operazioni manuali
|
||||
static const std::string GVAR_TABNAME = ".TABNAME" ; // (string) nome tavola
|
||||
static const std::string GVAR_TABORI1 = ".TABORI1" ; // (Point3d) prima origine di tavola
|
||||
static const std::string GVAR_TAIND = ".TAIND" ; // (int) indice asse tavola
|
||||
static const std::string GVAR_TANAME = ".TANAME" ; // (string) nome asse tavola
|
||||
static const std::string GVAR_TAPOS = ".TAPOS" ; // (double) posizione asse tavola
|
||||
static const std::string GVAR_TAMOVED = ".TAMOVED" ; // (bool) flag asse tavola con movimento
|
||||
static const std::string GVAR_FIXID = ".FIXID" ; // (int) identificativo bloccaggio (fixture)
|
||||
static const std::string GVAR_FIXIND = ".FIXIND" ; // (int) indice bloccaggio
|
||||
static const std::string GVAR_FIXNAME = ".FIXNAME" ; // (string) nome bloccaggio
|
||||
static const std::string GVAR_FIXPOS = ".FIXPOS" ; // (Point3d) posizione bloccaggio
|
||||
static const std::string GVAR_FIXANG = ".FIXANG" ; // (num) angolo di rotazione bloccaggio
|
||||
static const std::string GVAR_FIXMOB = ".FIXMOB" ; // (num) movimento eventuale parte mobile del bloccaggio
|
||||
static const std::string GVAR_FIXTAL = ".FIXTAL" ; // (string) nome dell'asse di tavola a cui è fissato
|
||||
static const std::string GVAR_RAWID = ".RAWID" ; // (int) identificativo grezzo
|
||||
static const std::string GVAR_RAWIND = ".RAWIND" ; // (int) indice movimento del grezzo
|
||||
static const std::string GVAR_RAWTYPE = ".RAWTYPE" ; // (int) tipo di movimento del grezzo
|
||||
@@ -66,7 +61,6 @@ static const std::string GVAR_HEAD = ".HEAD" ; // (string) nome test
|
||||
static const std::string GVAR_EXIT = ".EXIT" ; // (int) indice uscita
|
||||
static const std::string GVAR_TCPOS = ".TCPOS" ; // (string) eventuale posizione utensile nel TC
|
||||
static const std::string GVAR_TTYPE = ".TTYPE" ; // (int) tipo utensile
|
||||
static const std::string GVAR_TFLOAT = ".TFLOAT" ; // (bool) flag per utensile flottante
|
||||
static const std::string GVAR_TCOMP = ".TCOMP" ; // (int) numero correttore utensile
|
||||
static const std::string GVAR_TDIAM = ".TDIAM" ; // (num) diametro utensile
|
||||
static const std::string GVAR_TTOTDIAM = ".TTOTDIAM" ; // (num) diametro totale utensile
|
||||
@@ -96,7 +90,6 @@ static const std::string GVAR_PMAX = ".PMAX" ; // (Point3d) punto mas
|
||||
static const std::string GVAR_PAXMIN = ".PAXMIN" ; // (double/s) minimo di ingombro degli assi del percorso di lavorazione
|
||||
static const std::string GVAR_PAXMAX = ".PAXMAX" ; // (double/s) massimo di ingombro degli assi del percorso di lavorazione
|
||||
static const std::string GVAR_ELEV = ".ELEV" ; // (double) massima elevazione
|
||||
static const std::string GVAR_DRACEX = ".DRACEX" ; // (int/s) vettore delle uscite selezionate (per gruppi a forare)
|
||||
static const std::string GVAR_AUXTOT = ".AUXTOT" ; // (int) numero totale dati ausiliari inizio/fine percorso di lavorazione
|
||||
static const std::string GVAR_AUXIND = ".AUXIND" ; // (int) indice dato ausiliario inizio/fine percorso di lavorazione
|
||||
static const std::string GVAR_AUX = ".AUX" ; // (string) dato ausiliario inizio/fine percorso di lavorazione
|
||||
@@ -131,17 +124,6 @@ static const std::string GVAR_R4P = ".R4p" ; // (num) valore pr
|
||||
static const std::string GVAR_R5P = ".R5p" ; // (num) valore precedente del quinto asse rotante
|
||||
static const std::string GVAR_R6P = ".R6p" ; // (num) valore precedente del sesto asse rotante
|
||||
static const std::string GVAR_R7P = ".R7p" ; // (num) valore precedente del settimo asse rotante
|
||||
static const std::string GVAR_MOVESUCC = ".MOVESUCC" ; // (int) tipo del movimento successivo (0,1,2,3)
|
||||
static const std::string GVAR_L1S = ".L1s" ; // (num) valore successivo del primo asse lineare
|
||||
static const std::string GVAR_L2S = ".L2s" ; // (num) valore successivo del secondo asse lineare
|
||||
static const std::string GVAR_L3S = ".L3s" ; // (num) valore successivo del terzo asse lineare
|
||||
static const std::string GVAR_R1S = ".R1s" ; // (num) valore successivo del primo asse rotante
|
||||
static const std::string GVAR_R2S = ".R2s" ; // (num) valore successivo del secondo asse rotante
|
||||
static const std::string GVAR_R3S = ".R3s" ; // (num) valore successivo del terzo asse rotante
|
||||
static const std::string GVAR_R4S = ".R4s" ; // (num) valore successivo del quarto asse rotante
|
||||
static const std::string GVAR_R5S = ".R5s" ; // (num) valore successivo del quinto asse rotante
|
||||
static const std::string GVAR_R6S = ".R6s" ; // (num) valore successivo del sesto asse rotante
|
||||
static const std::string GVAR_R7S = ".R7s" ; // (num) valore successivo del settimo asse rotante
|
||||
static const std::string GVAR_L1T = ".L1t" ; // (string) token del primo asse lineare
|
||||
static const std::string GVAR_L2T = ".L2t" ; // (string) token del secondo asse lineare
|
||||
static const std::string GVAR_L3T = ".L3t" ; // (string) token del terzo asse lineare
|
||||
@@ -191,10 +173,6 @@ static const std::string GVAR_SIMUISTAT = ".SIMUISTAT" ; // (num) stato sim
|
||||
static const std::string GVAR_SAFEDIST = ".SAFEDIST" ; // (num) distanza di sicurezza per verifica di collisione
|
||||
static const std::string GVAR_SIMVMID = ".SIMVMID" ; // (int) identificativo grezzo Vmill in collisione
|
||||
static const std::string GVAR_SIMCOBIND = ".SIMCOBIND" ; // (int) indice oggetto in collisione
|
||||
static const std::string GVAR_MPSIM = ".MPSIM" ; // (bool) flag simulazione multiprocesso
|
||||
static const std::string GVAR_MPSEST = ".MPSEST" ; // (string) path del file di stima speciale per simulazione multiprocesso
|
||||
static const std::string GVAR_RECORD = ".RECORD" ; // (bool) flag modalità registrazione comandi in simulazione
|
||||
static const std::string GVAR_OPERID = ".OPERID" ; // (int/s) identificativi ordinati operazioni per simulazione multiprocesso
|
||||
// Funzioni generazione
|
||||
static const std::string ON_START = "OnStart" ;
|
||||
static const std::string ON_END = "OnEnd" ;
|
||||
@@ -204,7 +182,6 @@ static const std::string ON_TOOL_DATA = "OnToolData" ;
|
||||
static const std::string ON_DISPOSITION_START = "OnDispositionStart" ;
|
||||
static const std::string ON_DISPOSITION_END = "OnDispositionEnd" ;
|
||||
static const std::string ON_TABLE_DATA = "OnTableData" ;
|
||||
static const std::string ON_TABLE_AXIS_DATA = "OnTableAxisData" ;
|
||||
static const std::string ON_FIXTURE_DATA = "OnFixtureData" ;
|
||||
static const std::string ON_RAWMOVE_DATA = "OnRawMoveData" ;
|
||||
static const std::string ON_TOOL_SELECT = "OnToolSelect" ;
|
||||
@@ -227,7 +204,6 @@ static const std::string ON_ESTIM_TOOL_DATA = "OnEstimToolData" ;
|
||||
static const std::string ON_ESTIM_DISPOSITION_START = "OnEstimDispositionStart" ;
|
||||
static const std::string ON_ESTIM_DISPOSITION_END = "OnEstimDispositionEnd" ;
|
||||
static const std::string ON_ESTIM_TABLE_DATA = "OnEstimTableData" ;
|
||||
static const std::string ON_ESTIM_TABLE_AXIS_DATA = "OnEstimTableAxisData" ;
|
||||
static const std::string ON_ESTIM_FIXTURE_DATA = "OnEstimFixtureData" ;
|
||||
static const std::string ON_ESTIM_RAWMOVE_DATA = "OnEstimRawMoveData" ;
|
||||
static const std::string ON_ESTIM_TOOL_SELECT = "OnEstimToolSelect" ;
|
||||
@@ -323,36 +299,6 @@ GetGlobVarAxisPrev( int nAx, const std::string& sVar = GLOB_VAR, bool bIsRobot =
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
inline std::string
|
||||
GetGlobVarAxisNext( int nAx, const std::string& sVar = GLOB_VAR, bool bIsRobot = false)
|
||||
{
|
||||
if ( ! bIsRobot) {
|
||||
switch ( nAx) {
|
||||
case 1 : return ( sVar + GVAR_L1S) ;
|
||||
case 2 : return ( sVar + GVAR_L2S) ;
|
||||
case 3 : return ( sVar + GVAR_L3S) ;
|
||||
case 4 : return ( sVar + GVAR_R1S) ;
|
||||
case 5 : return ( sVar + GVAR_R2S) ;
|
||||
case 6 : return ( sVar + GVAR_R3S) ;
|
||||
case 7 : return ( sVar + GVAR_R4S) ;
|
||||
default : return "" ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
switch ( nAx) {
|
||||
case 1 : return ( sVar + GVAR_R1S) ;
|
||||
case 2 : return ( sVar + GVAR_R2S) ;
|
||||
case 3 : return ( sVar + GVAR_R3S) ;
|
||||
case 4 : return ( sVar + GVAR_R4S) ;
|
||||
case 5 : return ( sVar + GVAR_R5S) ;
|
||||
case 6 : return ( sVar + GVAR_R6S) ;
|
||||
case 7 : return ( sVar + GVAR_R7S) ;
|
||||
default : return "" ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
inline std::string
|
||||
GetGlobVarAxisToken( int nAx, bool bIsRobot = false)
|
||||
|
||||
+141
-189
File diff suppressed because it is too large
Load Diff
+1
-2
@@ -397,8 +397,7 @@ bool
|
||||
PocketingData::VerifySubType( int nVal) const
|
||||
{
|
||||
return ( nVal == POCKET_SUB_ZIGZAG || nVal == POCKET_SUB_ONEWAY ||
|
||||
nVal == POCKET_SUB_SPIRALIN || nVal == POCKET_SUB_SPIRALOUT ||
|
||||
nVal == POCKET_SUB_CONFORMAL_ZIGZAG || nVal == POCKET_SUB_CONFORMAL_ONEWAY) ;
|
||||
nVal == POCKET_SUB_SPIRALIN || nVal == POCKET_SUB_SPIRALOUT) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
-3969
File diff suppressed because it is too large
Load Diff
-198
@@ -1,198 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2017-2017
|
||||
//----------------------------------------------------------------------------
|
||||
// File :Pocketing.h Data : 04.02.17 Versione : 1.8b1
|
||||
// Contenuto : Dichiarazione della classe Pocketing.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 04.02.17 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Machining.h"
|
||||
#include "PocketingData.h"
|
||||
#include "ToolData.h"
|
||||
#include "/EgtDev/Include/EGkCurveComposite.h"
|
||||
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
||||
#include "/EgtDev/Include/EGkCurveLine.h"
|
||||
#include "/EgtDev/Include/EgtNumUtils.h"
|
||||
#include "/EgtDev/Include/EGkIntersPlaneSurfTm.h"
|
||||
|
||||
// struttura informazioni sui singoli percorsi
|
||||
struct PathInfoPO {
|
||||
bool bOutStart ; // flag per entrata da fuori
|
||||
bool bSingleCrv ; // se percorso formato da una curva singola ( in generale per SubSteps)
|
||||
bool bOptTrap ; // flag per casi ottimizzati a trapezio ( per Spiral)
|
||||
bool bIsZigZagOneWayBorder ; // curve di bordo dei lati chiusi ( per ZigZag e OneWay)
|
||||
PtrOwner<ICurveComposite> pCrvPath ; // percorso del centro utensile
|
||||
PtrOwner<ICurveComposite> pCrvRet ; // curva di ritorno per LeadIn/Out a guida
|
||||
} ;
|
||||
// tipo percorso
|
||||
typedef std::vector<PathInfoPO> PATHINFOPOVECTOR ;
|
||||
|
||||
// struttura informazioni per Step/SubSteps complessivi
|
||||
struct StepInfoPO {
|
||||
double dDepth ; // profondità dello step attuale
|
||||
double dRelativeDepth ; // profondità relativa allo step al di sopra
|
||||
PtrOwner<ISurfFlatRegion> pSfrPock ; // regione piana di svuotatura
|
||||
PtrOwner<ISurfFlatRegion> pSfrLimit ; // regione piana da non svuotare
|
||||
PATHINFOPOVECTOR vPaths ; // percorsi di Pocketing
|
||||
} ;
|
||||
// tipo step
|
||||
typedef std::vector<StepInfoPO> STEPINFOPOVECTOR ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class PocketingNT : public Machining
|
||||
{
|
||||
public : // IUserObj
|
||||
PocketingNT* Clone( void) const override ;
|
||||
const std::string& GetClassName( void) const override ;
|
||||
bool Dump( std::string& sOut, bool bMM = true, const char* szNewLine = "\n") const override ;
|
||||
bool ToSave( void) const override
|
||||
{ return true ; }
|
||||
bool Save( int nBaseId, STRVECTOR& vString) const override ;
|
||||
bool Load( const STRVECTOR& vString, int nBaseGdbId) override ;
|
||||
|
||||
public : // Operation
|
||||
int GetType( void) const override
|
||||
{ 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
|
||||
{ return m_Params.m_nSolCh ; }
|
||||
|
||||
public : // Machining
|
||||
bool Prepare( const std::string& sMillName) override ;
|
||||
bool SetParam( int nType, bool bVal) override ;
|
||||
bool SetParam( int nType, int nVal) override ;
|
||||
bool SetParam( int nType, double dVal) override ;
|
||||
bool SetParam( int nType, const std::string& sVal) override ;
|
||||
bool SetGeometry( const SELVECTOR& vIds) override ;
|
||||
bool Preview( bool bRecalc) override ;
|
||||
bool Apply( bool bRecalc, bool bPostApply) override ;
|
||||
bool Update( bool bPostApply) override ;
|
||||
bool GetParam( int nType, bool& bVal) const override ;
|
||||
bool GetParam( int nType, int& nVal) const override ;
|
||||
bool GetParam( int nType, double& dVal) const override ;
|
||||
bool GetParam( int nType, std::string& sVal) const override ;
|
||||
bool UpdateToolData( bool* pbChanged = nullptr) override ;
|
||||
const ToolData& GetToolData( void) const override ;
|
||||
bool GetGeometry( SELVECTOR& vIds) const override ;
|
||||
|
||||
public :
|
||||
PocketingNT( void) ;
|
||||
|
||||
private :
|
||||
bool VerifyGeometry( SelData Id, int& nSubs, int& nType) ;
|
||||
bool GetCurves( SelData Id, ICURVEPLIST& lstPC) ;
|
||||
bool SetCurveAllTempProp( int nCrvId, bool bForcedClose, ICurve* pCurve, bool* pbSomeOpen = nullptr) ;
|
||||
bool SetSfrLoopsAllTempProp( int nSfrId, ISurfFlatRegion* pSfr) ;
|
||||
bool ResetCurveAllTempProp( ICurve* pCurve) ;
|
||||
bool Chain( int nGrpDestId) ;
|
||||
ISurfTriMesh* GetRaw( void) ;
|
||||
ISurfTriMesh* GetExtrusionStm( const ISurfFlatRegion* pSfr, const Vector3d& vtTrasl, const Vector3d& vtExtr) ;
|
||||
ISurfFlatRegion* GetSfrByStmIntersection( const IntersParPlanesSurfTm& IPPStm, double dDist, double dSmallOffs = 0) ;
|
||||
bool ChooseCloseOrOpenEdge( ISurfFlatRegion* pSfr, const ISurfTriMesh* pStmExtrusion) ;
|
||||
bool CalcLimitRegion( const ISurfFlatRegion* pSfrPock, const ISurfFlatRegion* pSfrRaw, ISurfFlatRegion* pSfrLimit) ;
|
||||
bool ProcessPath( int nPathId, int nPvId, int nClId) ;
|
||||
bool CalcRegionElevation( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dRad, double dLen, double& dElev) ;
|
||||
bool VerifyPathFromBottom( const ICurveComposite* pCompo, const Vector3d& vtTool) ;
|
||||
bool GeneratePocketingPv( int nPathId, const ICurveComposite* pCompo) ;
|
||||
bool CalcPaths( STEPINFOPOVECTOR& vStepInfo) ;
|
||||
bool AddPocket( STEPINFOPOVECTOR& vStepInfo, const Vector3d& vtTool, double dElev, double dStep, bool bSplitArcs) ;
|
||||
double GetRightFeed( const Vector3d& vtMove, const Vector3d& vtTool) ;
|
||||
bool CutCurveWithLine( ICurveComposite* pCrvA, const ICurveLine* pCrvB) ;
|
||||
bool ComputePolishingPath( ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool bSplitArcs) ;
|
||||
bool AddEpicycles( ICurveComposite * pCompo, ICurveComposite * pCrv, ICurveComposite * pCrvBound = nullptr) ;
|
||||
bool CalcBoundedLinkWithBiArcs( const Point3d& ptStart, const Vector3d& vtStart, const Point3d& ptEnd, const Vector3d& vtEnd,
|
||||
const ICurve* pCrvBound, ICurveComposite* pCrvLink) ;
|
||||
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ,
|
||||
double dElev, double dAppr, bool bSplitArcs, bool bOutStart) ;
|
||||
bool AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ,
|
||||
double dElev, double dAppr, bool bSplitArcs, bool bOutStart = false) ;
|
||||
bool AddLinkRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ,
|
||||
double dElev, double dAppr, bool bSplitArcs) ;
|
||||
bool AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ,
|
||||
double dElev, double dAppr, bool bSplitArcs) ;
|
||||
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtTool, const ICurveComposite* pCrvPath, Point3d& ptP1) ;
|
||||
bool AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN,
|
||||
const ISurfFlatRegion* pSfr, const ICurveComposite* pRCrv, bool bAtLeft, bool bSplitArcs,
|
||||
bool bNoneForced, bool bSkipControl) ;
|
||||
bool AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d& vtN,
|
||||
const ICurveComposite* pRCrv, bool bSplitArcs, bool bNoneForced, Point3d& ptP1) ;
|
||||
double GetRadiusForStartEndElevation( void) ;
|
||||
bool GetForcedClosed( void) ;
|
||||
bool GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMid, Vector3d& vtMidOut) ;
|
||||
bool AdjustContourWithOpenEdges( ICurveComposite* pCompo) ;
|
||||
bool AdjustContourStart( ICurveComposite* pCompo) ;
|
||||
bool CheckSafetyLinearLink( const Point3d& ptCurr, const ISurfFlatRegion* pSfrLimit, const Vector3d& vtTool,
|
||||
const Point3d& ptDest, bool& bSafe) ;
|
||||
bool VerifyLeadInHelix( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptCen, double dHelixRad) ;
|
||||
bool VerifyLeadInZigZag( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptPa, const Point3d& ptPb) ;
|
||||
bool CalcDistanceFromRawSurface( int nPhase, const Point3d& ptP, const Vector3d& vtDir, double& dDist, Vector3d& vtNorm) ;
|
||||
// debug
|
||||
void _debug_draw_sfr( const ISurfFlatRegion* pSfr, bool bUniform) ;
|
||||
void _debug_draw_loop( const ICurveComposite* pCrvCompo, bool bUniform) ;
|
||||
|
||||
private :
|
||||
double GetSpeed( void) const
|
||||
{ return ( IsNullAngValue( m_Params.m_dSpeed) ? m_TParams.m_dSpeed : m_Params.m_dSpeed) ; }
|
||||
double GetFeed( void) const
|
||||
{ return ( IsNullLenValue( m_Params.m_dFeed) ? m_TParams.m_dFeed : m_Params.m_dFeed) ; }
|
||||
double GetStartFeed( void) const
|
||||
{ return ( IsNullLenValue( m_Params.m_dStartFeed) ? m_TParams.m_dStartFeed : m_Params.m_dStartFeed) ; }
|
||||
double GetEndFeed( void) const
|
||||
{ return ( IsNullLenValue( m_Params.m_dEndFeed) ? m_TParams.m_dEndFeed : m_Params.m_dEndFeed) ; }
|
||||
double GetTipFeed( void) const
|
||||
{ return ( IsNullLenValue( m_Params.m_dTipFeed) ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; }
|
||||
double GetOffsL( void) const
|
||||
{ return ( IsUnknownValue( m_Params.m_dOffsL) ? m_TParams.m_dOffsL : m_Params.m_dOffsL) ; }
|
||||
double GetOffsR( void) const
|
||||
{ return ( IsUnknownValue( m_Params.m_dOffsR) ? m_TParams.m_dOffsR : m_Params.m_dOffsR) ; }
|
||||
double GetSideStep( void) const
|
||||
{ return Clamp( m_Params.m_dSideStep, std::min( 0.1 * m_TParams.m_dDiam, 1.0), m_TParams.m_dDiam) ; }
|
||||
int GetLeadInType( void) const
|
||||
{ if ( m_Params.m_dLiTang < std::min( 0.1 * m_TParams.m_dDiam, 1.0))
|
||||
return POCKET_LI_NONE ;
|
||||
if ( m_Params.m_nLeadInType != POCKET_LI_GLIDE && m_Params.m_dLiElev < 10 * EPS_SMALL)
|
||||
return POCKET_LI_NONE ;
|
||||
return m_Params.m_nLeadInType ; }
|
||||
bool LeadInRawIsOk( void) const
|
||||
{ if ( m_TParams.m_nType != TT_MILL_NOTIP)
|
||||
return true ;
|
||||
return (( GetLeadInType() == POCKET_LI_ZIGZAG || GetLeadInType() == POCKET_LI_HELIX) &&
|
||||
m_Params.m_dLiTang >= 0.9 * m_TParams.m_dDiam && m_Params.m_dLiElev <= 2) ; }
|
||||
int GetLeadOutType( void) const
|
||||
{ if ( m_Params.m_dLoTang < std::min( 0.1 * m_TParams.m_dDiam, 1.0))
|
||||
return POCKET_LO_NONE ;
|
||||
return m_Params.m_nLeadOutType ; }
|
||||
|
||||
private :
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
PocketingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
double m_dTHoldBase ; // posizione base del porta-utensile
|
||||
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_bTiltingTab ; // flag utilizzo tavola basculante
|
||||
Vector3d m_vtTiltingAx ; // versore direzione eventuale asse basculante
|
||||
bool m_bAboveHead ; // flag utilizzo testa da sopra
|
||||
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
|
||||
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
|
||||
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
|
||||
bool m_bOpenOutRaw ; // flag forzatura lati aperti sempre fuori dal grezzo
|
||||
double m_dOpenMinSafe ; // minima distanza di sicurezza di attacco su lato aperto
|
||||
|
||||
bool _m_Debug = false ; // _debug
|
||||
} ;
|
||||
+21
-130
@@ -171,7 +171,7 @@ Processor::VerifySetup( void)
|
||||
string sErr = "Error with setup :" ;
|
||||
for ( const auto& sTmp : vsErr)
|
||||
sErr += " " + sTmp ;
|
||||
m_pMchMgr->SetLastError( 1002, sErr) ;
|
||||
m_pMchMgr->SetLastError( 1001, sErr) ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@ Processor::ProcessDisposition( int nOpId, int nOpInd)
|
||||
return false ;
|
||||
// Se utensile non definito o cambiato, emetto selezione nuovo utensile
|
||||
if ( m_sTool.empty() || m_sTool != m_sPrevTool) {
|
||||
if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos, false))
|
||||
if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -224,38 +224,6 @@ Processor::ProcessDisposition( int nOpId, int nOpInd)
|
||||
if ( ! OnTableData( sTable, ptOri1))
|
||||
return false ;
|
||||
|
||||
// Recupero assi tavola mossi nella disposizione
|
||||
INTVECTOR vMovAxId ;
|
||||
for ( int i = 0 ; ; ++ i) {
|
||||
string sName ;
|
||||
double dPos ;
|
||||
if ( pDisp->GetMoveAxisData( i, sName, dPos)) {
|
||||
int nAxId = m_pMachine->GetAxisId( sName) ;
|
||||
if ( nAxId != GDB_ID_NULL)
|
||||
vMovAxId.emplace_back( nAxId) ;
|
||||
}
|
||||
else
|
||||
break ;
|
||||
}
|
||||
|
||||
// Emetto posizioni assi di tavola
|
||||
INTVECTOR vAxisId ;
|
||||
m_pMachine->GetAllAxesIds( vAxisId) ;
|
||||
int nTableId = m_pMachine->GetTableId( sTable) ;
|
||||
int nInd = 0 ;
|
||||
for ( int nAxId : vAxisId) {
|
||||
string sName ;
|
||||
double dPos ;
|
||||
if ( m_pMachine->IsDispositionAxis( nAxId, nTableId) &&
|
||||
m_pMachine->GetAxisName( nAxId, sName) &&
|
||||
m_pMachine->GetAxisPos( sName, dPos)) {
|
||||
++ nInd ;
|
||||
bool bMoved = ( std::find( vMovAxId.begin(), vMovAxId.end(), nAxId) != vMovAxId.end()) ;
|
||||
if ( ! OnTableAxisData( nInd, sName, dPos, bMoved))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
|
||||
// Emetto dati bloccaggi
|
||||
for ( int i = 0 ; ; ++ i) {
|
||||
string sName ;
|
||||
@@ -263,9 +231,8 @@ Processor::ProcessDisposition( int nOpId, int nOpInd)
|
||||
Point3d ptPos ;
|
||||
double dAngDeg ;
|
||||
double dMov ;
|
||||
string sTaLink ;
|
||||
if ( pDisp->GetFixtureData( i, sName, nId, ptPos, dAngDeg, dMov, sTaLink)) {
|
||||
if ( ! OnFixtureData( nId, i + 1, sName, ptPos, dAngDeg, dMov, sTaLink))
|
||||
if ( pDisp->GetFixtureData( i, sName, nId, ptPos, dAngDeg, dMov)) {
|
||||
if ( ! OnFixtureData( nId, i + 1, sName, ptPos, dAngDeg, dMov))
|
||||
return false ;
|
||||
}
|
||||
else
|
||||
@@ -279,7 +246,7 @@ Processor::ProcessDisposition( int nOpId, int nOpInd)
|
||||
Point3d ptPos ;
|
||||
int nFlag ;
|
||||
if ( pDisp->GetMoveRawData( i, nRawId, nType, ptPos, nFlag)) {
|
||||
if ( ! OnRawMoveData( nRawId, i + 1, nType, ptPos, nFlag))
|
||||
if ( ! OnRawMoveData( nRawId, i + 1, nType, ptPos, nFlag))
|
||||
return false ;
|
||||
}
|
||||
else
|
||||
@@ -355,8 +322,7 @@ Processor::ProcessMachining( int nOpId, int nOpInd)
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sTcPos) ;
|
||||
}
|
||||
bool bFloating = m_pMachine->IsCurrToolFloating() ;
|
||||
if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos, bFloating))
|
||||
if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos))
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -420,15 +386,11 @@ Processor::ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd)
|
||||
// Recupero massima elevazione
|
||||
double dElev = 0 ;
|
||||
m_pGeomDB->GetInfo( nClPathId, KEY_ELEV, dElev) ;
|
||||
// recupero eventuale attivazione uscite (gruppi a forare)
|
||||
INTVECTOR vActiveExit ;
|
||||
m_pGeomDB->GetInfo( nClPathId, KEY_DRACEX, vActiveExit) ;
|
||||
// Recupero il numero di eventi ausiliari iniziali
|
||||
int nAS = 0 ;
|
||||
m_pGeomDB->GetInfo( nClPathId, KEY_AS_TOT, nAS) ;
|
||||
// Emetto inizio percorso di lavoro
|
||||
if ( ! OnPathStart( nClPathId, nClPathInd, nAS, ptStart, ptEnd, vtExtr,
|
||||
ptMin, ptMax, vAxMin, vAxMax, dElev, vActiveExit))
|
||||
if ( ! OnPathStart( nClPathId, nClPathInd, nAS, ptStart, ptEnd, vtExtr, ptMin, ptMax, vAxMin, vAxMax, dElev))
|
||||
return false ;
|
||||
|
||||
// Emissione eventuali dati ausiliari di inizio
|
||||
@@ -452,7 +414,7 @@ Processor::ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd)
|
||||
// processo l'entità
|
||||
if ( ! ProcessClEnt( nEntId, nEntInd, nClPathId, nClPathInd, nOpId, nOpInd))
|
||||
bOk = false ;
|
||||
// passo all'entità successiva
|
||||
// passo all'entità successivo
|
||||
nEntId = m_pGeomDB->GetNext( nEntId) ;
|
||||
}
|
||||
|
||||
@@ -487,24 +449,19 @@ Processor::ProcessClEnt( int nEntId, int nEntInd, int nClPathId, int nClPathInd,
|
||||
if ( pCamData == nullptr || pCamData->GetAxesStatus() != CamData::AS_OK)
|
||||
return false ;
|
||||
const DBLVECTOR& AxesEnd = pCamData->GetAxesVal() ;
|
||||
int nMove = pCamData->GetMoveType() ;
|
||||
// Recupero i dati Cam del movimento successivo del percorso (se esiste)
|
||||
CamData* pNextCamData = GetCamData( m_pGeomDB->GetUserObj( m_pGeomDB->GetNext( nEntId))) ;
|
||||
int nMoveNext = ( pNextCamData != nullptr ? pNextCamData->GetMoveType() : -1) ;
|
||||
DBLVECTOR AxesNull ;
|
||||
const DBLVECTOR& AxesNext = ( pNextCamData != nullptr ? pNextCamData->GetAxesVal() : AxesNull) ;
|
||||
// Emetto movimento
|
||||
int nMove = pCamData->GetMoveType() ;
|
||||
switch ( nMove) {
|
||||
case 0 : // rapido
|
||||
if ( ! OnRapid( nEntId, nEntInd, nMove, AxesEnd, pCamData->GetAxesMask(),
|
||||
pCamData->GetToolDir(), pCamData->GetCorrDir(), pCamData->GetBackAuxDir(),
|
||||
pCamData->GetFlag(), pCamData->GetFlag2(), pCamData->GetIndex(), nMoveNext, AxesNext))
|
||||
pCamData->GetFlag(), pCamData->GetFlag2(), pCamData->GetIndex()))
|
||||
return false ;
|
||||
break ;
|
||||
case 1 : // linea
|
||||
if ( ! OnLinear( nEntId, nEntInd, nMove, AxesEnd,
|
||||
pCamData->GetToolDir(), pCamData->GetCorrDir(), pCamData->GetBackAuxDir(),
|
||||
pCamData->GetFeed(), pCamData->GetFlag(), pCamData->GetFlag2(), pCamData->GetIndex(), nMoveNext, AxesNext))
|
||||
pCamData->GetFeed(), pCamData->GetFlag(), pCamData->GetFlag2(), pCamData->GetIndex()))
|
||||
return false ;
|
||||
break ;
|
||||
case 2 : // arco CW
|
||||
@@ -514,7 +471,7 @@ Processor::ProcessClEnt( int nEntId, int nEntInd, int nClPathId, int nClPathInd,
|
||||
if ( ! OnArc( nEntId, nEntInd, nMove, AxesEnd,
|
||||
pCamData->GetAxesCen(), ptMid, pCamData->GetAxesRad(), pCamData->GetAxesAngCen(),
|
||||
pCamData->GetToolDir(), pCamData->GetCorrDir(), pCamData->GetBackAuxDir(),
|
||||
pCamData->GetFeed(), pCamData->GetFlag(), pCamData->GetFlag2(), pCamData->GetIndex(), nMoveNext, AxesNext))
|
||||
pCamData->GetFeed(), pCamData->GetFlag(), pCamData->GetFlag2(), pCamData->GetIndex()))
|
||||
return false ;
|
||||
break ;
|
||||
}
|
||||
@@ -619,7 +576,7 @@ Processor::OnProgramStart( const string& sMachName, const string& sCncFile, cons
|
||||
// apro il file di output
|
||||
bool bOk = m_pMachine->WriterOpen( sCncFile) ;
|
||||
if ( ! bOk)
|
||||
m_pMchMgr->SetLastError( 1003, "Error opening Cnc file") ;
|
||||
m_pMchMgr->SetLastError( 1002, "Error opening Cnc file") ;
|
||||
// assegno nome macchina
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MACHNAME, sMachName) ;
|
||||
// assegno nome file
|
||||
@@ -844,24 +801,10 @@ Processor::OnTableData( const string& sName, const Point3d& ptOri1)
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Processor::OnTableAxisData( int nAxisInd, const string& sName, double dPos, bool bMoved)
|
||||
{
|
||||
// assegno dati movimento asse di tavola
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TAIND, nAxisInd) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TANAME, sName) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TAPOS, dPos) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TAMOVED, bMoved) ;
|
||||
// chiamo la funzione di gestione dati movimento asse di tavola
|
||||
bOk = bOk && CallOnTableAxisData() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Processor::OnFixtureData( int nFixId, int nFixInd, const string& sName, const Point3d& ptPos,
|
||||
double dAngDeg, double dMov, const string& sTaLink)
|
||||
double dAngDeg, double dMov)
|
||||
{
|
||||
// assegno dati bloccaggio
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXID, nFixId) ;
|
||||
@@ -870,10 +813,6 @@ Processor::OnFixtureData( int nFixId, int nFixInd, const string& sName, const Po
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXPOS, ptPos) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXANG, dAngDeg) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXMOB, dMov) ;
|
||||
if ( ! IsEmptyOrSpaces( sTaLink))
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXTAL, sTaLink) ;
|
||||
else
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_FIXTAL) ;
|
||||
// chiamo la funzione di gestione dati bloccaggio
|
||||
bOk = bOk && CallOnFixtureData() ;
|
||||
return bOk ;
|
||||
@@ -881,11 +820,11 @@ Processor::OnFixtureData( int nFixId, int nFixInd, const string& sName, const Po
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Processor::OnRawMoveData( int nRawId, int nRawMoveInd, int nType, const Point3d& ptPos, int nFlag)
|
||||
Processor::OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag)
|
||||
{
|
||||
// assegno dati bloccaggio
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWID, nRawId) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWIND, nRawMoveInd) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWIND, RawMoveInd) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWTYPE, nType) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWPOS, ptPos) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWFLAG, nFlag) ;
|
||||
@@ -896,14 +835,13 @@ Processor::OnRawMoveData( int nRawId, int nRawMoveInd, int nType, const Point3d&
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Processor::OnToolSelect( const string& sTool, const string& sHead, int nExit, const string& sTcPos, bool bFloating)
|
||||
Processor::OnToolSelect( const string& sTool, const string& sHead, int nExit, const string& sTcPos)
|
||||
{
|
||||
// assegno il nome dell'utensile, la testa, l'uscita e l'eventuale posizione nel toolchanger
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, sTool) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, sHead) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, nExit) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCPOS, sTcPos) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TFLOAT, bFloating) ;
|
||||
// assegno il token e il nome degli assi
|
||||
bool bIsRobot = m_pMchMgr->GetCurrIsRobot() ;
|
||||
int nNumAxes = int( m_AxesName.size()) ;
|
||||
@@ -973,7 +911,7 @@ Processor::OnMachiningEnd( void)
|
||||
bool
|
||||
Processor::OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev, const INTVECTOR& vActiveExit)
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev)
|
||||
{
|
||||
// assegno identificativo e indice percorso di lavorazione
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PATHID, nClPathId) ;
|
||||
@@ -992,8 +930,6 @@ Processor::OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& p
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PAXMAX, vAxMax) ;
|
||||
// assegno la massima elevazione
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_ELEV, dElev) ;
|
||||
// assegno uscite attive per gruppi a forare
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_DRACEX, vActiveExit) ;
|
||||
// chiamo la funzione di inizio percorso di lavorazione
|
||||
bOk = bOk && CallOnPathStart() ;
|
||||
return bOk ;
|
||||
@@ -1038,7 +974,7 @@ Processor::OnPathEndAux( int nInd, const string& sAE)
|
||||
bool
|
||||
Processor::OnRapid( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd, int nAxesMask,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, const Vector3d& vtAux,
|
||||
int nFlag, int nFlag2, int nIndex, int nMoveNext, const DBLVECTOR& AxesNext)
|
||||
int nFlag, int nFlag2, int nIndex)
|
||||
{
|
||||
// cancello variabili estranee
|
||||
ResetArcData() ;
|
||||
@@ -1070,21 +1006,6 @@ Processor::OnRapid( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG2, nFlag2) ;
|
||||
// assegno il valore dell'indice
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_INDEX, nIndex) ;
|
||||
// anticipazione di alcuni dati dell'eventuale movimento successivo dello stesso percorso
|
||||
if ( nMoveNext != -1) {
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVESUCC, nMoveNext) ;
|
||||
for ( int i = 1 ; i <= MAX_AXES ; ++ i) {
|
||||
if ( i <= nNumAxes)
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot), AxesNext[i-1]) ;
|
||||
else
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot)) ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_MOVESUCC) ;
|
||||
for ( int i = 1 ; i <= MAX_AXES ; ++ i)
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot)) ;
|
||||
}
|
||||
// chiamo la funzione di movimento in rapido
|
||||
bOk = bOk && CallOnRapid() ;
|
||||
return bOk ;
|
||||
@@ -1094,7 +1015,7 @@ Processor::OnRapid( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd
|
||||
bool
|
||||
Processor::OnLinear( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, const Vector3d& vtAux,
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex, int nMoveNext, const DBLVECTOR& AxesNext)
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex)
|
||||
{
|
||||
// cancello variabili estranee
|
||||
ResetArcData() ;
|
||||
@@ -1126,21 +1047,6 @@ Processor::OnLinear( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEn
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG2, nFlag2) ;
|
||||
// assegno il valore dell'indice
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_INDEX, nIndex) ;
|
||||
// anticipazione di alcuni dati dell'eventuale movimento successivo dello stesso percorso
|
||||
if ( nMoveNext != -1) {
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVESUCC, nMoveNext) ;
|
||||
for ( int i = 1 ; i <= MAX_AXES ; ++ i) {
|
||||
if ( i <= nNumAxes)
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot), AxesNext[i-1]) ;
|
||||
else
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot)) ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_MOVESUCC) ;
|
||||
for ( int i = 1 ; i <= MAX_AXES ; ++ i)
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot)) ;
|
||||
}
|
||||
// chiamo la funzione di movimento in rapido
|
||||
bOk = bOk && CallOnLinear() ;
|
||||
return bOk ;
|
||||
@@ -1151,7 +1057,7 @@ bool
|
||||
Processor::OnArc( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd,
|
||||
const Point3d& ptCen, const Point3d& ptMid, double dRad, double dAngCen,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, const Vector3d& vtAux,
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex, int nMoveNext, const DBLVECTOR& AxesNext)
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex)
|
||||
{
|
||||
// assegno Id e indice entità di movimento
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVEID, nEntId) ;
|
||||
@@ -1193,21 +1099,6 @@ Processor::OnArc( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd,
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG2, nFlag2) ;
|
||||
// assegno il valore dell'indice
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_INDEX, nIndex) ;
|
||||
// anticipazione di alcuni dati dell'eventuale movimento successivo dello stesso percorso
|
||||
if ( nMoveNext != -1) {
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVESUCC, nMoveNext) ;
|
||||
for ( int i = 1 ; i <= MAX_AXES ; ++ i) {
|
||||
if ( i <= nNumAxes)
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot), AxesNext[i-1]) ;
|
||||
else
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot)) ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_MOVESUCC) ;
|
||||
for ( int i = 1 ; i <= MAX_AXES ; ++ i)
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisNext( i, GLOB_VAR, bIsRobot)) ;
|
||||
}
|
||||
// chiamo la funzione di movimento in rapido
|
||||
bOk = bOk && CallOnArc() ;
|
||||
return bOk ;
|
||||
|
||||
+7
-9
@@ -42,34 +42,33 @@ class Processor
|
||||
bool OnProgramStart( const std::string& sMachName, const std::string& sCncFile, const std::string& sInfo, bool bSetup) ;
|
||||
bool OnProgramEnd( void) ;
|
||||
bool ProcessToolData( void) ;
|
||||
bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos, bool bFloating) ;
|
||||
bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos) ;
|
||||
bool OnToolDeselect( const std::string& sNextTool, const std::string& sNextHead, int nNextExit, const std::string& sNextTcPos) ;
|
||||
bool OnDispositionStart( int nOpId, int nOpInd, int nPhase, bool bEmpty, bool bSomeByHand) ;
|
||||
bool OnDispositionEnd( void) ;
|
||||
bool OnTableData( const std::string& sName, const Point3d& ptOri1) ;
|
||||
bool OnTableAxisData( int nAxisInd, const std::string& sName, double dPos, bool bMoved) ;
|
||||
bool OnFixtureData( int nFixId, int nFixInd, const std::string& sName,
|
||||
const Point3d& ptPos, double dAngDeg, double dMov, const std::string& sTaLink) ;
|
||||
bool OnRawMoveData( int nRawId, int nRawMoveInd, int nType, const Point3d& ptPos, int nFlag) ;
|
||||
const Point3d& ptPos, double dAngDeg, double dMov) ;
|
||||
bool OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag) ;
|
||||
bool OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax) ;
|
||||
bool OnMachiningEnd( void) ;
|
||||
bool OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev, const INTVECTOR& vActiveExit) ;
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev) ;
|
||||
bool OnPathEnd( int nAE) ;
|
||||
bool OnPathStartAux( int nInd, const std::string& sAS) ;
|
||||
bool OnPathEndAux( int nInd, const std::string& sAE) ;
|
||||
bool OnRapid( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd, int nAxesMask,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, const Vector3d& vtAux,
|
||||
int nFlag, int nFlag2, int nIndex, int nMoveNext, const DBLVECTOR& AxesNext) ;
|
||||
int nFlag, int nFlag2, int nIndex) ;
|
||||
bool OnLinear( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, const Vector3d& vtAux,
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex, int nMoveNext, const DBLVECTOR& AxesNext) ;
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex) ;
|
||||
bool OnArc( int nEntId, int nEntInd, int nMove, const DBLVECTOR& AxesEnd,
|
||||
const Point3d& ptCen, const Point3d& ptMid, double dRad, double dAngCen,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, const Vector3d& vtAux,
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex, int nMoveNext, const DBLVECTOR& AxesNext) ;
|
||||
double dFeed, int nFlag, int nFlag2, int nIndex) ;
|
||||
bool ResetArcData( void) ;
|
||||
|
||||
protected :
|
||||
@@ -81,7 +80,6 @@ class Processor
|
||||
virtual bool CallOnDispositionStart( void) = 0 ;
|
||||
virtual bool CallOnDispositionEnd( void) = 0 ;
|
||||
virtual bool CallOnTableData( void) = 0 ;
|
||||
virtual bool CallOnTableAxisData( void) = 0 ;
|
||||
virtual bool CallOnFixtureData( void) = 0 ;
|
||||
virtual bool CallOnRawMoveData( void) = 0 ;
|
||||
virtual bool CallOnToolSelect( void) = 0 ;
|
||||
|
||||
+20
-24
@@ -498,15 +498,13 @@ SawFinishing::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || m_nStatus == MCH_ST_NO_POSTAPPL)) {
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
// confermo i percorsi di lavorazione
|
||||
m_nCuts = nCurrCuts ;
|
||||
string sLog = string( "SawFinishing apply skipped : status ") + ( m_nStatus == MCH_ST_OK ? "already ok" : "no postapply") ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), sLog.c_str()) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "SawFinishing apply skipped : status already ok") ;
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Update done") ;
|
||||
// esco con successo
|
||||
return true ;
|
||||
@@ -796,14 +794,10 @@ SawFinishing::UpdateToolData( bool* pbChanged)
|
||||
ToolsMgr* pTMgr = m_pMchMgr->GetCurrToolsMgr() ;
|
||||
if ( pTMgr == nullptr)
|
||||
return false ;
|
||||
// recupero l'utensile nel DB utensili (se fallisce con UUID provo con il nome)
|
||||
// recupero l'utensile nel DB utensili
|
||||
const ToolData* pTdata = pTMgr->GetTool( m_Params.m_ToolUuid) ;
|
||||
if ( pTdata == nullptr) {
|
||||
pTdata = pTMgr->GetTool( m_Params.m_sToolName) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
m_Params.m_ToolUuid = m_TParams.m_Uuid ;
|
||||
}
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
// salvo posizione TC, testa e uscita originali
|
||||
string sOrigTcPos = m_TParams.m_sTcPos ;
|
||||
string sOrigHead = m_TParams.m_sHead ;
|
||||
@@ -1331,7 +1325,7 @@ SawFinishing::CalculateStraightAcrossToolPath( int nAuxId, int nClId)
|
||||
// se ZigZag aggiungo risalita
|
||||
if ( m_Params.m_nStepType == SAWFIN_ST_ZIGZAG) {
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// aggiungo retrazione
|
||||
@@ -1652,7 +1646,7 @@ SawFinishing::CalculateCurvedAcrossToolPath( int nAuxId, int nClId)
|
||||
double dEndElev = 0 ;
|
||||
GetElevation( m_nPhase, ptPrev, vtPrev, dEndElev) ;
|
||||
// aggiungo retrazione
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
if ( ! AddRetract( ptPrev, vtPrev, dSafeZ, dEndElev, dAppr))
|
||||
return false ;
|
||||
@@ -1676,7 +1670,7 @@ SawFinishing::CalculateCurvedAcrossToolPath( int nAuxId, int nClId)
|
||||
// se ZigZag aggiungo risalita
|
||||
if ( m_Params.m_nStepType == SAWFIN_ST_ZIGZAG) {
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// recupero punto e versore correzione finali
|
||||
@@ -1886,6 +1880,7 @@ SawFinishing::ClassifySection( ICurve* pCrv, INTVECTOR& vnClass)
|
||||
{
|
||||
const ICurveComposite* pCompo = GetCurveComposite( pCrv) ;
|
||||
if ( pCompo != nullptr) {
|
||||
int Ind = 0 ;
|
||||
const ICurve* pSimpCrv = pCompo->GetFirstCurve() ;
|
||||
while ( pSimpCrv != nullptr) {
|
||||
// analizzo la curva
|
||||
@@ -1903,6 +1898,7 @@ SawFinishing::ClassifySection( ICurve* pCrv, INTVECTOR& vnClass)
|
||||
else
|
||||
vnClass.push_back( CCL_FALL) ;
|
||||
// passo alla curva successiva
|
||||
++ Ind ;
|
||||
pSimpCrv = pCompo->GetNextCurve() ;
|
||||
}
|
||||
}
|
||||
@@ -1995,7 +1991,7 @@ SawFinishing::CalcAlongVerticalCuts( ICurve* pSect, int nUmin, int nUmax, const
|
||||
// se ZigZag e non centrato aggiungo risalita
|
||||
if ( m_Params.m_nStepType == SAWFIN_ST_ZIGZAG && m_Params.m_nLeadLinkType != SAWFIN_LL_CENT) {
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// aggiungo retrazione
|
||||
@@ -2082,7 +2078,7 @@ SawFinishing::CalcAlongStdCuts( ICurve* pSect, double dUmin, double dUmax,
|
||||
// se ZigZag e non centrato aggiungo risalita
|
||||
if ( m_Params.m_nStepType == SAWFIN_ST_ZIGZAG && m_Params.m_nLeadLinkType != SAWFIN_LL_CENT) {
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// aggiungo retrazione
|
||||
@@ -2100,7 +2096,7 @@ SawFinishing::CalcAlongOneWayCut( const Point3d& ptStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, double dElev, bool bVert)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -2149,7 +2145,7 @@ SawFinishing::CalcAlongZigZagCut( const Point3d& ptStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, double dElev, bool bVert, bool bFirst)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -2266,7 +2262,7 @@ SawFinishing::CalcAcrossOneWayCut( const PolyLine& PL, const Vector3d& vtMove,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, double dRawZ, double dDepth)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -2323,7 +2319,7 @@ SawFinishing::CalcAcrossZigZagCut( const PolyLine& PL, const Vector3d& vtMove,
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, double dRawZ, double dDepth, bool bFirst)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -2431,7 +2427,7 @@ SawFinishing::CalcCurvedAlongVerticalCuts( ICurve* pSect, int nUmin, int nUmax,
|
||||
// se ZigZag e non centrato aggiungo risalita
|
||||
if ( m_Params.m_nStepType == SAWFIN_ST_ZIGZAG && m_Params.m_nLeadLinkType != SAWFIN_LL_CENT) {
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// aggiungo retrazione
|
||||
@@ -2506,7 +2502,7 @@ SawFinishing::CalcCurvedAlongStdCuts( ICurve* pSect, double dUmin, double dUmax,
|
||||
// se ZigZag e non centrato aggiungo risalita
|
||||
if ( m_Params.m_nStepType == SAWFIN_ST_ZIGZAG && m_Params.m_nLeadLinkType != SAWFIN_LL_CENT) {
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// aggiungo retrazione
|
||||
@@ -2524,7 +2520,7 @@ bool
|
||||
SawFinishing::CalcCurvedAlongZigZagCut( const ICurve* pCut, const Vector3d& vtTool, bool bVert, bool bFirst, double& dEndElev)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// verifico se passata da invertire (indice dispari)
|
||||
@@ -2700,7 +2696,7 @@ SawFinishing::CalcCurvedAcrossZigZagCut( const PolyLine& PL, const Vector3d& vtM
|
||||
bool bFirst, bool bCorner)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
|
||||
+8
-14
@@ -481,15 +481,13 @@ SawRoughing::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || m_nStatus == MCH_ST_NO_POSTAPPL)) {
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
// confermo i percorsi di lavorazione
|
||||
m_nCuts = nCurrCuts ;
|
||||
string sLog = string( "SawRoughing apply skipped : status ") + ( m_nStatus == MCH_ST_OK ? "already ok" : "no postapply") ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), sLog.c_str()) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "SawRoughing apply skipped : status already ok") ;
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Update done") ;
|
||||
// esco con successo
|
||||
return true ;
|
||||
@@ -754,14 +752,10 @@ SawRoughing::UpdateToolData( bool* pbChanged)
|
||||
ToolsMgr* pTMgr = m_pMchMgr->GetCurrToolsMgr() ;
|
||||
if ( pTMgr == nullptr)
|
||||
return false ;
|
||||
// recupero l'utensile nel DB utensili (se fallisce con UUID provo con il nome)
|
||||
// recupero l'utensile nel DB utensili
|
||||
const ToolData* pTdata = pTMgr->GetTool( m_Params.m_ToolUuid) ;
|
||||
if ( pTdata == nullptr) {
|
||||
pTdata = pTMgr->GetTool( m_Params.m_sToolName) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
m_Params.m_ToolUuid = m_TParams.m_Uuid ;
|
||||
}
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
// salvo posizione TC, testa e uscita originali
|
||||
string sOrigTcPos = m_TParams.m_sTcPos ;
|
||||
string sOrigHead = m_TParams.m_sHead ;
|
||||
@@ -1566,7 +1560,7 @@ SawRoughing::CalculateOneWayCut( const Point3d& ptStart, const Point3d& ptEnd, c
|
||||
const Vector3d& vtTool, const Vector3d& vtCorr, double dElev, bool bFirst, bool bLast)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -1660,7 +1654,7 @@ SawRoughing::CalculateZigZagCut( const Point3d& ptStart, const Point3d& ptEnd, c
|
||||
int& nCount)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -1871,7 +1865,7 @@ SawRoughing::CalculateCurvedZigZagCut( const ICurve* pCut, const Vector3d& vtToo
|
||||
int& nCount)
|
||||
{
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// verifico se passata da invertire (indice dispari)
|
||||
|
||||
+39
-72
@@ -16,7 +16,6 @@
|
||||
#include "MachMgr.h"
|
||||
#include "DllMain.h"
|
||||
#include "Sawing.h"
|
||||
#include "GeoConst.h"
|
||||
#include "OperationConst.h"
|
||||
#include "/EgtDev/Include/EXeCmdLogOff.h"
|
||||
#include "/EgtDev/Include/EXeConst.h"
|
||||
@@ -99,7 +98,6 @@ Sawing::Clone( void) const
|
||||
pSaw->m_nPhase = m_nPhase ;
|
||||
pSaw->m_Params = m_Params ;
|
||||
pSaw->m_TParams = m_TParams ;
|
||||
pSaw->m_bDownSE = m_bDownSE ;
|
||||
pSaw->m_nStatus = m_nStatus ;
|
||||
pSaw->m_nCuts = m_nCuts ;
|
||||
}
|
||||
@@ -213,7 +211,6 @@ Sawing::Sawing( void)
|
||||
m_Params.m_sToolName = "*" ;
|
||||
m_TParams.m_sName = "*" ;
|
||||
m_TParams.m_sHead = "*" ;
|
||||
m_bDownSE = false ;
|
||||
m_nStatus = MCH_ST_TO_VERIFY ;
|
||||
m_nCuts = 0 ;
|
||||
}
|
||||
@@ -649,15 +646,13 @@ Sawing::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || m_nStatus == MCH_ST_NO_POSTAPPL)) {
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
// confermo i percorsi di lavorazione
|
||||
m_nCuts = nCurrCuts ;
|
||||
string sLog = string( "Sawing apply skipped : status ") + ( m_nStatus == MCH_ST_OK ? "already ok" : "no postapply") ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), sLog.c_str()) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Sawing apply skipped : status already ok") ;
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Update done") ;
|
||||
// esco con successo
|
||||
return true ;
|
||||
@@ -692,11 +687,6 @@ Sawing::Apply( bool bRecalc, bool bPostApply)
|
||||
if ( ! VerifySideAngle())
|
||||
return false ;
|
||||
|
||||
// verifiche per attacchi/uscite senza approcci e retrazioni
|
||||
int nDownSE = 0 ;
|
||||
GetValInNotes( m_Params.m_sUserNotes, "DownSE", nDownSE) ;
|
||||
m_bDownSE = ( nDownSE != 0 && m_Params.m_nStepType == SAW_ST_TOANDFROM) ;
|
||||
|
||||
// recupero gruppo per geometria di lavorazione (Cutter Location)
|
||||
int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ;
|
||||
// se non c'è, lo aggiungo
|
||||
@@ -1255,7 +1245,7 @@ Sawing::GetCurve( SelData Id)
|
||||
pCrvCompo->ToGlob( frGlob) ;
|
||||
vtN.ToGlob( frGlob) ;
|
||||
// sistemazioni varie
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, V_NULL, 0, 1) ;
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, 0, 1) ;
|
||||
// aggiusto lato lavoro e inverti, angolo di fianco e lato mandrino
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_CENTER)
|
||||
m_Params.m_nWorkSide = SAW_WS_RIGHT ;
|
||||
@@ -1304,7 +1294,7 @@ Sawing::GetCurve( SelData Id)
|
||||
pCrvCompo->ToGlob( frGlob) ;
|
||||
vtN.ToGlob( frGlob) ;
|
||||
// sistemazioni varie
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, V_NULL, 0, 1) ;
|
||||
AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, 0, 1) ;
|
||||
// aggiusto lato lavoro e inverti, angolo di fianco e lato mandrino
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_CENTER)
|
||||
m_Params.m_nWorkSide = SAW_WS_RIGHT ;
|
||||
@@ -1868,10 +1858,10 @@ Sawing::ProcessLine( const ICurve* pCrvP, const ICurveLine* pLineC, const ICurve
|
||||
if ( ! sFsta.empty()) {
|
||||
string sLen, sPu ;
|
||||
SplitFirst( sFsta, ",", sLen, sPu) ;
|
||||
if ( FromString( sLen, FvVar.dLenStart))
|
||||
FvVar.dLenStart = max( FvVar.dLenStart, 0.) ;
|
||||
if ( FromString( sPu, FvVar.dPuStart))
|
||||
FvVar.dPuStart = max( FvVar.dPuStart, 0.) ;
|
||||
FromString( sLen, FvVar.dLenStart) ;
|
||||
FvVar.dLenStart = max( FvVar.dLenStart, 0.) ;
|
||||
FromString( sPu, FvVar.dPuStart) ;
|
||||
FvVar.dPuStart = max( FvVar.dPuStart, 0.) ;
|
||||
}
|
||||
}
|
||||
if ( pCrvN == nullptr) {
|
||||
@@ -1879,20 +1869,20 @@ Sawing::ProcessLine( const ICurve* pCrvP, const ICurveLine* pLineC, const ICurve
|
||||
if ( ! sFend.empty()) {
|
||||
string sLen, sPu ;
|
||||
SplitFirst( sFend, ",", sLen, sPu) ;
|
||||
if ( FromString( sLen, FvVar.dLenEnd))
|
||||
FvVar.dLenEnd = max( FvVar.dLenEnd, 0.) ;
|
||||
if ( FromString( sPu, FvVar.dPuEnd))
|
||||
FvVar.dPuEnd = max( FvVar.dPuEnd, 0.) ;
|
||||
FromString( sLen, FvVar.dLenEnd) ;
|
||||
FvVar.dLenEnd = max( FvVar.dLenEnd, 0.) ;
|
||||
FromString( sPu, FvVar.dPuEnd) ;
|
||||
FvVar.dPuEnd = max( FvVar.dPuEnd, 0.) ;
|
||||
}
|
||||
}
|
||||
|
||||
// recupero eventuali estensioni dei baffi (whiskers)
|
||||
double dStartWhiskExt = 0 ;
|
||||
if ( m_Params.m_nLeadInType == SAW_LI_CENT)
|
||||
GetValInNotes( m_Params.m_sUserNotes, "SWE", dStartWhiskExt) ;
|
||||
FromString( ExtractInfo( m_Params.m_sUserNotes, "SWE="), dStartWhiskExt) ;
|
||||
double dEndWhiskExt = 0 ;
|
||||
if ( m_Params.m_nLeadOutType == SAW_LO_CENT)
|
||||
GetValInNotes( m_Params.m_sUserNotes, "EWE", dEndWhiskExt) ;
|
||||
FromString( ExtractInfo( m_Params.m_sUserNotes, "EWE="), dEndWhiskExt) ;
|
||||
|
||||
// Se richiesto Preview
|
||||
if ( nPvId != GDB_ID_NULL) {
|
||||
@@ -1972,7 +1962,7 @@ Sawing::GenerateLinePv( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
m_pGeomDB->SetMaterial( nId3, BLUE) ;
|
||||
|
||||
// valore di allungamento
|
||||
double dExtraL = GetExtraLOnCutRegion() ;
|
||||
double dExtraL = m_pMchMgr->GetCurrMachiningsMgr()->GetExtraLOnCutRegion() ;
|
||||
|
||||
// punti notevoli per regioni
|
||||
Point3d ptRIni = ptIni ;
|
||||
@@ -2122,7 +2112,7 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
SetToolDir( vtTool) ;
|
||||
SetCorrAuxDir( vtCorr) ;
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// distanza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
// flag di taglio inclinato
|
||||
@@ -2138,14 +2128,12 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
}
|
||||
if ( dActBstep < EPS_SMALL)
|
||||
dActBstep = dActStep ;
|
||||
double dActLstep = GetStepLast() ;
|
||||
// direzione della linea
|
||||
Vector3d vtDir ; pLine->GetStartDir( vtDir) ;
|
||||
|
||||
// Se una sola passata
|
||||
if ( m_Params.m_nStepType != SAW_ST_TOANDFROM &&
|
||||
( dActStep < EPS_SMALL || ( dElev - dExtraCut) <= dActStep ||
|
||||
( ! bSideAng && dActLstep > EPS_SMALL && ( dElev - dExtraCut) <= dActLstep))) {
|
||||
if ( dActStep < EPS_SMALL || ( dElev - dExtraCut) <= dActStep ||
|
||||
( ! bSideAng && m_Params.m_dStepLast > EPS_SMALL && ( dElev - dExtraCut) <= m_Params.m_dStepLast)) {
|
||||
// 1 -> approccio
|
||||
Point3d ptP1 = pLine->GetStart() - vtDir * m_Params.m_dLiTang ;
|
||||
if ( ! AddApproach( ptP1, vtCorr, dSafeZ, dElev, dAppr))
|
||||
@@ -2242,17 +2230,11 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
int nStep = 2 ;
|
||||
if ( m_Params.m_nStepType == SAW_ST_ZIGZAG)
|
||||
nStep = 2 * static_cast<int>( ceil( dCutH / ( dActStep + dActBstep + EPS_SMALL))) ;
|
||||
else {
|
||||
if ( dActStep < EPS_SMALL)
|
||||
dActStep = dCutH / nStep ;
|
||||
if ( dActBstep < EPS_SMALL)
|
||||
dActBstep = dCutH / nStep ;
|
||||
}
|
||||
double dMeanStep = dCutH / nStep ;
|
||||
double dBstep = dActBstep * 2 * dMeanStep / ( dActStep + dActBstep) ;
|
||||
double dLastStep = dBstep ;
|
||||
if ( ! bSideAng && dActLstep > EPS_SMALL) {
|
||||
dLastStep = dActLstep ;
|
||||
if ( ! bSideAng && m_Params.m_dStepLast > EPS_SMALL) {
|
||||
dLastStep = m_Params.m_dStepLast ;
|
||||
double dCoeff = ( dCutH - dLastStep) / ( nStep / 2 * dActStep + ( nStep / 2 - 1) * dActBstep) ;
|
||||
dMeanStep = dCoeff * ( dActStep + dActBstep) / 2 ;
|
||||
dBstep = dCoeff * dActBstep ;
|
||||
@@ -2294,8 +2276,8 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
int nStep = static_cast<int>( ceil( dCutH / ( dActStep + EPS_SMALL))) ;
|
||||
double dStep = dCutH / nStep ;
|
||||
double dLastStep = dStep ;
|
||||
if ( ! bSideAng && dActLstep > EPS_SMALL) {
|
||||
dLastStep = dActLstep ;
|
||||
if ( ! bSideAng && m_Params.m_dStepLast > EPS_SMALL) {
|
||||
dLastStep = m_Params.m_dStepLast ;
|
||||
nStep = static_cast<int>( ceil( ( dCutH - dLastStep) / ( dActStep + EPS_SMALL))) + 1 ;
|
||||
dStep = ( dCutH - dLastStep) / ( nStep - 1) ;
|
||||
}
|
||||
@@ -2321,9 +2303,10 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
Point3d ptP4 = pLine->GetEnd() + vtCorr * ( dElev + dAppr / vtCorr.z) ;
|
||||
if ( AddLinearMove( ptP4) == GDB_ID_NULL)
|
||||
return false ;
|
||||
// movimento di ritorno in rapido sopra il punto iniziale
|
||||
// movimento di ritorno spora il punto iniziale
|
||||
SetFeed( GetEndFeed()) ;
|
||||
Point3d ptP5 = pLine->GetStart() + vtCorr * ( dElev + dAppr / vtCorr.z) ;
|
||||
if ( AddRapidMove( ptP5) == GDB_ID_NULL)
|
||||
if ( AddLinearMove( ptP5) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -2356,7 +2339,7 @@ Sawing::ProcessExtCurve( const ICurve* pCrvP, const ICurveComposite* pCrvC, cons
|
||||
dMinRad = dRad ;
|
||||
}
|
||||
}
|
||||
if ( dMinRad < GetExtSawArcMinRad()) {
|
||||
if ( dMinRad < m_pMchMgr->GetCurrMachiningsMgr()->GetExtSawArcMinRad()) {
|
||||
m_pMchMgr->SetWarning( 2258, "Warning in Sawing : Radius too small in ExtSawArc") ;
|
||||
return true ;
|
||||
}
|
||||
@@ -2510,7 +2493,7 @@ Sawing::GenerateExtCurvePv( const ICurveComposite* pCrv, double dOffs,
|
||||
colCut = FUCHSIA ;
|
||||
|
||||
// dimensione da aggiungere alle regioni nelle parti in cui la lama è inclinata
|
||||
double dExtraL = GetExtraLOnCutRegion() ;
|
||||
double dExtraL = m_pMchMgr->GetCurrMachiningsMgr()->GetExtraLOnCutRegion() ;
|
||||
|
||||
// lunghezza taglio parziale
|
||||
double dDeltaT = (( dElev < 0.5 * m_TParams.m_dDiam) ? sqrt( dElev * m_TParams.m_dDiam - dElev * dElev) : 0) ;
|
||||
@@ -2882,7 +2865,7 @@ Sawing::GenerateExtCurveCl( const ICurveComposite* pCrv,
|
||||
SetPathId( nPxId) ;
|
||||
SetCorrAuxDir( vtStaCorr) ;
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -3142,7 +3125,7 @@ Sawing::ProcessIntArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
if ( IsNull( pArc))
|
||||
return false ;
|
||||
// determino l'inclinazione per ottenere il raggio e ne verifico il limite
|
||||
double dMaxSideAng = GetIntSawArcMaxSideAng() + EPS_ANG_SMALL ;
|
||||
double dMaxSideAng = m_pMchMgr->GetCurrMachiningsMgr()->GetIntSawArcMaxSideAng()+ EPS_ANG_SMALL ;
|
||||
double dSawRad = m_TParams.m_dDiam / 2 ;
|
||||
double dRad = pArc->GetRadius() ;
|
||||
double dSinA = dSawRad / dRad ;
|
||||
@@ -3331,7 +3314,7 @@ Sawing::GenerateIntArcPv( const ICurveArc* pArc,
|
||||
m_pGeomDB->SetMaterial( nId3, BLUE) ;
|
||||
|
||||
// dimensione da aggiungere alle regioni nelle parti in cui la lama è inclinata
|
||||
double dExtraL = GetExtraLOnCutRegion() ;
|
||||
double dExtraL = m_pMchMgr->GetCurrMachiningsMgr()->GetExtraLOnCutRegion() ;
|
||||
|
||||
// regione ridotta di taglio per nesting (escluse parti iniziali e finali)
|
||||
PtrOwner<ICurveComposite> pCmpRr( GenerateIntArcPvTrueCut( pArc, dDeltaInt, dDeltaExt, dExtraL)) ;
|
||||
@@ -3589,7 +3572,7 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc,
|
||||
// Imposto dati comuni
|
||||
SetPathId( nPxId) ;
|
||||
// recupero distanza di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
// lunghezza di approccio/retrazione
|
||||
double dAppr = m_Params.m_dStartPos ;
|
||||
|
||||
@@ -3838,16 +3821,8 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc,
|
||||
bool
|
||||
Sawing::AddApproach( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ, double dElev, double dAppr)
|
||||
{
|
||||
// se abilitato approccio diretto fuori dal grezzo (solo per lavorazione ToAndFrom)
|
||||
if ( m_bDownSE) {
|
||||
// 1 -> punto sopra inizio
|
||||
SetFlag( 1) ;
|
||||
Point3d ptP1 = ptP + vtCorr * ( dElev / 2 + dAppr / vtCorr.z) ;
|
||||
if ( AddRapidStart( ptP1) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// se distanza di sicurezza minore di distanza di inizio
|
||||
else if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) {
|
||||
// se distanza di sicurezza minore di distanza di inizio
|
||||
if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) {
|
||||
// 1 -> punto sopra inizio
|
||||
SetFlag( 1) ;
|
||||
Point3d ptP1 = ptP + vtCorr * ( dElev + dAppr / vtCorr.z) ;
|
||||
@@ -3873,15 +3848,7 @@ Sawing::AddApproach( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ,
|
||||
bool
|
||||
Sawing::AddRetract( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ, double dElev, double dAppr)
|
||||
{
|
||||
// se abilitato retrazione diretta fuori dal grezzo (solo per lavorazione ToAndFrom)
|
||||
if ( m_bDownSE) {
|
||||
// 4 -> movimento di risalita sopra il punto finale
|
||||
SetFeed( GetEndFeed()) ;
|
||||
Point3d ptP4 = ptP + vtCorr * ( dElev / 2 + dAppr / vtCorr.z) ;
|
||||
if ( AddRapidMove( ptP4) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
else if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) {
|
||||
if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) {
|
||||
// 4 -> movimento di risalita sopra il punto finale
|
||||
SetFeed( GetEndFeed()) ;
|
||||
Point3d ptP4 = ptP + vtCorr * ( dElev + dAppr / vtCorr.z) ;
|
||||
@@ -3996,7 +3963,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC
|
||||
bool& bToSkip, double& dDeltaLiExt, double& dDeltaLoExt)
|
||||
{
|
||||
// distanza XY tra centro e bordo taglio
|
||||
double dDeltaT = (( dElev < 0.5 * m_TParams.m_dDiam) ? sqrt( dElev * m_TParams.m_dDiam - dElev * dElev) : 0.5 * m_TParams.m_dDiam) ;
|
||||
double dDeltaT = (( dElev < 0.5 * m_TParams.m_dDiam) ? sqrt( dElev * m_TParams.m_dDiam - dElev * dElev) : 0) ;
|
||||
// lunghezza aggiuntiva per attacco speciale a zigzag
|
||||
double dDeltaLi = 0 ;
|
||||
if ( dLiElev > EPS_SMALL)
|
||||
@@ -4032,7 +3999,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC
|
||||
for ( int i = 0 ; i < 4 ; ++i)
|
||||
dDeltaI = max( dDeltaI, dDist[i]) ;
|
||||
if ( m_Params.m_nLeadInType == SAW_LI_EXT_OUT)
|
||||
dDeltaI += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ;
|
||||
dDeltaI += dDeltaT ;
|
||||
dDeltaLiExt = dDeltaI ;
|
||||
}
|
||||
}
|
||||
@@ -4056,7 +4023,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC
|
||||
for ( int i = 0 ; i < 4 ; ++i)
|
||||
dDeltaI = max( dDeltaI, dDist[i]) ;
|
||||
if ( m_Params.m_nLeadInType == SAW_LI_EXT_OUT)
|
||||
dDeltaI += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ;
|
||||
dDeltaI += dDeltaT ;
|
||||
dDeltaLiExt = dDeltaI ;
|
||||
}
|
||||
}
|
||||
@@ -4091,7 +4058,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC
|
||||
for ( int i = 0 ; i < 4 ; ++i)
|
||||
dDeltaF = max( dDeltaF, dDist[i]) ;
|
||||
if ( m_Params.m_nLeadOutType == SAW_LO_EXT_OUT)
|
||||
dDeltaF += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ;
|
||||
dDeltaF += dDeltaT ;
|
||||
dDeltaLoExt = dDeltaF ;
|
||||
}
|
||||
}
|
||||
@@ -4116,7 +4083,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC
|
||||
dDeltaF = max( dDeltaF, dDist[i]) ;
|
||||
// se LeadOut EXT_OUT vado all'esterno
|
||||
if ( m_Params.m_nLeadOutType == SAW_LO_EXT_OUT)
|
||||
dDeltaF += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ;
|
||||
dDeltaF += dDeltaT ;
|
||||
dDeltaLoExt = dDeltaF ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,7 +164,6 @@ class Sawing : public Machining
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
SawingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
bool m_bDownSE ; // flag per attacco/uscita senza risalite se fuori dal grezzo
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nCuts ; // numero di tagli generati
|
||||
} ;
|
||||
|
||||
+2333
-2523
File diff suppressed because it is too large
Load Diff
+156
-28
@@ -1,24 +1,25 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2015-2024
|
||||
// EgalTech 2015-2023
|
||||
//----------------------------------------------------------------------------
|
||||
// File : Simulator.h Data : 01.09.24 Versione : 2.6i1
|
||||
// Contenuto : Dichiarazione della classe interfaccia ISimulator.
|
||||
// File : Simulator.h Data : 16.01.23 Versione : 2.5a2
|
||||
// Contenuto : Dichiarazione della classe Simulator.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 01.09.24 DS Creazione modulo.
|
||||
// Modifiche : 19.10.15 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "/EgtDev/Include/EGkVector3d.h"
|
||||
#include "CamData.h"
|
||||
#include "/EgtDev/Include/EMkSimuGenConst.h"
|
||||
#include "/EgtDev/Include/EgtNumCollection.h"
|
||||
#include <string>
|
||||
|
||||
class MachMgr ;
|
||||
class IGeomDB ;
|
||||
class Machine ;
|
||||
class PerformanceCounter ;
|
||||
|
||||
//------------------------ Struttura per movimento esterno assi --------------
|
||||
struct SimAxMv
|
||||
@@ -37,27 +38,154 @@ enum SimAxMvRes { SIM_AXMV_RES_STOP = -1,
|
||||
SIM_AXMV_RES_OK = 1} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class __declspec( novtable) ISimulator
|
||||
class Simulator
|
||||
{
|
||||
public :
|
||||
virtual ~ISimulator( void) {}
|
||||
virtual bool Init( MachMgr* pMchMgr) = 0 ;
|
||||
virtual bool Start( bool bFirst) = 0 ;
|
||||
virtual bool Move( int& nStatus) = 0 ;
|
||||
virtual bool GoHome( void) = 0 ;
|
||||
virtual bool SetStep( double dStep) = 0 ;
|
||||
virtual bool SetUiStatus( int nUiStatus) = 0 ;
|
||||
virtual bool GetAxisInfoPos( int nI, std::string& sName, std::string& sToken, bool& bLinear, double& dVal) const = 0 ;
|
||||
virtual bool GetToolInfo( std::string& sName, double& dSpeed) const = 0 ;
|
||||
virtual bool GetOperationInfo( std::string& sName, int& nType) const = 0 ;
|
||||
virtual bool GetMoveInfo( int& nGmove, double& dFeed) const = 0 ;
|
||||
virtual bool AddCollisionObj( int nInd, bool bToolOn, int nFrameId, int nType,
|
||||
const Vector3d& vtMove, double dPar1, double dPar2, double dPar3) = 0 ;
|
||||
virtual bool ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) = 0 ;
|
||||
virtual bool OnCollision( int nCdInd, int nObjInd, int& nErr) = 0 ;
|
||||
virtual bool SetToolForVmill( const std::string& sTool, const std::string& sHead, int nExit, int nFlag,
|
||||
double dPar1, double dPar2, const INTVECTOR& vVmill, bool bFirst) = 0 ;
|
||||
virtual bool EnableToolsForVmill( bool bEnable) = 0 ;
|
||||
virtual int MoveAxes( int nMoveType, const SAMVECTOR& vAxNaEpSt) = 0 ;
|
||||
virtual bool SaveCmd( int nType, int nPar, const std::string& sPar, const std::string& sPar2) = 0 ;
|
||||
Simulator( void) ;
|
||||
~Simulator( void) ;
|
||||
bool Init( MachMgr* pMchMgr) ;
|
||||
bool Start( bool bFirst) ;
|
||||
bool Move( int& nStatus) ;
|
||||
bool GoHome( void) ;
|
||||
bool SetStep( double dStep) ;
|
||||
bool SetUiStatus( int nUiStatus) ;
|
||||
bool GetAxisInfoPos( int nI, std::string& sName, std::string& sToken, bool& bLinear, double& dVal) const ;
|
||||
bool GetToolInfo( std::string& sName, double& dSpeed) const ;
|
||||
bool GetOperationInfo( std::string& sName, int& nType) const ;
|
||||
bool GetMoveInfo( int& nGmove, double& dFeed) const ;
|
||||
bool AddCollisionObj( int nInd, bool bToolOn, int nFrameId, int nType, const Vector3d& vtMove, double dPar1, double dPar2, double dPar3) ;
|
||||
bool ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) ;
|
||||
bool OnCollision( int nCdInd, int nObjInd, int& nErr) ;
|
||||
bool SetToolForVmill( const std::string& sTool, const std::string& sHead, int nExit, const INTVECTOR& vVmill, bool bFirst) ;
|
||||
int MoveAxes( int nMoveType, const SAMVECTOR& vAxNaEpSt) ;
|
||||
|
||||
private :
|
||||
bool UpdateTool( bool bFirst, int& nErr) ;
|
||||
bool UpdateAxes( void) ;
|
||||
bool UpdateAxesPos( void) ;
|
||||
bool ResetInterpolation( void) ;
|
||||
bool ResetAxes( void) ;
|
||||
bool ResetAuxAxes( void) ;
|
||||
|
||||
private :
|
||||
bool VerifySetup( void) ;
|
||||
bool FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus) ;
|
||||
bool ManageOperationEnd( int& nStatus) ;
|
||||
bool FindAndManagePathStart( int& nStatus) ;
|
||||
bool ManagePathEnd( int& nStatus) ;
|
||||
bool ManagePathStartAux( int& nStatus) ;
|
||||
bool ManagePathEndAux( int& nStatus) ;
|
||||
bool ManageMove( int& nStatus) ;
|
||||
bool ManageSingleMove( int& nStatus, double& dMove) ;
|
||||
int CalcStatusOnError( int nErr) ;
|
||||
bool GetHeadCurrPosDirAux( const std::string& sHead, int nExit, Point3d& ptH, Vector3d& vtH, Vector3d& vtA) ;
|
||||
bool ExecLineVmill( int nVmId, int nCurrTool, double dVmTdOffs, double dVmAdOffs,
|
||||
const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
|
||||
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF) ;
|
||||
bool NeedCollisionCheck( void) const
|
||||
{ return ( ! m_CollObj.empty() && ! m_CdId.empty()) ; }
|
||||
bool Stopped( void)
|
||||
{ return ( m_nUiStatus == MCH_UISIM_STOP) ; }
|
||||
bool OnInit( void) ;
|
||||
bool OnExit( void) ;
|
||||
bool OnProgramStart( bool bFirst) ;
|
||||
bool OnProgramEnd( void) ;
|
||||
bool OnDispositionStarting( int nOpId, int nOpInd, int nPhase,
|
||||
const std::string& sTable, const Point3d& ptOri1, bool bEmpty, bool bSomeByHand) ;
|
||||
bool OnDispositionStart( int nOpId, int nOpInd, int nPhase,
|
||||
const std::string& sTable, const Point3d& ptOri1, bool bEmpty, bool bSomeByHand) ;
|
||||
bool OnDispositionEnd( void) ;
|
||||
bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos, bool bFirst, int& nErr) ;
|
||||
bool OnToolDeselect( const std::string& sNextTool, const std::string& sNextHead, int nNextExit, const std::string& sNextTcPos, int& nErr) ;
|
||||
bool OnMachiningStart( int nOpId, int nOpInd, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax) ;
|
||||
bool OnMachiningEnd( void) ;
|
||||
bool OnPathStartAux( int nInd, const std::string& sAS, int& nErr) ;
|
||||
bool OnPathEndAux( int nInd, const std::string& sAE, int& nErr) ;
|
||||
bool OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev) ;
|
||||
bool OnPathEnd( int nAE) ;
|
||||
bool OnMoveStart( const CamData* pCamData, int& nErr) ;
|
||||
bool OnMoveEnd( int& nErr) ;
|
||||
bool OnResetMachine( void) ;
|
||||
|
||||
private :
|
||||
struct CollObj {
|
||||
int nInd ;
|
||||
bool bToolOn ;
|
||||
int nFrameId ;
|
||||
int nType ;
|
||||
Vector3d vtMove ;
|
||||
double dPar1 ;
|
||||
double dPar2 ;
|
||||
double dPar3 ;
|
||||
CollObj( void) : nInd( 0), bToolOn( false), nFrameId( -1), nType( 0), vtMove(), dPar1( 0), dPar2( 0), dPar3( 0) {}
|
||||
CollObj( int nI, bool bTOn, int nF, int nT, const Vector3d& vtM, double dP1, double dP2, double dP3)
|
||||
: nInd( nI), bToolOn( bTOn), nFrameId( nF), nType( nT), vtMove( vtM), dPar1( dP1), dPar2( dP2), dPar3( dP3) {}
|
||||
} ;
|
||||
typedef std::vector<CollObj> COBVECTOR ;
|
||||
struct VmTool
|
||||
{
|
||||
std::string sName ;
|
||||
std::string sHead ;
|
||||
int nExit ;
|
||||
double dTdOffs ;
|
||||
double dAdOffs ;
|
||||
VmTool( void) : nExit( 0), dTdOffs( 0), dAdOffs( 0) {}
|
||||
VmTool( std::string sN, std::string sH, int nE, double dT, double dA)
|
||||
: sName( sN), sHead( sH), nExit( nE), dTdOffs( dT), dAdOffs( dA) {}
|
||||
} ;
|
||||
typedef std::vector<VmTool> VMTVECTOR ;
|
||||
enum { SIS_CREATED = 0,
|
||||
SIS_INITIALIZED = 1,
|
||||
SIS_READYTOSTART = 2,
|
||||
SIS_READYTORUN = 3} ;
|
||||
|
||||
private :
|
||||
MachMgr* m_pMchMgr ; // puntatore al gestore di tutte le lavorazioni
|
||||
IGeomDB* m_pGeomDB ; // puntatore al DB geometrico
|
||||
Machine* m_pMachine ; // puntatore alla macchina
|
||||
PerformanceCounter* m_pPerfCnt ; // timer per calcolo FPS
|
||||
int m_nStatus ; // stato interno del simulatore (creato, inizializzato, pronto al movimento)
|
||||
double m_dStep ; // lunghezza di riferimento per la velocità di simulazione
|
||||
int m_nUiStatus ; // stato simulazione a livello utente
|
||||
int m_nOpId ; // identificativo della operazione (lavoraz.) corrente
|
||||
int m_nOpInd ; // contatore della operazione (lavoraz.) corrente
|
||||
int m_nCLPathId ; // identificativo del percorso di lavoro corrente
|
||||
int m_nCLPathInd ; // contatore del percorso di lavoro corrente nell'operazione
|
||||
int m_nEntId ; // identificativo dell'entità corrente
|
||||
int m_nEntInd ; // contatore dell'entità corrente nel percorso di lavoro
|
||||
double m_dCoeff ; // coefficiente di esecuzione del movimento corrente (0...1)
|
||||
int m_nAuxSTot ; // numero totale movimenti ausiliari di inizio percorso
|
||||
int m_nAuxSInd ; // indice del movimento ausiliario di inizio percorso corrente
|
||||
int m_nAuxETot ; // numero totale movimenti ausiliari di fine percorso
|
||||
int m_nAuxEInd ; // indice del movimento ausiliario di fine percorso corrente
|
||||
std::string m_sTool ; // nome dell'utensile corrente
|
||||
std::string m_sHead ; // nome della testa corrente
|
||||
int m_nExit ; // indice dell'uscita corrente
|
||||
double m_dTDiam ; // diametro dell'utensile corrente
|
||||
bool m_bCutOnTip ; // flag capacità di lavorare di testa dell'utensile corrente
|
||||
INTVECTOR m_VmId ; // vettore identificativi Zmap per Virtual Milling
|
||||
INTVECTOR m_CdId ; // vettore identificativi Zmap per Collision Detection
|
||||
VMTVECTOR m_VmTool ; // vettore utensili attivi per virtual milling
|
||||
COBVECTOR m_CollObj ; // vettore oggetti da testare per collisione con grezzo
|
||||
double m_dSafeDist ; // distanza di sicurezza per verifica collisioni
|
||||
int m_nAxesMask ; // maschera a bit di abilitazione movimento assi (solo se rapido)
|
||||
bool m_bEnabAxes ; // flag abilitazione movimento assi attivi
|
||||
bool m_bShowAxes ; // flag visualizzazione assi attivi
|
||||
STRVECTOR m_AxesName ; // nomi degli assi macchina attivi
|
||||
STRVECTOR m_AxesToken ; // token degli assi macchina attivi
|
||||
BOOLVECTOR m_AxesInvert ; // flag di asse con verso invertito degli assi macchina attivi
|
||||
DBLVECTOR m_AxesOffset ; // valore di offset delgli assi macchina ttivi
|
||||
BOOLVECTOR m_AxesLinear ; // flag di lineare degli assi macchina attivi
|
||||
DBLVECTOR m_AxesVal ; // valori degli assi macchina all'inizio del movimento corrente
|
||||
STRVECTOR m_AuxAxesName ; // nomi degli assi macchina ausiliari abilitati
|
||||
STRVECTOR m_AuxAxesToken ; // token degli assi macchina ausiliari abilitati
|
||||
BOOLVECTOR m_AuxAxesInvert ; // flag di asse con verso invertito degli assi macchina ausiliari abilitati
|
||||
DBLVECTOR m_AuxAxesOffset ; // valore di offset degli assi macchina ausiliari abilitati
|
||||
BOOLVECTOR m_AuxAxesLinear ; // flag di lineare degli assi macchina ausiliari abilitati
|
||||
DBLVECTOR m_AuxAxesVal ; // valori degli assi macchina ausiliari all'inizio del movimento corrente
|
||||
DBLVECTOR m_AuxAxesEnd ; // valori degli assi macchina ausiliari alla fine del movimento corrente
|
||||
INTVECTOR m_AuxAxesLink ; // indice + 1 asse principale di aggancio (negativo valore opposto, 0 nessuno)
|
||||
} ;
|
||||
|
||||
-2698
File diff suppressed because it is too large
Load Diff
-215
@@ -1,215 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2024-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : SimulatorMP.h Data : 01.09.24 Versione : 2.6i1
|
||||
// Contenuto : Dichiarazione della classe SimulatorMP.
|
||||
// Simulatore multi-processo.
|
||||
//
|
||||
//
|
||||
// Modifiche : 01.09.24 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Simulator.h"
|
||||
#include "CamData.h"
|
||||
|
||||
class IGeomDB ;
|
||||
class Machine ;
|
||||
class PerformanceCounter ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
ISimulator* CreateSimulatorMP( void) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class SimulatorMP : public ISimulator
|
||||
{
|
||||
public : // ISimulator
|
||||
~SimulatorMP( void) override ;
|
||||
bool Init( MachMgr* pMchMgr) override ;
|
||||
bool Start( bool bFirst) override ;
|
||||
bool Move( int& nStatus) override ;
|
||||
bool GoHome( void) override ;
|
||||
bool SetStep( double dStep) override ;
|
||||
bool SetUiStatus( int nUiStatus) override ;
|
||||
bool GetAxisInfoPos( int nI, std::string& sName, std::string& sToken, bool& bLinear, double& dVal) const override ;
|
||||
bool GetToolInfo( std::string& sName, double& dSpeed) const override ;
|
||||
bool GetOperationInfo( std::string& sName, int& nType) const override ;
|
||||
bool GetMoveInfo( int& nGmove, double& dFeed) const override ;
|
||||
bool AddCollisionObj( int nInd, bool bToolOn, int nFrameId, int nType,
|
||||
const Vector3d& vtMove, double dPar1, double dPar2, double dPar3) override ;
|
||||
bool ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) override ;
|
||||
bool OnCollision( int nCdInd, int nObjInd, int& nErr) override ;
|
||||
bool SetToolForVmill( const std::string& sTool, const std::string& sHead, int nExit, int nFlag,
|
||||
double dPar1, double dPar2, const INTVECTOR& vVmill, bool bFirst) override ;
|
||||
bool EnableToolsForVmill( bool bEnable) override ;
|
||||
int MoveAxes( int nMoveType, const SAMVECTOR& vAxNaEpSt) override ;
|
||||
bool SaveCmd( int nType, int nPar, const std::string& sPar, const std::string& sPar2) override ;
|
||||
|
||||
public :
|
||||
SimulatorMP( void) ;
|
||||
|
||||
private :
|
||||
bool UpdateMachiningTool( bool bFirst, int& nChangeTool, int& nErr) ;
|
||||
bool UpdateDispositionTool( bool bFirst, int& nErr) ;
|
||||
bool UpdateAxes( void) ;
|
||||
bool UpdateAxesPos( void) ;
|
||||
bool ResetInterpolation( void) ;
|
||||
bool ResetAxes( void) ;
|
||||
bool ResetAuxAxes( void) ;
|
||||
|
||||
private :
|
||||
bool VerifySetup( void) ;
|
||||
bool FindAndManageOperationStart( bool bStart, bool bFirst, int& nChangeTool, int& nStatus) ;
|
||||
bool ManageOperationEnd( int& nStatus) ;
|
||||
bool FindAndManagePathStart( int& nStatus) ;
|
||||
bool ManagePathEnd( int& nStatus) ;
|
||||
bool ManagePathStartAux( int& nStatus) ;
|
||||
bool ManagePathEndAux( int& nStatus) ;
|
||||
bool ManageMove( int& nStatus) ;
|
||||
bool ManageSingleMove( int& nStatus, double& dMove) ;
|
||||
int CalcStatusOnError( int nErr) ;
|
||||
bool GetHeadCurrPosDirAux( const std::string& sHead, int nExit, Point3d& ptH, Vector3d& vtH, Vector3d& vtA) ;
|
||||
bool ExecLineVmill( int nVmId, int nCurrTool, double dVmTdOffs, double dVmAdOffs,
|
||||
const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
|
||||
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF) ;
|
||||
bool NeedCollisionCheck( void) const
|
||||
{ return ( ! m_CollObj.empty() && ! m_CdId.empty()) ; }
|
||||
bool Stopped( void)
|
||||
{ return ( m_nUiStatus == MCH_UISIM_STOP) ; }
|
||||
bool SetCollisionMark( int nCdInd, int nObjInd) ;
|
||||
bool ResetCollisionMark( void) ;
|
||||
bool CallFunction( const std::string& sFun, bool bSetRecord = false, bool bSetModifiedOff = true) ;
|
||||
bool OnInit( void) ;
|
||||
bool OnExit( void) ;
|
||||
bool OnProgramStart( bool bFirst) ;
|
||||
bool OnProgramEnd( void) ;
|
||||
bool OnDispositionStarting( int nOpId, int nOpInd, int nPhase,
|
||||
const std::string& sTable, const Point3d& ptOri1, bool bEmpty, bool bSomeByHand) ;
|
||||
bool OnDispositionStart( int nOpId, int nOpInd, int nPhase,
|
||||
const std::string& sTable, const Point3d& ptOri1, bool bEmpty, bool bSomeByHand) ;
|
||||
bool OnDispositionEnd( void) ;
|
||||
bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos,
|
||||
bool bFirst, bool bFloating, int& nErr) ;
|
||||
bool OnToolDeselect( const std::string& sNextTool, const std::string& sNextHead, int nNextExit, const std::string& sNextTcPos, int& nErr) ;
|
||||
bool OnMachiningStart( int nOpId, int nOpInd, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax) ;
|
||||
bool OnMachiningEnd( void) ;
|
||||
bool OnPathStartAux( int nInd, const std::string& sAS, int& nErr) ;
|
||||
bool OnPathEndAux( int nInd, const std::string& sAE, int& nErr) ;
|
||||
bool OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev, const INTVECTOR& vActiveExit) ;
|
||||
bool OnPathEnd( int nAE) ;
|
||||
bool OnMoveStart( const CamData* pCamData, const CamData* pNextCamData, int& nErr) ;
|
||||
bool OnMoveEnd( int& nErr) ;
|
||||
bool OnResetMachine( void) ;
|
||||
bool ReadAuxAxesData( int& nErr) ;
|
||||
bool ExecCmdData( int& nStatus) ;
|
||||
bool ExecAllCmdData( int& nStatus) ;
|
||||
|
||||
private :
|
||||
struct CollObj {
|
||||
int nInd ;
|
||||
bool bToolOn ;
|
||||
int nFrameId ;
|
||||
int nType ;
|
||||
Vector3d vtMove ;
|
||||
double dPar1 ;
|
||||
double dPar2 ;
|
||||
double dPar3 ;
|
||||
CollObj( void) : nInd( 0), bToolOn( false), nFrameId( -1), nType( 0), vtMove(), dPar1( 0), dPar2( 0), dPar3( 0) {}
|
||||
CollObj( int nI, bool bTOn, int nF, int nT, const Vector3d& vtM, double dP1, double dP2, double dP3)
|
||||
: nInd( nI), bToolOn( bTOn), nFrameId( nF), nType( nT), vtMove( vtM), dPar1( dP1), dPar2( dP2), dPar3( dP3) {}
|
||||
} ;
|
||||
typedef std::vector<CollObj> COBVECTOR ;
|
||||
struct VmTool
|
||||
{
|
||||
std::string sName ;
|
||||
std::string sHead ;
|
||||
int nExit ;
|
||||
double dTdOffs ;
|
||||
double dAdOffs ;
|
||||
VmTool( void) : nExit( 0), dTdOffs( 0), dAdOffs( 0) {}
|
||||
VmTool( std::string sN, std::string sH, int nE, double dT, double dA)
|
||||
: sName( sN), sHead( sH), nExit( nE), dTdOffs( dT), dAdOffs( dA) {}
|
||||
} ;
|
||||
typedef std::vector<VmTool> VMTVECTOR ;
|
||||
enum { SIS_CREATED = 0,
|
||||
SIS_INITIALIZED = 1,
|
||||
SIS_READYTOSTART = 2,
|
||||
SIS_READYTORUN = 3} ;
|
||||
|
||||
private :
|
||||
struct CmdData {
|
||||
int nType ;
|
||||
int nMoveType ;
|
||||
SAMVECTOR vAxNaEpSt ;
|
||||
int nPar ;
|
||||
std::string sPar ;
|
||||
std::string sPar2 ;
|
||||
CmdData( void) : nType(0) {}
|
||||
CmdData( int nM, const SAMVECTOR& vAx)
|
||||
: nType( 1), nMoveType( nM), vAxNaEpSt( vAx) {}
|
||||
CmdData( int nT, int nP, const std::string& sP, const std::string& sP2)
|
||||
: nType( nT), nPar( nP), sPar( sP), sPar2( sP2) {}
|
||||
} ;
|
||||
typedef std::vector<CmdData> CMDVECTOR ;
|
||||
|
||||
private :
|
||||
MachMgr* m_pMchMgr ; // puntatore al gestore di tutte le lavorazioni
|
||||
IGeomDB* m_pGeomDB ; // puntatore al DB geometrico
|
||||
Machine* m_pMachine ; // puntatore alla macchina
|
||||
PerformanceCounter* m_pPerfCnt ; // timer per calcolo FPS
|
||||
std::string m_sSpecEstim ; // path del file con i dati della stima speciale
|
||||
int m_nStatus ; // stato interno del simulatore (creato, inizializzato, pronto al movimento)
|
||||
double m_dStep ; // lunghezza di riferimento per la velocità di simulazione
|
||||
int m_nUiStatus ; // stato simulazione a livello utente
|
||||
INTVECTOR m_vOperId ; // vettore identificativi operazioni ordinate per simulazione
|
||||
int m_nOpId ; // identificativo della operazione (lavoraz.) corrente
|
||||
int m_nOpInd ; // contatore della operazione (lavoraz.) corrente
|
||||
int m_nCLPathId ; // identificativo del percorso di lavoro corrente
|
||||
int m_nCLPathInd ; // contatore del percorso di lavoro corrente nell'operazione
|
||||
int m_nEntId ; // identificativo dell'entità corrente
|
||||
int m_nEntInd ; // contatore dell'entità corrente nel percorso di lavoro
|
||||
double m_dCoeff ; // coefficiente di esecuzione del movimento corrente (0...1)
|
||||
int m_nChangeTool ; // stato di carico e scarico dell'utensile
|
||||
int m_nAuxSTot ; // numero totale movimenti ausiliari di inizio percorso
|
||||
int m_nAuxSInd ; // indice del movimento ausiliario di inizio percorso corrente
|
||||
int m_nAuxETot ; // numero totale movimenti ausiliari di fine percorso
|
||||
int m_nAuxEInd ; // indice del movimento ausiliario di fine percorso corrente
|
||||
std::string m_sTool ; // nome dell'utensile corrente
|
||||
std::string m_sHead ; // nome della testa corrente
|
||||
int m_nExit ; // indice dell'uscita corrente
|
||||
double m_dTDiam ; // diametro dell'utensile corrente
|
||||
bool m_bCutOnTip ; // flag capacità di lavorare di testa dell'utensile corrente
|
||||
bool m_bEnableVm ; // flag abilitazione Virtual Milling
|
||||
INTVECTOR m_VmId ; // vettore identificativi Zmap per Virtual Milling
|
||||
INTVECTOR m_CdId ; // vettore identificativi Zmap per Collision Detection
|
||||
VMTVECTOR m_VmTool ; // vettore utensili attivi per virtual milling
|
||||
COBVECTOR m_CollObj ; // vettore oggetti da testare per collisione con grezzo
|
||||
double m_dSafeDist ; // distanza di sicurezza per verifica collisioni
|
||||
INTVECTOR m_nCollMarkId ; // elenco oggetti marcati per visualizzare meglio la collisione rilevata
|
||||
int m_nAxesMask ; // maschera a bit di abilitazione movimento assi (solo se rapido)
|
||||
bool m_bEnabAxes ; // flag abilitazione movimento assi attivi
|
||||
bool m_bShowAxes ; // flag visualizzazione assi attivi
|
||||
STRVECTOR m_AxesName ; // nomi degli assi macchina attivi
|
||||
STRVECTOR m_AxesToken ; // token degli assi macchina attivi
|
||||
BOOLVECTOR m_AxesInvert ; // flag di asse con verso invertito degli assi macchina attivi
|
||||
DBLVECTOR m_AxesOffset ; // valore di offset delgli assi macchina ttivi
|
||||
BOOLVECTOR m_AxesLinear ; // flag di lineare degli assi macchina attivi
|
||||
DBLVECTOR m_AxesVal ; // valori degli assi macchina all'inizio del movimento corrente
|
||||
STRVECTOR m_AuxAxesName ; // nomi degli assi macchina ausiliari abilitati
|
||||
STRVECTOR m_AuxAxesToken ; // token degli assi macchina ausiliari abilitati
|
||||
BOOLVECTOR m_AuxAxesInvert ; // flag di asse con verso invertito degli assi macchina ausiliari abilitati
|
||||
DBLVECTOR m_AuxAxesOffset ; // valore di offset degli assi macchina ausiliari abilitati
|
||||
BOOLVECTOR m_AuxAxesLinear ; // flag di lineare degli assi macchina ausiliari abilitati
|
||||
DBLVECTOR m_AuxAxesVal ; // valori degli assi macchina ausiliari all'inizio del movimento corrente
|
||||
DBLVECTOR m_AuxAxesEnd ; // valori degli assi macchina ausiliari alla fine del movimento corrente
|
||||
INTVECTOR m_AuxAxesLink ; // indice + 1 asse principale di aggancio (negativo valore opposto, 0 nessuno)
|
||||
CMDVECTOR m_CmdData ; // vettore comandi in attesa di esecuzione
|
||||
int m_nCmdInd ; // indice prossimo comando da eseguire
|
||||
double m_dCmdCoeff ; // coefficiente di movimento nel comando
|
||||
} ;
|
||||
-189
@@ -1,189 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2015-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : SimulatorSP.h Data : 16.01.23 Versione : 2.5a2
|
||||
// Contenuto : Dichiarazione della classe Simulator.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 19.10.15 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Simulator.h"
|
||||
#include "CamData.h"
|
||||
|
||||
class IGeomDB ;
|
||||
class Machine ;
|
||||
class PerformanceCounter ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
ISimulator* CreateSimulatorSP( void) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class SimulatorSP : public ISimulator
|
||||
{
|
||||
public :
|
||||
~SimulatorSP( void) override ;
|
||||
bool Init( MachMgr* pMchMgr) override ;
|
||||
bool Start( bool bFirst) override ;
|
||||
bool Move( int& nStatus) override ;
|
||||
bool GoHome( void) override ;
|
||||
bool SetStep( double dStep) override ;
|
||||
bool SetUiStatus( int nUiStatus) override ;
|
||||
bool GetAxisInfoPos( int nI, std::string& sName, std::string& sToken, bool& bLinear, double& dVal) const override ;
|
||||
bool GetToolInfo( std::string& sName, double& dSpeed) const override ;
|
||||
bool GetOperationInfo( std::string& sName, int& nType) const override ;
|
||||
bool GetMoveInfo( int& nGmove, double& dFeed) const override ;
|
||||
bool AddCollisionObj( int nInd, bool bToolOn, int nFrameId, int nType,
|
||||
const Vector3d& vtMove, double dPar1, double dPar2, double dPar3) override ;
|
||||
bool ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) override ;
|
||||
bool OnCollision( int nCdInd, int nObjInd, int& nErr) override ;
|
||||
bool SetToolForVmill( const std::string& sTool, const std::string& sHead, int nExit, int nFlag,
|
||||
double dPar1, double dPar2, const INTVECTOR& vVmill, bool bFirst) override ;
|
||||
bool EnableToolsForVmill( bool bEnable) override ;
|
||||
int MoveAxes( int nMoveType, const SAMVECTOR& vAxNaEpSt) override ;
|
||||
bool SaveCmd( int nType, int nPar, const std::string& sPar, const std::string& sPar2) override
|
||||
{ return false ; }
|
||||
|
||||
public :
|
||||
SimulatorSP( void) ;
|
||||
|
||||
private :
|
||||
bool UpdateTool( bool bFirst, int& nErr) ;
|
||||
bool UpdateAxes( void) ;
|
||||
bool UpdateAxesPos( void) ;
|
||||
bool ResetInterpolation( void) ;
|
||||
bool ResetAxes( void) ;
|
||||
bool ResetAuxAxes( void) ;
|
||||
|
||||
private :
|
||||
bool VerifySetup( void) ;
|
||||
bool FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus) ;
|
||||
bool ManageOperationEnd( int& nStatus) ;
|
||||
bool FindAndManagePathStart( int& nStatus) ;
|
||||
bool ManagePathEnd( int& nStatus) ;
|
||||
bool ManagePathStartAux( int& nStatus) ;
|
||||
bool ManagePathEndAux( int& nStatus) ;
|
||||
bool ManageMove( int& nStatus) ;
|
||||
bool ManageSingleMove( int& nStatus, double& dMove) ;
|
||||
int CalcStatusOnError( int nErr) ;
|
||||
bool GetHeadCurrPosDirAux( const std::string& sHead, int nExit, Point3d& ptH, Vector3d& vtH, Vector3d& vtA) ;
|
||||
bool ExecLineVmill( int nVmId, int nCurrTool, double dVmTdOffs, double dVmAdOffs,
|
||||
const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
|
||||
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF) ;
|
||||
bool NeedCollisionCheck( void) const
|
||||
{ return ( ! m_CollObj.empty() && ! m_CdId.empty()) ; }
|
||||
bool Stopped( void)
|
||||
{ return ( m_nUiStatus == MCH_UISIM_STOP) ; }
|
||||
bool SetCollisionMark( int nCdInd, int nObjInd) ;
|
||||
bool ResetCollisionMark( void) ;
|
||||
bool OnInit( void) ;
|
||||
bool OnExit( void) ;
|
||||
bool OnProgramStart( bool bFirst) ;
|
||||
bool OnProgramEnd( void) ;
|
||||
bool OnDispositionStarting( int nOpId, int nOpInd, int nPhase,
|
||||
const std::string& sTable, const Point3d& ptOri1, bool bEmpty, bool bSomeByHand) ;
|
||||
bool OnDispositionStart( int nOpId, int nOpInd, int nPhase,
|
||||
const std::string& sTable, const Point3d& ptOri1, bool bEmpty, bool bSomeByHand) ;
|
||||
bool OnDispositionEnd( void) ;
|
||||
bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos,
|
||||
bool bFirst, bool bFloating, int& nErr) ;
|
||||
bool OnToolDeselect( const std::string& sNextTool, const std::string& sNextHead, int nNextExit, const std::string& sNextTcPos, int& nErr) ;
|
||||
bool OnMachiningStart( int nOpId, int nOpInd, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax) ;
|
||||
bool OnMachiningEnd( void) ;
|
||||
bool OnPathStartAux( int nInd, const std::string& sAS, int& nErr) ;
|
||||
bool OnPathEndAux( int nInd, const std::string& sAE, int& nErr) ;
|
||||
bool OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax,
|
||||
const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev, const INTVECTOR& vActiveExit) ;
|
||||
bool OnPathEnd( int nAE) ;
|
||||
bool OnMoveStart( const CamData* pCamData, const CamData* pNextCamData, int& nErr) ;
|
||||
bool OnMoveEnd( int& nErr) ;
|
||||
bool OnResetMachine( void) ;
|
||||
|
||||
private :
|
||||
struct CollObj {
|
||||
int nInd ;
|
||||
bool bToolOn ;
|
||||
int nFrameId ;
|
||||
int nType ;
|
||||
Vector3d vtMove ;
|
||||
double dPar1 ;
|
||||
double dPar2 ;
|
||||
double dPar3 ;
|
||||
CollObj( void) : nInd( 0), bToolOn( false), nFrameId( -1), nType( 0), vtMove(), dPar1( 0), dPar2( 0), dPar3( 0) {}
|
||||
CollObj( int nI, bool bTOn, int nF, int nT, const Vector3d& vtM, double dP1, double dP2, double dP3)
|
||||
: nInd( nI), bToolOn( bTOn), nFrameId( nF), nType( nT), vtMove( vtM), dPar1( dP1), dPar2( dP2), dPar3( dP3) {}
|
||||
} ;
|
||||
typedef std::vector<CollObj> COBVECTOR ;
|
||||
struct VmTool
|
||||
{
|
||||
std::string sName ;
|
||||
std::string sHead ;
|
||||
int nExit ;
|
||||
double dTdOffs ;
|
||||
double dAdOffs ;
|
||||
VmTool( void) : nExit( 0), dTdOffs( 0), dAdOffs( 0) {}
|
||||
VmTool( std::string sN, std::string sH, int nE, double dT, double dA)
|
||||
: sName( sN), sHead( sH), nExit( nE), dTdOffs( dT), dAdOffs( dA) {}
|
||||
} ;
|
||||
typedef std::vector<VmTool> VMTVECTOR ;
|
||||
enum { SIS_CREATED = 0,
|
||||
SIS_INITIALIZED = 1,
|
||||
SIS_READYTOSTART = 2,
|
||||
SIS_READYTORUN = 3} ;
|
||||
|
||||
private :
|
||||
MachMgr* m_pMchMgr ; // puntatore al gestore di tutte le lavorazioni
|
||||
IGeomDB* m_pGeomDB ; // puntatore al DB geometrico
|
||||
Machine* m_pMachine ; // puntatore alla macchina
|
||||
PerformanceCounter* m_pPerfCnt ; // timer per calcolo FPS
|
||||
int m_nStatus ; // stato interno del simulatore (creato, inizializzato, pronto al movimento)
|
||||
double m_dStep ; // lunghezza di riferimento per la velocità di simulazione
|
||||
int m_nUiStatus ; // stato simulazione a livello utente
|
||||
int m_nOpId ; // identificativo della operazione (lavoraz.) corrente
|
||||
int m_nOpInd ; // contatore della operazione (lavoraz.) corrente
|
||||
int m_nCLPathId ; // identificativo del percorso di lavoro corrente
|
||||
int m_nCLPathInd ; // contatore del percorso di lavoro corrente nell'operazione
|
||||
int m_nEntId ; // identificativo dell'entità corrente
|
||||
int m_nEntInd ; // contatore dell'entità corrente nel percorso di lavoro
|
||||
double m_dCoeff ; // coefficiente di esecuzione del movimento corrente (0...1)
|
||||
int m_nAuxSTot ; // numero totale movimenti ausiliari di inizio percorso
|
||||
int m_nAuxSInd ; // indice del movimento ausiliario di inizio percorso corrente
|
||||
int m_nAuxETot ; // numero totale movimenti ausiliari di fine percorso
|
||||
int m_nAuxEInd ; // indice del movimento ausiliario di fine percorso corrente
|
||||
std::string m_sTool ; // nome dell'utensile corrente
|
||||
std::string m_sHead ; // nome della testa corrente
|
||||
int m_nExit ; // indice dell'uscita corrente
|
||||
double m_dTDiam ; // diametro dell'utensile corrente
|
||||
bool m_bCutOnTip ; // flag capacità di lavorare di testa dell'utensile corrente
|
||||
bool m_bEnableVm ; // flag abilitazione Virtual Milling
|
||||
INTVECTOR m_VmId ; // vettore identificativi Zmap per Virtual Milling
|
||||
INTVECTOR m_CdId ; // vettore identificativi Zmap per Collision Detection
|
||||
VMTVECTOR m_VmTool ; // vettore utensili attivi per virtual milling
|
||||
COBVECTOR m_CollObj ; // vettore oggetti da testare per collisione con grezzo
|
||||
double m_dSafeDist ; // distanza di sicurezza per verifica collisioni
|
||||
INTVECTOR m_nCollMarkId ; // elenco oggetti marcati per visualizzare meglio la collisione rilevata
|
||||
int m_nAxesMask ; // maschera a bit di abilitazione movimento assi (solo se rapido)
|
||||
bool m_bEnabAxes ; // flag abilitazione movimento assi attivi
|
||||
bool m_bShowAxes ; // flag visualizzazione assi attivi
|
||||
STRVECTOR m_AxesName ; // nomi degli assi macchina attivi
|
||||
STRVECTOR m_AxesToken ; // token degli assi macchina attivi
|
||||
BOOLVECTOR m_AxesInvert ; // flag di asse con verso invertito degli assi macchina attivi
|
||||
DBLVECTOR m_AxesOffset ; // valore di offset delgli assi macchina ttivi
|
||||
BOOLVECTOR m_AxesLinear ; // flag di lineare degli assi macchina attivi
|
||||
DBLVECTOR m_AxesVal ; // valori degli assi macchina all'inizio del movimento corrente
|
||||
STRVECTOR m_AuxAxesName ; // nomi degli assi macchina ausiliari abilitati
|
||||
STRVECTOR m_AuxAxesToken ; // token degli assi macchina ausiliari abilitati
|
||||
BOOLVECTOR m_AuxAxesInvert ; // flag di asse con verso invertito degli assi macchina ausiliari abilitati
|
||||
DBLVECTOR m_AuxAxesOffset ; // valore di offset degli assi macchina ausiliari abilitati
|
||||
BOOLVECTOR m_AuxAxesLinear ; // flag di lineare degli assi macchina ausiliari abilitati
|
||||
DBLVECTOR m_AuxAxesVal ; // valori degli assi macchina ausiliari all'inizio del movimento corrente
|
||||
DBLVECTOR m_AuxAxesEnd ; // valori degli assi macchina ausiliari alla fine del movimento corrente
|
||||
INTVECTOR m_AuxAxesLink ; // indice + 1 asse principale di aggancio (negativo valore opposto, 0 nessuno)
|
||||
} ;
|
||||
+662
-3858
File diff suppressed because it is too large
Load Diff
+13
-85
@@ -13,39 +13,14 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "set"
|
||||
#include "Machining.h"
|
||||
#include "SurfFinishingData.h"
|
||||
#include "ToolData.h"
|
||||
#include "MachiningConst.h"
|
||||
#include "/EgtDev/Include/EGkCurveComposite.h"
|
||||
#include "/EgtDev/Include/EGkSurfTriMesh.h"
|
||||
#include "/EgtDev/Include/EgtNumUtils.h"
|
||||
#include "/EgtDev/Include/EGkSurfLocal.h"
|
||||
|
||||
class ICAvToolSurfTm ;
|
||||
class ISurfFlatRegion ;
|
||||
class ISurfTriMesh ;
|
||||
class ICAvParSilhouettesSurfTm ;
|
||||
class StmFromTriangleSoup ;
|
||||
|
||||
// struttura percorsi da calcolare per finiture ottimizzate
|
||||
struct PATH {
|
||||
PtrOwner<ICurveComposite> pCrvPath ;
|
||||
int nType ;
|
||||
double dSideAng ;
|
||||
} ;
|
||||
// vettore associato
|
||||
typedef std::vector<PATH> VECTORPATHS ;
|
||||
|
||||
// struttura per collisioni per finiture ottimizzate
|
||||
struct CollisionSfr {
|
||||
PNTUVVECT CollisionInfo ;
|
||||
bool bInSpiral ;
|
||||
bool bInZConst ;
|
||||
} ;
|
||||
// vettore associato
|
||||
typedef std::vector<CollisionSfr> VECTORCOLLISIONSFR ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class SurfFinishing : public Machining
|
||||
@@ -94,71 +69,27 @@ class SurfFinishing : public Machining
|
||||
SurfFinishing( void) ;
|
||||
|
||||
private :
|
||||
bool MyApply( bool bRecalc, bool bPostApply) ;
|
||||
bool VerifyGeometry( SelData Id, int& nSubs) ;
|
||||
bool GetCurves( SelData Id, ICURVEPLIST& lstPC) ;
|
||||
bool Chain( int nGrpDestId) ;
|
||||
bool ProcessSfr( int nPathId, int nPvId, int nClId) ;
|
||||
bool ProcessCrvCompo( int nPathId, int nPvId, int nClId) ;
|
||||
bool SimplifyCurve( ICurveComposite* pCompo) const ;
|
||||
bool CalcZConstProjectedLink( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frPocket,
|
||||
const Frame3d& frSurf, const Vector3d& vtTool, double dDepth,
|
||||
const Point3d ptStart_forced, const Point3d ptEnd_forced,
|
||||
ICurveComposite* pCrv) ;
|
||||
// lavorazioni per superfici
|
||||
bool AddZigZag( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, const ISurfFlatRegion* pSfrPock,
|
||||
const Vector3d& vtTool, double dDepth, double dElev, bool bSplitArcs) ;
|
||||
bool AddOneWay( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, const ISurfFlatRegion* pSfrPock,
|
||||
const Vector3d& vtTool, double dDepth, double dElev, bool bSplitArcs) ;
|
||||
bool AddSpiral( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, const ISurfFlatRegion* pSfrPock,
|
||||
const Vector3d& vtTool, double dDepth, double dElev, bool bSplitArcs, bool bInVsOut) ;
|
||||
bool AddZConst( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frSurf, const ISurfFlatRegion* pSfr,
|
||||
const Vector3d& vtTool, double dDepth, double dElev, bool bSplitArcs) ;
|
||||
bool AddOptimal( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frSurf, const ISurfFlatRegion* pSfr,
|
||||
const Vector3d& vtTool, double dDepth, double dElev, bool bSplitArcs) ;
|
||||
// lavorazioni per curve
|
||||
bool AddProjection( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frSurf, const ICurveComposite* pCompo,
|
||||
const Vector3d& vtTool, double dDepth, double dElev, bool bSplitArcs) ;
|
||||
bool ChooseFinishingForOptimal( const ISurfFlatRegion* pSfr, int nChunk, bool& bSpiral, double& dSideAng) ;
|
||||
bool OrderOptimalPathsByZLoc( const ISurfFlatRegion* pSfr, VECTORPATHS& vCrvPaths) ;
|
||||
bool GetSfrBySilhouette( ICAvParSilhouettesSurfTm* pCavParSilh, double dDepth, double dSilTolSamp,
|
||||
double dSilTolLin, double dSilTolAng, ISurfFlatRegion* pSfrSil) ;
|
||||
bool ApproxSilhouetteClosedPLForOptimal( PolyLine& PL, double dSampleTol, double dMaxLinTol, double dAngTol, double dLinFeaTol, ICurveComposite* pCompoPL) ;
|
||||
bool SplitStmTrianglesByClippingAngle( const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frSurf, const ISurfFlatRegion* pSfrCnt,
|
||||
const Vector3d& vtTool, double dDepth, double dClippingAngle, double dTolerAngle,
|
||||
ISURFTMPOVECTOR& vpStm1, ISURFTMPOVECTOR& vpStm2, double& dMaxFrontTriaRad) const ;
|
||||
bool GetZConstQuotesInsideSfrParallelToTool( const SURFLOCALVECTOR&, const Frame3d& frSurf, const ISurfFlatRegion* pSfr,
|
||||
const Vector3d& vtTool, std::set<double>& setZAmbiguos) ;
|
||||
ICAvParSilhouettesSurfTm* GetParSilhouettesForZConst( const ISURFTMPOVECTOR& vStm, const ISurfFlatRegion* pSfr) const ;
|
||||
ISurfFlatRegion* GetSfrSilhouette( const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frLvl0, double dDepth) const ;
|
||||
ISurfFlatRegion* GetSfrProjectedStmLoops( const ISURFTMPOVECTOR& vStm, const ISurfFlatRegion* pSfrContour,
|
||||
const DBLVECTOR& vdLinFeaTol, const DBLVECTOR& vdAngTol, const DBLVECTOR& vdMaxLinTol) const ;
|
||||
ISurfTriMesh* SplitStmTriaUnderClippingAngle( const SurfLocal SrfLoc, const Vector3d& vtTest, double dClippingAngle,
|
||||
double dFrontTriaTolerAng, double& dMaxFrontTriaRad) const ;
|
||||
bool GetOptimalSfr( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frSurf, const ISurfFlatRegion* pSfrLoc, const Vector3d& vtTool,
|
||||
double dDepth, double dElev, ISurfFlatRegion* pSfrSpiral, ISurfFlatRegion* pSfrZConst) const ;
|
||||
bool CalcZConstSilCrv( ICAvParSilhouettesSurfTm* pCavParSilh, const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frSurf,
|
||||
const ISurfFlatRegion* pSfrClass, const Vector3d& vtTool, double dDepth, std::vector<ICRVCOMPOPOVECTOR>& vCrvCompo) ;
|
||||
bool CreateZConstPaths( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, std::vector<ICRVCOMPOPOVECTOR>& vCrvCompo, const Vector3d& vtTool,
|
||||
const ISurfFlatRegion* pSfr, double dDepth, ICRVCOMPOPOVECTOR& vCrvPath) ;
|
||||
bool ProcessPath( int nPathId, int nPvId, int nClId) ;
|
||||
bool AddZigZag( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf,
|
||||
const ICurveComposite* pCompo, const Vector3d& vtTool, const Vector3d& vtExtr,
|
||||
double dDepth, double dElev) ;
|
||||
bool CalcZigZag( const ICurveComposite* pOffs, ICRVCOMPOPOVECTOR& vpCrvs) ;
|
||||
bool AddSpiral( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf,
|
||||
const ICurveComposite* pCompo, const Vector3d& vtTool, const Vector3d& vtExtr,
|
||||
double dDepth, double dElev, bool bInVsOut) ;
|
||||
bool CalcSpiral( const ICurveComposite* pCompo, bool bSplitArcs,
|
||||
ICurveComposite* pMCrv, ICurveComposite* pRCrv) ;
|
||||
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
|
||||
bool AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
|
||||
bool AddLinkRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
|
||||
bool AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
|
||||
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtTool, const Vector3d& vtNorm, Point3d& ptP1) const ;
|
||||
bool AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtTool, bool bSplitArcs) ;
|
||||
bool CalcLeadOutEnd( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d& vtTool, const Vector3d& vtNorm, Point3d& ptP1) const ;
|
||||
bool AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Point3d& ptP1, const Vector3d& vtTool, bool bSplitArcs) ;
|
||||
bool GetLastGoodPoint( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf,
|
||||
const Point3d& ptStart, const Point3d& ptEnd, const Vector3d& vtTool, Point3d& ptP1) const ;
|
||||
bool GetSurfaceNormalAtPoint( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf,
|
||||
const Point3d& ptTool, const Vector3d& vtTool, Vector3d& vtNorm) const ;
|
||||
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN, Point3d& ptP1) const ;
|
||||
bool AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN) ;
|
||||
bool AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d& vtN, Point3d& ptP1) ;
|
||||
bool GetActiveSurfaces( INTVECTOR& vSurfId) const ;
|
||||
bool MarchingSquares( const VECTORCOLLISIONSFR& vPntM, bool bSpiral, int nStepX, int nStepY, double dClippingAngle,
|
||||
const Vector3d& vtAxL, const Vector3d& vtMoveL, ICAvToolSurfTm* pCAvTlStm,
|
||||
ICRVCOMPOPOVECTOR& vCrvCompo) const ;
|
||||
bool CalcShapedPoint( const PNTUVVECT& myInfoStart, const PNTUVVECT& myInfoEnd, bool bSpiral, const Vector3d& vtAxL,
|
||||
const Vector3d& vtMoveL, double dClippingAngle, ICAvToolSurfTm* pCAvTlStm, Point3d& ptShaped, int _debug_ind = -1) const ;
|
||||
double GetRightFeed( const Vector3d& vtMove, const Vector3d& vtTool) const ;
|
||||
double GetRadiusForStartEndElevation( void) const ;
|
||||
|
||||
@@ -177,8 +108,6 @@ class SurfFinishing : public Machining
|
||||
{ return ( IsUnknownValue( m_Params.m_dOffsR) ? m_TParams.m_dOffsR : m_Params.m_dOffsR) ; }
|
||||
double GetSideStep( void) const
|
||||
{ return Clamp( m_Params.m_dSideStep, 0.1, m_TParams.m_dTDiam) ; }
|
||||
int GetLeadInType( void) const ;
|
||||
int GetLeadOutType( void) const ;
|
||||
|
||||
private :
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
@@ -189,5 +118,4 @@ class SurfFinishing : public Machining
|
||||
double m_dTHoldDiam ; // diametro del porta-utensile
|
||||
int m_nStatus ; // stato di aggiornamento della lavorazione
|
||||
int m_nPaths ; // numero di percorsi di lavoro generati
|
||||
bool m_bRunning ; // flag di calcoli in corso
|
||||
} ;
|
||||
|
||||
+20
-5
@@ -147,6 +147,7 @@ SurfFinishingData::CopyFrom( const MachiningData* pMdata)
|
||||
m_nLeadOutType = pSdata->m_nLeadOutType ;
|
||||
m_dLoTang = pSdata->m_dLoTang ;
|
||||
m_dLoPerp = pSdata->m_dLoPerp ;
|
||||
m_nLeadLinkType = pSdata->m_nLeadLinkType ;
|
||||
m_dApprox = pSdata->m_dApprox ;
|
||||
m_sSysNotes = pSdata->m_sSysNotes ;
|
||||
m_sUserNotes = pSdata->m_sUserNotes ;
|
||||
@@ -191,6 +192,7 @@ SurfFinishingData::SameAs(const MachiningData* pMdata) const
|
||||
m_nLeadOutType == pSdata->m_nLeadOutType &&
|
||||
abs( m_dLoTang - pSdata->m_dLoTang) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dLoPerp - pSdata->m_dLoPerp) < EPS_MACH_LEN_PAR &&
|
||||
m_nLeadLinkType == pSdata->m_nLeadLinkType &&
|
||||
abs( m_dApprox - pSdata->m_dApprox) < EPS_MACH_LEN_PAR &&
|
||||
m_sSysNotes == pSdata->m_sSysNotes &&
|
||||
m_sUserNotes == pSdata->m_sUserNotes) ;
|
||||
@@ -271,7 +273,7 @@ SurfFinishingData::FromString( const string& sString, int& nKey)
|
||||
bOk = ::FromString( sVal, m_nLeadInType) ;
|
||||
break ;
|
||||
case KEY_LLTY :
|
||||
// campo non più usato
|
||||
bOk = ::FromString( sVal, m_nLeadLinkType) ;
|
||||
break ;
|
||||
case KEY_LOPR :
|
||||
bOk = ::FromString( sVal, m_dLoPerp) ;
|
||||
@@ -349,7 +351,7 @@ SurfFinishingData::ToString( int nInd) const
|
||||
case KEY_LIPR : return ( sSurfFinishingKey[KEY_LIPR] + "=" + ::ToString( m_dLiPerp)) ;
|
||||
case KEY_LITG : return ( sSurfFinishingKey[KEY_LITG] + "=" + ::ToString( m_dLiTang)) ;
|
||||
case KEY_LITY : return ( sSurfFinishingKey[KEY_LITY] + "=" + ::ToString( m_nLeadInType)) ;
|
||||
case KEY_LLTY : return ( sSurfFinishingKey[KEY_LLTY] + "=" + ::ToString( 0)) ;
|
||||
case KEY_LLTY : return ( sSurfFinishingKey[KEY_LLTY] + "=" + ::ToString( m_nLeadLinkType)) ;
|
||||
case KEY_LOPR : return ( sSurfFinishingKey[KEY_LOPR] + "=" + ::ToString( m_dLoPerp)) ;
|
||||
case KEY_LOTG : return ( sSurfFinishingKey[KEY_LOTG] + "=" + ::ToString( m_dLoTang)) ;
|
||||
case KEY_LOTY : return ( sSurfFinishingKey[KEY_LOTY] + "=" + ::ToString( m_nLeadOutType)) ;
|
||||
@@ -390,9 +392,7 @@ bool
|
||||
SurfFinishingData::VerifySubType( int nVal) const
|
||||
{
|
||||
return ( nVal == SURFFIN_SUB_ZIGZAG || nVal == SURFFIN_SUB_ONEWAY ||
|
||||
nVal == SURFFIN_SUB_SPIRALIN || nVal == SURFFIN_SUB_SPIRALOUT ||
|
||||
nVal == SURFFIN_SUB_Z_CONST || nVal == SURFFIN_SUB_OPTIMAL ||
|
||||
nVal == SURFFIN_SUB_PROJECT) ;
|
||||
nVal == SURFFIN_SUB_SPIRALIN || nVal == SURFFIN_SUB_SPIRALOUT) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -403,6 +403,13 @@ SurfFinishingData::VerifyLeadInType( int nVal) const
|
||||
nVal == SURFFIN_LI_TANGENT) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfFinishingData::VerifyLeadLinkType( int nVal) const
|
||||
{
|
||||
return ( nVal == SURFFIN_LL_STD || nVal == SURFFIN_LL_CENT) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfFinishingData::VerifyLeadOutType( int nVal) const
|
||||
@@ -457,6 +464,11 @@ SurfFinishingData::SetParam( int nType, int nVal)
|
||||
return false ;
|
||||
m_nLeadInType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADLINKTYPE :
|
||||
if ( ! VerifyLeadInType( nVal))
|
||||
return false ;
|
||||
m_nLeadLinkType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADOUTTYPE :
|
||||
if ( ! VerifyLeadOutType( nVal))
|
||||
return false ;
|
||||
@@ -603,6 +615,9 @@ SurfFinishingData::GetParam( int nType, int& nVal) const
|
||||
case MPA_LEADINTYPE :
|
||||
nVal = m_nLeadInType ;
|
||||
return true ;
|
||||
case MPA_LEADLINKTYPE :
|
||||
nVal = m_nLeadLinkType ;
|
||||
return true ;
|
||||
case MPA_LEADOUTTYPE :
|
||||
nVal = m_nLeadOutType ;
|
||||
return true ;
|
||||
|
||||
+3
-1
@@ -42,6 +42,7 @@ struct SurfFinishingData : public MachiningData
|
||||
int m_nLeadOutType ; // tipo di uscita (come attacco, nessuno, lineare, tangente, inseguimento)
|
||||
double m_dLoTang ; // distanza tangente verso fine uscita
|
||||
double m_dLoPerp ; // distanza perpendicolare verso fine uscita
|
||||
int m_nLeadLinkType ; // tipo di collegamento ( centro, fuori)
|
||||
double m_dApprox ; // valore di approssimazione per superfici
|
||||
std::string m_sSysNotes ; // note interne
|
||||
std::string m_sUserNotes ; // note dell'utente
|
||||
@@ -51,7 +52,7 @@ struct SurfFinishingData : public MachiningData
|
||||
m_dOffsR( UNKNOWN_PAR), m_bInvert( false),
|
||||
m_dStartPos( 0), m_dOverlap(0), m_dSideStep( 0), m_nSubType( 0), m_dSideAngle( 0),
|
||||
m_nLeadInType( 0), m_dLiTang( 0), m_dLiPerp( 0),
|
||||
m_nLeadOutType( 0), m_dLoTang( 0), m_dLoPerp( 0), m_dApprox( 0) {}
|
||||
m_nLeadOutType( 0), m_dLoTang( 0), m_dLoPerp( 0), m_nLeadLinkType( 0), m_dApprox( 0) {}
|
||||
SurfFinishingData* Clone( void) const override ;
|
||||
bool CopyFrom( const MachiningData* pMdata) override ;
|
||||
bool SameAs(const MachiningData* pMdata) const override ;
|
||||
@@ -76,6 +77,7 @@ struct SurfFinishingData : public MachiningData
|
||||
bool VerifySolCh( int nVal) const ;
|
||||
bool VerifySubType( int nVal) const ;
|
||||
bool VerifyLeadInType( int nVal) const ;
|
||||
bool VerifyLeadLinkType( int nVal) const ;
|
||||
bool VerifyLeadOutType( int nVal) const ;
|
||||
} ;
|
||||
|
||||
|
||||
-3629
File diff suppressed because it is too large
Load Diff
-205
@@ -1,205 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2024-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : SurfRoughing.h Data : 24.05.24 Versione : 2.6e5
|
||||
// Contenuto : Dichiarazione della classe SurfRoughing.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 24.05.24 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Machining.h"
|
||||
#include "SurfRoughingData.h"
|
||||
#include "ToolData.h"
|
||||
#include "MachiningConst.h"
|
||||
#include "/EgtDev/Include/EGkCurveComposite.h"
|
||||
#include "/EgtDev/Include/EgtNumUtils.h"
|
||||
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
||||
#include "/EgtDev/Include/EGkSurfTriMesh.h"
|
||||
#include "/EgtDev/Include/EGkIntersPlaneSurfTm.h"
|
||||
|
||||
class ICAvToolSurfTm ;
|
||||
class ICAvParSilhouettesSurfTm ;
|
||||
|
||||
// struttura informazioni sui singoli percorsi
|
||||
struct PathInfoSR {
|
||||
bool bOutStart ; // flag per entrata da fuori
|
||||
bool bSingleCrv ; // se percorso formato da una curva singola ( in generale per SubSteps)
|
||||
bool bOptTrap ; // flag per casi ottimizzati a trapezio ( per Spiral)
|
||||
bool bIsZigZagOneWayBorder ; // curve di bordo dei lati chiusi ( per ZigZag e OneWay)
|
||||
PtrOwner<ICurveComposite> pCrvPath ; // percorso del centro utensile
|
||||
PtrOwner<ICurveComposite> pCvrRet ; // curva di ritorno per LeadIn/Out a guida
|
||||
} ;
|
||||
// tipo percorso
|
||||
typedef std::vector<PathInfoSR> PATHINFOSRVECTOR ;
|
||||
|
||||
// struttura informazioni per Step/SubSteps complessivi
|
||||
struct StepInfoSR {
|
||||
double dDepth ; // profondità dello step attuale
|
||||
double dRelativeDepth ; // profondità relativa allo step al di sopra
|
||||
double dZlocCoeffFeed ; // coeffiziente riduzione Feed lungo Zloc
|
||||
int nSubType ; // tipo di lavorazione dello Step corrente
|
||||
bool bIsExtraStep ; // flag per SubStep o PlaneZStep
|
||||
bool bInverted ; // se percorsi invertiti
|
||||
PtrOwner<ISurfFlatRegion> pSfrPock ; // regione piana di svuotatura
|
||||
PtrOwner<ISurfFlatRegion> pSfrLimit ; // regione piana da non svuotare
|
||||
PATHINFOSRVECTOR vPaths ; // percorsi di Pocketing
|
||||
} ;
|
||||
// tipo step
|
||||
typedef std::vector<StepInfoSR> STEPINFOSRVECTOR ;
|
||||
// planeZ detection <SfrFace, dDepth>
|
||||
typedef std::pair<PtrOwner<ISurfFlatRegion>, double> PLANEZFACE ;
|
||||
typedef std::vector<PLANEZFACE> PLANEZFACEVECTOR ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class SurfRoughing : public Machining
|
||||
{
|
||||
public : // IUserObj
|
||||
SurfRoughing* Clone( void) const override ;
|
||||
const std::string& GetClassName( void) const override ;
|
||||
bool Dump( std::string& sOut, bool bMM = true, const char* szNewLine = "\n") const override ;
|
||||
bool ToSave( void) const override
|
||||
{ return true ; }
|
||||
bool Save( int nBaseId, STRVECTOR& vString) const override ;
|
||||
bool Load( const STRVECTOR& vString, int nBaseGdbId) override ;
|
||||
|
||||
public : // Operation
|
||||
int GetType( void) const override
|
||||
{ return OPER_SURFROUGHING ; }
|
||||
bool IsEmpty( void) const override
|
||||
{ return ( m_nPaths == 0) ; }
|
||||
bool UpdateStatus( int nModif) override
|
||||
{ m_nStatus |= nModif ; return true ; }
|
||||
|
||||
protected : // Operation
|
||||
int GetSolCh( void) const override
|
||||
{ return m_Params.m_nSolCh ; }
|
||||
bool AdjustEndPointForAxesCalc( const CamData* pCamData, Point3d& ptP) const override ;
|
||||
|
||||
public : // Machining
|
||||
bool Prepare( const std::string& sSawName) override ;
|
||||
bool SetParam( int nType, bool bVal) override ;
|
||||
bool SetParam( int nType, int nVal) override ;
|
||||
bool SetParam( int nType, double dVal) override ;
|
||||
bool SetParam( int nType, const std::string& sVal) override ;
|
||||
bool SetGeometry( const SELVECTOR& vIds) override ;
|
||||
bool Preview( bool bRecalc) override ;
|
||||
bool Apply( bool bRecalc, bool bPostApply) override ;
|
||||
bool Update( bool bPostApply) override ;
|
||||
bool GetParam( int nType, bool& bVal) const override ;
|
||||
bool GetParam( int nType, int& nVal) const override ;
|
||||
bool GetParam( int nType, double& dVal) const override ;
|
||||
bool GetParam( int nType, std::string& sVal) const override ;
|
||||
bool UpdateToolData( bool* pbChanged = nullptr) override ;
|
||||
const ToolData& GetToolData( void) const override ;
|
||||
bool GetGeometry( SELVECTOR& vIds) const override ;
|
||||
|
||||
public :
|
||||
SurfRoughing( void) ;
|
||||
|
||||
private :
|
||||
bool MyApply( bool bRecalc, bool bPostApply) ;
|
||||
bool VerifyGeometry( SelData Id, int& nSubs) ;
|
||||
bool GetCurves( SelData Id, ICURVEPLIST& lstPC) ;
|
||||
bool Chain( int nGrpDestId) ;
|
||||
bool ProcessPath( int nPathId, int nPvId, int nClId) ;
|
||||
bool DetectPlaneZ( const CISURFTMPVECTOR& vpStm, const Frame3d& frCompo, const Vector3d& vtTool, PLANEZFACEVECTOR& vPlaneZ,
|
||||
double dMinDepth, double dMaxDepth) const ;
|
||||
bool CalcPaths( const INTINTVECTOR& vPocket, STEPINFOSRVECTOR& vStepInfo) const ;
|
||||
bool CalcRegionElevation( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dRad, double dLen, double& dElev) const ;
|
||||
bool AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, double dElev, double dStep, double dSubStep, bool bSplitArcs) ;
|
||||
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr, bool bOutStart, bool bAbsFirst) ;
|
||||
bool AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr, bool bOutMove) ;
|
||||
bool AddLinkRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
|
||||
bool AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
|
||||
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtTool, const ICurveComposite* pCrvPath, Point3d& ptP1) const ;
|
||||
bool AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN,
|
||||
const ISurfFlatRegion* pSfr, const ICurveComposite* pRCrv, bool bAtLeft, bool bSplitArcs,
|
||||
bool bNoneForced, bool bSkipControl) ;
|
||||
bool AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d& vtN,
|
||||
const ICurveComposite* pRCrv, bool bSplitArcs, bool bNoneForced, Point3d& ptP1) ;
|
||||
ISurfTriMesh* GetRaw( void) const ;
|
||||
ISurfTriMesh* GetStmOutSideSfr( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pStmRaw, const Vector3d& vtExtr) const ;
|
||||
ISurfFlatRegion* GetSfrByStmIntersection( const IntersParPlanesSurfTm& IPPStm, double dDist, double dSmallOffs = 0) const ;
|
||||
ISurfFlatRegion* GetSfrSilhouette( ICAvParSilhouettesSurfTm* pCavParSilh, double dDepth, double Sil_tol, bool& bOk) const ;
|
||||
bool GetActiveSurfaces( INTVECTOR& vSurfId) const ;
|
||||
double GetRightFeed( const Vector3d& vtMove, const Vector3d& vtTool) const ;
|
||||
double GetRadiusForStartEndElevation( void) const ;
|
||||
bool ResetCurveAllTempProp( ICurve* pCurve) const ;
|
||||
bool RemoveChunksUnderTolerance( ISurfFlatRegion* pSfr, double dTol, ISurfFlatRegion* pSfrLimit,
|
||||
ISurfFlatRegion* pSfrToUpdate = nullptr) const ;
|
||||
bool CloseOpenEdgesUnderTolerance( ISurfFlatRegion* pSfr, double dToler) ;
|
||||
bool ModifySurfForOpenCloseEdges( ISurfFlatRegion* pSfr, const Vector3d& vtTool, const ICurveComposite* pCrvCompo) const ;
|
||||
bool ChooseCloseOrOpenEdge( ISurfFlatRegion* pSfr, const ISurfFlatRegion* pSfrRef) const ;
|
||||
bool SimplifyCurve( ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vCrvCheck) const ;
|
||||
bool SimplyfySfr( ISurfFlatRegion* pSfr) const ;
|
||||
bool CheckSafetyLinearLink( const Point3d& ptCurr, const ISurfFlatRegion* pSfrLimit, const Vector3d& vtTool,
|
||||
const Point3d& ptDest, bool& bSafe) const ;
|
||||
bool GetHomogeneousParts( const ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vpCrvs) const ;
|
||||
bool VerifyLeadInHelix( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptCen, double dHelixRad) const ;
|
||||
bool VerifyLeadInZigZag( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptPa, const Point3d& ptPb) const ;
|
||||
|
||||
private :
|
||||
double GetSpeed() const
|
||||
{ return ( IsNullAngValue( m_Params.m_dSpeed) ? m_TParams.m_dSpeed : m_Params.m_dSpeed) ; }
|
||||
double GetFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dFeed) ? m_TParams.m_dFeed : m_Params.m_dFeed) ; }
|
||||
double GetAdaptedCoeffFeed( bool bExtraStep, double dDepth, double dStep) const
|
||||
{ if ( ! bExtraStep || dStep < 10 * EPS_SMALL)
|
||||
return 1. ;
|
||||
return ( 1. + ( - dDepth / dStep) - std::floor( - dDepth / dStep)) ; } ;
|
||||
double GetStartFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dStartFeed) ? m_TParams.m_dStartFeed : m_Params.m_dStartFeed) ; }
|
||||
double GetEndFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dEndFeed) ? m_TParams.m_dEndFeed : m_Params.m_dEndFeed) ; }
|
||||
double GetTipFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dTipFeed) ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; }
|
||||
double GetOffsR() const
|
||||
{ double dCurrOffsR = IsUnknownValue( m_Params.m_dOffsR) ? m_TParams.m_dOffsR : m_Params.m_dOffsR ;
|
||||
return std::max( 0.1, dCurrOffsR) ; }
|
||||
double GetOffsL() const
|
||||
{ return ( IsUnknownValue( m_Params.m_dOffsL) ? m_TParams.m_dOffsL : m_Params.m_dOffsL) ; }
|
||||
double GetSideStep( void) const
|
||||
{ return Clamp( m_Params.m_dSideStep, 0.1, m_TParams.m_dTDiam) ; }
|
||||
int GetLeadInType( void) const
|
||||
{ if ( m_Params.m_dLiTang < std::min( 0.1 * m_TParams.m_dDiam, 1.0))
|
||||
return SURFROU_LI_NONE ;
|
||||
if ( m_Params.m_nLeadInType != SURFROU_LI_GLIDE && m_Params.m_dLiElev < 10 * EPS_SMALL)
|
||||
return SURFROU_LI_NONE ;
|
||||
return m_Params.m_nLeadInType ; }
|
||||
bool LeadInRawIsOk( void) const
|
||||
{ if ( m_TParams.m_nType != TT_MILL_NOTIP)
|
||||
return true ;
|
||||
return (( GetLeadInType() == SURFROU_LI_ZIGZAG || GetLeadInType() == SURFROU_LI_HELIX) &&
|
||||
m_Params.m_dLiTang >= 0.9 * m_TParams.m_dDiam && m_Params.m_dLiElev <= 2) ; }
|
||||
int GetLeadOutType( void) const
|
||||
{ if ( m_Params.m_dLoTang < std::min( 0.1 * m_TParams.m_dDiam, 1.0))
|
||||
return SURFROU_LO_NONE ;
|
||||
return m_Params.m_nLeadOutType ; }
|
||||
|
||||
/* debug functions */
|
||||
void DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf, Color Col, bool bAlphaCoverage, std::string sName) ;
|
||||
void DrawFeed( const ICurve* pCrv, double dFeed) ;
|
||||
void DrawNormalShaderSurfTm( const ISurfTriMesh* pStm, std::string sName) ;
|
||||
/* end debug functions */
|
||||
|
||||
private :
|
||||
SELVECTOR m_vId ; // identificativi entità geometriche da lavorare
|
||||
SurfRoughingData m_Params ; // parametri lavorazione
|
||||
ToolData m_TParams ; // parametri utensile
|
||||
double m_dTHoldBase ; // posizione base del porta-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_nPaths ; // numero di percorsi di lavoro generati
|
||||
double m_dMaxHelixRad ; // raggio massimo attacco ad elica nel caso di cerchi
|
||||
double m_dStepToler ; // tolleranza di rimozione chunk per Steps
|
||||
double m_dSubStepToler ; // tolleranza di rimozione chunk per SubSteps
|
||||
bool m_bDetectPlaneZ ; // flag per calcolo piani in Zloc di Pocketing
|
||||
bool m_bRunning ; // flag di calcoli in corso
|
||||
} ;
|
||||
@@ -1,713 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2024-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : SurfRoughingData.cpp Data : 24.05.24 Versione : 2.6e5
|
||||
// Contenuto : Implementazione struttura dati lavorazione sgrossatura superfici.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 24.05.24 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "SurfRoughingData.h"
|
||||
#include "MachiningDataFactory.h"
|
||||
#include "MachiningConst.h"
|
||||
#include "/EgtDev/Include/EmkToolConst.h"
|
||||
#include "/EgtDev/Include/EmkSimuGenConst.h"
|
||||
#include "/EgtDev/Include/EGnStringUtils.h"
|
||||
#include <array>
|
||||
#include <cassert>
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
enum nSurfRoughingKey {
|
||||
KEY_AB = 0,
|
||||
KEY_AI,
|
||||
KEY_APPR,
|
||||
KEY_DH,
|
||||
KEY_F,
|
||||
KEY_FE,
|
||||
KEY_FS,
|
||||
KEY_FT,
|
||||
KEY_INV,
|
||||
KEY_LIEL,
|
||||
KEY_LITG,
|
||||
KEY_LITY,
|
||||
KEY_LOTG,
|
||||
KEY_LOTY,
|
||||
KEY_NAME,
|
||||
KEY_NNS,
|
||||
KEY_NNU,
|
||||
KEY_OL,
|
||||
KEY_OR,
|
||||
KEY_PS,
|
||||
KEY_S,
|
||||
KEY_SA,
|
||||
KEY_SCC,
|
||||
KEY_SS,
|
||||
KEY_SST,
|
||||
KEY_ST,
|
||||
KEY_SUBTYPE,
|
||||
KEY_TNAME,
|
||||
KEY_TUUID,
|
||||
KEY_UUID,
|
||||
KEY_ZZZ} ; // rappresenta il numero di elementi
|
||||
|
||||
static const array<string,KEY_ZZZ> sSurfRoughingKey = {
|
||||
"AB",
|
||||
"AI",
|
||||
"APPR",
|
||||
"DH",
|
||||
"F",
|
||||
"FE",
|
||||
"FS",
|
||||
"FT",
|
||||
"INV",
|
||||
"LIEL",
|
||||
"LITG",
|
||||
"LITY",
|
||||
"LOTG",
|
||||
"LOTY",
|
||||
"NAME",
|
||||
"NNS",
|
||||
"NNU",
|
||||
"OL",
|
||||
"OR",
|
||||
"PS",
|
||||
"S",
|
||||
"SA",
|
||||
"SCC",
|
||||
"SS",
|
||||
"SST",
|
||||
"ST",
|
||||
"SUB",
|
||||
"TN",
|
||||
"TU",
|
||||
"UUID"} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
MCHDATA_REGISTER( MT_SURFROUGHING, "SURFROUGHING", SurfRoughingData) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
SurfRoughingData*
|
||||
SurfRoughingData::Clone( void) const
|
||||
{
|
||||
// alloco oggetto
|
||||
SurfRoughingData* pMdata = new(nothrow) SurfRoughingData ;
|
||||
// copio i dati
|
||||
if ( pMdata != nullptr) {
|
||||
if ( ! pMdata->CopyFrom( this)) {
|
||||
delete pMdata ;
|
||||
return nullptr ;
|
||||
}
|
||||
}
|
||||
return pMdata ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::CopyFrom( const MachiningData* pMdata)
|
||||
{
|
||||
// è inutile copiare se sorgente coincide con destinazione
|
||||
if ( pMdata == this)
|
||||
return true ;
|
||||
// la sorgente deve essere dello stesso tipo
|
||||
const SurfRoughingData* pSdata = GetSurfRoughingData( pMdata) ;
|
||||
if ( pSdata == nullptr)
|
||||
return false ;
|
||||
// eseguo copia
|
||||
m_Uuid = pSdata->m_Uuid ;
|
||||
m_sName = pSdata->m_sName ;
|
||||
m_ToolUuid = pSdata->m_ToolUuid ;
|
||||
m_sToolName = pSdata->m_sToolName ;
|
||||
m_sBlockedAxis = pSdata->m_sBlockedAxis ;
|
||||
m_sInitAngs = pSdata->m_sInitAngs ;
|
||||
m_nSolCh = pSdata->m_nSolCh ;
|
||||
m_dSpeed = pSdata->m_dSpeed ;
|
||||
m_dFeed = pSdata->m_dFeed ;
|
||||
m_dEndFeed = pSdata->m_dEndFeed ;
|
||||
m_dStartFeed = pSdata->m_dStartFeed ;
|
||||
m_dTipFeed = pSdata->m_dTipFeed ;
|
||||
m_dOffsR = pSdata->m_dOffsR ;
|
||||
m_dOffsL = pSdata->m_dOffsL ;
|
||||
m_bInvert = pSdata->m_bInvert ;
|
||||
m_sDepth = pSdata->m_sDepth ;
|
||||
m_dStartPos = pSdata->m_dStartPos ;
|
||||
m_dStep = pSdata->m_dStep ;
|
||||
m_dSubStep = pSdata->m_dSubStep ;
|
||||
m_dSideStep = pSdata->m_dSideStep ;
|
||||
m_nSubType = pSdata->m_nSubType ;
|
||||
m_dSideAngle = pSdata->m_dSideAngle ;
|
||||
m_nLeadInType = pSdata->m_nLeadInType ;
|
||||
m_dLiElev = pSdata->m_dLiElev ;
|
||||
m_dLiTang = pSdata->m_dLiTang ;
|
||||
m_nLeadOutType = pSdata->m_nLeadOutType ;
|
||||
m_dLoTang = pSdata->m_dLoTang ;
|
||||
m_dApprox = pSdata->m_dApprox ;
|
||||
m_sSysNotes = pSdata->m_sSysNotes ;
|
||||
m_sUserNotes = pSdata->m_sUserNotes ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::SameAs(const MachiningData* pMdata) const
|
||||
{
|
||||
// se coincide con altro -> uguali
|
||||
if ( pMdata == this)
|
||||
return true ;
|
||||
// se sono di tipo diverso -> diversi
|
||||
const SurfRoughingData* pSdata = GetSurfRoughingData( pMdata) ;
|
||||
if ( pSdata == nullptr)
|
||||
return false ;
|
||||
// confronto termine a termine
|
||||
return ( m_Uuid == pSdata->m_Uuid &&
|
||||
m_sName == pSdata->m_sName &&
|
||||
m_ToolUuid == pSdata->m_ToolUuid &&
|
||||
m_sToolName == pSdata->m_sToolName &&
|
||||
m_sBlockedAxis == pSdata->m_sBlockedAxis &&
|
||||
m_sInitAngs == pSdata->m_sInitAngs &&
|
||||
m_nSolCh == pSdata->m_nSolCh &&
|
||||
abs( m_dSpeed - pSdata->m_dSpeed) < EPS_MACH_ANG_PAR &&
|
||||
abs( m_dFeed - pSdata->m_dFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dEndFeed - pSdata->m_dEndFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dStartFeed - pSdata->m_dStartFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dTipFeed - pSdata->m_dTipFeed) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dOffsR - pSdata->m_dOffsR) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dOffsL - pSdata->m_dOffsL) < EPS_MACH_LEN_PAR &&
|
||||
m_bInvert == pSdata->m_bInvert &&
|
||||
m_sDepth == pSdata->m_sDepth &&
|
||||
abs( m_dStartPos - pSdata->m_dStartPos) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dStep - pSdata->m_dStep) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dSubStep - pSdata->m_dSubStep) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dSideStep - pSdata->m_dSideStep) < EPS_MACH_LEN_PAR &&
|
||||
m_nSubType == pSdata->m_nSubType &&
|
||||
abs( m_dSideAngle - pSdata->m_dSideAngle) < EPS_MACH_ANG_PAR &&
|
||||
m_nLeadInType == pSdata->m_nLeadInType &&
|
||||
abs( m_dLiElev - pSdata->m_dLiElev) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dLiTang - pSdata->m_dLiTang) < EPS_MACH_LEN_PAR &&
|
||||
m_nLeadOutType == pSdata->m_nLeadOutType &&
|
||||
abs( m_dLoTang - pSdata->m_dLoTang) < EPS_MACH_LEN_PAR &&
|
||||
abs( m_dApprox - pSdata->m_dApprox) < EPS_MACH_LEN_PAR &&
|
||||
m_sSysNotes == pSdata->m_sSysNotes &&
|
||||
m_sUserNotes == pSdata->m_sUserNotes) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
SurfRoughingData::GetSize( void) const
|
||||
{
|
||||
// in debug verifico validità ultimo campo
|
||||
assert( sSurfRoughingKey[KEY_UUID] == "UUID") ;
|
||||
return KEY_ZZZ ;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
string
|
||||
SurfRoughingData::GetTitle( void) const
|
||||
{
|
||||
return MCHDATA_GETNAME( SurfRoughingData) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
FindSurfRoughingKey( const string& sKey)
|
||||
{
|
||||
auto TheRange = equal_range( sSurfRoughingKey.cbegin(), sSurfRoughingKey.cend(), sKey) ;
|
||||
if ( TheRange.first == TheRange.second)
|
||||
return -1 ;
|
||||
return int( TheRange.first - sSurfRoughingKey.cbegin()) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::FromString( const string& sString, int& nKey)
|
||||
{
|
||||
// separo chiave da valore
|
||||
string sKey, sVal ;
|
||||
SplitFirst( sString, "=", sKey, sVal) ;
|
||||
// riconosco la chiave
|
||||
nKey = FindSurfRoughingKey( ToUpper( sKey)) ;
|
||||
bool bOk = ( nKey >= 0) ;
|
||||
switch ( nKey) {
|
||||
case KEY_AB :
|
||||
m_sBlockedAxis = sVal ;
|
||||
break ;
|
||||
case KEY_AI :
|
||||
m_sInitAngs = sVal ;
|
||||
break ;
|
||||
case KEY_APPR :
|
||||
bOk = ::FromString( sVal, m_dApprox) ;
|
||||
break ;
|
||||
case KEY_DH :
|
||||
m_sDepth = sVal ;
|
||||
if ( m_sDepth.empty())
|
||||
m_sDepth = "0" ;
|
||||
break ;
|
||||
case KEY_F :
|
||||
bOk = ::FromString( sVal, m_dFeed) ;
|
||||
break ;
|
||||
case KEY_FE :
|
||||
bOk = ::FromString( sVal, m_dEndFeed) ;
|
||||
break ;
|
||||
case KEY_FS :
|
||||
bOk = ::FromString( sVal, m_dStartFeed) ;
|
||||
break ;
|
||||
case KEY_FT :
|
||||
bOk = ::FromString( sVal, m_dTipFeed) ;
|
||||
break ;
|
||||
case KEY_INV :
|
||||
bOk = ::FromString( sVal, m_bInvert) ;
|
||||
break ;
|
||||
case KEY_LIEL :
|
||||
bOk = ::FromString( sVal, m_dLiElev) ;
|
||||
break ;
|
||||
case KEY_LITG :
|
||||
bOk = ::FromString( sVal, m_dLiTang) ;
|
||||
break ;
|
||||
case KEY_LITY :
|
||||
bOk = ::FromString( sVal, m_nLeadInType) ;
|
||||
break ;
|
||||
case KEY_LOTG :
|
||||
bOk = ::FromString( sVal, m_dLoTang) ;
|
||||
break ;
|
||||
case KEY_LOTY :
|
||||
bOk = ::FromString( sVal, m_nLeadOutType) ;
|
||||
break ;
|
||||
case KEY_NAME :
|
||||
m_sName = sVal ;
|
||||
bOk = ! m_sName.empty() ;
|
||||
break ;
|
||||
case KEY_NNS :
|
||||
m_sSysNotes = sVal ;
|
||||
break ;
|
||||
case KEY_NNU :
|
||||
m_sUserNotes = sVal ;
|
||||
break ;
|
||||
case KEY_OR :
|
||||
bOk = ::FromString( sVal, m_dOffsR) ;
|
||||
break ;
|
||||
case KEY_OL :
|
||||
bOk = ::FromString( sVal, m_dOffsL) ;
|
||||
break ;
|
||||
case KEY_PS :
|
||||
bOk = ::FromString( sVal, m_dStartPos) ;
|
||||
break ;
|
||||
case KEY_S :
|
||||
bOk = ::FromString( sVal, m_dSpeed) ;
|
||||
break ;
|
||||
case KEY_SA :
|
||||
bOk = ::FromString( sVal, m_dSideAngle) ;
|
||||
break ;
|
||||
case KEY_SCC :
|
||||
bOk = ::FromString( sVal, m_nSolCh) ;
|
||||
break ;
|
||||
case KEY_SST :
|
||||
bOk = ::FromString( sVal, m_dSubStep) ;
|
||||
break ;
|
||||
case KEY_SS :
|
||||
bOk = ::FromString( sVal, m_dSideStep) ;
|
||||
break ;
|
||||
case KEY_ST :
|
||||
bOk = ::FromString( sVal, m_dStep) ;
|
||||
break ;
|
||||
case KEY_SUBTYPE :
|
||||
bOk = ::FromString( sVal, m_nSubType) ;
|
||||
break ;
|
||||
case KEY_TNAME :
|
||||
m_sToolName = sVal ;
|
||||
break ;
|
||||
case KEY_TUUID :
|
||||
bOk = ::FromString( sVal, m_ToolUuid) ;
|
||||
break ;
|
||||
case KEY_UUID :
|
||||
bOk = ::FromString( sVal, m_Uuid) ;
|
||||
break ;
|
||||
default :
|
||||
bOk = false ;
|
||||
break ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
string
|
||||
SurfRoughingData::ToString( int nInd) const
|
||||
{
|
||||
switch ( nInd) {
|
||||
case KEY_AB : return ( sSurfRoughingKey[KEY_AB] + "=" + m_sBlockedAxis) ;
|
||||
case KEY_AI : return ( sSurfRoughingKey[KEY_AI] + "=" + m_sInitAngs) ;
|
||||
case KEY_APPR : return ( sSurfRoughingKey[KEY_APPR] + "=" + ::ToString(m_dApprox)) ;
|
||||
case KEY_DH : return ( sSurfRoughingKey[KEY_DH] + "=" + m_sDepth) ;
|
||||
case KEY_F : return ( sSurfRoughingKey[KEY_F] + "=" + ::ToString( m_dFeed)) ;
|
||||
case KEY_FE : return ( sSurfRoughingKey[KEY_FE] + "=" + ::ToString( m_dEndFeed)) ;
|
||||
case KEY_FS : return ( sSurfRoughingKey[KEY_FS] + "=" + ::ToString( m_dStartFeed)) ;
|
||||
case KEY_FT : return ( sSurfRoughingKey[KEY_FT] + "=" + ::ToString( m_dTipFeed)) ;
|
||||
case KEY_INV : return ( sSurfRoughingKey[KEY_INV] + "=" + ::ToString( m_bInvert)) ;
|
||||
case KEY_LIEL : return ( sSurfRoughingKey[KEY_LIEL] + "=" + ::ToString( m_dLiElev)) ;
|
||||
case KEY_LITG : return ( sSurfRoughingKey[KEY_LITG] + "=" + ::ToString( m_dLiTang)) ;
|
||||
case KEY_LITY : return ( sSurfRoughingKey[KEY_LITY] + "=" + ::ToString( m_nLeadInType)) ;
|
||||
case KEY_LOTG : return ( sSurfRoughingKey[KEY_LOTG] + "=" + ::ToString( m_dLoTang)) ;
|
||||
case KEY_LOTY : return ( sSurfRoughingKey[KEY_LOTY] + "=" + ::ToString( m_nLeadOutType)) ;
|
||||
case KEY_NAME : return ( sSurfRoughingKey[KEY_NAME] + "=" + m_sName) ;
|
||||
case KEY_NNS : return ( sSurfRoughingKey[KEY_NNS] + "=" + m_sSysNotes) ;
|
||||
case KEY_NNU : return ( sSurfRoughingKey[KEY_NNU] + "=" + m_sUserNotes) ;
|
||||
case KEY_OL : return ( sSurfRoughingKey[KEY_OL] + "=" + ::ToString( m_dOffsL)) ;
|
||||
case KEY_OR : return ( sSurfRoughingKey[KEY_OR] + "=" + ::ToString( m_dOffsR)) ;
|
||||
case KEY_PS : return ( sSurfRoughingKey[KEY_PS] + "=" + ::ToString( m_dStartPos)) ;
|
||||
case KEY_S : return ( sSurfRoughingKey[KEY_S] + "=" + ::ToString( m_dSpeed)) ;
|
||||
case KEY_SA : return ( sSurfRoughingKey[KEY_SA] + "=" + ::ToString( m_dSideAngle)) ;
|
||||
case KEY_SCC : return ( sSurfRoughingKey[KEY_SCC] + "=" + ::ToString( m_nSolCh)) ;
|
||||
case KEY_SST : return ( sSurfRoughingKey[KEY_SST] + "=" + ::ToString( m_dSubStep)) ;
|
||||
case KEY_SS : return ( sSurfRoughingKey[KEY_SS] + "=" + ::ToString( m_dSideStep)) ;
|
||||
case KEY_ST : return ( sSurfRoughingKey[KEY_ST] + "=" + ::ToString( m_dStep)) ;
|
||||
case KEY_SUBTYPE : return ( sSurfRoughingKey[KEY_SUBTYPE] + "=" + ::ToString( m_nSubType)) ;
|
||||
case KEY_TNAME : return ( sSurfRoughingKey[KEY_TNAME] + "=" + m_sToolName) ;
|
||||
case KEY_TUUID : return ( sSurfRoughingKey[KEY_TUUID] + "=" + ::ToString( m_ToolUuid)) ;
|
||||
case KEY_UUID : return ( sSurfRoughingKey[KEY_UUID] + "=" + ::ToString( m_Uuid)) ;
|
||||
default : return "" ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::IsOptional( int nKey) const
|
||||
{
|
||||
return ( nKey == KEY_LIEL || nKey == KEY_SST) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::VerifySolCh( int nVal) const
|
||||
{
|
||||
return IsValidOperationScc( nVal) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::VerifySubType( int nVal) const
|
||||
{
|
||||
return ( nVal == SURFROU_SUB_ZIGZAG || nVal == SURFROU_SUB_ONEWAY ||
|
||||
nVal == SURFROU_SUB_SPIRALIN || nVal == SURFROU_SUB_SPIRALOUT ||
|
||||
nVal == SURFROU_SUB_CONFORMAL_ZIGZAG || nVal == SURFROU_SUB_CONFORMAL_ONEWAY) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::VerifyLeadInType( int nVal) const
|
||||
{
|
||||
return ( nVal == SURFROU_LI_NONE || nVal == SURFROU_LI_GLIDE ||
|
||||
nVal == SURFROU_LI_ZIGZAG || nVal == SURFROU_LI_HELIX) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::VerifyLeadOutType( int nVal) const
|
||||
{
|
||||
return ( nVal == SURFROU_LO_NONE || nVal == SURFROU_LO_GLIDE) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::VerifyTool( const ToolsMgr* pToolsMgr, const string& sVal, const ToolData*& pTdata) const
|
||||
{
|
||||
if ( pToolsMgr == nullptr)
|
||||
return false ;
|
||||
pTdata = pToolsMgr->GetTool( sVal) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
if ( ( pTdata->m_nType & TF_MILL) == 0)
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const
|
||||
{
|
||||
if ( pToolsMgr == nullptr)
|
||||
return false ;
|
||||
pTdata = pToolsMgr->GetTool( m_ToolUuid) ;
|
||||
return ( pTdata != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::SetParam( int nType, bool bVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
m_bInvert = bVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::SetParam( int nType, int nVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_LEADINTYPE :
|
||||
if ( ! VerifyLeadInType( nVal))
|
||||
return false ;
|
||||
m_nLeadInType = nVal ;
|
||||
return true ;
|
||||
case MPA_LEADOUTTYPE :
|
||||
if ( ! VerifyLeadOutType( nVal))
|
||||
return false ;
|
||||
m_nLeadOutType = nVal ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
if ( ! VerifySolCh( nVal))
|
||||
return false ;
|
||||
m_nSolCh = nVal ;
|
||||
return true ;
|
||||
case MPA_SUBTYPE :
|
||||
if ( ! VerifySubType( nVal))
|
||||
return false ;
|
||||
m_nSubType = nVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::SetParam( int nType, double dVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_SPEED :
|
||||
m_dSpeed = dVal ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
m_dFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
m_dStartFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
m_dEndFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
m_dTipFeed = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
m_dOffsR = dVal ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
m_dOffsL = dVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH :
|
||||
m_sDepth = ::ToString( dVal) ;
|
||||
return true ;
|
||||
case MPA_STARTPOS :
|
||||
m_dStartPos = dVal ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
m_dStep = dVal ;
|
||||
return true ;
|
||||
case MPA_SUBSTEP :
|
||||
m_dSubStep = dVal ;
|
||||
return true ;
|
||||
case MPA_SIDESTEP :
|
||||
m_dSideStep = dVal ;
|
||||
return true ;
|
||||
case MPA_SIDEANGLE :
|
||||
m_dSideAngle = dVal ;
|
||||
return true ;
|
||||
case MPA_LIELEV :
|
||||
m_dLiElev = dVal ;
|
||||
return true ;
|
||||
case MPA_LITANG :
|
||||
m_dLiTang = dVal ;
|
||||
return true ;
|
||||
case MPA_LOTANG :
|
||||
m_dLoTang = dVal ;
|
||||
return true ;
|
||||
case MPA_APPROX :
|
||||
m_dApprox = dVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::SetParam( int nType, const string& sVal)
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_NAME :
|
||||
m_sName = sVal ;
|
||||
return true ;
|
||||
case MPA_TOOL :
|
||||
m_sToolName = sVal ;
|
||||
return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
m_sDepth = sVal ;
|
||||
return true ;
|
||||
case MPA_TUUID :
|
||||
return ::FromString( sVal, m_ToolUuid) ;
|
||||
case MPA_UUID :
|
||||
return ::FromString( sVal, m_Uuid) ;
|
||||
case MPA_SYSNOTES :
|
||||
m_sSysNotes = sVal ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
m_sUserNotes = sVal ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
m_sInitAngs = sVal ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
m_sBlockedAxis = sVal ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::ResetTool( void)
|
||||
{
|
||||
m_sToolName.clear() ;
|
||||
m_ToolUuid.Clear() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::GetParam( int nType, bool& bVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_INVERT :
|
||||
bVal = m_bInvert ;
|
||||
return true ;
|
||||
}
|
||||
bVal = false ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::GetParam( int nType, int& nVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_TYPE :
|
||||
nVal = MT_SURFROUGHING ;
|
||||
return true ;
|
||||
case MPA_SUBTYPE :
|
||||
nVal = m_nSubType ;
|
||||
return true ;
|
||||
case MPA_LEADINTYPE :
|
||||
nVal = m_nLeadInType ;
|
||||
return true ;
|
||||
case MPA_LEADOUTTYPE :
|
||||
nVal = m_nLeadOutType ;
|
||||
return true ;
|
||||
case MPA_SCC :
|
||||
nVal = m_nSolCh ;
|
||||
return true ;
|
||||
}
|
||||
nVal = 0 ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::GetParam( int nType, double& dVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_SPEED :
|
||||
dVal = m_dSpeed ;
|
||||
return true ;
|
||||
case MPA_FEED :
|
||||
dVal = m_dFeed ;
|
||||
return true ;
|
||||
case MPA_STARTFEED :
|
||||
dVal = m_dStartFeed ;
|
||||
return true ;
|
||||
case MPA_ENDFEED :
|
||||
dVal = m_dEndFeed ;
|
||||
return true ;
|
||||
case MPA_TIPFEED :
|
||||
dVal = m_dTipFeed ;
|
||||
return true ;
|
||||
case MPA_OFFSR :
|
||||
dVal = m_dOffsR ;
|
||||
return true ;
|
||||
case MPA_OFFSL :
|
||||
dVal = m_dOffsL ;
|
||||
return true ;
|
||||
case MPA_STARTPOS :
|
||||
dVal = m_dStartPos ;
|
||||
return true ;
|
||||
case MPA_STEP :
|
||||
dVal = m_dStep ;
|
||||
return true ;
|
||||
case MPA_SUBSTEP :
|
||||
dVal = m_dSubStep ;
|
||||
return true ;
|
||||
case MPA_SIDESTEP :
|
||||
dVal = m_dSideStep ;
|
||||
return true ;
|
||||
case MPA_SIDEANGLE :
|
||||
dVal = m_dSideAngle ;
|
||||
return true ;
|
||||
case MPA_LIELEV :
|
||||
dVal = m_dLiElev ;
|
||||
return true ;
|
||||
case MPA_LITANG :
|
||||
dVal = m_dLiTang ;
|
||||
return true ;
|
||||
case MPA_LOTANG :
|
||||
dVal = m_dLoTang ;
|
||||
return true ;
|
||||
case MPA_APPROX :
|
||||
dVal = m_dApprox ;
|
||||
return true ;
|
||||
}
|
||||
dVal = 0 ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfRoughingData::GetParam( int nType, string& sVal) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case MPA_NAME :
|
||||
sVal = m_sName ;
|
||||
return true ;
|
||||
case MPA_TOOL :
|
||||
sVal = m_sToolName ;
|
||||
return true ;
|
||||
case MPA_DEPTH_STR :
|
||||
sVal = m_sDepth ;
|
||||
return true ;
|
||||
case MPA_TUUID :
|
||||
sVal = ::ToString( m_ToolUuid) ;
|
||||
return true ;
|
||||
case MPA_UUID :
|
||||
sVal = ::ToString( m_Uuid) ;
|
||||
return true ;
|
||||
case MPA_SYSNOTES :
|
||||
sVal = m_sSysNotes ;
|
||||
return true ;
|
||||
case MPA_USERNOTES :
|
||||
sVal = m_sUserNotes ;
|
||||
return true ;
|
||||
case MPA_INITANGS :
|
||||
sVal = m_sInitAngs ;
|
||||
return true ;
|
||||
case MPA_BLOCKEDAXIS :
|
||||
sVal = m_sBlockedAxis ;
|
||||
return true ;
|
||||
}
|
||||
sVal = "" ;
|
||||
return false ;
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2024-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : SurfRoughingData.h Data : 24.05.24 Versione : 2.6e5
|
||||
// Contenuto : Dichiarazione della struct SurfRoughingData e costanti associate.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 24.05.24 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "MachiningData.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct SurfRoughingData : public MachiningData
|
||||
{
|
||||
EgtUUID m_ToolUuid ; // identificativo universale dell'utensile
|
||||
std::string m_sToolName ; // nome dell'utensile
|
||||
std::string m_sInitAngs ; // angoli iniziali suggeriti (Nome1=val1,Nome2=val2)
|
||||
std::string m_sBlockedAxis ; // eventuale asse rotante bloccato (Nome=val)
|
||||
int m_nSolCh ; // criterio scelta soluzione (quando possibili molteplici)
|
||||
double m_dSpeed ; // velocità di rotazione (+ se CCW, - se CW) ( se 0 da utensile)
|
||||
double m_dFeed ; // velocità di lavorazione normale ( se 0 da utensile)
|
||||
double m_dStartFeed ; // velocità di lavorazione iniziale ( se 0 da utensile)
|
||||
double m_dEndFeed ; // velocità di lavorazione finale ( se 0 da utensile)
|
||||
double m_dTipFeed ; // velocità di lavorazione di testa ( se 0 da utensile)
|
||||
double m_dOffsR ; // offset radiale ( se UNKNOWN_PAR da utensile)
|
||||
double m_dOffsL ; // offset longitudinale ( se UNKNOWN_PAR da utensile)
|
||||
bool m_bInvert ; // flag di inversione direzione lavorazione
|
||||
std::string m_sDepth ; // affondamento massimo (espressione numerica)
|
||||
double m_dStartPos ; // quota di inizio lavorazione (sempre >= 0)
|
||||
double m_dStep ; // passo di affondamento (0=nessun passo)
|
||||
double m_dSideStep ; // distanza tra le passate
|
||||
double m_dSubStep ; // distanza tra le passate intermedie
|
||||
int m_nSubType ; // tipo di lavorazione ( ZigZag, OneWay, SpiralIn, SpiralOut)
|
||||
double m_dSideAngle ; // angolo dello ZigZag da X+ locale
|
||||
int m_nLeadInType ; // tipo di attacco (nessuno, lineare, tangente, inseguimento)
|
||||
double m_dLiTang ; // distanza tangente da inizio attacco
|
||||
double m_dLiElev ; // elevazione di uno step di attacco
|
||||
int m_nLeadOutType ; // tipo di uscita (come attacco, nessuno, lineare, tangente, inseguimento)
|
||||
double m_dLoTang ; // distanza tangente verso fine uscita
|
||||
double m_dApprox ; // valore di approssimazione per superfici
|
||||
std::string m_sSysNotes ; // note interne
|
||||
std::string m_sUserNotes ; // note dell'utente
|
||||
|
||||
SurfRoughingData( void)
|
||||
: m_ToolUuid(), m_nSolCh( 0), m_dSpeed( 0), m_dFeed( 0), m_dStartFeed( 0), m_dEndFeed( 0), m_dTipFeed( 0),
|
||||
m_dOffsR( UNKNOWN_PAR), m_dOffsL( UNKNOWN_PAR), m_bInvert( false),
|
||||
m_dStartPos( 0), m_dStep( 0), m_dSideStep( 0), m_dSubStep( 0), m_nSubType( 0), m_dSideAngle( 0),
|
||||
m_nLeadInType( 0), m_dLiTang( 0), m_dLiElev( 0),
|
||||
m_nLeadOutType( 0), m_dLoTang( 0), m_dApprox( 0) {}
|
||||
SurfRoughingData* Clone( void) const override ;
|
||||
bool CopyFrom( const MachiningData* pMdata) override ;
|
||||
bool SameAs(const MachiningData* pMdata) const override ;
|
||||
int GetType( void) const override
|
||||
{ return MT_SURFROUGHING ; }
|
||||
int GetSize( void) const override ;
|
||||
std::string GetTitle( void) const override ;
|
||||
bool FromString( const std::string& sString, int& nKey) override ;
|
||||
std::string ToString( int nInd) const override ;
|
||||
bool IsOptional( int nKey) const override ;
|
||||
bool SetParam( int nType, bool bVal) override ;
|
||||
bool SetParam( int nType, int nVal) override ;
|
||||
bool SetParam( int nType, double dVal) override ;
|
||||
bool SetParam( int nType, const std::string& sVal) override ;
|
||||
bool ResetTool( void) override ;
|
||||
bool GetParam( int nType, bool& bVal) const override;
|
||||
bool GetParam( int nType, int& nVal) const override ;
|
||||
bool GetParam( int nType, double& dVal) const override ;
|
||||
bool GetParam( int nType, std::string& sVal) const override ;
|
||||
bool GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const override ;
|
||||
bool VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, const ToolData*& pTdata) const override ;
|
||||
bool VerifySolCh( int nVal) const ;
|
||||
bool VerifySubType( int nVal) const ;
|
||||
bool VerifyLeadInType( int nVal) const ;
|
||||
bool VerifyLeadLinkType( int nVal) const ;
|
||||
bool VerifyLeadOutType( int nVal) const ;
|
||||
} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
inline const SurfRoughingData* GetSurfRoughingData( const MachiningData* pMdata)
|
||||
{ if ( pMdata == nullptr || pMdata->GetType() != MT_SURFROUGHING)
|
||||
return nullptr ;
|
||||
return ( static_cast<const SurfRoughingData*>( pMdata)) ; }
|
||||
inline SurfRoughingData* GetSurfRoughingData( MachiningData* pMdata)
|
||||
{ if ( pMdata == nullptr || pMdata->GetType() != MT_SURFROUGHING)
|
||||
return nullptr ;
|
||||
return ( static_cast<SurfRoughingData*>( pMdata)) ; }
|
||||
+1
-1
@@ -108,4 +108,4 @@ SameTool( const ToolData& Td1, const ToolData& Td2, bool bAlsoNameTcPosHeadExit
|
||||
abs( Td1.m_dMinFeed - Td2.m_dMinFeed) < EPS_FEED &&
|
||||
Td1.m_sSysNotes == Td2.m_sSysNotes &&
|
||||
Td1.m_sUserNotes == Td2.m_sUserNotes) ;
|
||||
}
|
||||
}
|
||||
@@ -551,11 +551,6 @@ ToolsMgr::SaveCurrTool( void)
|
||||
m_suData.emplace( m_tdCurrTool.m_sName, m_tdCurrTool.m_Uuid) ;
|
||||
}
|
||||
}
|
||||
// se fresa adatto sottotipo a seconda della capacità di lavorare di testa
|
||||
if ( m_tdCurrTool.m_nType == TT_MILL_STD && m_tdCurrTool.m_dTipFeed < EPS_SMALL)
|
||||
m_tdCurrTool.m_nType = TT_MILL_NOTIP ;
|
||||
else if ( m_tdCurrTool.m_nType == TT_MILL_NOTIP && m_tdCurrTool.m_dTipFeed > EPS_SMALL)
|
||||
m_tdCurrTool.m_nType = TT_MILL_STD ;
|
||||
// eseguo salvataggio
|
||||
m_bModified = true ;
|
||||
if ( find( m_utModified.begin(), m_utModified.end(), m_tdCurrTool.m_Uuid) == m_utModified.end())
|
||||
|
||||
+167
-239
@@ -498,15 +498,15 @@ WaterJetting::SetParam( int nType, const string& sVal)
|
||||
bool
|
||||
WaterJetting::SetGeometry( const SELVECTOR& vIds)
|
||||
{
|
||||
// verifico validità gestore DB geometrico
|
||||
// verifico validità gestore DB geometrico
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// reset della geometria corrente
|
||||
m_vId.clear() ;
|
||||
// verifico che gli identificativi rappresentino delle entità ammissibili (tutte curve, tutti testi o tutte facce)
|
||||
// verifico che gli identificativi rappresentino delle entità ammissibili (tutte curve, tutti testi o tutte facce)
|
||||
int nType = GEO_NONE ;
|
||||
for ( const auto& Id : vIds) {
|
||||
// test sull'entità
|
||||
// test sull'entità
|
||||
int nSubs ;
|
||||
if ( ! VerifyGeometry( Id, nSubs, nType)) {
|
||||
string sInfo = "Warning in WaterJetting : Skipped entity " + ToString( Id) ;
|
||||
@@ -529,14 +529,14 @@ WaterJetting::Preview( bool bRecalc)
|
||||
// reset numero percorsi di lavoro generati
|
||||
m_nMills = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
bool bChain = false ;
|
||||
// se non c'è, lo aggiungo
|
||||
// se non c'è, lo aggiungo
|
||||
if ( nAuxId == GDB_ID_NULL) {
|
||||
nAuxId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ;
|
||||
if ( nAuxId == GDB_ID_NULL)
|
||||
@@ -586,7 +586,7 @@ WaterJetting::Preview( bool bRecalc)
|
||||
|
||||
// recupero gruppo per geometria di Preview
|
||||
int nPvId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_PV) ;
|
||||
// se non c'è, lo aggiungo
|
||||
// se non c'è, lo aggiungo
|
||||
if ( nPvId == GDB_ID_NULL) {
|
||||
nPvId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ;
|
||||
if ( nPvId == GDB_ID_NULL)
|
||||
@@ -616,7 +616,7 @@ WaterJetting::Apply( bool bRecalc, bool bPostApply)
|
||||
int nCurrMills = m_nMills ;
|
||||
m_nMills = 0 ;
|
||||
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
@@ -630,15 +630,13 @@ WaterJetting::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// verifico se necessario continuare nell'aggiornamento
|
||||
if ( ! bRecalc && ! bToolChanged &&
|
||||
( m_nStatus == MCH_ST_OK || m_nStatus == MCH_ST_NO_POSTAPPL)) {
|
||||
( m_nStatus == MCH_ST_OK || ( ! bPostApply && m_nStatus == MCH_ST_NO_POSTAPPL))) {
|
||||
// confermo i percorsi di lavorazione
|
||||
m_nMills = nCurrMills ;
|
||||
string sLog = string( "WaterJetting apply skipped : status ") + ( m_nStatus == MCH_ST_OK ? "already ok" : "no postapply") ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), sLog.c_str()) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Milling apply skipped : status already ok") ;
|
||||
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
|
||||
if ( ! Update( bPostApply))
|
||||
return false ;
|
||||
m_nStatus = ( bPostApply ? MCH_ST_OK : MCH_ST_NO_POSTAPPL) ;
|
||||
LOG_DBG_INFO( GetEMkLogger(), "Update done") ;
|
||||
// esco con successo
|
||||
return true ;
|
||||
@@ -648,7 +646,7 @@ WaterJetting::Apply( bool bRecalc, bool bPostApply)
|
||||
// recupero gruppo per geometria ausiliaria
|
||||
int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ;
|
||||
bool bChain = false ;
|
||||
// se non c'è, lo aggiungo
|
||||
// se non c'è, lo aggiungo
|
||||
if ( nAuxId == GDB_ID_NULL) {
|
||||
nAuxId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ;
|
||||
if ( nAuxId == GDB_ID_NULL)
|
||||
@@ -689,7 +687,7 @@ WaterJetting::Apply( bool bRecalc, bool bPostApply)
|
||||
|
||||
// recupero gruppo per geometria di lavorazione (Cutter Location)
|
||||
int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ;
|
||||
// se non c'è, lo aggiungo
|
||||
// se non c'è, lo aggiungo
|
||||
if ( nClId == GDB_ID_NULL) {
|
||||
nClId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ;
|
||||
if ( nClId == GDB_ID_NULL)
|
||||
@@ -732,7 +730,7 @@ WaterJetting::Apply( bool bRecalc, bool bPostApply)
|
||||
bool
|
||||
WaterJetting::Update( bool bPostApply)
|
||||
{
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
// verifico validità gestore DB geometrico e Id del gruppo
|
||||
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
|
||||
return false ;
|
||||
|
||||
@@ -742,7 +740,7 @@ WaterJetting::Update( bool bPostApply)
|
||||
return true ;
|
||||
}
|
||||
|
||||
// elimino le entità CLIMB, RISE e HOME della lavorazione, potrebbero falsare i calcoli degli assi (in ogni casi vengono riaggiunte dopo)
|
||||
// elimino le entità CLIMB, RISE e HOME della lavorazione, potrebbero falsare i calcoli degli assi (in ogni casi vengono riaggiunte dopo)
|
||||
RemoveClimbRiseHome() ;
|
||||
|
||||
// imposto eventuale asse bloccato da lavorazione
|
||||
@@ -965,14 +963,10 @@ WaterJetting::UpdateToolData( bool* pbChanged)
|
||||
ToolsMgr* pTMgr = m_pMchMgr->GetCurrToolsMgr() ;
|
||||
if ( pTMgr == nullptr)
|
||||
return false ;
|
||||
// recupero l'utensile nel DB utensili (se fallisce con UUID provo con il nome)
|
||||
// recupero l'utensile nel DB utensili
|
||||
const ToolData* pTdata = pTMgr->GetTool( m_Params.m_ToolUuid) ;
|
||||
if ( pTdata == nullptr) {
|
||||
pTdata = pTMgr->GetTool( m_Params.m_sToolName) ;
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
m_Params.m_ToolUuid = m_TParams.m_Uuid ;
|
||||
}
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
// salvo posizione TC, testa e uscita originali
|
||||
string sOrigTcPos = m_TParams.m_sTcPos ;
|
||||
string sOrigHead = m_TParams.m_sHead ;
|
||||
@@ -1020,7 +1014,7 @@ WaterJetting::UpdateToolData( bool* pbChanged)
|
||||
bool
|
||||
WaterJetting::GetGeometry( SELVECTOR& vIds) const
|
||||
{
|
||||
// restituisco l'elenco delle entità
|
||||
// restituisco l'elenco delle entità
|
||||
vIds = m_vId ;
|
||||
return true ;
|
||||
}
|
||||
@@ -1033,7 +1027,7 @@ WaterJetting::VerifyGeometry( SelData Id, int& nSubs, int& nType)
|
||||
const IGeoObj* pGObj = m_pGeomDB->GetGeoObj( Id.nId) ;
|
||||
if ( pGObj == nullptr)
|
||||
return false ;
|
||||
// se ammesse curve ed è tale
|
||||
// se ammesse curve ed è tale
|
||||
if ( ( nType == GEO_NONE || nType == GEO_CURVE) && ( pGObj->GetType() & GEO_CURVE) != 0) {
|
||||
nType = GEO_CURVE ;
|
||||
const ICurve* pCurve = nullptr ;
|
||||
@@ -1057,7 +1051,7 @@ WaterJetting::VerifyGeometry( SelData Id, int& nSubs, int& nType)
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
// se altrimenti ammessi testi ed è tale
|
||||
// se altrimenti ammessi testi ed è tale
|
||||
else if ( ( nType == GEO_NONE || nType == EXT_TEXT) && pGObj->GetType() == EXT_TEXT) {
|
||||
nType = EXT_TEXT ;
|
||||
const IExtText* pText = ::GetExtText( pGObj) ;
|
||||
@@ -1067,7 +1061,7 @@ WaterJetting::VerifyGeometry( SelData Id, int& nSubs, int& nType)
|
||||
nSubs = 0 ;
|
||||
return true ;
|
||||
}
|
||||
// se altrimenti ammesse superfici trimesh ed è tale
|
||||
// se altrimenti ammesse superfici trimesh ed è tale
|
||||
else if ( ( nType == GEO_NONE || nType == SRF_TRIMESH) && pGObj->GetType() == SRF_TRIMESH) {
|
||||
nType = SRF_TRIMESH ;
|
||||
const ISurfTriMesh* pSurf = ::GetSurfTriMesh( pGObj) ;
|
||||
@@ -1089,7 +1083,7 @@ WaterJetting::VerifyGeometry( SelData Id, int& nSubs, int& nType)
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
// se altrimenti ammesse regioni ed è tale
|
||||
// se altrimenti ammesse regioni ed è tale
|
||||
else if ( ( nType == GEO_NONE || nType == SRF_FLATRGN) && pGObj->GetType() == SRF_FLATRGN) {
|
||||
nType = SRF_FLATRGN ;
|
||||
const ISurfFlatRegion* pReg = ::GetSurfFlatRegion( pGObj) ;
|
||||
@@ -1426,7 +1420,7 @@ WaterJetting::VerifySideAngle( void)
|
||||
bool
|
||||
WaterJetting::AdjustEndPointForAxesCalc( const CamData* pCamData, Point3d& ptP) const
|
||||
{
|
||||
// non devo fare alcunché
|
||||
// non devo fare alcunché
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1448,7 +1442,7 @@ WaterJetting::AdjustArcCenterForAxesCalc( const CamData* pCamData, Point3d& ptCe
|
||||
ptCen.Translate( dOffset * pCamData->GetCorrDir()) ;
|
||||
}
|
||||
}
|
||||
// negli altri casi, non devo fare alcunché
|
||||
// negli altri casi, non devo fare alcunché
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1459,7 +1453,7 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
// recupero gruppo per geometria temporanea
|
||||
const string GRP_TEMP = "Temp" ;
|
||||
int nTempId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, GRP_TEMP) ;
|
||||
// se non c'è, lo aggiungo
|
||||
// se non c'è, lo aggiungo
|
||||
if ( nTempId == GDB_ID_NULL) {
|
||||
nTempId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ;
|
||||
if ( nTempId == GDB_ID_NULL)
|
||||
@@ -1595,7 +1589,7 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
m_pMchMgr->SetWarning( 3255, "Warning in WaterJetting : skipped Path too short") ;
|
||||
return true ;
|
||||
}
|
||||
// se una sola entità circonferenza completa, la divido in due per poterla allungare
|
||||
// se una sola entità circonferenza completa, la divido in due per poterla allungare
|
||||
if ( pCompo->GetCurveCount() == 1 && pCompo->IsClosed())
|
||||
pCompo->AddJoint( 0.5) ;
|
||||
// eventuali allungamenti
|
||||
@@ -1655,7 +1649,7 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
if ( ! pCompo->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, false))
|
||||
return false ;
|
||||
|
||||
// recupero i punti di inizio e fine ( per poi salvarli nelle info di CL path)
|
||||
// recupero i punti di inizio e fine (per poi salvarli nelle info di CL path)
|
||||
Point3d ptStart ; pCompo->GetStartPoint( ptStart) ;
|
||||
Point3d ptEnd ; pCompo->GetEndPoint( ptEnd) ;
|
||||
|
||||
@@ -1688,7 +1682,7 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
VerifyArcs( pCompo) ;
|
||||
}
|
||||
|
||||
// se abilitato probing, verifico lunghezza entità ed eventualmente le divido
|
||||
// se abilitato probing, verifico lunghezza entità ed eventualmente le divido
|
||||
if ( m_Params.m_bProbing)
|
||||
VerifyMaxLenCurves( pCompo, m_Params.m_dProbingMaxDist) ;
|
||||
|
||||
@@ -1710,8 +1704,8 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
") bigger than MaxMaterial (" + ToString( m_TParams.m_dMaxMat, 1) + ")" ;
|
||||
m_pMchMgr->SetLastError( 3205, sInfo) ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// se richiesta anteprima
|
||||
if ( nPvId != GDB_ID_NULL) {
|
||||
// creo gruppo per geometria di anteprima del percorso
|
||||
@@ -1749,7 +1743,7 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
AdjustPathForInternalAngles( pCompo) ;
|
||||
|
||||
// Inserisco la lavorazione
|
||||
if ( ! AddStandardWj( pCompo, vtTool, bSplitArcs, dAddedOverlap))
|
||||
if ( ! AddStandardWj( pCompo, vtTool, bSplitArcs))
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -1777,62 +1771,25 @@ WaterJetting::GeneratePreView( int nPathId, const ICurveComposite* pCompo, doubl
|
||||
pCrv->TrimStartAtLen( dAddedOverlap) ;
|
||||
pCrv->Invert() ;
|
||||
}
|
||||
// calcolo la regione ridotta
|
||||
// calcolo la regione
|
||||
PtrOwner<ISurfFlatRegion> pSfr ;
|
||||
double dSideCoeff = ( abs( m_Params.m_dSideAngle) > EPS_ANG_SMALL ? 1. / cos( m_Params.m_dSideAngle * DEGTORAD) : 1) ;
|
||||
double dRad = 0.5 * m_TParams.m_dDiam * dSideCoeff ;
|
||||
pSfr.Set( GetSurfFlatRegionFromFatCurve( Release( pCrv), dRad, false, false)) ;
|
||||
if ( IsNull( pSfr))
|
||||
return false ;
|
||||
// aggiungo eventuale attacco
|
||||
if ( ! AddLeadInPreview( pCompo, pSfr))
|
||||
return false ;
|
||||
// aggiungo eventuale uscita
|
||||
if ( ! AddLeadOutPreview( pCompo, pSfr))
|
||||
return false ;
|
||||
// aggiungo eventuali anelli su angoli esterni
|
||||
if ( ! AddLoopsPreview( pCompo, pSfr))
|
||||
return false ;
|
||||
// creo la regione completa
|
||||
PtrOwner<ISurfFlatRegion> pSfrTot( CloneSurfFlatRegion( pSfr)) ;
|
||||
if ( IsNull( pSfr))
|
||||
return false ;
|
||||
// inserisco la regione ridotta nel DB
|
||||
int nRRId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pSfr)) ;
|
||||
if ( nRRId == GDB_ID_NULL)
|
||||
return false ;
|
||||
m_pGeomDB->SetName( nRRId, MCH_PV_RRCUT) ;
|
||||
m_pGeomDB->SetMaterial( nRRId, INVISIBLE) ;
|
||||
|
||||
// regione per attacco
|
||||
PtrOwner<ISurfFlatRegion> pSfrLI( GenerateLeadInPreview( pCompo)) ;
|
||||
if ( IsNull( pSfrLI))
|
||||
return false ;
|
||||
if ( pSfrLI->IsValid()) {
|
||||
// se regione definita la aggiungo alla regione completa
|
||||
if ( ! pSfrTot->Add( *pSfrLI))
|
||||
return false ;
|
||||
// aggiungo nel DB
|
||||
int nRLiId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pSfrLI)) ;
|
||||
if ( nRLiId == GDB_ID_NULL)
|
||||
return false ;
|
||||
m_pGeomDB->SetName( nRLiId, MCH_PV_RLICUT) ;
|
||||
m_pGeomDB->SetMaterial( nRLiId, INVISIBLE) ;
|
||||
}
|
||||
|
||||
// regione per uscita
|
||||
PtrOwner<ISurfFlatRegion> pSfrLO( GenerateLeadOutPreview( pCompo)) ;
|
||||
if ( IsNull( pSfrLO))
|
||||
return false ;
|
||||
if ( pSfrLO->IsValid()) {
|
||||
// se regione definita la aggiungo alla regione completa
|
||||
if ( ! pSfrTot->Add( *pSfrLO))
|
||||
return false ;
|
||||
// aggiungo nel DB
|
||||
int nRLoId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pSfrLO)) ;
|
||||
if ( nRLoId == GDB_ID_NULL)
|
||||
return false ;
|
||||
m_pGeomDB->SetName( nRLoId, MCH_PV_RLOCUT) ;
|
||||
m_pGeomDB->SetMaterial( nRLoId, INVISIBLE) ;
|
||||
}
|
||||
|
||||
// recupero i contorni della regione completa
|
||||
for ( int i = 0 ; i < pSfrTot->GetLoopCount( 0) ; ++i) {
|
||||
PtrOwner<ICurve> pCrv2( pSfrTot->GetLoop( 0, i)) ;
|
||||
// ne recupero i contorni
|
||||
for ( int i = 0 ; i < pSfr->GetLoopCount( 0) ; ++i) {
|
||||
PtrOwner<ICurve> pCrv2( pSfr->GetLoop( 0, i)) ;
|
||||
if ( IsNull( pCrv2))
|
||||
return false ;
|
||||
// inserisco la curva nel DB
|
||||
@@ -1843,12 +1800,18 @@ WaterJetting::GeneratePreView( int nPathId, const ICurveComposite* pCompo, doubl
|
||||
m_pGeomDB->SetName( nC2Id, MCH_PV_CUT) ;
|
||||
m_pGeomDB->SetMaterial( nC2Id, colCut) ;
|
||||
}
|
||||
// aggiungo la regione completa nel DB
|
||||
int nRId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pSfrTot)) ;
|
||||
// inserisco la regione nel DB
|
||||
int nRId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pSfr)) ;
|
||||
if ( nRId == GDB_ID_NULL)
|
||||
return false ;
|
||||
m_pGeomDB->SetName( nRId, MCH_PV_RCUT) ;
|
||||
m_pGeomDB->SetMaterial( nRId, INVISIBLE) ;
|
||||
// la copio anche come regione ridotta
|
||||
int nRrId = m_pGeomDB->Copy( nRId, GDB_ID_NULL, nPathId) ;
|
||||
if ( nRrId == GDB_ID_NULL)
|
||||
return false ;
|
||||
m_pGeomDB->SetName( nRrId, MCH_PV_RRCUT) ;
|
||||
m_pGeomDB->SetMaterial( nRrId, INVISIBLE) ;
|
||||
|
||||
// eventuali ripetizioni in basso per tagli inclinati
|
||||
if ( abs( m_Params.m_dSideAngle) > EPS_ANG_SMALL) {
|
||||
@@ -1975,18 +1938,13 @@ WaterJetting::GeneratePreView( int nPathId, const ICurveComposite* pCompo, doubl
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
ISurfFlatRegion*
|
||||
WaterJetting::GenerateLeadInPreview( const ICurveComposite* pCompo)
|
||||
bool
|
||||
WaterJetting::AddLeadInPreview( const ICurveComposite* pCompo, ISurfFlatRegion* pSPV)
|
||||
{
|
||||
// Creo la superficie
|
||||
PtrOwner<ISurfFlatRegion> pSfr( CreateSurfFlatRegion()) ;
|
||||
if ( IsNull( pSfr))
|
||||
return nullptr ;
|
||||
|
||||
// Assegno il tipo
|
||||
int nType = GetLeadInType() ;
|
||||
if ( nType == WJET_LI_NONE)
|
||||
return Release( pSfr) ;
|
||||
return true ;
|
||||
// Recupero punto e direzione iniziali del percorso
|
||||
Point3d ptStart ; pCompo->GetStartPoint( ptStart) ;
|
||||
Vector3d vtStart ; pCompo->GetStartDir( vtStart) ;
|
||||
@@ -1995,31 +1953,32 @@ WaterJetting::GenerateLeadInPreview( const ICurveComposite* pCompo)
|
||||
// Calcolo punto iniziale dell'attacco
|
||||
Point3d ptP1 ;
|
||||
if ( ! CalcLeadInStart( ptStart, vtStart, vtN, pCompo, ptP1))
|
||||
return nullptr ;
|
||||
return false ;
|
||||
// calcolo la curva di attacco
|
||||
PtrOwner<ICurve> pCrv ;
|
||||
switch ( nType) {
|
||||
case WJET_LI_LINEAR :
|
||||
{ PtrOwner<ICurveLine> pLine( CreateCurveLine()) ;
|
||||
if ( IsNull( pLine) || ! pLine->Set( ptP1, ptStart))
|
||||
return nullptr ;
|
||||
return false ;
|
||||
pCrv.Set( pLine) ;
|
||||
} break ;
|
||||
case WJET_LI_TANGENT :
|
||||
pCrv.Set( GetArc2PVN( ptStart, ptP1, - vtStart, vtN)) ;
|
||||
if ( IsNull( pCrv))
|
||||
return nullptr ;
|
||||
return false ;
|
||||
pCrv->Invert() ;
|
||||
break ;
|
||||
default :
|
||||
return nullptr ;
|
||||
return false ;
|
||||
}
|
||||
// calcolo la regione
|
||||
PtrOwner<ISurfFlatRegion> pSfr ;
|
||||
double dSideCoeff = ( abs( m_Params.m_dSideAngle) > EPS_ANG_SMALL ? 1. / cos( m_Params.m_dSideAngle * DEGTORAD) : 1) ;
|
||||
double dRad = 0.49 * m_TParams.m_dDiam * dSideCoeff ; // non 0.5 per evitare problemi di coincidenza
|
||||
pSfr.Set( GetSurfFlatRegionFromFatCurve( Release( pCrv), dRad, false, false)) ;
|
||||
double Rad = 0.49 * m_TParams.m_dDiam * dSideCoeff ; // non 0.5 per evitare problemi di coincidenza
|
||||
pSfr.Set( GetSurfFlatRegionFromFatCurve( Release( pCrv), Rad, false, false)) ;
|
||||
if ( IsNull( pSfr))
|
||||
return nullptr ;
|
||||
return false ;
|
||||
// se presente foro di attacco, ne calcolo la regione e la unisco alla precedente
|
||||
if ( m_Params.m_bLiHole && m_Params.m_dLiHoleRad > 10 * EPS_SMALL) {
|
||||
PtrOwner<ISurfFlatRegion> pSfr2( GetSurfFlatRegionDisk( m_Params.m_dLiHoleRad + m_TParams.m_dDiam / 2)) ;
|
||||
@@ -2028,19 +1987,14 @@ WaterJetting::GenerateLeadInPreview( const ICurveComposite* pCompo)
|
||||
pSfr->Add( *pSfr2) ;
|
||||
}
|
||||
}
|
||||
|
||||
return Release( pSfr) ;
|
||||
// Unisco le due regioni
|
||||
return ( pSPV->Add( *pSfr)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
ISurfFlatRegion*
|
||||
WaterJetting::GenerateLeadOutPreview( const ICurveComposite* pCompo)
|
||||
bool
|
||||
WaterJetting::AddLeadOutPreview( const ICurveComposite* pCompo, ISurfFlatRegion* pSPV)
|
||||
{
|
||||
// Creo la regione
|
||||
PtrOwner<ISurfFlatRegion> pSfr( CreateSurfFlatRegion()) ;
|
||||
if ( IsNull( pSfr))
|
||||
return nullptr ;
|
||||
|
||||
// Assegno il tipo
|
||||
int nType = GetLeadOutType() ;
|
||||
// Recupero i parametri
|
||||
@@ -2058,7 +2012,7 @@ WaterJetting::GenerateLeadOutPreview( const ICurveComposite* pCompo)
|
||||
dPerp = m_Params.m_dLiPerp ;
|
||||
}
|
||||
if ( nType == WJET_LO_NONE)
|
||||
return Release( pSfr) ;
|
||||
return true ;
|
||||
// Senso di rotazione da dir tg a dir esterna
|
||||
bool bCcwRot = ( m_Params.m_nWorkSide == WJET_WS_LEFT) ;
|
||||
// Recupero punto e direzione iniziali del percorso
|
||||
@@ -2075,7 +2029,7 @@ WaterJetting::GenerateLeadOutPreview( const ICurveComposite* pCompo)
|
||||
vtPerp.Rotate( vtN, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
Point3d ptP1 = ptEnd + vtEnd * dTang + vtPerp * dPerp ;
|
||||
if ( IsNull( pLine) || ! pLine->Set( ptEnd, ptP1))
|
||||
return nullptr ;
|
||||
return false ;
|
||||
pCrv.Set( pLine) ;
|
||||
} break ;
|
||||
case WJET_LO_TANGENT :
|
||||
@@ -2086,16 +2040,18 @@ WaterJetting::GenerateLeadOutPreview( const ICurveComposite* pCompo)
|
||||
// inserisco uscita
|
||||
pCrv.Set( GetArc2PVN( ptEnd, ptP1, vtEnd, vtN)) ;
|
||||
if ( IsNull( pCrv))
|
||||
return nullptr ;
|
||||
return false ;
|
||||
} break ;
|
||||
default :
|
||||
return nullptr ;
|
||||
return false ;
|
||||
}
|
||||
// calcolo la regione
|
||||
// calcolo la regione
|
||||
PtrOwner<ISurfFlatRegion> pSfr ;
|
||||
double dSideCoeff = ( abs( m_Params.m_dSideAngle) > EPS_ANG_SMALL ? 1. / cos( m_Params.m_dSideAngle * DEGTORAD) : 1) ;
|
||||
double dRad = 0.49 * m_TParams.m_dDiam * dSideCoeff ; // non 0.5 per evitare problemi di coincidenza
|
||||
pSfr.Set( GetSurfFlatRegionFromFatCurve( Release( pCrv), dRad, false, false)) ;
|
||||
return Release( pSfr) ;
|
||||
double Rad = 0.49 * m_TParams.m_dDiam * dSideCoeff ; // non 0.5 per evitare problemi di coincidenza
|
||||
pSfr.Set( GetSurfFlatRegionFromFatCurve( Release( pCrv), Rad, false, false)) ;
|
||||
// Unisco le due regioni
|
||||
return ( ! IsNull( pSfr) && pSPV->Add( *pSfr)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -2174,12 +2130,12 @@ WaterJetting::AdjustPathForInternalAngles( ICurveComposite* pCompo)
|
||||
return true ;
|
||||
// larghezza della lavorazione
|
||||
double dW = m_dElev * sin( m_Params.m_dSideAngle * DEGTORAD) ;
|
||||
// ciclo su tutte le entità
|
||||
// ciclo su tutte le entità
|
||||
int nMaxInd = pCompo->GetCurveCount() - 1 ;
|
||||
for ( int i = 0 ; i <= nMaxInd ; ++ i) {
|
||||
// curva corrente
|
||||
const ICurve* pCrvC = pCompo->GetCurve( i) ;
|
||||
// dati eventuale entità precedente
|
||||
// dati eventuale entità precedente
|
||||
const ICurve* pCrvP = nullptr ;
|
||||
bool bPrevIntAng = false ;
|
||||
double dPrevAng = 0 ;
|
||||
@@ -2197,7 +2153,7 @@ WaterJetting::AdjustPathForInternalAngles( ICurveComposite* pCompo)
|
||||
// lunghezza
|
||||
pCrvP->GetLength( dPrevLen) ;
|
||||
}
|
||||
// dati eventuale entità successiva
|
||||
// dati eventuale entità successiva
|
||||
const ICurve* pCrvN = nullptr ;
|
||||
bool bNextIntAng = false ;
|
||||
double dNextAng = 0 ;
|
||||
@@ -2215,15 +2171,15 @@ WaterJetting::AdjustPathForInternalAngles( ICurveComposite* pCompo)
|
||||
// lunghezza
|
||||
pCrvN->GetLength( dNextLen) ;
|
||||
}
|
||||
// se c'è angolo interno con la precedente
|
||||
// se c'è angolo interno con la precedente
|
||||
if ( bPrevIntAng) {
|
||||
// lunghezza entità
|
||||
// lunghezza entità
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// verifico lunghezza minima
|
||||
double dSlowLen = dW / tan( ( 180 - abs( dPrevAng)) / 2 * DEGTORAD) ;
|
||||
double dExtraLen = dSlowLen + INTANG_ROT_LEN - dLen ;
|
||||
if ( dExtraLen > 0) {
|
||||
// se entità successiva è in tangenza e abbastanza lunga, allungo la corrente a scapito della successiva
|
||||
// se entità successiva è in tangenza e abbastanza lunga, allungo la corrente a scapito della successiva
|
||||
if ( ! bNextIntAng && dNextLen > dExtraLen) {
|
||||
double dU ; Point3d ptP ;
|
||||
if ( pCrvN->GetParamAtLength( dExtraLen, dU) &&
|
||||
@@ -2232,15 +2188,15 @@ WaterJetting::AdjustPathForInternalAngles( ICurveComposite* pCompo)
|
||||
}
|
||||
}
|
||||
}
|
||||
// se c'è angolo interno con l'entità successiva
|
||||
// se c'è angolo interno con l'entità successiva
|
||||
if ( bNextIntAng) {
|
||||
// lunghezza entità
|
||||
// lunghezza entità
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// verifico lunghezza minima
|
||||
double dSlowLen = dW / tan( ( 180 - abs( dNextAng)) / 2 * DEGTORAD) ;
|
||||
double dExtraLen = dSlowLen + INTANG_ROT_LEN - dLen ;
|
||||
if ( dExtraLen > 0) {
|
||||
// se entità precedente è in tangenza e abbastanza lunga, allungo la corrente a scapito della precedente
|
||||
// se entità precedente è in tangenza e abbastanza lunga, allungo la corrente a scapito della precedente
|
||||
if ( ! bPrevIntAng && dPrevLen > dExtraLen) {
|
||||
double dU ; Point3d ptP ;
|
||||
if ( pCrvP->GetParamAtLength( dPrevLen - dExtraLen, dU) &&
|
||||
@@ -2256,38 +2212,33 @@ WaterJetting::AdjustPathForInternalAngles( ICurveComposite* pCompo)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTool, bool bSplitArcs, double dAddedOverlap)
|
||||
WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTool, bool bSplitArcs)
|
||||
{
|
||||
// numero punti di accelerazione/decelerazione
|
||||
const int ACC_PNT_NUM = 7 ;
|
||||
|
||||
// recupero distanze di sicurezza
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
|
||||
|
||||
// Recupero versore estrusione
|
||||
Vector3d vtN ; pCompo->GetExtrusion( vtN) ;
|
||||
|
||||
// verifico se la curva è chiusa a meno di eventuale dAddedOverlap
|
||||
bool bClosed = ( pCompo->IsClosed() || dAddedOverlap > EPS_SMALL) ;
|
||||
|
||||
// ciclo sulle curve elementari
|
||||
int nIdxSkip = 0 ;
|
||||
int nMaxInd = pCompo->GetCurveCount() - 1 ;
|
||||
bool bStartSlowFull = false ;
|
||||
for ( int i = 0 ; i <= nMaxInd ; ++ i) {
|
||||
// curva corrente
|
||||
const ICurve* pCrvC = pCompo->GetCurve( i) ;
|
||||
// copio la curva ( è già alla giusta quota)
|
||||
// copio la curva (è già alla giusta quota)
|
||||
PtrOwner<ICurve> pCurve( pCrvC->Clone()) ;
|
||||
if ( IsNull( pCurve))
|
||||
return false ;
|
||||
double dUprev = 0 ;
|
||||
bool bSlowFull = false ; // modalità speciale per angoli interni con rallentamento uniforme su tutta l'entità
|
||||
// se prima entità, approccio e affondo
|
||||
// se prima entità, approccio e affondo
|
||||
if ( i == 0) {
|
||||
// imposto indice dei punti precedenti la partenza
|
||||
SetIndex( -1 - nIdxSkip) ;
|
||||
// dati inizio entità
|
||||
// dati inizio entità
|
||||
Point3d ptStart ; pCurve->GetStartPoint( ptStart) ;
|
||||
Vector3d vtStart ; pCurve->GetStartDir( vtStart) ;
|
||||
// determino inizio attacco
|
||||
@@ -2311,7 +2262,7 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
}
|
||||
m_ptLastProbe = ptStart ;
|
||||
}
|
||||
// altrimenti verifico con l'entità precedente
|
||||
// altrimenti verifico con l'entità precedente
|
||||
else {
|
||||
// direzione finale precedente
|
||||
const ICurve* pCrvP = pCompo->GetCurve( i - 1) ;
|
||||
@@ -2360,7 +2311,7 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
// se non è possibile suddividere anello
|
||||
// se non è possibile suddividere anello
|
||||
CalcAndSetToolCorrAuxDir( pCompo, i + 0.5) ;
|
||||
if ( AddCurveMove( pCompoArc, bSplitArcs) == GDB_ID_NULL)
|
||||
return false ;
|
||||
@@ -2378,7 +2329,7 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
}
|
||||
// se angolo esterno e richiesto rallentamento esterno, eseguo accelerazione
|
||||
else if ( IsExternalAngle( dAng) && m_Params.m_nExtCornerType == WJET_EC_SLOW) {
|
||||
// lunghezza entità
|
||||
// lunghezza entità
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// lunghezza di accelerazione
|
||||
double dAccLen = min( m_Params.m_dCornerSlowLen, dLen / 2 - EXTRA_ACC_LEN) ;
|
||||
@@ -2401,45 +2352,21 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
// se angolo interno, spezzo per interpolazione direzione utensile e se necessario aggiungo accelerazione
|
||||
else if ( IsInternalAngle( dAng)) {
|
||||
// flag di rallentamento
|
||||
bool bReduceFeed = ( m_Params.m_nIntCornerType == WJET_IC_SLOW || m_Params.m_nIntCornerType == WJET_IC_SLOW_FULL) ;
|
||||
// lunghezza entità
|
||||
bool bReduceFeed = ( m_Params.m_nIntCornerType == WJET_IC_SLOW) ;
|
||||
// lunghezza entità
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
double dFreeLen = dLen ;
|
||||
// lunghezza di accelerazione
|
||||
double dAccLen = 0 ;
|
||||
if ( m_Params.m_nIntCornerType == WJET_IC_SLOW_FULL) {
|
||||
// se ultima entità
|
||||
if ( i == nMaxInd) {
|
||||
// sfrutto tutta la lunghezza a disposizione
|
||||
dAccLen = dFreeLen - EXTRA_ACC_LEN ;
|
||||
// verifico che la modalità WJET_IC_SLOW_FULL sia fattibile
|
||||
bSlowFull = ( ! bClosed || bStartSlowFull) ;
|
||||
}
|
||||
else {
|
||||
// devo verificare se anche angolo next è interno, altrimenti applico la modalità WJET_IC_SLOW
|
||||
const ICurve* pCrvN = pCompo->GetCurve( i + 1) ;
|
||||
Vector3d vtEndC ; pCurve->GetEndDir( vtEndC) ;
|
||||
Vector3d vtStartN ; pCrvN->GetStartDir( vtStartN) ;
|
||||
double dAngN ; vtEndC.GetAngleXY( vtStartN, dAngN) ;
|
||||
if ( IsInternalAngle( dAngN)) {
|
||||
bSlowFull = true ;
|
||||
dAccLen = dFreeLen / 2 ;
|
||||
}
|
||||
}
|
||||
double dAccLen = min( dFreeLen - EXTRA_ACC_LEN, ( bReduceFeed ? m_Params.m_dCornerSlowLen : INTANG_ROT_LEN)) ;
|
||||
if ( m_Params.m_dSideAngle > 0) {
|
||||
double dW = m_dElev * sin( m_Params.m_dSideAngle * DEGTORAD) ;
|
||||
double dSlowLen = dW / tan( ( 180 - abs( dAng)) / 2 * DEGTORAD) ;
|
||||
if ( dSlowLen > dFreeLen - EXTRA_ACC_LEN) {
|
||||
m_pMchMgr->SetLastError( 3204, "Error in WaterJetting : entity too small near inside corner") ;
|
||||
return false ;
|
||||
}
|
||||
dAccLen = min( dSlowLen + m_Params.m_dCornerSlowLen, dFreeLen - EXTRA_ACC_LEN) ;
|
||||
}
|
||||
if ( ! bSlowFull) {
|
||||
dAccLen = min( dFreeLen - EXTRA_ACC_LEN, ( bReduceFeed ? m_Params.m_dCornerSlowLen : INTANG_ROT_LEN)) ;
|
||||
if ( m_Params.m_dSideAngle > 0) {
|
||||
double dW = m_dElev * sin( m_Params.m_dSideAngle * DEGTORAD) ;
|
||||
double dSlowLen = dW / tan( ( 180 - abs( dAng)) / 2 * DEGTORAD) ;
|
||||
if ( dSlowLen > dFreeLen - EXTRA_ACC_LEN) {
|
||||
m_pMchMgr->SetLastError( 3204, "Error in WaterJetting : entity too small near inside corner") ;
|
||||
return false ;
|
||||
}
|
||||
dAccLen = min( dSlowLen + m_Params.m_dCornerSlowLen, dFreeLen - EXTRA_ACC_LEN) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Feed ridotta
|
||||
double dMinFeed = ( bReduceFeed ? GetActualReducedFeed() : GetActualFeed()) ;
|
||||
// Direzioni utensile nell'angolo e finale
|
||||
@@ -2465,7 +2392,7 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
}
|
||||
}
|
||||
}
|
||||
// se non è l'ultima entità, verifico con l'entità successiva
|
||||
// se non è l'ultima entità, verifico con l'entità successiva
|
||||
double dNextFeed = GetActualFeed() ;
|
||||
if ( i < nMaxInd) {
|
||||
// controlli per indice del punto di arrivo
|
||||
@@ -2481,7 +2408,7 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
double dAng ; vtEnd.GetAngleXY( vtStart, dAng) ;
|
||||
// se angolo esterno e richiesto rallentamento esterno, aggiungo decelerazione
|
||||
if ( IsExternalAngle( dAng) && m_Params.m_nExtCornerType == WJET_EC_SLOW) {
|
||||
// lunghezza entità
|
||||
// lunghezza entità
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// lunghezza di decelerazione
|
||||
double dAccLen = min( m_Params.m_dCornerSlowLen, dLen / 2 - EXTRA_ACC_LEN) ;
|
||||
@@ -2491,8 +2418,6 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
for ( int j = 0 ; j < ACC_PNT_NUM ; ++ j) {
|
||||
double dCoeff = j / double( ACC_PNT_NUM) ;
|
||||
double dU ; pCrvC->GetParamAtLength( dLen - ( 1 - dCoeff) * dAccLen, dU) ;
|
||||
if ( abs( dUprev - dU) < EPS_SMALL)
|
||||
continue ;
|
||||
PtrOwner<ICurve> pCrvT( pCrvC->Clone()) ;
|
||||
if ( IsNull( pCrvT) || ! pCrvT->TrimStartEndAtParam( dUprev, dU))
|
||||
return false ;
|
||||
@@ -2507,71 +2432,32 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
// se angolo interno, spezzo per interpolazione direzione utensile e se necessario aggiungo decelerazione
|
||||
else if ( IsInternalAngle( dAng)) {
|
||||
// flag di rallentamento
|
||||
bool bReduceFeed = ( m_Params.m_nIntCornerType == WJET_IC_SLOW || m_Params.m_nIntCornerType == WJET_IC_SLOW_FULL) ;
|
||||
// lunghezza entità
|
||||
bool bReduceFeed = ( m_Params.m_nIntCornerType == WJET_IC_SLOW) ;
|
||||
// lunghezza entità
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
double dFreeLen = dLen * ( 1 - dUprev) ;
|
||||
// lunghezza di decelerazione
|
||||
double dAccLen = 0 ;
|
||||
|
||||
// se prima entità e modalità WJET_IC_SLOW_FULL verifico se davvero applicabile controllando angolo con ultima entità
|
||||
if ( i == 0 && m_Params.m_nIntCornerType == WJET_IC_SLOW_FULL) {
|
||||
bSlowFull = true ;
|
||||
if ( bClosed) {
|
||||
// creo una copia della curva senza l'overlap aggiunto
|
||||
PtrOwner<ICurveComposite> pCrvTmp( pCompo->Clone()) ;
|
||||
double dLen ; pCrvTmp->GetLength( dLen) ;
|
||||
if ( IsNull( pCrvTmp) || ! pCrvTmp->TrimEndAtLen( dLen - dAddedOverlap))
|
||||
return false ;
|
||||
// verifico che anche angolo sullo start della curva sia di tipo prev
|
||||
const ICurve* pCrvLast = pCrvTmp->GetLastCurve() ;
|
||||
Vector3d vtStart ; pCurve->GetStartDir( vtStart) ;
|
||||
Vector3d vtEnd ; pCrvLast->GetEndDir( vtEnd) ;
|
||||
if ( AreSameVectorApprox( vtStart, vtEnd)) {
|
||||
// se curve in tangenza controllo angolo tra l'ultima e la penultima curva
|
||||
int nCrvNbr = pCrvTmp->GetCurveCount() ;
|
||||
const ICurve* pCrvP = pCrvTmp->GetCurve( nCrvNbr - 2) ;
|
||||
pCrvLast->GetStartDir( vtStart) ;
|
||||
pCrvP->GetEndDir( vtEnd) ;
|
||||
}
|
||||
// se angolo precedente non è interno il tratto non va realizzato in modalità full
|
||||
double dAngPrev ; vtEnd.GetAngleXY( vtStart, dAngPrev) ;
|
||||
if ( ! IsInternalAngle( dAngPrev))
|
||||
bSlowFull = false ;
|
||||
}
|
||||
// salvo il valore per l'ultima entità
|
||||
bStartSlowFull = bSlowFull ;
|
||||
}
|
||||
|
||||
if ( bSlowFull)
|
||||
// sfrutto tutta la lunghezza a disposizone
|
||||
dAccLen = dFreeLen ;
|
||||
else {
|
||||
dAccLen = min( dFreeLen - EXTRA_ACC_LEN, ( bReduceFeed ? m_Params.m_dCornerSlowLen : INTANG_ROT_LEN)) ;
|
||||
if ( m_Params.m_dSideAngle > 0) {
|
||||
double dW = m_dElev * sin( m_Params.m_dSideAngle * DEGTORAD) ;
|
||||
double dSlowLen = dW / tan( ( 180 - abs( dAng)) / 2 * DEGTORAD) ;
|
||||
if ( dSlowLen > dFreeLen - EXTRA_ACC_LEN) {
|
||||
m_pMchMgr->SetLastError( 3204, "Error in WaterJetting : entity too small near inside corner") ;
|
||||
return false ;
|
||||
}
|
||||
dAccLen = min( dSlowLen + m_Params.m_dCornerSlowLen, dFreeLen - EXTRA_ACC_LEN) ;
|
||||
// lunghezza di decelerazione
|
||||
double dAccLen = min( dFreeLen - EXTRA_ACC_LEN, ( bReduceFeed ? m_Params.m_dCornerSlowLen : INTANG_ROT_LEN)) ;
|
||||
if ( m_Params.m_dSideAngle > 0) {
|
||||
double dW = m_dElev * sin( m_Params.m_dSideAngle * DEGTORAD) ;
|
||||
double dSlowLen = dW / tan( ( 180 - abs( dAng)) / 2 * DEGTORAD) ;
|
||||
if ( dSlowLen > dFreeLen - EXTRA_ACC_LEN) {
|
||||
m_pMchMgr->SetLastError( 3204, "Error in WaterJetting : entity too small near inside corner") ;
|
||||
return false ;
|
||||
}
|
||||
dAccLen = min( dSlowLen + m_Params.m_dCornerSlowLen, dFreeLen - EXTRA_ACC_LEN) ;
|
||||
}
|
||||
|
||||
// Feed ridotta
|
||||
double dMinFeed = ( bReduceFeed ? GetActualReducedFeed() : GetActualFeed()) ;
|
||||
// Direzioni utensile iniziale e nell'angolo
|
||||
double dUsta ; pCrvC->GetParamAtLength( dLen - dAccLen, dUsta) ;
|
||||
double dUend = 1 ;
|
||||
Vector3d vtTp = CalcToolDir( pCompo, i + dUsta) ;
|
||||
double dUend = 1 ;
|
||||
Vector3d vtTp = CalcToolDir( pCompo, i + dUsta) ;
|
||||
Vector3d vtTn = CalcToolDir( pCompo, i + dUend) ;
|
||||
// ciclo sui punti di decelerazione
|
||||
for ( int j = 0 ; j < ACC_PNT_NUM ; ++ j) {
|
||||
double dCoeff = j / double( ACC_PNT_NUM) ;
|
||||
double dU ; pCrvC->GetParamAtLength( dLen - ( 1 - dCoeff) * dAccLen, dU) ;
|
||||
if ( abs( dUprev - dU) < EPS_SMALL)
|
||||
continue ;
|
||||
PtrOwner<ICurve> pCrvT( pCrvC->Clone()) ;
|
||||
if ( IsNull( pCrvT) || ! pCrvT->TrimStartEndAtParam( dUprev, dU))
|
||||
return false ;
|
||||
@@ -2587,12 +2473,12 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
dNextFeed = dMinFeed ;
|
||||
}
|
||||
|
||||
// se successivo non è angolo esterno ad anello imposto versore correzione e ausiliario del punto di arrivo
|
||||
// se successivo non è angolo esterno ad anello imposto versore correzione e ausiliario del punto di arrivo
|
||||
if ( ! IsExternalAngle( dAng) || m_Params.m_nExtCornerType != WJET_EC_LOOP)
|
||||
CalcAndSetToolCorrAuxDir( pCompo, i + 1) ;
|
||||
}
|
||||
else {
|
||||
// se ultima entità imposto versore correzione e ausiliario del punto finale
|
||||
// se ultima entità imposto versore correzione e ausiliario del punto finale
|
||||
CalcAndSetToolCorrAuxDir( pCompo, i + 1) ;
|
||||
}
|
||||
|
||||
@@ -2621,15 +2507,12 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
}
|
||||
else
|
||||
++ nIdxSkip ;
|
||||
PtrOwner<ICurve> pCrvT( pCrvC->Clone()) ;
|
||||
if ( IsNull( pCrvT) || ! pCrvT->TrimStartAtParam( dUprev))
|
||||
return false ;
|
||||
if ( AddCurveMove( pCrvT, bSplitArcs) == GDB_ID_NULL)
|
||||
if ( AddCurveMove( pCurve, bSplitArcs) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// se ultima entità, uscita e retrazione
|
||||
// se ultima entità, uscita e retrazione
|
||||
if ( i == nMaxInd) {
|
||||
// dati fine entità
|
||||
// dati fine entità
|
||||
Point3d ptEnd ; pCurve->GetEndPoint( ptEnd) ;
|
||||
Vector3d vtEnd ; pCurve->GetEndDir( vtEnd) ;
|
||||
// aggiungo uscita
|
||||
@@ -2835,6 +2718,51 @@ WaterJetting::GetRadiusForStartEndElevation( void) const
|
||||
return ( 0.5 * m_TParams.m_dTDiam + dDeltaRad) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
WaterJetting::GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, double dElev) const
|
||||
{
|
||||
// per frese normali
|
||||
if ( ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
|
||||
// determino se l'inizio dell'attacco è fuori dal grezzo (considero movimento fresa lungo il suo asse)
|
||||
double dTemp ;
|
||||
if ( ! GetElevation( m_nPhase, ptP, vtTool, 0.5 * m_TParams.m_dDiam, vtTool, dTemp))
|
||||
return false ;
|
||||
return ( dTemp < 10 * EPS_SMALL || dTemp > dElev + 10 * EPS_SMALL) ;
|
||||
}
|
||||
// per lame
|
||||
else {
|
||||
// determino se l'inizio dell'attacco è fuori dal grezzo (considero movimento lama in Z)
|
||||
double dTemp ;
|
||||
if ( ! GetElevation( m_nPhase, ptP, vtTool, 0.5 * m_TParams.m_dDiam, Z_AX, dTemp) || dTemp > 10 * EPS_SMALL)
|
||||
return false ;
|
||||
if ( ! GetElevation( m_nPhase, ptP + vtTool * m_TParams.m_dThick, vtTool, 0.5 * m_TParams.m_dDiam, Z_AX, dTemp) || dTemp > 10 * EPS_SMALL)
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
WaterJetting::GetPointAboveRaw( const Point3d& ptP) const
|
||||
{
|
||||
// determino la posizione del punto rispetto al grezzo
|
||||
// ciclo sui grezzi
|
||||
int nRawId = m_pMchMgr->GetFirstRawPart() ;
|
||||
while ( nRawId != GDB_ID_NULL) {
|
||||
// se il grezzo compare nella fase
|
||||
if ( m_pMchMgr->VerifyRawPartPhase( nRawId, m_nPhase)) {
|
||||
int nStmId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
|
||||
BBox3d b3Raw ;
|
||||
m_pGeomDB->GetGlobalBBox( nStmId, b3Raw) ;
|
||||
if ( ! b3Raw.IsEmpty() && ptP.z < b3Raw.GetMax().z + 10 * EPS_SMALL)
|
||||
return false ;
|
||||
}
|
||||
nRawId = m_pMchMgr->GetNextRawPart( nRawId) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
WaterJetting::SetToolCorrAuxDir( const Vector3d& vtTool, const Vector3d& vtCorr)
|
||||
@@ -3063,7 +2991,7 @@ WaterJetting::VerifyMaxLenCurves( ICurveComposite* pCompo, double dMaxLen)
|
||||
// verifiche sulla lunghezza delle curve
|
||||
int nMaxInd = pCompo->GetCurveCount() - 1 ;
|
||||
for ( int i = 0 ; i <= nMaxInd ; ) {
|
||||
// se lunghezza oltre il limite, la divido a metà
|
||||
// se lunghezza oltre il limite, la divido a metà
|
||||
const ICurve* pCrv = GetCurve( pCompo->GetCurve( i)) ;
|
||||
double dLen ;
|
||||
if ( pCrv != nullptr && pCrv->GetLength( dLen) && dLen > dMaxLen) {
|
||||
|
||||
+5
-3
@@ -77,10 +77,10 @@ class WaterJetting : public Machining
|
||||
bool ProcessPath( int nPathId, int nPvId, int nClId) ;
|
||||
bool AdjustPathForInternalAngles( ICurveComposite* pCompo) ;
|
||||
bool GeneratePreView( int nPathId, const ICurveComposite* pCompo, double dAddedOverlap) ;
|
||||
ISurfFlatRegion* GenerateLeadInPreview( const ICurveComposite* pCompo) ;
|
||||
ISurfFlatRegion* GenerateLeadOutPreview( const ICurveComposite* pCompo) ;
|
||||
bool AddLeadInPreview( const ICurveComposite* pCompo, ISurfFlatRegion* pSPV) ;
|
||||
bool AddLeadOutPreview( const ICurveComposite* pCompo, ISurfFlatRegion* pSPV) ;
|
||||
bool AddLoopsPreview( const ICurveComposite* pCompo, ISurfFlatRegion* pSPV) ;
|
||||
bool AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTool, bool bSplitArcs, double dAddedOverlap) ;
|
||||
bool AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTool, bool bSplitArcs) ;
|
||||
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, bool bSplit) ;
|
||||
bool AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, bool bSplit) ;
|
||||
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN,
|
||||
@@ -90,6 +90,8 @@ class WaterJetting : public Machining
|
||||
bool AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d& vtN,
|
||||
bool bSplitArcs, Point3d& ptP1) ;
|
||||
double GetRadiusForStartEndElevation( void) const ;
|
||||
bool GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, double dElev) const ;
|
||||
bool GetPointAboveRaw( const Point3d& ptP) const ;
|
||||
bool SetToolCorrAuxDir( const Vector3d& vtTool, const Vector3d& vtCorr) ;
|
||||
bool CalcAndSetToolCorrAuxDir( const ICurveComposite* pCompo, double dU) ;
|
||||
Vector3d CalcToolDir( const ICurveComposite* pCompo, double dU) ;
|
||||
|
||||
@@ -133,7 +133,7 @@ WaterJettingData::Clone( void) const
|
||||
bool
|
||||
WaterJettingData::CopyFrom( const MachiningData* pMdata)
|
||||
{
|
||||
// è inutile copiare se sorgente coincide con destinazione
|
||||
// è inutile copiare se sorgente coincide con destinazione
|
||||
if ( pMdata == this)
|
||||
return true ;
|
||||
// la sorgente deve essere dello stesso tipo
|
||||
@@ -242,7 +242,7 @@ WaterJettingData::SameAs( const MachiningData* pMdata) const
|
||||
int
|
||||
WaterJettingData::GetSize( void) const
|
||||
{
|
||||
// in debug verifico validità ultimo campo
|
||||
// in debug verifico validità ultimo campo
|
||||
assert( sWaterJettingKey[KEY_WS] == "WS") ;
|
||||
return KEY_ZZZ ;
|
||||
}
|
||||
@@ -486,7 +486,7 @@ WaterJettingData::VerifyExtCornerType( int nVal) const
|
||||
bool
|
||||
WaterJettingData::VerifyIntCornerType( int nVal) const
|
||||
{
|
||||
return ( nVal == WJET_IC_NONE || nVal == WJET_IC_SLOW || nVal == WJET_IC_SLOW_FULL) ;
|
||||
return ( nVal == WJET_IC_NONE || nVal == WJET_IC_SLOW) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user