EgtMachKernel :
- quando si copia un utensile lo si disattiva - in lavorazione WJ i contorni chiusi interni hanno attacco/uscita sul lato abbastanza lungo a Xmin (per corse asse rotante C se inclinati) - migliorata interpretazione hint per angoli iniziali.
This commit is contained in:
+4
-3
@@ -1094,14 +1094,15 @@ Operation::CalculateAxesValues( const string& sHint, bool bSolChExact)
|
||||
// se ci sono suggerimenti validi per gli assi rotanti, li applico
|
||||
if ( ! sHint.empty()) {
|
||||
STRVECTOR vsTok ;
|
||||
Tokenize( sHint, ",", vsTok) ;
|
||||
Tokenize( sHint, ",;", vsTok) ;
|
||||
for (const auto& sTok : vsTok) {
|
||||
string szKey, szVal ;
|
||||
Split( sTok, "=", true, szKey, szVal) ;
|
||||
Trim( szKey) ;
|
||||
for ( int i = 0 ; i < nRotAxes ; ++ i) {
|
||||
string sAxToken ;
|
||||
if ( m_pMchMgr->GetCurrMachine()->GetCurrAxisToken(nLinAxes + i, sAxToken) &&
|
||||
szKey == sAxToken) {
|
||||
if ( m_pMchMgr->GetCurrMachine()->GetCurrAxisToken( nLinAxes + i, sAxToken) &&
|
||||
szKey == Trim( sAxToken)) {
|
||||
double dVal ;
|
||||
if ( FromString( szVal, dVal))
|
||||
vAxRotPrec[i] = dVal ;
|
||||
|
||||
+3
-1
@@ -390,7 +390,9 @@ ToolsMgr::CopyTool( const string& sSource, const string& sName)
|
||||
ToolData tData = *pTdata ;
|
||||
// modifico nome e UUID
|
||||
tData.m_sName = sName ;
|
||||
CreateEgtUUID( tData.m_Uuid) ;
|
||||
CreateEgtUUID( tData.m_Uuid) ;
|
||||
// lo disattivo
|
||||
tData.SetParam( TPA_ACTIVE, false) ;
|
||||
// salvo i dati del nuovo utensile
|
||||
if ( ! m_utData.emplace( tData.m_Uuid, tData).second ||
|
||||
! m_suData.emplace( tData.m_sName, tData.m_Uuid).second)
|
||||
|
||||
+26
-16
@@ -1345,27 +1345,35 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se percorso chiuso con lavorazione all'interno, porto la partenza a metà del lato più lungo
|
||||
// se percorso chiuso con lavorazione all'interno, porto la partenza a metà del lato abbastanza lungo a Xmin
|
||||
if ( pCompo->IsClosed()) {
|
||||
double dArea ;
|
||||
if ( pCompo->GetAreaXY( dArea) &&
|
||||
( ( dArea < 0 && m_Params.m_nWorkSide == WJET_WS_RIGHT) ||
|
||||
( dArea > 0 && m_Params.m_nWorkSide == WJET_WS_LEFT))) {
|
||||
const double DIST_SIC_WJ_LIO = 2 ;
|
||||
double dMinLen = m_Params.m_dOverlap + 2 * DIST_SIC_WJ_LIO ;
|
||||
if ( m_Params.m_nLeadInType != WJET_LI_NONE)
|
||||
dMinLen += m_Params.m_dLiTang ;
|
||||
if ( m_Params.m_nLeadOutType != WJET_LO_NONE)
|
||||
dMinLen += ( m_Params.m_nLeadOutType == WJET_LO_AS_LI ? m_Params.m_dLiTang : m_Params.m_dLoTang) ;
|
||||
int i = 0 ;
|
||||
int nMax = - 1 ;
|
||||
double dLenMax = 0 ;
|
||||
int nMin = - 1 ;
|
||||
double dXmin = INFINITO ;
|
||||
const ICurve* pCrv = pCompo->GetFirstCurve() ;
|
||||
while ( pCrv != nullptr) {
|
||||
double dLen ;
|
||||
if ( pCrv->GetLength( dLen) && dLen > dLenMax) {
|
||||
dLenMax = dLen ;
|
||||
nMax = i ;
|
||||
Point3d ptMid ;
|
||||
if ( pCrv->GetLength( dLen) && dLen > dMinLen &&
|
||||
pCrv->GetMidPoint( ptMid) && ptMid.x < dXmin) {
|
||||
dXmin = ptMid.x ;
|
||||
nMin = i ;
|
||||
}
|
||||
++ i ;
|
||||
pCrv = pCompo->GetNextCurve() ;
|
||||
}
|
||||
if ( nMax >= 0)
|
||||
pCompo->ChangeStartPoint( nMax + 0.5) ;
|
||||
if ( nMin >= 0)
|
||||
pCompo->ChangeStartPoint( nMin + 0.5) ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1901,6 +1909,7 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
}
|
||||
// aggiungo attacco
|
||||
SetFeed( GetFeed()) ;
|
||||
SetFlag( 0) ;
|
||||
SetIndex( 0 - nIdxSkip) ;
|
||||
if ( ! AddLeadIn( ptP1, ptStart, vtStart, vtTool, bSplitArcs)) {
|
||||
m_pMchMgr->SetLastError( 3208, "Error in WaterJetting : LeadIn not computable") ;
|
||||
@@ -1952,8 +1961,8 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// lunghezza di accelerazione
|
||||
double dAccLen = min( m_Params.m_dCornerSlowLen, dLen / 2 - 0.1) ;
|
||||
// Feed minima
|
||||
double dMinFeed = m_Params.m_nCornerSlowPerc / 100. * GetFeed() ;
|
||||
// Feed ridotta
|
||||
double dMinFeed = GetReducedFeed() ;
|
||||
// ciclo sui punti di accelerazione
|
||||
for ( int j = 1 ; j <= ACC_PNT_NUM ; ++ j) {
|
||||
double dCoeff = j / double( ACC_PNT_NUM) ;
|
||||
@@ -1971,8 +1980,8 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// lunghezza di accelerazione
|
||||
double dAccLen = min( m_Params.m_dCornerSlowLen, dLen / 2 - 0.1) ;
|
||||
// Feed minima
|
||||
double dMinFeed = m_Params.m_nCornerSlowPerc / 100. * GetFeed() ;
|
||||
// Feed ridotta
|
||||
double dMinFeed = GetReducedFeed() ;
|
||||
// Direzioni utensile nell'angolo e finale
|
||||
Vector3d vtTp = CalcToolDir( pCompo, i) ;
|
||||
Vector3d vtTn = CalcToolDir( pCompo, i + 0.5) ;
|
||||
@@ -2013,8 +2022,8 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// lunghezza di accelerazione
|
||||
double dAccLen = min( m_Params.m_dCornerSlowLen, dLen / 2 - 0.1) ;
|
||||
// Feed minima
|
||||
double dMinFeed = m_Params.m_nCornerSlowPerc / 100. * GetFeed() ;
|
||||
// Feed ridotta
|
||||
double dMinFeed = GetReducedFeed() ;
|
||||
// ciclo sui punti di decelerazione
|
||||
for ( int j = 0 ; j < ACC_PNT_NUM ; ++ j) {
|
||||
double dCoeff = j / double( ACC_PNT_NUM) ;
|
||||
@@ -2033,8 +2042,8 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
double dLen ; pCrvC->GetLength( dLen) ;
|
||||
// lunghezza di accelerazione
|
||||
double dAccLen = min( m_Params.m_dCornerSlowLen, dLen / 2 - 0.1) ;
|
||||
// Feed minima
|
||||
double dMinFeed = m_Params.m_nCornerSlowPerc / 100. * GetFeed() ;
|
||||
// Feed ridotta
|
||||
double dMinFeed = GetReducedFeed() ;
|
||||
// Direzioni utensile iniziale e nell'angolo
|
||||
Vector3d vtTp = CalcToolDir( pCompo, i + 0.5) ;
|
||||
Vector3d vtTn = CalcToolDir( pCompo, i + 1) ;
|
||||
@@ -2101,6 +2110,7 @@ WaterJetting::AddStandardWj( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
return false ;
|
||||
}
|
||||
// aggiungo retrazione
|
||||
SetFlag( 203) ;
|
||||
if ( ! AddRetract( ptP1, vtTool, dSafeZ)) {
|
||||
m_pMchMgr->SetLastError( 3210, "Error in WaterJetting : Retract not computable") ;
|
||||
return false ;
|
||||
|
||||
@@ -106,6 +106,8 @@ class WaterJetting : public Machining
|
||||
{ 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 GetReducedFeed() const
|
||||
{ return ( 100. - m_Params.m_nCornerSlowPerc) / 100. * GetFeed() ; }
|
||||
double GetTipFeed() const
|
||||
{ return ( IsNullLenValue( m_Params.m_dTipFeed) ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; }
|
||||
double GetOffsR() const
|
||||
|
||||
Reference in New Issue
Block a user