EgtMachKernel 2.5g1 :
- in svuotatura corretta gestione forzatura contorni chiusi (Open=0 in UserNotes della lavorazione) con i casi ottimizzati.
This commit is contained in:
Binary file not shown.
+33
-24
@@ -1087,7 +1087,7 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC)
|
||||
// la duplico
|
||||
pCurve.Set( pOriCurve->Clone()) ;
|
||||
// recupero eventuali informazioni per lati aperti
|
||||
SetCurveAllTempProp( Id.nId, pCurve) ;
|
||||
SetCurveAllTempProp( Id.nId, false, pCurve) ;
|
||||
// se estrusione mancante, imposto default
|
||||
Vector3d vtExtr ;
|
||||
if ( ! pCurve->GetExtrusion( vtExtr) || vtExtr.IsSmall())
|
||||
@@ -1249,14 +1249,16 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::SetCurveAllTempProp( int nCrvId, ICurve* pCurve)
|
||||
Pocketing::SetCurveAllTempProp( int nCrvId, bool bForcedClose, ICurve* pCurve, bool* pbSomeOpen)
|
||||
{
|
||||
if ( pCurve == nullptr)
|
||||
return false ;
|
||||
if ( pbSomeOpen != nullptr)
|
||||
*pbSomeOpen = false ;
|
||||
// reset proprietà temporanee
|
||||
ResetCurveAllTempProp( pCurve) ;
|
||||
// verifico se presenti info per lati aperti
|
||||
if ( ! m_pGeomDB->ExistsInfo( nCrvId, KEY_OPEN))
|
||||
// se forzato chiuso o non presenti info per lati aperti, esco
|
||||
if ( bForcedClose || ! m_pGeomDB->ExistsInfo( nCrvId, KEY_OPEN))
|
||||
return true ;
|
||||
// recupero info sui lati aperti
|
||||
INTVECTOR vOpen ;
|
||||
@@ -1264,13 +1266,20 @@ Pocketing::SetCurveAllTempProp( int nCrvId, ICurve* pCurve)
|
||||
// se curva composita
|
||||
ICurveComposite* pCC = GetCurveComposite( pCurve) ;
|
||||
if ( pCC != nullptr) {
|
||||
for ( int j : vOpen)
|
||||
pCC->SetCurveTempProp( j, 1) ;
|
||||
for ( int j : vOpen) {
|
||||
if ( pCC->SetCurveTempProp( j, 1)) {
|
||||
if ( pbSomeOpen != nullptr)
|
||||
*pbSomeOpen = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
// altrimenti
|
||||
else {
|
||||
if ( ! vOpen.empty() && vOpen[0] == 0)
|
||||
if ( ! vOpen.empty() && vOpen[0] == 0) {
|
||||
pCurve->SetTempProp( 1) ;
|
||||
if ( pbSomeOpen != nullptr)
|
||||
*pbSomeOpen = true ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -1450,20 +1459,8 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
pCompo->SetCurveTempProp( i, 0) ;
|
||||
|
||||
// verifico se vanno gestiti i lati aperti
|
||||
bool bSomeOpen = m_pGeomDB->ExistsInfo( nCrvId, KEY_OPEN) ;
|
||||
if ( bSomeOpen) {
|
||||
int nOpen ;
|
||||
if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "Open="), nOpen) && nOpen == 0)
|
||||
bSomeOpen = false ;
|
||||
}
|
||||
|
||||
// aggiorno flag per lati aperti
|
||||
if ( bSomeOpen) {
|
||||
INTVECTOR vOpen ;
|
||||
m_pGeomDB->GetInfo( nCrvId, KEY_OPEN, vOpen) ;
|
||||
for ( int j : vOpen)
|
||||
pCompo->SetCurveTempProp( j, 1) ;
|
||||
}
|
||||
bool bSomeOpen ;
|
||||
SetCurveAllTempProp( nCrvId, GetForcedClosed(), pCompo, &bSomeOpen) ;
|
||||
|
||||
// recupero estrusione e spessore
|
||||
Vector3d vtExtr = Z_AX ;
|
||||
@@ -2574,7 +2571,7 @@ Pocketing::OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth,
|
||||
if ( IsNull( pCrvPocket))
|
||||
return false ;
|
||||
pCrvPocket->ToLoc( frPocket) ;
|
||||
SetCurveAllTempProp( nCrvId, pCrvPocket) ;
|
||||
SetCurveAllTempProp( nCrvId, GetForcedClosed(), pCrvPocket) ;
|
||||
pCrvPocket->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL) ;
|
||||
// sistemo senso antiorario visto dalla direzione di estrusione
|
||||
Vector3d vtPocket; pCrvPocket->GetExtrusion( vtPocket) ;
|
||||
@@ -3831,7 +3828,8 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
PtrOwner<ICurveComposite> pCrvPocket( CloneCurveComposite( m_pGeomDB->GetGeoObj( nCrvId))) ;
|
||||
if ( IsNull( pCrvPocket))
|
||||
return false ;
|
||||
SetCurveAllTempProp( nCrvId, pCrvPocket) ;
|
||||
bool bSomeOpen ;
|
||||
SetCurveAllTempProp( nCrvId, GetForcedClosed(), pCrvPocket, &bSomeOpen) ;
|
||||
pCrvPocket->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL) ;
|
||||
|
||||
Point3d pt ;
|
||||
@@ -3849,7 +3847,7 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
double dPocketSize = vtOrtho.Len() ;
|
||||
double dMaxOptSize ;
|
||||
FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxOptSize="), dMaxOptSize) ;
|
||||
if ( dPocketSize < m_TParams.m_dDiam + EPS_SMALL &&
|
||||
if ( ( ( bSomeOpen && dPocketSize < m_TParams.m_dDiam + EPS_SMALL) || abs( dPocketSize - m_TParams.m_dDiam) < EPS_SMALL) &&
|
||||
( ! FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxOptSize="), dMaxOptSize) || dPocketSize < dMaxOptSize)) {
|
||||
if ( nReg == 0) {
|
||||
CalcTrapezoidSpiral( pCrvPocket, vtDir, dPocketSize, pMCrv, pRCrv, bOptimizedTrap) ;
|
||||
@@ -5448,6 +5446,17 @@ Pocketing::GetRadiusForStartEndElevation( void) const
|
||||
return ( 0.5 * m_TParams.m_dTDiam + dDeltaRad) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::GetForcedClosed( void)
|
||||
{
|
||||
int nOpen ;
|
||||
if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "Open="), nOpen) && nOpen == 0)
|
||||
return true ;
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMid, Vector3d& vtMidOrt)
|
||||
|
||||
+2
-1
@@ -68,7 +68,7 @@ class Pocketing : public Machining
|
||||
private :
|
||||
bool VerifyGeometry( SelData Id, int& nSubs, int& nType) ;
|
||||
bool GetCurves( SelData Id, ICURVEPLIST& lstPC) ;
|
||||
bool SetCurveAllTempProp( int nCrvId, ICurve* pCurve) ;
|
||||
bool SetCurveAllTempProp( int nCrvId, bool bForcedClose, ICurve* pCurve, bool* pbSomeOpen = nullptr) ;
|
||||
bool ResetCurveAllTempProp( ICurve* pCurve) ;
|
||||
bool Chain( int nGrpDestId) ;
|
||||
bool ProcessPath( int nPathId, int nPvId, int nClId) ;
|
||||
@@ -135,6 +135,7 @@ class Pocketing : public Machining
|
||||
const ICurveComposite* pRCrv, bool bSplitArcs, bool bNoneForced,
|
||||
Point3d& ptP1, double& dElev, bool& bOppositeHome) ;
|
||||
double GetRadiusForStartEndElevation( void) const ;
|
||||
bool GetForcedClosed( void) ;
|
||||
bool GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMid, Vector3d& vtMidOut) ;
|
||||
bool AdjustContourWithOpenEdges( ICurveComposite* pCompo) ;
|
||||
bool AdjustContourStart( ICurveComposite* pCompo) ;
|
||||
|
||||
Reference in New Issue
Block a user