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:
+13
-13
@@ -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)
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
|
||||
Binary file not shown.
@@ -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" />
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
@@ -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() ;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 ;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
@@ -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 ;
|
||||
} ;
|
||||
Reference in New Issue
Block a user