EgtMachKernel :

- in fresature ammesso step negativo con utensili che lavorano di lato( frese non di testa e lame).
This commit is contained in:
DarioS
2022-12-22 15:17:50 +01:00
parent 3ef50b6a90
commit f0b00ea95e
2 changed files with 39 additions and 23 deletions
+35 -19
View File
@@ -1779,7 +1779,16 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId)
FromString( ExtractInfo( m_Params.m_sUserNotes, "SideElev="), dSideElev) ;
// verifico che lo step dell'utensile sia sensato
double dOkStep = ( m_Params.m_dStep > EPS_SMALL ? m_Params.m_dStep + EPS_ZERO : 0) ;
double dOkStep = 0 ;
bool bStepUp = false ;
if ( m_Params.m_dStep > EPS_SMALL)
dOkStep = m_Params.m_dStep + EPS_ZERO ;
else if ( m_Params.m_dStep < -EPS_SMALL &&
( m_TParams.m_nType == TT_MILL_NOTIP ||
( ( m_TParams.m_nType & TF_SAWBLADE) != 0 && dSideElev < 10 * EPS_SMALL))) {
dOkStep = abs( m_Params.m_dStep) + EPS_ZERO ;
bStepUp = true ;
}
const double MIN_ZSTEP = ( m_TParams.m_nType != TT_MILL_POLISHING ? 0.1 : EPS_SMALL) ;
if ( dOkStep >= EPS_SMALL && dOkStep < MIN_ZSTEP) {
dOkStep = MIN_ZSTEP + EPS_ZERO ;
@@ -1912,6 +1921,14 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId)
m_Params.m_dLoElev = 0 ;
}
// Controlli per fresa che non lavora di punta (non deve fare movimenti assiali nel pezzo)
if ( m_TParams.m_nType == TT_MILL_NOTIP) {
// Non ammesse passate a spirale
if ( m_Params.m_nStepType == MILL_ST_SPIRAL)
m_Params.m_nStepType = MILL_ST_ZIGZAG ;
// Ammessa elevazione in attacco e uscita
}
bool bOk = false ;
// Se lama con elevazione e step di fianco
@@ -1927,12 +1944,12 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId)
// se altrimenti passate a zig-zag
else if ( m_Params.m_nStepType == MILL_ST_ZIGZAG) {
m_bStepOn = true ;
bOk = AddZigZagMilling( pCompo, vtTool, dDepth, dElev, dOkStep, bSplitArcs, bPathTabsEnable, bPathOscEnable) ;
bOk = AddZigZagMilling( pCompo, vtTool, dDepth, dElev, dOkStep, bStepUp, bSplitArcs, bPathTabsEnable, bPathOscEnable) ;
}
// se altrimenti passate a one-way
else if ( m_Params.m_nStepType == MILL_ST_ONEWAY) {
m_bStepOn = true ;
bOk = AddOneWayMilling( pCompo, vtTool, dDepth, dElev, dOkStep, bSplitArcs, bPathTabsEnable, bPathOscEnable) ;
bOk = AddOneWayMilling( pCompo, vtTool, dDepth, dElev, dOkStep, bStepUp, bSplitArcs, bPathTabsEnable, bPathOscEnable) ;
}
// se altrimenti passate a spirale
else if ( m_Params.m_nStepType == MILL_ST_SPIRAL) {
@@ -2515,8 +2532,8 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo
//----------------------------------------------------------------------------
bool
Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable)
Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev,
double dOkStep, bool bStepUp, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable)
{
// recupero distanze di sicurezza
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
@@ -2552,9 +2569,10 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
int nMaxInd = pCompo->GetCurveCount() - 1 ;
// ciclo sugli step
for ( int j = 1 ; j <= nStep ; ++ j) {
for ( int k = 1 ; k <= nStep ; ++ k) {
// flag direzione (prima passata indice 1)
bool bInvert = ( ( j % 2) == 0) ;
bool bInvert = ( ( k % 2) == 0) ;
int j = ( bStepUp ? nStep - k + 1 : k) ;
m_dCurrTabsLen = 0 ;
m_dCurrOscillLen = 2 * dOscRampLen + 1.5 * dOscFlatLen ;
// ciclo sulle curve elementari
@@ -2578,7 +2596,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
pCurve->GetStartDir( vtStart) ;
// determino elevazione su inizio attacco
double dStElev ;
if ( j == 1) {
if ( k == 1) {
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev))
dStElev = dStep ;
}
@@ -2602,7 +2620,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
// imposto versore correzione e ausiliario sul punto di partenza
CalcAndSetCorrAuxDir( pCompo, ( bInvert ? nMaxInd - i + 1 : i)) ;
// se primo step aggiungo approccio per frese normali
if ( j == 1 && ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
if ( k == 1 && ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
// correggo elevazione iniziale per punto inizio attacco (se testa da sopra senza aggregato approccio mai Z-)
Vector3d vtEscape = vtTool ;
if ( m_bAboveHead && ! m_bAggrBottom && ! m_bTiltingTab && vtTool.z < - EPS_SMALL) {
@@ -2631,7 +2649,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
// se lama
if ( ( m_TParams.m_nType & TF_SAWBLADE) != 0) {
SetFlag( 0) ;
if ( j == 1) {
if ( k == 1) {
// verifico di entrare in aria
if ( ! bOutStart) {
m_pMchMgr->SetLastError( 2314, "Error in Milling : LeadIn must be out of rawpart") ;
@@ -2715,7 +2733,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
pCurve->GetEndDir( vtEnd) ;
// elevazione sul punto finale
double dEndElev ;
if ( j == nStep) {
if ( k == nStep) {
if ( ! GetElevation( m_nPhase, ptEnd - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dEndElev))
dEndElev = dElev ;
}
@@ -2723,7 +2741,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
dEndElev = - LIO_ELEV_TOL ;
// se non c'è attacco a zigzag o a spirale oppure ultimo step, aggiungo uscita
Point3d ptP1 = ptEnd ;
if ( ! IsLeadInHelixOrZigzag() || j == nStep) {
if ( ! IsLeadInHelixOrZigzag() || k == nStep) {
SetFeed( GetEndFeed()) ;
if ( ! AddLeadOut( ptEnd, vtEnd, vtTool, dEndElev, bInvert, pCompo, bSplitArcs, ptP1)) {
m_pMchMgr->SetLastError( 2311, "Error in Milling : LeadOut not computable") ;
@@ -2731,7 +2749,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
}
}
// se ultimo step aggiungo retrazione per frese normali
if ( j == nStep && ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
if ( k == nStep && ( m_TParams.m_nType & TF_SAWBLADE) == 0) {
// determino se la fine dell'uscita è sopra il grezzo
bool bAboveEnd = false ;
if ( m_bAboveHead) {
@@ -2769,8 +2787,8 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
//----------------------------------------------------------------------------
bool
Milling::AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable)
Milling::AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev,
double dOkStep, bool bStepUp, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable)
{
// recupero distanze di sicurezza
double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
@@ -2877,7 +2895,8 @@ Milling::AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
// ciclo sugli step
int nMaxInd = pCompo->GetCurveCount() - 1 ;
for ( int j = 1 ; j <= nStep ; ++ j) {
for ( int k = 1 ; k <= nStep ; ++ k) {
int j = ( bStepUp ? nStep - k + 1 : k) ;
m_dCurrTabsLen = 0 ;
m_dCurrOscillLen = 2 * dOscRampLen + 1.5 * dOscFlatLen ;
// ciclo sulle curve elementari
@@ -3892,9 +3911,6 @@ Milling::GetLeadInType( void) const
if ( ( m_Params.m_nLeadInType == MILL_LI_HELIX || m_Params.m_nLeadInType == MILL_LI_ZIGZAG) &&
( m_Params.m_dLiTang < min( 0.1 * m_TParams.m_dDiam, 1.0) || m_Params.m_dLiElev < 10 * EPS_SMALL))
return MILL_LI_NONE ;
//if ( ( m_Params.m_nLeadInType == MILL_LI_HELIX || m_Params.m_nLeadInType == MILL_LI_ZIGZAG) &&
// m_bStepOn && m_Params.m_nStepType == MILL_ST_ZIGZAG)
// return MILL_LI_NONE ;
if ( ( m_Params.m_nLeadInType == MILL_LI_HELIX || m_Params.m_nLeadInType == MILL_LI_ZIGZAG) &&
m_bStepOn && m_Params.m_nStepType == MILL_ST_SPIRAL)
return MILL_LI_NONE ;
+4 -4
View File
@@ -88,10 +88,10 @@ class Milling : public Machining
bool GenerateMillingPv( int nPathId, const ICurveComposite* pCompo) ;
bool AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTool,
double dDepth, double dElev, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable) ;
bool AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable) ;
bool AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable) ;
bool AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev,
double dOkStep, bool bStepUp, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable) ;
bool AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev,
double dOkStep, bool bStepUp, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable) ;
bool AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, bool bPathTabsEnable, bool bPathOscEnable) ;
bool AddSawZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool,