EgtGeomKernel :
- miglioramenti a calcolo silhouette con CollisionAvoid compresa parallelizzazione - piccole migliorie a CollisionAvoid - migliorie e correzioni a CalcPocketing.
This commit is contained in:
+23
-30
@@ -592,7 +592,7 @@ ExistOpenEdges( ISurfFlatRegion* pSfr, const PocketParams& PockParam, bool& bExi
|
||||
//----------------------------------------------------
|
||||
static bool
|
||||
ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const Vector3d& vtMainDir, bool bLeadIn,
|
||||
PocketParams PockParams, bool& bIsOutsideRaw)
|
||||
const PocketParams& PockParams, bool& bIsOutsideRaw)
|
||||
{
|
||||
// inizializzazione come interno al grezzo
|
||||
bIsOutsideRaw = false ;
|
||||
@@ -648,7 +648,7 @@ ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const Vector3d& vt
|
||||
|
||||
//----------------------------------------------------
|
||||
static bool
|
||||
AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite* pCompo, PocketParams PockParams)
|
||||
AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite* pCompo, const PocketParams& PockParams)
|
||||
{
|
||||
// recupero la direzione principale della svuotatura
|
||||
Vector3d vtMainDir ;
|
||||
@@ -675,8 +675,6 @@ AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite* pCompo, PocketParams Poc
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static bool
|
||||
ExtendPathOnOpenEdge( ICurveComposite* pCrvPath, const PocketParams& PockParams, const Vector3d& vtN,
|
||||
@@ -1668,7 +1666,7 @@ SetSpecialPtStartForOpenEdges( const ICurveComposite* pCrvOrig, const Frame3d& f
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static bool
|
||||
AssignOpenCloseTmpPropToFirstOffsCurve( ICurveComposite* pCrv, const PocketParams PockParams,
|
||||
AssignOpenCloseTmpPropToFirstOffsCurve( ICurveComposite* pCrv, const PocketParams& PockParams,
|
||||
ICRVCOMPOPOVECTOR& vCrvLoops, INTVECTOR& vIndex, bool& bSomeOpen)
|
||||
{
|
||||
// controllo dei parametri
|
||||
@@ -1742,7 +1740,7 @@ AssignOpenCloseTmpPropToFirstOffsCurve( ICurveComposite* pCrv, const PocketParam
|
||||
static bool
|
||||
SetPtStartForPath( ICurveComposite* pCrvOffsAct, const PocketParams& PockParams, const ISurfFlatRegion* pSrfToWork,
|
||||
const Point3d& ptEndPrec, const Frame3d& frPocket, Point3d& ptStart,
|
||||
Vector3d& vtMidOut, bool& bMidOut, int nOffs, ICurveComposite* pCrvOrig)
|
||||
Vector3d& vtMidOut, bool& bMidOut, int nOffs, const ICurveComposite* pCrvOrig)
|
||||
{
|
||||
// ============================= INFO ==============================================================
|
||||
// pCrvOffsAct -> Curva di Offset su cui cercare ptStart, vtMidOut, bMidOpen
|
||||
@@ -1909,7 +1907,7 @@ SetAdvancedPtStartForPath( ICRVCOMPOPOVECTOR& vCrvOffsAct, const PocketParams& P
|
||||
// cambio il suo punto d'inizio dell'Offset attuale
|
||||
if ( SetPtStartForPath( vCrvOffsAct[i], PockParams, pSrfToWork, ptEndPrec, frPocket, ptStart,
|
||||
vtMidOut, bMidOut, nOffs,
|
||||
( int( vCrvOrigChunkLoops.size()) < i) ? vCrvOrigChunkLoops[i]->Clone() : nullptr))
|
||||
( int( vCrvOrigChunkLoops.size()) < i ? Get( vCrvOrigChunkLoops[i]) : nullptr)))
|
||||
vCrvOffsAct[i]->GetStartPoint( ptStart) ;
|
||||
else
|
||||
return false ;
|
||||
@@ -3767,9 +3765,9 @@ ModifyBiArc( ICurve* pBiArcLink, double dToll, ICurveComposite* pNewBiArc)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
static bool
|
||||
CalcBoundedSmootedLink( const Point3d& ptStart, const Vector3d& vtStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtEnd, double dParMeet, const ICRVCOMPOPOVECTOR& vOffIslands,
|
||||
const PocketParams& PockParams, ICurveComposite* pCrvLink)
|
||||
CalcBoundedSmoothedLink( const Point3d& ptStart, const Vector3d& vtStart, const Point3d& ptEnd,
|
||||
const Vector3d& vtEnd, double dParMeet, const ICRVCOMPOPOVECTOR& vOffIslands,
|
||||
const PocketParams& PockParams, ICurveComposite* pCrvLink)
|
||||
{
|
||||
// se senza smusso, ritorno tratto lineare
|
||||
if ( ! PockParams.bSmooth)
|
||||
@@ -3943,7 +3941,7 @@ CutCurveToConnect( ICurveComposite* pCrvS, ICurveComposite* pCrvE, const ICRVCOM
|
||||
|
||||
// calcolo il BiArco
|
||||
PtrOwner<CurveComposite> ptBiArc( CreateBasicCurveComposite()) ;
|
||||
if ( ! CalcBoundedSmootedLink( ptSE, vS, ptES, vE, 0.5, vFirstOffset, PockParams, ptBiArc) ||
|
||||
if ( ! CalcBoundedSmoothedLink( ptSE, vS, ptES, vE, 0.5, vFirstOffset, PockParams, ptBiArc) ||
|
||||
ptBiArc->GetCurveCount() == 0)
|
||||
return false ;
|
||||
|
||||
@@ -4309,7 +4307,7 @@ RemoveExtraPartByMedialAxis( const ISurfFlatRegion* pChunkToCut, ICRVCOMPOPOVECT
|
||||
if ( IsNull( pCrvLink))
|
||||
return false ;
|
||||
|
||||
if ( ! CalcBoundedSmootedLink( ptS, vtS, ptE, vtE, 0.5, vOffsFirstCurve, PockParams, pCrvLink))
|
||||
if ( ! CalcBoundedSmoothedLink( ptS, vtS, ptE, vtE, 0.5, vOffsFirstCurve, PockParams, pCrvLink))
|
||||
if ( ! CalcBoundedLink( ptS, ptE, vOffsFirstCurve, pCrvLink))
|
||||
return false ;
|
||||
|
||||
@@ -4318,8 +4316,8 @@ RemoveExtraPartByMedialAxis( const ISurfFlatRegion* pChunkToCut, ICRVCOMPOPOVECT
|
||||
}
|
||||
|
||||
if ( ! AreSamePointEpsilon( ptEOriginal, ptSOriginal, EPS_SMALL) &&
|
||||
! CalcBoundedSmootedLink( ptEOriginal, vtEOriginal, ptSOriginal, vtSOriginal, 0.5, vOffsFirstCurve,
|
||||
PockParams, pCrvCoBackLink) &&
|
||||
! CalcBoundedSmoothedLink( ptEOriginal, vtEOriginal, ptSOriginal, vtSOriginal, 0.5, vOffsFirstCurve,
|
||||
PockParams, pCrvCoBackLink) &&
|
||||
! CalcBoundedLink( ptEOriginal, ptSOriginal, vOffsFirstCurve, pCrvCoBackLink))
|
||||
return false ;
|
||||
|
||||
@@ -4352,8 +4350,8 @@ RemoveExtraPartByMedialAxis( const ISurfFlatRegion* pChunkToCut, ICRVCOMPOPOVECT
|
||||
if ( IsNull( pCrvPath1))
|
||||
return false ;
|
||||
|
||||
if ( ! CalcBoundedSmootedLink( ptClosestOnPath, vtTanCpt, vPtCentroid[i], vtTanCpt, 0,
|
||||
vOffsFirstCurve, PockParams, pCrvPath1) &&
|
||||
if ( ! CalcBoundedSmoothedLink( ptClosestOnPath, vtTanCpt, vPtCentroid[i], vtTanCpt, 0,
|
||||
vOffsFirstCurve, PockParams, pCrvPath1) &&
|
||||
! CalcBoundedLink( ptClosestOnPath, vPtCentroid[i], vOffsFirstCurve, pCrvPath1))
|
||||
return false ;
|
||||
|
||||
@@ -4619,7 +4617,7 @@ GetNewCurvetWithCentroid( const ICurveComposite* pCrvH1, const ICurveComposite*
|
||||
}
|
||||
|
||||
// creo la circonferenza
|
||||
if ( ! CalcBoundedSmootedLink( ptS, vtTanS, ptE, vtTanE, 0, VFirstOff, PockParams, pPath1))
|
||||
if ( ! CalcBoundedSmoothedLink( ptS, vtTanS, ptE, vtTanE, 0, VFirstOff, PockParams, pPath1))
|
||||
return false ;
|
||||
Vector3d vtS_cir ; pPath1->GetStartDir( vtS_cir) ;
|
||||
Vector3d vtS_CrvH1 ; pCrvH1->GetEndDir( vtS_CrvH1) ;
|
||||
@@ -4664,8 +4662,8 @@ GetNewCurvetWithCentroid( const ICurveComposite* pCrvH1, const ICurveComposite*
|
||||
}
|
||||
|
||||
// creo i due Biarchi
|
||||
if ( ! CalcBoundedSmootedLink( ptS, vtTanS, ptE, vtTanS, 0.5, VFirstOff, PockParams, pPath1) ||
|
||||
! CalcBoundedSmootedLink( ptE, vtTanS, ptS, vtTanS, 0.5, VFirstOff, PockParams, pPath2))
|
||||
if ( ! CalcBoundedSmoothedLink( ptS, vtTanS, ptE, vtTanS, 0.5, VFirstOff, PockParams, pPath1) ||
|
||||
! CalcBoundedSmoothedLink( ptE, vtTanS, ptS, vtTanS, 0.5, VFirstOff, PockParams, pPath2))
|
||||
return false ;
|
||||
|
||||
// creo la nuova curva con il doppio Biarco
|
||||
@@ -4817,10 +4815,10 @@ GetNewCurvetWithPath( const ICurveComposite* pCrvH1, const ICurveComposite* pCrv
|
||||
}
|
||||
|
||||
// creo i due Biarchi
|
||||
if ( ! CalcBoundedSmootedLink( ptS, vtTanS, ptE, vtTanE, 0.5, VFirstOff, PockParams, pPath1))
|
||||
if ( ! CalcBoundedSmoothedLink( ptS, vtTanS, ptE, vtTanE, 0.5, VFirstOff, PockParams, pPath1))
|
||||
if ( ! CalcBoundedLink( ptS, ptE, VFirstOff, pPath1))
|
||||
return false ;
|
||||
if ( ! CalcBoundedSmootedLink( ptH, vtH, ptS, vtTanS, 0.5, VFirstOff, PockParams, pPath2))
|
||||
if ( ! CalcBoundedSmoothedLink( ptH, vtH, ptS, vtTanS, 0.5, VFirstOff, PockParams, pPath2))
|
||||
if ( ! CalcBoundedLink( ptH, ptS, VFirstOff, pPath2))
|
||||
return false ;
|
||||
|
||||
@@ -4850,7 +4848,7 @@ GetNewCurvetWithPath( const ICurveComposite* pCrvH1, const ICurveComposite* pCrv
|
||||
pCrvToAdd->GetStartPoint( ptHE) ;
|
||||
pCrvToAdd->GetStartDir( vtHE) ;
|
||||
PtrOwner<ICurveComposite> pCrvBiArcHelper( CreateCurveComposite()) ;
|
||||
if ( ! CalcBoundedSmootedLink( ptHS, vtHS, ptHE, vtHE, 0.5, VFirstOff, PockParams, pCrvBiArcHelper))
|
||||
if ( ! CalcBoundedSmoothedLink( ptHS, vtHS, ptHE, vtHE, 0.5, VFirstOff, PockParams, pCrvBiArcHelper))
|
||||
if ( ! CalcBoundedLink( ptHS, ptHE, VFirstOff, pCrvBiArcHelper))
|
||||
return false ;
|
||||
|
||||
@@ -4870,7 +4868,7 @@ GetNewCurvetWithPath( const ICurveComposite* pCrvH1, const ICurveComposite* pCrv
|
||||
pCrvH2->GetStartPoint( ptHE) ;
|
||||
pCrvH2->GetStartDir( vtHE) ;
|
||||
PtrOwner<ICurveComposite> pCrvBiArcHelper( CreateCurveComposite()) ;
|
||||
if ( ! CalcBoundedSmootedLink( ptHS, vtHS, ptHE, vtHE, 0.5, VFirstOff, PockParams, pCrvBiArcHelper))
|
||||
if ( ! CalcBoundedSmoothedLink( ptHS, vtHS, ptHE, vtHE, 0.5, VFirstOff, PockParams, pCrvBiArcHelper))
|
||||
if ( ! CalcBoundedLink( ptHS, ptHE, VFirstOff, pCrvBiArcHelper) )
|
||||
return false ;
|
||||
|
||||
@@ -5258,7 +5256,7 @@ CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, con
|
||||
if ( ! vOffs[i]->GetStartDir( vtS) || ! vOffs[i+1]->GetStartDir( vtE))
|
||||
return false ;
|
||||
// creo il bi-arco tra esse
|
||||
if ( CalcBoundedSmootedLink( ptS, vtS, ptStartNext, vtE, 0.5, vOffsFirstCurve, PockParams, pCrvLink))
|
||||
if ( CalcBoundedSmoothedLink( ptS, vtS, ptStartNext, vtE, 0.5, vOffsFirstCurve, PockParams, pCrvLink))
|
||||
vLinks[i + 1].Set( pCrvLink) ; // aggiorno il collegamento
|
||||
else
|
||||
return false ;
|
||||
@@ -5285,9 +5283,7 @@ CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, con
|
||||
|
||||
// aggiorno il collegamento
|
||||
vLinks[i+1].Set( Release( pCrvLink)) ;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true ;
|
||||
@@ -5418,7 +5414,7 @@ CalcSpiral( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, int
|
||||
bool bIsCircle = false ;
|
||||
if ( ! OptimizedSpiralCirle( pCrvBorder, 50 * EPS_SMALL, dRad, ptCen, bIsCircle))
|
||||
return false ;
|
||||
if ( bIsCircle) {
|
||||
if ( bIsCircle && dRad - dOffs > 10 * EPS_SMALL) {
|
||||
double dIntRad = 0 ;
|
||||
if ( nReg == 0) {
|
||||
bool bOk = CalcCircleSpiral( ptCen, vtN, dRad - dOffs, dIntRad, PockParams, pMCrv, pRCrv) ;
|
||||
@@ -5459,7 +5455,6 @@ CalcSpiral( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, int
|
||||
else
|
||||
return true ;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// porto la superficie nel frame corrente
|
||||
@@ -6202,9 +6197,7 @@ AddSpiralIn( const ISurfFlatRegion* pSrfPock, const ISurfFlatRegion* pSfrOrig,
|
||||
// inserisco le curve nel vettore
|
||||
vCrvCompoRes.emplace_back( Release( pMCrv)) ;
|
||||
++ nReg ; // incremento il numero di regione progressiva
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true ;
|
||||
|
||||
Reference in New Issue
Block a user