diff --git a/Drilling.cpp b/Drilling.cpp index c31df87..5bae156 100644 --- a/Drilling.cpp +++ b/Drilling.cpp @@ -1219,11 +1219,20 @@ Drilling::GetHoleData( SelData Id, Hole& hole) const ICurveArc* pArc = GetCurveArc( m_pGeomDB->GetGeoObj( Id.nId)) ; if ( pArc == nullptr) { const ICurveComposite* pCompo = GetCurveComposite( m_pGeomDB->GetGeoObj( Id.nId)) ; - if ( pCompo == nullptr) + Point3d ptCen ; + Vector3d vtN ; + double dRad ; + bool bCCW ; + if ( pCompo == nullptr || ! pCompo->IsACircle( 100 * EPS_SMALL, ptCen, vtN, dRad, bCCW)) return false ; - const ICurveArc* pArcTmp = GetCurveArc( pCompo->GetFirstCurve()) ; - if ( pArcTmp == nullptr || ! pMyArc.Set( pArcTmp->Clone())) + pMyArc.Set( CreateCurveArc()) ; + if ( IsNull( pMyArc) || ! pMyArc->Set( ptCen, vtN, dRad)) return false ; + //if ( pCompo == nullptr) + // return false ; + //const ICurveArc* pArcTmp = GetCurveArc( pCompo->GetFirstCurve()) ; + //if ( pArcTmp == nullptr || ! pMyArc.Set( pArcTmp->Clone())) + // return false ; Vector3d vtExtr ; pCompo->GetExtrusion( vtExtr) ; pMyArc->SetExtrusion( vtExtr) ; double dThick = 0 ; pCompo->GetThickness( dThick) ; diff --git a/Operation.cpp b/Operation.cpp index f2ba688..b0c0b11 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1952,7 +1952,7 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn pMch->LinkFixtureToGroup( nFxtId, sTable) ; // distanza di sicurezza double dSafeDist = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ; - dSafeDist = max( 0.9 * dSafeDist, dSafeDist - 10.0) ; + dSafeDist = min( dSafeDist, max( 0.5 * dSafeDist, 10.0)) ; // Vado nelle posizioni da controllare const int COLL_STEP = 16 ; bool bCollide = false ; diff --git a/Pocketing.cpp b/Pocketing.cpp index 012ead6..d1e00ff 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -2565,7 +2565,7 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, bool bSplitArcs, // se circonferenza, chiamo la funzione specializzata Point3d ptCen ; Vector3d vtN ; double dRad ; bool bCCW ; - if ( pCompo->IsACircle( 10 * EPS_SMALL, ptCen, vtN, dRad, bCCW)) { + if ( pCompo->IsACircle( 100 * EPS_SMALL, ptCen, vtN, dRad, bCCW)) { double dIntRad = 0 ; if ( m_Params.m_nSubType == POCKET_SUB_SPIRALOUT && GetLeadInType() == POCKET_LI_HELIX) { dIntRad = min( 0.5 * min( m_Params.m_dLiTang, m_TParams.m_dDiam), dRad - dOffs) ;