EgtGEomKernel :
- In CalcPocketing aggiunto controllo lunghezza dei lati aperti, aggiunto parametro MaxOptSize e aggiunte migliorie a percorsi Conformal.
This commit is contained in:
+36
-17
@@ -1229,7 +1229,6 @@ AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVECTOR& vCrvI
|
||||
/* parametri :
|
||||
pCrvCompo -> curva originaria di bordo
|
||||
vCrvIsland -> vettore delle isole all'interno di pCrvCompo
|
||||
pCrvOpenOffs -> tratto aperto corrente già Offsettato verso l'esterno
|
||||
dParS -> parametro sulla pCrvCompo per l'inizio del tratto aperto
|
||||
dParE -> parametro sulla pCrvCompo per la fine del tratto aperto
|
||||
vtTanS -> vettore di tangenza finale tratto chiuso precedente
|
||||
@@ -1240,8 +1239,6 @@ AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVECTOR& vCrvI
|
||||
questa curva sarà l'estensione del lato aperto, adattandosi alla geometria
|
||||
dei chiusi ( non posso vedere solo i chiusi adiacenti all'aperto, devo considerare TUTTI i chiusi
|
||||
della pCrvCompo
|
||||
pStmVol -> Volume di svuotatura
|
||||
pStm_Part -> Part corrente
|
||||
*/
|
||||
|
||||
// controllo la validità dei parametri
|
||||
@@ -1567,17 +1564,24 @@ AdjustContourWithOpenEdges( ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vCrvI
|
||||
double dParE = dParS + 1. * vpCrvs[i]->GetCurveCount() ;
|
||||
// se aperta
|
||||
if ( nCurrTmpProp == TEMP_PROP_OPEN_EDGE) {
|
||||
// ricavo la tangenze dei lati chiusi agli estremi di questa curva
|
||||
Vector3d vtTanS = V_INVALID ;
|
||||
Vector3d vtTanE = V_INVALID ;
|
||||
if ( i != 0) {
|
||||
if ( ! vpCrvs[i-1]->GetEndDir( vtTanS) || // tangente finale del chiuso precedente
|
||||
! vpCrvs[( i + 1) % int( vpCrvs.size())]->GetStartDir( vtTanE)) // tangente iniziale del chiuso successivo...
|
||||
// controllo che sia almeno lungo quanto il diametro utensile
|
||||
double dLen = 0. ;
|
||||
vpCrvs[i]->GetLength( dLen) ;
|
||||
if ( dLen > PockParams.dRad * 2 - 5 * EPS_SMALL) {
|
||||
// ricavo la tangenze dei lati chiusi agli estremi di questa curva
|
||||
Vector3d vtTanS = V_INVALID ;
|
||||
Vector3d vtTanE = V_INVALID ;
|
||||
if ( i != 0) {
|
||||
if ( ! vpCrvs[i-1]->GetEndDir( vtTanS) || // tangente finale del chiuso precedente
|
||||
! vpCrvs[( i + 1) % int( vpCrvs.size())]->GetStartDir( vtTanE)) // tangente iniziale del chiuso successivo...
|
||||
return false ;
|
||||
vtTanE.Invert() ; // invertita
|
||||
}
|
||||
if ( ! AdjustOpenEdge( pCrvCompo, vCrvIsl, dParS, dParE, vtTanS, vtTanE, dRad, dDiamJ, PockParams, vpCrvs[i]))
|
||||
return false ;
|
||||
vtTanE.Invert() ; // invertita
|
||||
}
|
||||
if ( ! AdjustOpenEdge( pCrvCompo, vCrvIsl, dParS, dParE, vtTanS, vtTanE, dRad, dDiamJ, PockParams, vpCrvs[i]))
|
||||
return false ;
|
||||
else
|
||||
nCurrTmpProp = TEMP_PROP_CLOSE_EDGE ;
|
||||
}
|
||||
// assegno le proprietà di lato Aperto/Chiuso per la curva corrente
|
||||
for ( int u = 0 ; u < vpCrvs[i]->GetCurveCount() ; ++ u)
|
||||
@@ -3574,7 +3578,8 @@ GetSpiralOptimizedCurves( const ISurfFlatRegion* pSfrChunk, const PocketParams&
|
||||
Frame3d frTrap ;
|
||||
double dPocketSize ;
|
||||
int nBase, nSecondBase ;
|
||||
bool bOkTrap = ( GetTrapezoidFromShape( pCrvBorder, pCrvTrap, frTrap, PockParam, dPocketSize, nBase, nSecondBase)) ;
|
||||
bool bOkTrap = ( GetTrapezoidFromShape( pCrvBorder, pCrvTrap, frTrap, PockParam, dPocketSize, nBase, nSecondBase) &&
|
||||
dPocketSize < PockParam.dMaxOptSize + 10 * EPS_SMALL) ;
|
||||
if ( bOkTrap && pCrvTrap->IsValid()) {
|
||||
pCrvTrap->SetExtrusion( Z_AX) ;
|
||||
CalcTrapezoidSpiral( pCrvTrap, frTrap, dPocketSize, nBase, nSecondBase, PockParam, pCrvRes, bOkTrap) ;
|
||||
@@ -7743,8 +7748,6 @@ OrderAndExtendConformalPaths( ICRVCOMPOPOVECTOR& vCrvPaths, const ISurfFlatRegio
|
||||
if ( pSfrChunk == nullptr || ! pSfrChunk->IsValid() ||
|
||||
pSfrOrig == nullptr || ! pSfrOrig->IsValid())
|
||||
return false ;
|
||||
if ( int( vCrvPaths.size()) < 2)
|
||||
return true ;
|
||||
|
||||
// superficie di controllo per parti isolate
|
||||
PtrOwner<ISurfFlatRegion> pSfrToRemove( CloneSurfFlatRegion( pSfrChunk)) ;
|
||||
@@ -8417,7 +8420,7 @@ AddConformal( ISurfFlatRegion* pSfrPock, const ISurfFlatRegion* pSfrOrig,
|
||||
else {
|
||||
// ricavo gli Offset ( se possibili) dei tratti chiusi del Chunk
|
||||
VICRVCOMPOPOVECTOR vvCrvOffs ;
|
||||
if ( ! GetConformalOffsets( pSfrChunk, pSfrPock, pSfrOrig, PockParams, vvCrvOffs))
|
||||
if ( ! GetConformalOffsets( pSfrChunk, pSfrChunk, pSfrOrig, PockParams, vvCrvOffs))
|
||||
return false ;
|
||||
// se non ottengo Curve di Offset, lavoro in SpiralIn ( il Chunk ha dei lati aperti)
|
||||
if ( vvCrvOffs.empty()) {
|
||||
@@ -8566,7 +8569,8 @@ SmoothExtensionLinesByIntersection( ICRVCOMPOPOVECTOR& vCrvPaths, const PocketPa
|
||||
bool
|
||||
CalcPocketing( const ISurfFlatRegion* pSfr, double dRad, double dRadOffs, double dStep, double dAngle,
|
||||
double dOpenMinSafe, int nType, bool bSmooth, bool bInvert, bool bAvoidOpt, bool bAllowZigZagOneWayBorders,
|
||||
bool bCalcFeed, const Point3d& ptEndPrec, const ISurfFlatRegion* pSfrLimit, bool bAllOffs, ICRVCOMPOPOVECTOR& vCrvCompoRes)
|
||||
bool bCalcFeed, const Point3d& ptEndPrec, const ISurfFlatRegion* pSfrLimit, bool bAllOffs,
|
||||
double dMaxOptSize, ICRVCOMPOPOVECTOR& vCrvCompoRes)
|
||||
{
|
||||
// controllo dei parametri
|
||||
if ( pSfr == nullptr || ! pSfr->IsValid() ||
|
||||
@@ -8592,6 +8596,7 @@ CalcPocketing( const ISurfFlatRegion* pSfr, double dRad, double dRadOffs, double
|
||||
myParams.bCalcFeed = bCalcFeed ;
|
||||
myParams.bAllowZigZagOneWayBorders = bAllowZigZagOneWayBorders ;
|
||||
myParams.bOptOffsets = ( ! bAllOffs) ;
|
||||
myParams.dMaxOptSize = dMaxOptSize ;
|
||||
if ( ptEndPrec.IsValid())
|
||||
myParams.ptStart = ptEndPrec ;
|
||||
if ( pSfrLimit != nullptr && pSfrLimit->IsValid())
|
||||
@@ -9004,4 +9009,18 @@ CalcZigZagInfill( const ISurfFlatRegion* pSfr, double dStep, bool bSmooth, bool
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CalcSmoothCurve( ICurveComposite* pCrv, double dRightLen, double dLeftLen, bool bAsParam)
|
||||
{
|
||||
// controllo dei parametri
|
||||
if ( pCrv == nullptr || ! pCrv->IsValid())
|
||||
return false ;
|
||||
|
||||
// definisco i parametri
|
||||
PocketParams myPockParams ;
|
||||
myPockParams.bSmooth = true ;
|
||||
return ModifyCurveToSmoothed( pCrv, myPockParams, dRightLen, dLeftLen, bAsParam) ;
|
||||
}
|
||||
Reference in New Issue
Block a user