EgtMachKernel 1.8f4 :

- correzioni per rinvio da sotto speciale (MDC)
- ottimizzato caricamento altri utensili su testa con più uscite
- salvato stato visualizzazione macchina e aggiunta funzione per restituirlo
- si garantisce la visualizzazione completa della macchina durante Apply e Update delle lavorazioni.
This commit is contained in:
Dario Sassi
2017-06-27 13:54:41 +00:00
parent 7aa2675f49
commit b88aa9cf18
19 changed files with 159 additions and 35 deletions
+13 -13
View File
@@ -1271,7 +1271,7 @@ Drilling::VerifyHoleFromBottom( const Hole& hole, SelData Id)
return false ;
}
// assegno direzione di accesso e segnalazione di utilizzo aggregato da sotto
SetAuxDir( vtDir) ;
m_vtAggrBottom = vtDir ;
m_bAggrBottom = true ;
m_dDistBottom = dDist ;
return true ;
@@ -1308,23 +1308,23 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId)
double dAppr = ( m_bAggrBottom ? dSafeAggrBottZ : dSafeZ) ;
Point3d ptP1 = hole.ptIni + hole.vtDir * ( dAppr + dTExtrLen) ;
if ( m_bAggrBottom) {
Point3d ptP0 = ptP1 + m_vtAux * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP1 + m_vtAggrBottom * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAppr + dTExtrLen) ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidStart( ptP00, MCH_CL_AGB_DWN) == GDB_ID_NULL)
return false ;
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
SetFlag( 0) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
}
// altrimenti rinvio normale
else {
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
if ( AddRapidStart( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
SetFlag( 0) ;
@@ -1381,13 +1381,13 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId)
// 7 -> punto fuori (se uso aggregato da sotto)
if ( m_bAggrBottom) {
SetFlag( 0) ;
Point3d ptP0 = ptP1 + m_vtAux * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP1 + m_vtAggrBottom * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAppr + dTExtrLen) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_OUT) == GDB_ID_NULL)
return false ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidMove( ptP00, MCH_CL_AGB_UP) == GDB_ID_NULL)
@@ -1434,23 +1434,23 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId)
double dAppr = ( m_bAggrBottom ? dSafeAggrBottZ : dSafeZ) ;
Point3d ptP1 = hole.ptIni + hole.vtDir * ( dAppr + dTExtrLen) ;
if ( m_bAggrBottom) {
Point3d ptP0 = ptP1 + m_vtAux * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP1 + m_vtAggrBottom * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAppr + dTExtrLen) ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidStart( ptP00, MCH_CL_AGB_DWN) == GDB_ID_NULL)
return false ;
SetFlag( 0) ;
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
}
// altrimenti rinvio normale
else {
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
if ( AddRapidStart( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
SetFlag( 0) ;
@@ -1580,13 +1580,13 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId)
// 7 -> punto fuori (se uso aggregato da sotto)
if ( m_bAggrBottom) {
SetFlag( 0) ;
Point3d ptP0 = ptP1 + m_vtAux * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP1 + m_vtAggrBottom * ( m_dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAppr + dTExtrLen) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_OUT) == GDB_ID_NULL)
return false ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidMove( ptP00, MCH_CL_AGB_UP) == GDB_ID_NULL)
+1
View File
@@ -96,6 +96,7 @@ class Drilling : public Machining
ToolData m_TParams ; // parametri utensile
int m_nDrillings ; // numero di fori generati
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
double m_dDistBottom ; // distanza del foro dal bordo del grezzo
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
} ;
BIN
View File
Binary file not shown.
+1
View File
@@ -316,6 +316,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
<ClInclude Include="SawingData.h" />
<ClInclude Include="SawRoughing.h" />
<ClInclude Include="SawRoughingData.h" />
<ClInclude Include="SetTempMachLook.h" />
<ClInclude Include="SetTempPhase.h" />
<ClInclude Include="SetupMgr.h" />
<ClInclude Include="Simulator.h" />
+3
View File
@@ -353,6 +353,9 @@
<ClInclude Include="Pocketing.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SetTempMachLook.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EgtMachKernel.rc">
+1
View File
@@ -311,6 +311,7 @@ class MachMgr : public IMachMgr
bool UnloadTool( const std::string& sHead, int nExit) override ;
bool ResetHeadSet( const std::string& sHead) override ;
bool SetMachineLook( int nFlag) override ;
int GetMachineLook( void) override ;
public :
MachMgr( void) ;
+10
View File
@@ -642,3 +642,13 @@ MachMgr::SetMachineLook( int nFlag)
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->SetLook( nFlag) : false) ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetMachineLook( void)
{
Machine* pMch = GetCurrMachine() ;
if ( pMch == nullptr)
return MCH_LOOK_NONE ;
return pMch->GetLook() ;
}
+5
View File
@@ -19,6 +19,7 @@
#include "Disposition.h"
#include "MachiningCreate.h"
#include "SetTempPhase.h"
#include "SetTempMachLook.h"
#include "/EgtDev/Include/EMkOperationConst.h"
#include "/EgtDev/Include/EGkUserObjFactory.h"
#include "/EgtDev/Include/EGkGdbIterator.h"
@@ -947,6 +948,8 @@ MachMgr::MachiningApply( bool bRecalc)
return false ;
// imposto fase della lavorazione come temporaneamente corrente
SetTempPhase TmpPhase( this, pMch->GetPhase()) ;
// imposto visualizzazione completa della macchina come temporaneamente corrente
SetTempMachLook TmpMachLook( this, MCH_LOOK_ALL) ;
// calcolo la lavorazione
return pMch->Apply( bRecalc) ;
}
@@ -972,6 +975,8 @@ MachMgr::MachiningUpdate( void)
return false ;
// imposto fase della lavorazione come temporaneamente corrente
SetTempPhase TmpPhase( this, pMch->GetPhase()) ;
// imposto visualizzazione completa della macchina come temporaneamente corrente
SetTempMachLook TmpMachLook( this, MCH_LOOK_ALL) ;
// aggiorno valori assi macchina e collegamento con operazione precedente
return pMch->Update() ;
}
+10
View File
@@ -47,6 +47,7 @@ Machine::Machine( void)
m_dCalcTRad = 0 ;
m_dCalcTOvLen = 0 ;
m_dCalcTOvRad = 0 ;
m_nMachineLook = MCH_LOOK_NONE ;
}
//----------------------------------------------------------------------------
@@ -125,6 +126,8 @@ Machine::Init( const string& sMachinesDir, const string& sMachineName, MachMgr*
m_sName.clear() ;
m_sMachineDir.clear() ;
}
// imposto stato di visualizzazione
m_nMachineLook = ( bOk ? MCH_LOOK_ALL : MCH_LOOK_NONE) ;
// metto tutti gli assi in posizione home
bOk = bOk && ResetAllAxesPos() ;
return bOk ;
@@ -818,6 +821,10 @@ Machine::CreateExitGroups( int nLay, const MUEXITVECTOR& vMuExit)
bool
Machine::SetLook( int nFlag)
{
// verifico validità flag
if ( nFlag < MCH_LOOK_TAB || nFlag > MCH_LOOK_ALL)
return false ;
// verifico DB geometrico
if ( m_pGeomDB == nullptr)
return false ;
@@ -894,6 +901,9 @@ Machine::SetLook( int nFlag)
nId = m_pGeomDB->GetNext( nId) ;
}
// aggiorno stato di visualizzazione
m_nMachineLook = nFlag ;
return true ;
}
+5 -1
View File
@@ -58,7 +58,7 @@ class Machine
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) ;
bool LoadTools( const std::string& sHead, int* pnCount = nullptr) ;
bool LoadTools( const std::string& sHead, int nNoExit, int* pnCount = nullptr) ;
bool UnloadTools( const std::string& sHead) ;
bool LoadAllTools( void) ;
bool UnloadAllTools( void) ;
@@ -122,6 +122,8 @@ class Machine
const std::string& GetOutstrokeInfo( void) const
{ return m_sOutstrokeInfo ; }
bool SetLook( int nFlag) ;
int GetLook( void)
{ return m_nMachineLook ; }
bool LinkRawPartToGroup( int nRawPartId, const std::string& sGroupName) ;
bool IsLinkedRawPart( int nRawId) const ;
bool UnlinkRawPartFromGroup( int nRawPartId) ;
@@ -247,6 +249,8 @@ class Machine
KINAXISVECTOR m_vCalcLinAx ; // vettore assi lineari attivi per calcoli
KINAXISVECTOR m_vCalcRotAx ; // vettore assi rotanti attivi per calcoli
mutable std::string m_sOutstrokeInfo ; // informazioni su ultimo extra corsa
// stato di visualizzazione
int m_nMachineLook ; // stato di visualizzazione della macchina
// Static per interprete Lua di macchina
private :
+1 -1
View File
@@ -212,7 +212,7 @@ Machine::SetCurrTool( const string& sTool, const string& sHead, int nExit)
// se definito
if ( ! sTool.empty()) {
// carico anche gli utensili su eventuali altre uscite della testa
LoadTools( sHead) ;
LoadTools( sHead, nExit) ;
// carico l'utensile (si sostituisce ad altro già presente sulla stessa uscita)
if ( ! LoadTool( sHead, nExit, sTool)) {
string sOut = "Missing tool " + sTool ;
+5 -2
View File
@@ -164,7 +164,7 @@ Machine::UnloadTool( const string& sHead, int nExit)
//----------------------------------------------------------------------------
bool
Machine::LoadTools( const string& sHead, int* pnCount)
Machine::LoadTools( const string& sHead, int nNoExit, int* pnCount)
{
// annullo eventuale parametro di conteggio
if ( pnCount != nullptr)
@@ -182,6 +182,9 @@ Machine::LoadTools( const string& sHead, int* pnCount)
return false ;
// ciclo su tutte le uscite
for ( int nExit = 1 ; nExit <= pHead->GetExitCount() ; ++ nExit) {
// se uscita da saltare, vado oltre
if ( nExit == nNoExit)
continue ;
// recupero l'uscita
string sExit = MCH_EXIT + ToString( nExit) ;
int nExGrp = m_pGeomDB->GetFirstNameInGroup( nHdGrp, sExit) ;
@@ -227,7 +230,7 @@ Machine::LoadAllTools( void)
if ( vsHSet.front() == snGro.first) {
// carico prima testa con utensili dell'insieme
for ( int i = 0, nTools = 0 ; i < int( vsHSet.size()) && nTools == 0 ; ++ i) {
LoadTools( vsHSet[i], &nTools) ;
LoadTools( vsHSet[i], 0, &nTools) ;
}
}
}
+41
View File
@@ -116,6 +116,47 @@ Machining::GetEndPoint( Point3d& ptEnd) const
return false ;
}
//----------------------------------------------------------------------------
bool
Machining::ShowTool( int nPath, double dFraz) const
{
// verifico validità gestore DB geometrico
if ( m_pGeomDB == nullptr)
return false ;
// recupero gruppo per geometria di lavorazione (Cutter Location)
int nClId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_CL) ;
if ( nClId == GDB_ID_NULL)
return false ;
// recupero la prima entità del primo sottogruppo
int nEntId = m_pGeomDB->GetFirstInGroup( m_pGeomDB->GetFirstGroupInGroup( nClId)) ;
if ( nEntId == GDB_ID_NULL)
return false ;
// recupero i dati di questa entità
const CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ;
if ( pCamData == nullptr)
return false ;
Point3d ptEnd = pCamData->GetEndPoint() ;
Vector3d vtTool = pCamData->GetToolDir() ;
// creo o svuoto gruppo per anteprima utensile
int nStId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_ST) ;
// se non c'è, lo aggiungo
if ( nStId == GDB_ID_NULL) {
nStId = m_pGeomDB->AddGroup( GDB_ID_NULL, GetOwner(), Frame3d()) ;
if ( nStId == GDB_ID_NULL)
return false ;
m_pGeomDB->SetName( nStId, MCH_ST) ;
m_pGeomDB->SetLevel( nStId, GDB_LV_TEMP) ;
}
// altrimenti lo svuoto
else
m_pGeomDB->EmptyGroup( nStId) ;
// copio la testa della lavorazione nel gruppo
int nHeadId = m_pMchMgr->GetHeadId( GetHeadName()) ;
int nId = m_pGeomDB->CopyGlob( nHeadId, GDB_ID_NULL, nStId) ;
m_pGeomDB->SetStatus( nId, GDB_ST_ON) ;
return true ;
}
//----------------------------------------------------------------------------
bool
Machining::PostApply( void)
+1
View File
@@ -46,6 +46,7 @@ class Machining : public Operation
public :
bool GetStartPoint( Point3d& ptStart) const ;
bool GetEndPoint( Point3d& ptEnd) const ;
bool ShowTool( int nPath, double dFraz) const ;
protected :
Machining( void) ;
+14 -9
View File
@@ -548,6 +548,11 @@ Milling::Apply( bool bRecalc)
nPathId = m_pGeomDB->GetNextGroup( nPathId) ;
}
//// imposto l'utensile per l'anteprima !!! provvisorio per test !!!
// if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
// return false ;
// ShowTool( 0, 0) ;
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
@@ -1651,7 +1656,7 @@ Milling::VerifyPathFromBottom( const ICurveComposite* pCompo, const Vector3d& vt
return false ;
}
// assegno direzione di accesso e segnalo utilizzo aggregato da sotto
SetAuxDir( vtDir) ;
m_vtAggrBottom = vtDir ;
m_bAggrBottom = true ;
return true ;
}
@@ -2441,26 +2446,26 @@ Milling::AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ,
double dAggZ = max( dElev + max( dSafeAggrBottZ, dAppr), 0.) ;
// distanza dal bordo del pezzo
double dDistBottom ;
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAux, dDistBottom))
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAggrBottom, dDistBottom))
dDistBottom = 0 ;
// pre-approccio
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAux * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAggrBottom * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAggZ - dElev) ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidStart( ptP00, MCH_CL_AGB_DWN) == GDB_ID_NULL)
return false ;
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
SetFlag( 0) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
}
// altrimenti rinvio normale
else {
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
if ( AddRapidStart( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
SetFlag( 0) ;
@@ -2580,16 +2585,16 @@ Milling::AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ,
double dAggZ = max( dElev + max( dSafeAggrBottZ, dAppr), 0.) ;
// distanza dal bordo del pezzo
double dDistBottom ;
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAux, dDistBottom))
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAggrBottom, dDistBottom))
dDistBottom = 0 ;
// post-retract
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAux * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAggrBottom * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAggZ - dElev) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_OUT) == GDB_ID_NULL)
return false ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidMove( ptP00, MCH_CL_AGB_UP) == GDB_ID_NULL)
+1
View File
@@ -120,5 +120,6 @@ class Milling : public Machining
ToolData m_TParams ; // parametri utensile
int m_nMills ; // numero di percorsi di lavoro generati
bool m_bAggrBottom ; // flag utilizzo di aggregato da sotto
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
} ;
+9 -9
View File
@@ -1376,7 +1376,7 @@ Pocketing::VerifyPathFromBottom( const ICurveComposite* pCompo, const Vector3d&
return false ;
}
// assegno direzione di accesso e segnalo utilizzo aggregato da sotto
SetAuxDir( vtDir) ;
m_vtAggrBottom = vtDir ;
m_bAggrBottom = true ;
return true ;
}
@@ -1946,26 +1946,26 @@ Pocketing::AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafe
double dAggZ = max( dElev + max( dSafeAggrBottZ, dAppr), 0.) ;
// distanza dal bordo del pezzo
double dDistBottom ;
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAux, dDistBottom))
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAggrBottom, dDistBottom))
dDistBottom = 0 ;
// pre-approccio
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAux * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAggrBottom * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAggZ - dElev) ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidStart( ptP00, MCH_CL_AGB_DWN) == GDB_ID_NULL)
return false ;
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
SetFlag( 0) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
}
// altrimenti rinvio normale
else {
SetAuxDir( m_vtAux) ;
SetAuxDir( m_vtAggrBottom) ;
if ( AddRapidStart( ptP0, MCH_CL_AGB_IN) == GDB_ID_NULL)
return false ;
SetFlag( 0) ;
@@ -2047,16 +2047,16 @@ Pocketing::AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ
double dAggZ = max( dElev + max( dSafeAggrBottZ, dAppr), 0.) ;
// distanza dal bordo del pezzo
double dDistBottom ;
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAux, dDistBottom))
if ( ! GetDistanceFromRawSide( m_nPhase, ptP, m_vtAggrBottom, dDistBottom))
dDistBottom = 0 ;
// post-retract
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAux * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP0 = ptP - Z_AX * dAggZ + m_vtAggrBottom * ( dDistBottom + m_AggrBottom.dEncH + dSafeZ) ;
Point3d ptP00 = ptP0 + Z_AX * ( m_AggrBottom.dEncV + m_TParams.m_dLen + dAggZ - dElev) ;
if ( AddRapidMove( ptP0, MCH_CL_AGB_OUT) == GDB_ID_NULL)
return false ;
// se rinvio da sotto che richiede speciale rotazione
if ( m_AggrBottom.nType == 1) {
Vector3d vtAux = m_vtAux ;
Vector3d vtAux = m_vtAggrBottom ;
vtAux.Rotate( Z_AX, 90) ;
SetAuxDir( vtAux) ;
if ( AddRapidMove( ptP00, MCH_CL_AGB_UP) == GDB_ID_NULL)
+1
View File
@@ -127,5 +127,6 @@ class Pocketing : public Machining
ToolData m_TParams ; // parametri utensile
int m_nPockets ; // numero di percorsi di svuotatura generati
bool m_bAggrBottom ; // flag di utilizzo dell'aggregato da sotto
Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto
AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto
} ;
+37
View File
@@ -0,0 +1,37 @@
//----------------------------------------------------------------------------
// EgalTech 2017-2017
//----------------------------------------------------------------------------
// File : SetTempMachLook.h Data : 26.06.17 Versione : 1.8f
// Contenuto : Dichiarazione classe per impostazione temporanea
// della fase corrente.
//
//
// Modifiche : 14.10.16 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "MachMgr.h"
//----------------------------------------------------------------------------
class SetTempMachLook
{
public :
SetTempMachLook( MachMgr* pMachMgr, int nLook)
{ m_pMachMgr = pMachMgr ;
if ( m_pMachMgr != nullptr) {
m_nPrevLook = m_pMachMgr->GetMachineLook() ;
m_pMachMgr->SetMachineLook( nLook) ;
} }
~SetTempMachLook( void)
{ Reset() ; }
void Reset( void)
{ if ( m_pMachMgr != nullptr)
m_pMachMgr->SetMachineLook( m_nPrevLook) ; }
private :
int m_nPrevLook ;
MachMgr* m_pMachMgr ;
} ;