EgtMachKernel 1.8f3 :
- correzioni per approccio/retrazione fresature da sopra.
This commit is contained in:
Binary file not shown.
@@ -376,10 +376,12 @@ class MachMgr : public IMachMgr
|
||||
double GetCalcRot1W( void) const ;
|
||||
bool SetCalcSolCh( int nScc) ;
|
||||
bool VerifyAngleOutstroke( int nInd, double dAng) const ;
|
||||
// operations
|
||||
// Operations
|
||||
bool GetOperationNewName( std::string& sName) const ;
|
||||
const ToolData* GetMachiningToolData( void) const ;
|
||||
|
||||
// Machine
|
||||
bool GetHeadAbove( const std::string& sHead) const ;
|
||||
|
||||
private :
|
||||
// Basic
|
||||
void Clear( void) ;
|
||||
|
||||
@@ -233,6 +233,16 @@ MachMgr::GetHeadExitCount( const string& sHead) const
|
||||
return ( ( pMch != nullptr) ? pMch->GetHeadExitCount( sHead) : 0) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetHeadAbove( const string& sHead) const
|
||||
{
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
bool bAbove = true ;
|
||||
return ( ! m_pGeomDB->GetInfo( GetHeadId( sHead), "ABOVE", bAbove) || bAbove) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetAxisToken( const string& sAxis, string& sToken) const
|
||||
|
||||
+51
-11
@@ -1752,7 +1752,7 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
// determino se l'inizio dell'attacco è fuori dal grezzo
|
||||
bool bOutStart = GetPointOutOfRaw( ptP1, vtTool) ;
|
||||
// determino se l'inizio dell'attacco è sopra il grezzo
|
||||
bool bAboveStart = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveStart = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo approccio per frese normali con spazio sopra attacco
|
||||
if ( ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
|
||||
// correggo elevazione iniziale con punto inizio attacco
|
||||
@@ -1829,7 +1829,7 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo
|
||||
// correggo elevazione finale con punto fine uscita
|
||||
dEndElev -= ( ptP1 - ptEnd) * vtExtr ;
|
||||
// determino se la fine dell'uscita è sopra il grezzo
|
||||
bool bAboveEnd = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveEnd = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo retrazione
|
||||
if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) {
|
||||
m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ;
|
||||
@@ -1898,7 +1898,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// determino se l'inizio dell'attacco è fuori dal grezzo
|
||||
bool bOutStart = GetPointOutOfRaw( ptP1, vtTool) ;
|
||||
// determino se l'inizio dell'attacco è sopra il grezzo
|
||||
bool bAboveStart = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveStart = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// se primo step aggiungo approccio per frese normali
|
||||
if ( j == 1 && ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
|
||||
// correggo elevazione iniziale con punto inizio attacco
|
||||
@@ -1989,7 +1989,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// correggo elevazione finale con punto fine uscita
|
||||
dEndElev -= ( ptP1 - ptEnd) * vtExtr ;
|
||||
// determino se la fine dell'uscita è sopra il grezzo
|
||||
bool bAboveEnd = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveEnd = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo retrazione
|
||||
if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) {
|
||||
m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ;
|
||||
@@ -2059,7 +2059,7 @@ Milling::AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// determino se l'inizio dell'attacco è fuori dal grezzo
|
||||
bool bOutStart = GetPointOutOfRaw( ptP1, vtTool) ;
|
||||
// determino se l'inizio dell'attacco è sopra il grezzo
|
||||
bool bAboveStart = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveStart = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo approccio per frese normali
|
||||
if ( ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
|
||||
// correggo elevazione iniziale con punto inizio attacco
|
||||
@@ -2140,7 +2140,7 @@ Milling::AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// correggo elevazione finale con punto fine uscita
|
||||
dEndElev -= ( ptP1 - ptEnd) * vtExtr ;
|
||||
// determino se la fine dell'uscita è sopra il grezzo
|
||||
bool bAboveEnd = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveEnd = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo retrazione
|
||||
if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) {
|
||||
m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ;
|
||||
@@ -2205,6 +2205,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
double dStElev ;
|
||||
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), dStElev))
|
||||
dStElev = 0 ;
|
||||
dStElev -= dStart ;
|
||||
// determino inizio attacco
|
||||
Point3d ptP1 ;
|
||||
if ( ! CalcLeadInStart( ptStart, vtStart, vtExtr, dStElev, false, pCompo, ptP1))
|
||||
@@ -2212,7 +2213,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// determino se l'inizio dell'attacco è fuori dal grezzo
|
||||
bool bOutStart = GetPointOutOfRaw( ptP1, vtTool) ;
|
||||
// determino se l'inizio dell'attacco è sopra il grezzo
|
||||
bool bAboveStart = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveStart = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo approccio per frese normali
|
||||
if ( ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
|
||||
// correggo elevazione iniziale con punto inizio attacco
|
||||
@@ -2288,7 +2289,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// correggo elevazione finale con punto fine uscita
|
||||
dEndElev -= ( ptP1 - ptEnd) * vtExtr ;
|
||||
// determino se la fine dell'uscita è sopra il grezzo
|
||||
bool bAboveEnd = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveEnd = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo retrazione
|
||||
if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) {
|
||||
m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ;
|
||||
@@ -2335,6 +2336,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
double dStElev ;
|
||||
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), dStElev))
|
||||
dStElev = dElev ;
|
||||
dStElev -= dStart ;
|
||||
// determino inizio attacco
|
||||
Point3d ptP1 ;
|
||||
if ( ! CalcLeadInStart( ptStart, vtStart, vtExtr, dStElev, bInvert, pCompo, ptP1))
|
||||
@@ -2346,7 +2348,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// determino se l'inizio dell'attacco è fuori dal grezzo
|
||||
bool bOutStart = GetPointOutOfRaw( ptP1, vtTool) ;
|
||||
// determino se l'inizio dell'attacco è sopra il grezzo
|
||||
bool bAboveStart = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveStart = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// approccio al punto iniziale
|
||||
if ( ! AddApproach( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dStElev, dAppr, bOutStart, bAboveStart)) {
|
||||
m_pMchMgr->SetLastError( 2309, "Error in Milling : Approach not computable") ;
|
||||
@@ -2412,7 +2414,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
|
||||
// correggo elevazione finale con punto fine uscita
|
||||
dEndElev -= ( ptP1 - ptEnd) * vtExtr ;
|
||||
// determino se la fine dell'uscita è sopra il grezzo
|
||||
bool bAboveEnd = GetPointAboveRaw( ptP1) ;
|
||||
bool bAboveEnd = m_pMchMgr->GetHeadAbove( m_TParams.m_sHead) && GetPointAboveRaw( ptP1) ;
|
||||
// aggiungo retrazione
|
||||
if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) {
|
||||
m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ;
|
||||
@@ -2466,6 +2468,7 @@ Milling::AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ,
|
||||
}
|
||||
// se non sono già sopra il pezzo e sopra attacco c'è spazio per sicurezza o approccio
|
||||
double dSafeDist = ( m_bAggrBottom ? dSafeAggrBottZ : dSafeZ) ;
|
||||
double dElevZ = vtTool.z * dElev ;
|
||||
if ( ! bAboveStart && dElev + max( dSafeDist, dAppr) > 10 * EPS_SMALL) {
|
||||
// se distanza di sicurezza minore di distanza di inizio
|
||||
if ( dSafeDist < dAppr + 10 * EPS_SMALL) {
|
||||
@@ -2495,12 +2498,25 @@ Milling::AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ,
|
||||
if ( AddLinearMove( ptP) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// sono sopra il pezzo ma non abbastanza
|
||||
else if ( bAboveStart && ( min( dElevZ, 0.) + dAppr) > 10 * EPS_SMALL) {
|
||||
// 1b -> punto appena sopra inizio (in Z globale)
|
||||
Point3d ptP1b = ptP + Z_AX * ( min( dElevZ, 0.) + dAppr) ;
|
||||
if ( AddRapidStart( ptP1b) == GDB_ID_NULL)
|
||||
return false ;
|
||||
// affondo al punto iniziale
|
||||
SetFlag( 0) ;
|
||||
SetFeed( bOutStart ? GetStartFeed() : GetTipFeed()) ;
|
||||
if ( AddLinearMove( ptP) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// altrimenti
|
||||
else {
|
||||
// affondo diretto al punto iniziale
|
||||
SetFlag( 0) ;
|
||||
if ( ( ! m_bAggrBottom && AddRapidStart( ptP) == GDB_ID_NULL) ||
|
||||
( m_bAggrBottom && AddRapidMove( ptP) == GDB_ID_NULL))
|
||||
return false ;
|
||||
SetFlag( 0) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -2512,6 +2528,7 @@ Milling::AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ,
|
||||
{
|
||||
// se non sono già sopra il pezzo e sopra uscita c'è spazio per sicurezza o approccio
|
||||
double dSafeDist = ( m_bAggrBottom ? dSafeAggrBottZ : dSafeZ) ;
|
||||
double dElevZ = vtTool.z * dElev ;
|
||||
if ( ! bAboveEnd && dElev + max( dSafeDist, dAppr) > 10 * EPS_SMALL) {
|
||||
if ( dSafeDist < dAppr + 10 * EPS_SMALL) {
|
||||
// 4 -> movimento di risalita sopra il punto finale
|
||||
@@ -2534,6 +2551,29 @@ Milling::AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ,
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// sono sopra il pezzo ma non abbastanza
|
||||
else if ( bAboveEnd && ( min( dElevZ, 0.) + dAppr) > 10 * EPS_SMALL) {
|
||||
if ( dSafeDist < dAppr + 10 * EPS_SMALL) {
|
||||
// 4 -> movimento di risalita sopra il punto finale
|
||||
SetFeed( GetEndFeed()) ;
|
||||
Point3d ptP4 = ptP + Z_AX * ( min( dElevZ, 0.) + dAppr) ;
|
||||
if ( AddLinearMove( ptP4) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
// 4a -> movimento di risalita appena sopra il punto finale
|
||||
Point3d ptP4a = ptP + Z_AX * ( min( dElevZ, 0.) + dAppr) ;
|
||||
if ( dElev + dAppr > EPS_SMALL) {
|
||||
SetFeed( GetEndFeed()) ;
|
||||
if ( AddLinearMove( ptP4a) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// 4b -> movimento di risalita sopra il punto finale
|
||||
Point3d ptP4b = ptP4a + Z_AX * ( dSafeDist - dAppr) ;
|
||||
if ( AddRapidMove( ptP4b) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// se con aggregato da sotto
|
||||
if ( m_bAggrBottom) {
|
||||
// aggiuntivo in Z
|
||||
|
||||
Reference in New Issue
Block a user