EgtMachKernel 2.6k2 :
- correzione in Drilling per multiforatura con tre assi rotanti di cui uno bloccato.
This commit is contained in:
+55
-50
@@ -4,7 +4,7 @@
|
||||
// File : Drilling.cpp Data : 20.12.23 Versione : 2.5l47
|
||||
// Contenuto : Implementazione gestione forature.
|
||||
//
|
||||
// Note : Questa lavorazione è sempre espressa nel riferimento globale.
|
||||
// Note : Questa lavorazione è sempre espressa nel riferimento globale.
|
||||
//
|
||||
// Modifiche : 21.05.15 DS Creazione modulo.
|
||||
// 20.12.23 RE Forature multiple con aggregati.
|
||||
@@ -82,16 +82,16 @@ struct MHDrill {
|
||||
|
||||
struct HoleInfo {
|
||||
Hole hole ; // foro
|
||||
bool bDrill = false ; // se alla fine verrà lavorato
|
||||
bool bDrill = false ; // se alla fine verrà lavorato
|
||||
bool bTempDrill = false ; // per test maschera (se durante un test viene lavorato o no)
|
||||
int nTempTool = -1 ; // per test maschera ( indice utensile che lo lavora durante un test)
|
||||
bool bSkipToAngle = false ; // nel caso di più assi rotanti, se foro già lavorato con testa orientata
|
||||
bool bForToolM = false ; // se tool main lavorerà questo foro
|
||||
int nIndHoleToolM = -1 ; // indice del foro che lo svuoterà inserendo il primo tool in esso
|
||||
bool bSkipToAngle = false ; // nel caso di più assi rotanti, se foro già lavorato con testa orientata
|
||||
bool bForToolM = false ; // se tool main lavorerà questo foro
|
||||
int nIndHoleToolM = -1 ; // indice del foro che lo svuoterà inserendo il primo tool in esso
|
||||
INTVECTOR vToolHole ; // vettore di indici dei fori ai quali inserire l'ultim punta per lavorare il foro corrente
|
||||
INTVECTOR vIndTools ; // vettore dei tool associati ad ogni lavorazione in vToolHole (ordinati)
|
||||
VCT3DVECTOR vVtAux ; // vettore dei vtAux ausiliari del tool principale per lavorare questo foro (ordinati)
|
||||
int nIndTool = -1 ; // indice del tool che alla fine lavorerà il foro
|
||||
int nIndTool = -1 ; // indice del tool che alla fine lavorerà il foro
|
||||
Vector3d vtAux ; // vettore ausiliario del tool principale che permette al tool principale di lavorare questo foro
|
||||
Point3d ptBtn ; // punto interno alla base del foro
|
||||
int nIndInSelVector = 0 ; // indice nel vettore m_vId (id fori selezionati)
|
||||
@@ -483,14 +483,14 @@ Drilling::SetParam( int nType, const string& sVal)
|
||||
bool
|
||||
Drilling::SetGeometry( const SELVECTOR& vIds)
|
||||
{
|
||||
// verifico validità gestore generale e gestore DB geometrico
|
||||
// verifico validità gestore generale e gestore DB geometrico
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// reset della geometria corrente
|
||||
m_vId.clear() ;
|
||||
// se lavorazione standard
|
||||
if ( m_Params.m_nSubType == DRI_SUB_STD) {
|
||||
// verifico che gli identificativi rappresentino dei fori (il corretto diametro è verificato dopo)
|
||||
// verifico che gli identificativi rappresentino dei fori (il corretto diametro è verificato dopo)
|
||||
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
||||
// recupero i dati del foro
|
||||
Hole hole ;
|
||||
@@ -528,12 +528,12 @@ Drilling::Preview( bool bRecalc)
|
||||
{
|
||||
// reset numero forature nella lavorazione
|
||||
m_nDrillings = 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 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)
|
||||
@@ -569,7 +569,7 @@ Drilling::Apply( bool bRecalc, bool bPostApply)
|
||||
int nCurrDrillings = m_nDrillings ;
|
||||
m_nDrillings = 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 ;
|
||||
|
||||
@@ -599,7 +599,7 @@ Drilling::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)
|
||||
@@ -664,7 +664,7 @@ Drilling::Apply( bool bRecalc, bool bPostApply)
|
||||
bool
|
||||
Drilling::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 ;
|
||||
|
||||
@@ -674,7 +674,7 @@ Drilling::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
|
||||
@@ -760,7 +760,7 @@ Drilling::VerifyMultiParallelFixedDrills( void)
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
// non è stato trovato niente
|
||||
// non è stato trovato niente
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -840,7 +840,7 @@ Drilling::MultiHeadDrilling( const SELVECTOR& vId, int nClId, TABMHDRILL& tabDri
|
||||
for ( int nT = 0 ; nT < nExitCnt ; ++ nT) {
|
||||
string sToolName ;
|
||||
if ( ! m_pMchMgr->GetLoadedTool( sHead, nT + 1, sToolName) || sToolName.empty()) {
|
||||
// non c'è utensile
|
||||
// non c'è utensile
|
||||
vTools.emplace_back( nullptr) ;
|
||||
continue ;
|
||||
}
|
||||
@@ -923,6 +923,11 @@ Drilling::MultiHeadDrilling( const SELVECTOR& vId, int nClId, TABMHDRILL& tabDri
|
||||
if ( ! bSomeHoleOk)
|
||||
return true ;
|
||||
|
||||
// imposto eventuale asse bloccato da lavorazione
|
||||
SetBlockedRotAxis( m_Params.m_sBlockedAxis) ;
|
||||
// applico eventuali blocchi di assi rotanti
|
||||
m_pMchMgr->ApplyRotAxisBlock() ;
|
||||
|
||||
// calcolo la corrispondenza tra utensili e fori
|
||||
if ( ! CalcMask( vHoles, vTools, nMainToolInd, vtTool, vtAux))
|
||||
return false ;
|
||||
@@ -941,7 +946,7 @@ Drilling::MultiHeadDrilling( const SELVECTOR& vId, int nClId, TABMHDRILL& tabDri
|
||||
// numero di fori lavorati
|
||||
int nOkHole = 0 ;
|
||||
|
||||
// se c'è un solo foro va sicuramente bene
|
||||
// se c'è un solo foro va sicuramente bene
|
||||
if ( vHoles.size() == 1 && ! vHoles[0].vVtAux.empty()) {
|
||||
vHoles[0].bForToolM = true ;
|
||||
vHoles[0].nIndTool = nMainToolInd ;
|
||||
@@ -952,7 +957,7 @@ Drilling::MultiHeadDrilling( const SELVECTOR& vId, int nClId, TABMHDRILL& tabDri
|
||||
// decido in quali fori inserire il tool principale
|
||||
for ( int nCheck = 1 ; nCheck < ( int)vHoles.size() && nOkHole < ( int)vHoles.size() - nNoDrillHoles ; ++ nCheck) {
|
||||
for ( int i = 0 ; i < ( int)vHoles.size() ; ++i) {
|
||||
// prendo tutti i fori con vToolHope di lunghezza nCheck non già lavorati
|
||||
// prendo tutti i fori con vToolHope di lunghezza nCheck non già lavorati
|
||||
if ( vHoles[i].vToolHole.size() == nCheck && ! vHoles[i].bDrill) {
|
||||
vHoles[vHoles[i].vToolHole[0]].bForToolM = true ;
|
||||
vHoles[vHoles[i].vToolHole[0]].nIndTool = nMainToolInd ;
|
||||
@@ -974,7 +979,7 @@ Drilling::MultiHeadDrilling( const SELVECTOR& vId, int nClId, TABMHDRILL& tabDri
|
||||
}
|
||||
}
|
||||
|
||||
// calcolo la massima differenza di lunghezza tra il primo tool e gli altri ( così l'elevazione finale rimane compatibile)
|
||||
// calcolo la massima differenza di lunghezza tra il primo tool e gli altri ( così l'elevazione finale rimane compatibile)
|
||||
double dRefLen = vTools[nMainToolInd].pTool->m_dTLen ;
|
||||
double dOffMax = 0 ;
|
||||
for ( int nT = 0 ; nT < ( int)vTools.size() && nNoDrillHoles != (int)vHoles.size() ; ++ nT) {
|
||||
@@ -1084,13 +1089,13 @@ Drilling::CalcMask( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndMT, co
|
||||
// in ogni foro i-esimo inserisco il Tool principale
|
||||
for ( int i = 0 ; i < ( int)vHoles.size() ; ++ i) {
|
||||
|
||||
// resetto le veriabili di controllo di svuotatura temporanea per tutti i fori
|
||||
// resetto le variabili di controllo di svuotatura temporanea per tutti i fori
|
||||
for ( int k = 0 ; k < ( int)vHoles.size() ; ++ k) {
|
||||
vHoles[k].bTempDrill = false ;
|
||||
vHoles[k].nTempTool = -1 ;
|
||||
}
|
||||
|
||||
// verifica validità del foro i-esimo per il Tool principale
|
||||
// verifica validità del foro i-esimo per il Tool principale
|
||||
Hole Hole_i = vHoles[i].hole ;
|
||||
if ( ! MultiHeadVerifyHole( Hole_i, vTools[nIndMT].pTool, dDiamToler, m_vId[vHoles[i].nIndInSelVector]))
|
||||
continue ;
|
||||
@@ -1123,13 +1128,13 @@ Drilling::CalcMask( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndMT, co
|
||||
if ( ! frHMT.IsValid())
|
||||
return false ;
|
||||
|
||||
// numero di svuotature inserendo il Tool principale nel foro i-esimo
|
||||
// numero di forature inserendo il Tool principale nel foro i-esimo
|
||||
int nDrills = 1 ;
|
||||
// setto le variabili temporanee per il foro i-esimo
|
||||
vHoles[i].bTempDrill = true ;
|
||||
vHoles[i].nTempTool = nIndMT ;
|
||||
|
||||
// controllo la compatibilità tra le geometrie dei Tool e dei fori
|
||||
// controllo la compatibilità tra le geometrie dei Tool e dei fori
|
||||
CheckOtherHolesWithTools( vHoles, vTools, nIndMT, i, Hole_i, frMT, frHMT, dDiamToler, nDrills) ;
|
||||
|
||||
// controllo quanti fori sono riuscito a svuotare e setto i loro parametri di foratura
|
||||
@@ -1148,7 +1153,7 @@ Drilling::CalcMask( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndMT, co
|
||||
vHoles[d].bTempDrill = false ;
|
||||
}
|
||||
|
||||
// se la testa può ruotare
|
||||
// se la testa può ruotare
|
||||
if ( nStat < 0) {
|
||||
|
||||
// inizio a scorrere tutti i tools
|
||||
@@ -1166,7 +1171,7 @@ Drilling::CalcMask( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndMT, co
|
||||
! MultiHeadVerifyHole( Hole_j, vTools[t].pTool, dDiamToler, m_vId[vHoles[j].nIndInSelVector]))
|
||||
continue ;
|
||||
|
||||
// resetto le veriabili di controllo di svuotatura temporanea per tutti i fori
|
||||
// resetto le variabili di controllo di foratura temporanea per tutti i fori
|
||||
for ( int k = 0 ; k < ( int)vHoles.size() ; ++ k) {
|
||||
vHoles[k].bTempDrill = false ;
|
||||
vHoles[k].nTempTool = -1 ;
|
||||
@@ -1197,12 +1202,12 @@ Drilling::CalcMask( VECTORHOLE& vHoles, const VECTORTOOL& vTools, int nIndMT, co
|
||||
vHoles[i].bTempDrill = true ;
|
||||
vHoles[i].nTempTool = nIndMT ;
|
||||
|
||||
// controllo quanti fori sono riuscito a svuotare in questo nuovo sistema di riferimento
|
||||
// controllo quanti fori sono riuscito a lavorare in questo nuovo sistema di riferimento
|
||||
if ( nDrills == nExitCnt - nNullTools) {
|
||||
for ( int d = 0 ; d < ( int)vHoles.size() ; ++ d) {
|
||||
if ( vHoles[d].bTempDrill) {
|
||||
vHoles[d].vToolHole.push_back( i) ; // indice del foro per il tool principale
|
||||
vHoles[d].vIndTools.push_back( vHoles[d].nTempTool) ; // indice del tool che svuota questo foro
|
||||
vHoles[d].vIndTools.push_back( vHoles[d].nTempTool) ; // indice del tool che lavora questo foro
|
||||
vHoles[d].vVtAux.push_back( frHMT.VersX()) ; // versore ausiliario del tool principale
|
||||
vHoles[d].bSkipToAngle = true ;
|
||||
}
|
||||
@@ -1252,7 +1257,7 @@ Drilling::CheckOtherHolesWithTools( VECTORHOLE& vHoles, const VECTORTOOL& vTools
|
||||
// cerco se ho un foro j-esimo adatto per quella punta
|
||||
for ( int j = 0 ; j < ( int)vHoles.size() ; ++ j) {
|
||||
Hole Hole_j = vHoles[j].hole ; // copia del foro j-esimo
|
||||
// controllo che il foro j-esimo non sia l'i-esimo, che non sia stato già precedentemente svuotato da un altro tool t'-esimo ...
|
||||
// controllo che il foro j-esimo non sia l'i-esimo, che non sia stato già precedentemente lavorato da un altro tool t'-esimo ...
|
||||
// ... che vtDir del foro i-esimo coincida con vtDir del foro j-esimo e che il tool t-esimo sia compatibile con il foro j-esimo
|
||||
if ( nIndHTM == j ||
|
||||
vHoles[j].bTempDrill ||
|
||||
@@ -1264,9 +1269,9 @@ Drilling::CheckOtherHolesWithTools( VECTORHOLE& vHoles, const VECTORTOOL& vTools
|
||||
Point3d ptHj = Hole_j.ptIni - Hole_j.vtDir * Hole_j.dLen ;
|
||||
ptHj.ToLoc( frHMT) ;
|
||||
|
||||
// controllo la compatibilità
|
||||
// controllo la compatibilità
|
||||
if ( AreSamePointApprox( ptHj, ptETt)) {
|
||||
// un foro in più lavorato
|
||||
// un foro in più lavorato
|
||||
++ nDrills ;
|
||||
// aggiorno le variabili temporanee
|
||||
vHoles[j].bTempDrill = true ;
|
||||
@@ -1287,7 +1292,7 @@ Drilling::MultiHeadVerifyHole( Hole& hole, const ToolData* Tool, double dDiamTol
|
||||
// verifico che il diamtro del tool sia compatibile con quello del foro
|
||||
if ( ! VerifyDiameter( hole.dDiam, Tool->m_dDiam, dDiamToler))
|
||||
return false ;
|
||||
// imposto elevazione da lunghezza foro con possibilità di sovrascrittura da info
|
||||
// imposto elevazione da lunghezza foro con possibilità di sovrascrittura da info
|
||||
double dElev = hole.dLen ;
|
||||
double dMaxElev ;
|
||||
if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxElev="), dMaxElev) && dElev > dMaxElev) {
|
||||
@@ -1313,7 +1318,7 @@ Drilling::AlongCurveProcess( bool bRecalc, int nPvId, int nClId)
|
||||
// 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)
|
||||
@@ -1356,7 +1361,7 @@ Drilling::Chain( int nGrpDestId)
|
||||
for ( const auto& Id : m_vId) {
|
||||
// prendo curva
|
||||
vpCrvs.emplace_back( GetCurve( Id)) ;
|
||||
// ne verifico la validità
|
||||
// ne verifico la validità
|
||||
if ( IsNull( vpCrvs.back())) {
|
||||
string sInfo = "Warning in Drilling : Skipped entity " + ToString( Id) ;
|
||||
m_pMchMgr->SetWarning( 2151, sInfo) ;
|
||||
@@ -1497,7 +1502,7 @@ Drilling::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)
|
||||
@@ -1646,7 +1651,7 @@ Drilling::GenerateHoleCl( int nInd, const SelData& nCircId, const string& sPName
|
||||
// se lavorazione del foro non arriva al suo fondo, lo considero cieco
|
||||
if ( hole.dLen < hole.dThick - 10 * EPS_SMALL)
|
||||
hole.bBlind = true ;
|
||||
// imposto elevazione da lunghezza foro con possibilità di sovrascrittura da info
|
||||
// imposto elevazione da lunghezza foro con possibilità di sovrascrittura da info
|
||||
double dElev = hole.dLen ;
|
||||
double dMaxElev ;
|
||||
if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxElev="), dMaxElev) && dElev > dMaxElev) {
|
||||
@@ -1776,7 +1781,7 @@ Drilling::VerifyDiameter( double dHdiam, double dTdiam, double dDiamTol)
|
||||
// imposto minima tolleranza
|
||||
if ( abs( dDiamTol) < 10 * EPS_SMALL)
|
||||
dDiamTol = 10 * EPS_SMALL ;
|
||||
// se tolleranza in più o in meno
|
||||
// se tolleranza in più o in meno
|
||||
if ( dDiamTol > 0)
|
||||
return ( abs( dHdiam - dTdiam) < dDiamTol) ;
|
||||
// altrimenti tolleranza solo in meno
|
||||
@@ -1973,7 +1978,7 @@ Drilling::UpdateToolData( bool* pbChanged)
|
||||
bool
|
||||
Drilling::GetGeometry( SELVECTOR& vIds) const
|
||||
{
|
||||
// restituisco l'elenco delle entità
|
||||
// restituisco l'elenco delle entità
|
||||
vIds = m_vId ;
|
||||
return true ;
|
||||
}
|
||||
@@ -2047,7 +2052,7 @@ Drilling::GetHoleData( SelData Id, Hole& hole)
|
||||
hole.vtDir.Normalize() ;
|
||||
hole.dThick = abs( dThick) ;
|
||||
hole.dLen = abs( dDepth) ;
|
||||
// per default è cieco
|
||||
// per default è cieco
|
||||
hole.bBlind = true ;
|
||||
// se dichiarato passante o no (1/0)
|
||||
int nOpen ;
|
||||
@@ -2070,10 +2075,10 @@ Drilling::GetHoleData( SelData Id, Hole& hole)
|
||||
bool
|
||||
Drilling::VerifyHoleFromBottom( const Hole& hole, SelData Id)
|
||||
{
|
||||
// se non è foro dal basso in alto, esco
|
||||
// se non è foro dal basso in alto, esco
|
||||
if ( hole.vtDir.z > MIN_ZDIR_TOP_TOOL)
|
||||
return true ;
|
||||
// se c'è testa non dall'alto o tavola basculante, esco
|
||||
// se c'è testa non dall'alto o tavola basculante, esco
|
||||
if ( ! m_bAboveHead || m_bTiltingTab)
|
||||
return true ;
|
||||
// recupero dati di eventuale rinvio da sotto
|
||||
@@ -2121,12 +2126,12 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId, double
|
||||
GetElevation( m_nPhase, hole.ptIni, hole.vtDir, m_TParams.m_dDiam / 2, hole.vtDir, dElev) ;
|
||||
// determino alcune caratteristiche dell'utensile
|
||||
double dTExtrLen = max( 0.0, m_TParams.m_dTLen - m_TParams.m_dLen) ;
|
||||
// necessità di spezzatura per robot
|
||||
// necessità di spezzatura per robot
|
||||
bool bSplitArcs = GetSplitArcs( V_NULL) ;
|
||||
// imposto dati comuni
|
||||
SetPathId( nPathId) ;
|
||||
SetToolDir( hole.vtDir) ;
|
||||
// 1 -> punto approccio (se con aggregato da sotto è una sequenza di approccio)
|
||||
// 1 -> punto approccio (se con aggregato da sotto è una sequenza di approccio)
|
||||
SetFlag( 1) ;
|
||||
double dSafeZ = GetSafeZ() ;
|
||||
double dSafeAggrBottZ = GetSafeAggrBottZ() ;
|
||||
@@ -2184,7 +2189,7 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId, double
|
||||
if ( AddRapidMove( ptP2, bSplitArcs) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// 3 -> punto termine velocità ridotta iniziale (se previsto)
|
||||
// 3 -> punto termine velocità ridotta iniziale (se previsto)
|
||||
if ( bStartSlow) {
|
||||
SetFeed( GetStartFeed()) ;
|
||||
if ( ! bStd && ! bEndSlow)
|
||||
@@ -2195,7 +2200,7 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId, double
|
||||
if ( AddLinearMove( ptP3, bSplitArcs) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// 4 -> punto termine velocità standard (se risulta)
|
||||
// 4 -> punto termine velocità standard (se risulta)
|
||||
if ( bStd) {
|
||||
SetFeed( GetFeed()) ;
|
||||
if ( ! bEndSlow)
|
||||
@@ -2206,7 +2211,7 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId, double
|
||||
if ( AddLinearMove( ptP4, bSplitArcs) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// 5 -> punto termine velocità finale ridotta (se previsto)
|
||||
// 5 -> punto termine velocità finale ridotta (se previsto)
|
||||
if ( bEndSlow) {
|
||||
SetFeed( GetTipFeed()) ;
|
||||
SetFlag( 101) ; // fondo del foro
|
||||
@@ -2276,7 +2281,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId, double dMHO
|
||||
GetElevation( m_nPhase, hole.ptIni, hole.vtDir, m_TParams.m_dDiam / 2, hole.vtDir, dElev) ;
|
||||
// determino alcune caratteristiche dell'utensile
|
||||
double dTExtrLen = max( 0.0, m_TParams.m_dTLen - m_TParams.m_dLen) ;
|
||||
// necessità di spezzatura per robot
|
||||
// necessità di spezzatura per robot
|
||||
bool bSplitArcs = GetSplitArcs( V_NULL) ;
|
||||
// imposto dati comuni
|
||||
SetPathId( nPathId) ;
|
||||
@@ -2350,7 +2355,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId, double dMHO
|
||||
dReturnPos = - dStep + APPR_STEP + MIN_MOVE ;
|
||||
double dCurrLen = 0 ;
|
||||
for ( int i = 1 ; i <= nStep ; ++ i) {
|
||||
// se non è primo step faccio retrazione e riaffondo
|
||||
// se non è primo step faccio retrazione e riaffondo
|
||||
if ( i != 1) {
|
||||
// retrazione
|
||||
SetFeed( GetEndFeed()) ;
|
||||
@@ -2367,7 +2372,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId, double dMHO
|
||||
}
|
||||
// lunghezza di fine step
|
||||
double dEndLen = dCurrLen + dStep ;
|
||||
// 3 -> punto termine velocità ridotta iniziale (se previsto)
|
||||
// 3 -> punto termine velocità ridotta iniziale (se previsto)
|
||||
if ( bStartSlow && ( i == 1 || dCurrLen < dStartSlowLen + EPS_SMALL)) {
|
||||
// lunghezza di esecuzione
|
||||
double dLen = min( dStartSlowLen, dEndLen) ;
|
||||
@@ -2392,7 +2397,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId, double dMHO
|
||||
if ( bHoleEnd || bStepEnd)
|
||||
continue ;
|
||||
}
|
||||
// 4 -> punto termine velocità standard (se risulta)
|
||||
// 4 -> punto termine velocità standard (se risulta)
|
||||
if ( bStd && dCurrLen < dStartSlowLen + dStdLen + EPS_SMALL) {
|
||||
// lunghezza di esecuzione
|
||||
double dLen = min( hole.dLen - dEndSlowLen, dEndLen) ;
|
||||
@@ -2417,7 +2422,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId, double dMHO
|
||||
if ( bHoleEnd || bStepEnd)
|
||||
continue ;
|
||||
}
|
||||
// 5 -> punto termine velocità finale ridotta (se previsto)
|
||||
// 5 -> punto termine velocità finale ridotta (se previsto)
|
||||
if ( bEndSlow) {
|
||||
// lunghezza di esecuzione
|
||||
double dLen = dEndLen ;
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user