EgtMachKernel :
- migliorati casi ottimizzati trapezi e ZigZag con 0 lati aperti.
This commit is contained in:
+2
-2
@@ -589,7 +589,7 @@ Operation::GetSignedDistFromStmRaw( int nPhase, const Point3d ptP, const Vector3
|
||||
|
||||
// Trimesh della parte p-esima
|
||||
PtrOwner<ISurfTriMesh> pStmRawPart( CloneSurfTriMesh( GetSurfTriMesh( pGObj))) ;
|
||||
if( IsNull( pStmRawPart))
|
||||
if ( IsNull( pStmRawPart))
|
||||
return false ;
|
||||
|
||||
// porto la trimesh in globale
|
||||
@@ -625,7 +625,7 @@ Operation::GetSignedDistFromStmRaw( int nPhase, const Point3d ptP, const Vector3
|
||||
pCrvEdge->FromPolyLine( vP[j]) ;
|
||||
if ( !pCrvEdge->IsValid() || pCrvEdge->GetCurveCount() == 0)
|
||||
return false ;
|
||||
if( pCrvEdge->IsPointOn( ptP))
|
||||
if ( pCrvEdge->IsPointOn( ptP))
|
||||
bIsCurrOnLoop = true ;
|
||||
}
|
||||
}
|
||||
|
||||
+263
-122
@@ -3337,6 +3337,11 @@ Pocketing::OptimizedZigZag( ISurfFlatRegion* pSrf, const Vector3d& vtTool, doubl
|
||||
}
|
||||
int nClosedSides = vnInfoClosed.size() ;
|
||||
|
||||
PtrOwner<ICurveComposite> pCrvDraw1( CloneCurveComposite( pCrvPocket)) ;
|
||||
pCrvDraw1->ToGlob( frPocket) ;
|
||||
m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvDraw1->Clone()) ;
|
||||
|
||||
|
||||
// modifico pCrvPocket per poterla passare a CalcZigZag
|
||||
bool bTwoOpposite ;
|
||||
Vector3d vtDir ; // direzione principale del segmento più lungo (linea)
|
||||
@@ -3358,6 +3363,10 @@ Pocketing::OptimizedZigZag( ISurfFlatRegion* pSrf, const Vector3d& vtTool, doubl
|
||||
break ;
|
||||
}
|
||||
|
||||
PtrOwner<ICurveComposite> pCrvDraw( CloneCurveComposite( pCrvPocket)) ;
|
||||
pCrvDraw->ToGlob( frPocket) ;
|
||||
m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvDraw->Clone()) ;
|
||||
|
||||
if ( ! bOptimizedZigZag)
|
||||
return true ;
|
||||
|
||||
@@ -3717,39 +3726,77 @@ Pocketing::ZigZagOptimizedThreeClosedEdges( ICurveComposite* pCrvPocket, const I
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::ZigZagOptimizedComputeOffset( ICurveComposite* pCrvPocket, const Vector3d& vtMainDir, int nOffsettedEdgesOnY,
|
||||
bool
|
||||
Pocketing::ZigZagOptimizedComputeOffset( ICurveComposite* pCrvPocket, const Vector3d& vtMainDir, int nOffsettedEdgesOnY,
|
||||
const INTVECTOR& vnClosedIds, double& dOffs)
|
||||
{
|
||||
// ricavo l'estrusione
|
||||
Vector3d vtExtr ; pCrvPocket->GetExtrusion( vtExtr) ;
|
||||
// ricavo la Thickness
|
||||
double dThick ; pCrvPocket->GetThickness( dThick) ;
|
||||
{
|
||||
// ricavo l'estrusione
|
||||
Vector3d vtExtr ; pCrvPocket->GetExtrusion( vtExtr) ;
|
||||
// ricavo la Thickness
|
||||
double dThick ; pCrvPocket->GetThickness( dThick) ;
|
||||
|
||||
// aggiusto offset
|
||||
dOffs = m_TParams.m_dDiam / 2 + 5 * EPS_SMALL ;
|
||||
double dMinOffs = max( 0., 0.5 * m_TParams.m_dDiam - m_Params.m_dSideStep) ;
|
||||
dOffs = max( dOffs, dMinOffs) ;
|
||||
// aggiusto offset
|
||||
dOffs = m_TParams.m_dDiam / 2 + 5 * EPS_SMALL ;
|
||||
double dMinOffs = max( 0., 0.5 * m_TParams.m_dDiam - m_Params.m_dSideStep) ;
|
||||
dOffs = max( dOffs, dMinOffs) ;
|
||||
|
||||
if ( dOffs > EPS_SMALL) {
|
||||
// calcolo offset
|
||||
OffsetCurve OffsCrv ;
|
||||
if ( ! OffsCrv.Make( pCrvPocket, dOffs, ICurve::OFF_EXTEND)) {
|
||||
m_pMchMgr->SetLastError( 2412, "Error in Pocketing : Offset not computable") ;
|
||||
return false ;
|
||||
}
|
||||
if ( OffsCrv.GetCurveCount() > 1)
|
||||
return false ;
|
||||
|
||||
// aggiorno pCrvPocket
|
||||
pCrvPocket->Clear() ;
|
||||
pCrvPocket->AddCurve( OffsCrv.GetCurve()) ;
|
||||
pCrvPocket->SetExtrusion( vtExtr) ;
|
||||
pCrvPocket->SetThickness( dThick) ;
|
||||
}
|
||||
if ( nOffsettedEdgesOnY == 0) {
|
||||
// calcolo il side step che verr� utilizzato in CalcZigZag
|
||||
Frame3d frLoc ;
|
||||
if ( ! frLoc.Set( ORIG, Z_AX, vtMainDir))
|
||||
return true ;
|
||||
BBox3d b3Loc ;
|
||||
pCrvPocket->ToLoc( frLoc) ;
|
||||
pCrvPocket->GetLocalBBox( b3Loc) ;
|
||||
pCrvPocket->ToGlob( frLoc) ;
|
||||
Point3d pt ;
|
||||
double dDimX, dDimY, dDimZ ;
|
||||
b3Loc.GetMinDim( pt, dDimX, dDimY, dDimZ) ;
|
||||
// riduco la DimY della svuotatura in base al numero di lati chiusi che saranno offsettati lungo quella direzione
|
||||
dDimY -= nOffsettedEdgesOnY * ( 0.5 * m_TParams.m_dDiam + GetOffsR()) ;
|
||||
int nYStep = static_cast<int>( ceil( ( dDimY - 30 * EPS_SMALL) / GetSideStep())) ;
|
||||
double dYSideStep = ( nYStep > 0 ? ( dDimY - 30 * EPS_SMALL) / nYStep : 0) ;
|
||||
// verifico se resteranno aree residue e calcolo eventuale offset per pCrvPocket
|
||||
double dOffs_ = 0 ;
|
||||
for ( int i = 0 ; i < pCrvPocket->GetCurveCount() ; i ++) {
|
||||
double dOffsTmp = 0 ;
|
||||
double dVal = 0 ;
|
||||
if ( pCrvPocket->GetCurve(i)->GetType() == CRV_LINE) {
|
||||
Vector3d vtDir ;
|
||||
if ( ! pCrvPocket->GetCurve( i)->GetStartDir( vtDir))
|
||||
return false ;
|
||||
double dSinAlpha = ( vtMainDir ^ vtDir).Len() ;
|
||||
if ( abs( dSinAlpha) > EPS_SMALL)
|
||||
dVal = ( dYSideStep - 0.5 * m_TParams.m_dDiam) / dSinAlpha - 0.5 * m_TParams.m_dDiam ;
|
||||
if ( dVal > EPS_SMALL) {
|
||||
double dCosAlpha = vtMainDir * vtDir ;
|
||||
dOffsTmp = abs( ( dYSideStep - 0.5 * m_TParams.m_dDiam) * dCosAlpha) ;
|
||||
}
|
||||
}
|
||||
if ( dOffsTmp > dOffs_)
|
||||
dOffs_ = dOffsTmp ;
|
||||
}
|
||||
dOffs = dOffs_ ;
|
||||
}
|
||||
if ( dOffs > EPS_SMALL) {
|
||||
// calcolo offset
|
||||
OffsetCurve OffsCrv ;
|
||||
if ( ! OffsCrv.Make( pCrvPocket, dOffs, ICurve::OFF_EXTEND)) {
|
||||
m_pMchMgr->SetLastError( 2412, "Error in Pocketing : Offset not computable") ;
|
||||
return false ;
|
||||
}
|
||||
if ( OffsCrv.GetCurveCount() > 1)
|
||||
return false ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
// aggiorno pCrvPocket
|
||||
pCrvPocket->Clear() ;
|
||||
pCrvPocket->AddCurve( OffsCrv.GetCurve()) ;
|
||||
pCrvPocket->SetExtrusion( vtExtr) ;
|
||||
pCrvPocket->SetThickness( dThick) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
bool
|
||||
@@ -7658,7 +7705,7 @@ bool
|
||||
Pocketing::AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite* pCompo, ICurveComposite* pRCrv, const Vector3d& vtTool, double dDepth,
|
||||
int& nOutsideRaw)
|
||||
{
|
||||
// recupero la direzione principale della svuotatura
|
||||
// recupero la direzione principale della svuotatura
|
||||
Vector3d vtMainDir ;
|
||||
for ( int i = 0 ; i < pCompo->GetCurveCount() ; i++) {
|
||||
int nProp ;
|
||||
@@ -7745,30 +7792,24 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V
|
||||
// recupero la distanza dal bordo del grezzo lungo la direzione di allungamento
|
||||
double dDist ;
|
||||
Vector3d vtNorm ;
|
||||
//if ( ! CalcDistanceFromRawSurface( m_nPhase, ptP, vtDirP, dDist, vtNorm))
|
||||
// return false ;
|
||||
if ( ! GetSignedDistFromStmRaw( m_nPhase, ptP, vtDirP, dDist, vtNorm))
|
||||
return false ;
|
||||
if ( abs( dDist) < EPS_SMALL) {
|
||||
ptP -= vtDirP ;
|
||||
if ( ! CalcDistanceFromRawSurface( m_nPhase, ptP, vtDirP, dDist, vtNorm))
|
||||
return false ;
|
||||
}
|
||||
|
||||
if ( ! GetSignedDistFromRealDirection( ptP, vtDirP, dDist, vtNorm))
|
||||
return false ;
|
||||
|
||||
// calcolo eventuali fattori correttivi (se uscita approx. con fianco utensile)
|
||||
double dCorr = 1 ;
|
||||
double dDistRef = dDist ;
|
||||
double dDistMin ;
|
||||
Vector3d vtNormMin ;
|
||||
if ( abs( vtTool * vtNorm) < 0.5 && GetSignedDistFromStmRaw( m_nPhase, ptP, vtDir, dDistMin, vtNorm)) {
|
||||
if ( abs( vtTool * vtNorm) < 0.5 && GetSignedDistFromRealDirection( ptP, vtNorm, dDistMin, vtNormMin)) {
|
||||
if ( abs( dDistMin) < abs( dDist) && abs( dDistMin) > EPS_SMALL) {
|
||||
dDistRef = dDistMin ;
|
||||
dCorr = dDist / dDistMin ;
|
||||
}
|
||||
}
|
||||
|
||||
// se vicino al bordo del grezzo
|
||||
if ( abs( dDistRef) < m_TParams.m_dDiam / 2 + EPS_SMALL) {
|
||||
// ( se sono dentro al grezzo e se sono vicino al bordo del grezzo) oppure sono fuori ( circa sul bordo)
|
||||
if (( dDistRef < EPS_SMALL && abs( dDistRef) < m_TParams.m_dDiam / 2 + EPS_SMALL ) || dDistRef > - EPS_SMALL) {
|
||||
Point3d ptTest = ptP + vtDirP * ( - dDist + ( m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) * dCorr) ;
|
||||
ptTest += - vtTool * dDepth ;
|
||||
double dTestElev ;
|
||||
@@ -7789,9 +7830,7 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V
|
||||
// calcolo distanza dal bordo del grezzo lungo vtDirO
|
||||
double dDist ;
|
||||
Vector3d vtNorm ;
|
||||
//if ( ! CalcDistanceFromRawSurface( m_nPhase, ptP, vtDirO, dDist, vtNorm))
|
||||
// return false ;
|
||||
if ( ! GetSignedDistFromStmRaw( m_nPhase, ptP, vtDirO, dDist, vtNorm))
|
||||
if ( ! GetSignedDistFromRealDirection( ptP, vtDirO, dDist, vtNorm))
|
||||
return false ;
|
||||
|
||||
// se vicino al bordo del grezzo
|
||||
@@ -7810,6 +7849,25 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::GetSignedDistFromRealDirection( const Point3d ptP, const Vector3d vtDir, double& dDist, Vector3d& vtNorm)
|
||||
{
|
||||
// calcolo la distanza lungo vtDir...
|
||||
if ( ! GetSignedDistFromStmRaw( m_nPhase, ptP, vtDir, dDist, vtNorm))
|
||||
return false ;
|
||||
// se risulta infinita, allora sono fuori dal grezzo, quindi inverto vtDir e ricalcolo la distanza
|
||||
if ( dDist > INFINITO - 1) {
|
||||
if ( ! GetSignedDistFromStmRaw( m_nPhase, ptP, -vtDir, dDist, vtNorm))
|
||||
return false ;
|
||||
// se ancora infinita, errore
|
||||
else if ( dDist > INFINITO - 1)
|
||||
return false ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::ComputePolishingPath( ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool bSplitArcs)
|
||||
@@ -8766,6 +8824,8 @@ Pocketing::AdjustContourWithOpenEdges( ICurveComposite* pCompo, ICRVCOMPOPOVECTO
|
||||
else {
|
||||
pCompo->AddLine( ptStart) ;
|
||||
pCompo->SetCurveTempProp( pCompo->GetCurveCount() - 1, bInVsOut ? 0 : 1, 0) ; // segmento aggiunto
|
||||
if ( bInVsOut)
|
||||
pCompo->SetCurveTempProp( pCompo->GetCurveCount() - 1, -99 , 1) ; // linea da controllare
|
||||
}
|
||||
}
|
||||
// se passo da aperto a chiuso
|
||||
@@ -8820,11 +8880,15 @@ Pocketing::AdjustContourWithOpenEdges( ICurveComposite* pCompo, ICRVCOMPOPOVECTO
|
||||
else {
|
||||
pCompo->AddLine( ptStart) ;
|
||||
pCompo->SetCurveTempProp( pCompo->GetCurveCount() - 1, bInVsOut ? 0 : 1, 0) ; // segmento come curva aperta
|
||||
if ( bInVsOut)
|
||||
pCompo->SetCurveTempProp( pCompo->GetCurveCount() - 1, -99 , 1) ; // linea da controllare
|
||||
}
|
||||
}
|
||||
else {
|
||||
pCompo->AddLine( ptStart) ;
|
||||
pCompo->SetCurveTempProp( pCompo->GetCurveCount() - 1, 1, 0) ; // segmento come curva aperta
|
||||
if ( bInVsOut)
|
||||
pCompo->SetCurveTempProp( pCompo->GetCurveCount() - 1, -99 , 1) ; // linea da controllare
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8839,11 +8903,36 @@ Pocketing::AdjustContourWithOpenEdges( ICurveComposite* pCompo, ICRVCOMPOPOVECTO
|
||||
pCompo->Close() ;
|
||||
//int LI = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCompo->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( LI, LIME) ;
|
||||
|
||||
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::AdustTmpPropLinesForProjection( ICurveComposite* pCompo)
|
||||
{
|
||||
// controllo dei parametri
|
||||
if ( pCompo == nullptr || ! pCompo->IsValid() || ! pCompo->IsClosed())
|
||||
return false ;
|
||||
|
||||
// scorro la curva cercando tutti i tratti lineare con tmpProp 1 impostata a -99
|
||||
for ( int u = 0 ; u < pCompo->GetCurveCount() ; ++ u) {
|
||||
const ICurve* pCrv_u = pCompo->GetCurve( u) ;
|
||||
if ( pCrv_u == nullptr)
|
||||
return false ;
|
||||
if ( pCrv_u->GetType() == CRV_LINE && pCrv_u->GetTempProp( 1) == -99) {
|
||||
const ICurve* pCrv_prec = pCompo->GetCurve( u == 0 ? pCompo->GetCurveCount() - 1 : u) ;
|
||||
if ( pCrv_prec == nullptr)
|
||||
return false ;
|
||||
pCompo->SetCurveTempProp( u, pCrv_prec->GetTempProp( 0), 0) ;
|
||||
}
|
||||
}
|
||||
|
||||
return pCompo->IsValid() && pCompo->IsClosed() ;
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::AdjustPathOutsideRawForOpenEdges( const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vCrvIsland,
|
||||
@@ -9316,30 +9405,6 @@ Pocketing::VerifyLeadInZigZag( ISurfFlatRegion* pSrfChunk, const Point3d& ptPa,
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::CalcDistanceFromRawSurface( int nPhase, const Point3d& ptP, const Vector3d& vtDir, double& dDist, Vector3d& vtNorm)
|
||||
{
|
||||
//if ( ! GetElevation( nPhase, ptP, vtDir, dDist, vtNorm))
|
||||
// return false ;
|
||||
|
||||
// se punto esterno al grezzo
|
||||
//if ( abs( dDist) < EPS_SMALL) {
|
||||
// double dDist1, dDist2 ;
|
||||
// if ( ! GetElevation( nPhase, ptP, -vtDir, dDist1))
|
||||
// return false ;
|
||||
// if ( ! GetElevation( nPhase, ptP - vtDir * ( dDist1), vtDir, dDist2, vtNorm))
|
||||
// return false ;
|
||||
// if ( abs( dDist2) > EPS_SMALL && abs( dDist1) > EPS_SMALL)
|
||||
// dDist = dDist2 - dDist1 ;
|
||||
//}
|
||||
//if ( ! GetElevation( nPhase, ptP, vtDir, dDist, vtNorm)
|
||||
// || ! GetSignedDistFromStmRaw( nPhase, ptP, vtDir, dDist, vtNorm))
|
||||
// return false ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Pocketing::GetParamsAtEachStep( ISURFFRPOVECTOR& vSrfSliced, vector<ICRVCOMPOPOVECTOR>& vCrvOEWithFlags,
|
||||
@@ -9405,6 +9470,7 @@ Pocketing::AdaptSfrWithRaw( ISurfFlatRegion* pSrf, Vector3d vtTrasl, const doubl
|
||||
|
||||
// ricavo il grezzo attuale della lavorazione
|
||||
PtrOwner<ISurfTriMesh> pStmRaw( CreateSurfTriMesh()) ;
|
||||
pStmRaw->AdjustTopology() ;
|
||||
if ( ! GetStmRawPart( nProp0 , pStmRaw, GLOB_FRM))
|
||||
return false ;
|
||||
|
||||
@@ -9477,10 +9543,10 @@ Pocketing::AdaptSfrWithRaw( ISurfFlatRegion* pSrf, Vector3d vtTrasl, const doubl
|
||||
if ( ! ModifySurfByOpenEdge( pSrf, vCrvOEFlags, vtTrasl, pStmRaw))
|
||||
return false ;
|
||||
|
||||
//PtrOwner<ISurfFlatRegion> pSrf_toDraw( CloneSurfFlatRegion( pSrf)) ;
|
||||
//pSrf_toDraw->Translate( vtTrasl) ;
|
||||
//m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_toDraw->Clone()) ;
|
||||
/*for ( int c = 0 ; c < pSrf->GetChunkCount() ; ++ c) {
|
||||
/*PtrOwner<ISurfFlatRegion> pSrf_toDraw( CloneSurfFlatRegion( pSrf)) ;
|
||||
pSrf_toDraw->Translate( vtTrasl) ;
|
||||
m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_toDraw->Clone()) ;
|
||||
for ( int c = 0 ; c < pSrf->GetChunkCount() ; ++ c) {
|
||||
for ( int l = 0 ; l < pSrf->GetLoopCount( c) ; ++ l) {
|
||||
const ICurveComposite* pCrvCompo( GetCurveComposite( pSrf->GetLoop( c, l))) ;
|
||||
for ( int u = 0 ; u < pCrvCompo->GetCurveCount() ; ++ u) {
|
||||
@@ -9490,9 +9556,9 @@ Pocketing::AdaptSfrWithRaw( ISurfFlatRegion* pSrf, Vector3d vtTrasl, const doubl
|
||||
}
|
||||
}
|
||||
}*/
|
||||
//PtrOwner<ISurfFlatRegion> pSrf_toDraw( CloneSurfFlatRegion( pSrf)) ;
|
||||
//pSrf_toDraw->Translate( vtTrasl) ;
|
||||
//int p = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_toDraw->Clone()) ;
|
||||
//PtrOwner<ISurfFlatRegion> pSrf_toDrawtt( CloneSurfFlatRegion( pSrf)) ;
|
||||
//pSrf_toDrawtt->Translate( vtTrasl) ;
|
||||
//int p = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_toDrawtt->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( p, PURPLE) ;
|
||||
|
||||
// 4) SE SUPERIFICIE PRECEDENTEMENTE GIA' LAVORATA...
|
||||
@@ -9582,10 +9648,10 @@ Pocketing::AdjustFakeOpenEdges( ICurveComposite* pCrvCompo, const ISurfFlatRegio
|
||||
}
|
||||
}
|
||||
|
||||
//if ( bFromProj) {
|
||||
//for ( int i = 0 ; i < vCrvExtProj.size() ; ++ i)
|
||||
//m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, vCrvExtProj[i]->Clone()) ;
|
||||
//}
|
||||
/*if ( bFromProj) {
|
||||
for ( int i = 0 ; i < vCrvExtProj.size() ; ++ i)
|
||||
m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, vCrvExtProj[i]->Clone()) ;
|
||||
}*/
|
||||
//-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// ---------------- CREAZIONE DELLA VERA A PROPRIA REGIONE DI INCIDENZA, COME SOMMA DELLE
|
||||
@@ -9619,10 +9685,10 @@ Pocketing::AdjustFakeOpenEdges( ICurveComposite* pCrvCompo, const ISurfFlatRegio
|
||||
pSrf_ind0->Invert() ;
|
||||
pSrf_Proj->Add( *pSrf_ind0) ;
|
||||
|
||||
//if ( bFromProj) {
|
||||
//int ooo = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_Proj->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( ooo, Color( 0.0, 1.0, 0.0, 0.3)) ;
|
||||
//}
|
||||
/*if ( bFromProj) {
|
||||
int ooo = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_Proj->Clone()) ;
|
||||
m_pGeomDB->SetMaterial( ooo, Color( 0.0, 1.0, 0.0, 0.3)) ;
|
||||
}*/
|
||||
// ===============================================================================================================
|
||||
|
||||
// Clono la superificie originaria, portandola allo step corrente
|
||||
@@ -9631,10 +9697,10 @@ Pocketing::AdjustFakeOpenEdges( ICurveComposite* pCrvCompo, const ISurfFlatRegio
|
||||
return false ;
|
||||
pSrfOrig_clone->Translate( vtTrasl) ;
|
||||
|
||||
//if ( bFromProj) {
|
||||
//int oooo = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrfOrig_clone->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( oooo, Color( 0.0, 0.0, 0.0, 0.3)) ;
|
||||
//}
|
||||
/*if ( bFromProj) {
|
||||
int oooo = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrfOrig_clone->Clone()) ;
|
||||
m_pGeomDB->SetMaterial( oooo, Color( 0.0, 0.0, 0.0, 0.3)) ;
|
||||
}*/
|
||||
|
||||
// ho cambiato un lato aperto in chiuso ?
|
||||
bool bLoopL_isChanged = false ;
|
||||
@@ -9645,10 +9711,10 @@ Pocketing::AdjustFakeOpenEdges( ICurveComposite* pCrvCompo, const ISurfFlatRegio
|
||||
PtrOwner<ISurfFlatRegion> pSrf_critica( CloneSurfFlatRegion( pSrf_Proj)) ;
|
||||
pSrf_critica->Subtract( *pSrfOrig_clone) ;
|
||||
|
||||
if ( bFromProj) {
|
||||
//int ooooy = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_critica->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( ooooy, ORANGE) ;
|
||||
}
|
||||
/*if ( bFromProj) {
|
||||
int ooooy = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_critica->Clone()) ;
|
||||
m_pGeomDB->SetMaterial( ooooy, ORANGE) ;
|
||||
}*/
|
||||
|
||||
do {
|
||||
++nCont ;
|
||||
@@ -9685,7 +9751,7 @@ Pocketing::AdjustFakeOpenEdges( ICurveComposite* pCrvCompo, const ISurfFlatRegio
|
||||
PtrOwner<ICurve> pCrvlonger( OffsCrv.GetLongerCurve()) ;
|
||||
// -> per ogni curva di Offset
|
||||
while ( ! IsNull( pCrvlonger) && ! bLoopL_isChanged) {
|
||||
if ( ! pCrvlonger->IsClosed()) { // salto le curve "chiuse"
|
||||
if ( ! pCrvlonger->IsClosed() || nCrv_offs == 1) { // salto le curve "chiuse" ( a meno che non sia l'unica)
|
||||
// 4) classifico la curva di offset ricavata con la supericie originale
|
||||
// NB. Tutti tratti di curva che sono esterni alla superificie originale e che si trovano all'interno della
|
||||
// superificie di proeizione del grezzo lo rovineranno al di fuori della superficie originale, quindi
|
||||
@@ -9693,10 +9759,10 @@ Pocketing::AdjustFakeOpenEdges( ICurveComposite* pCrvCompo, const ISurfFlatRegio
|
||||
PtrOwner<ICurveComposite> pCrv_tOpen_Offs( CloneCurveComposite( pCrvlonger)) ;
|
||||
if ( IsNull( pCrv_tOpen_Offs) || ! pCrv_tOpen_Offs->IsValid())
|
||||
return false ;
|
||||
if ( bFromProj) {
|
||||
//int YE = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrv_tOpen_Offs->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( YE, YELLOW) ;
|
||||
}
|
||||
//if ( bFromProj) {
|
||||
// int YE = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrv_tOpen_Offs->Clone()) ;
|
||||
// m_pGeomDB->SetMaterial( YE, YELLOW) ;
|
||||
//}
|
||||
CRVCVECTOR ccClass ;
|
||||
if ( pSrf_critica->GetCurveClassification( *pCrv_tOpen_Offs, 10 * EPS_SMALL, ccClass)) {
|
||||
for ( int j = 0 ; j < ( int)ccClass.size() && ! bLoopL_isChanged ; ++ j) {
|
||||
@@ -9726,8 +9792,8 @@ Pocketing::AdjustFakeOpenEdges( ICurveComposite* pCrvCompo, const ISurfFlatRegio
|
||||
|
||||
PtrOwner<ICurve> CIAO( pCrv_tOpen_Offs->CopyParamRange( ccClass[j].dParS, ccClass[j].dParE)) ;
|
||||
//if ( bFromProj) {
|
||||
//int YEs = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, CIAO->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( YEs, Color( 0.95, 0.0, 0.63, 1.0)) ;
|
||||
// int YEs = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, CIAO->Clone()) ;
|
||||
// m_pGeomDB->SetMaterial( YEs, Color( 0.95, 0.0, 0.63, 1.0)) ;
|
||||
//}
|
||||
|
||||
// ------------------------------ PARAMETRO FINALE -----------------------------------
|
||||
@@ -10096,7 +10162,7 @@ Pocketing::IntersSurfWithRaw( ISurfFlatRegion* pSfrPock, const ISurfTriMesh* pSt
|
||||
return false ;
|
||||
// traslo la superificie da svuotare a seconda dello step e la taglio con il grezzo
|
||||
if ( ! pStm->Translate( vtTrasl) ||
|
||||
! m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pStm->Clone()) || ! m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pStmRaw->Clone()) ||
|
||||
//! m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pStm->Clone()) || ! m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pStmRaw->Clone()) ||
|
||||
! pStm->CutWithOtherSurf( *pStmRaw, bInVsOut, true)) {
|
||||
pStm.Set( pStmCopy) ;
|
||||
// nel caso il taglio non sia riuscito, allungo leggermente il vettore di traslazione e riprovo
|
||||
@@ -10528,6 +10594,35 @@ Pocketing::GetStmRawPart( int nId, ISurfTriMesh* pSrfTMRaw, Frame3d frPocket)
|
||||
}
|
||||
}
|
||||
|
||||
//int nRawId = m_pMchMgr->GetFirstRawPart() ;
|
||||
|
||||
//while ( nRawId != GDB_ID_NULL) {
|
||||
// // verifico che il grezzo compaia nella fase
|
||||
// if ( m_pMchMgr->VerifyRawPartPhase( nRawId, m_nPhase)) {
|
||||
// // recupero l'oggetto dal database con tale Id
|
||||
// int nRawSolidId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
|
||||
// const IGeoObj* pGObj = m_pGeomDB->GetGeoObj( nRawSolidId) ;
|
||||
// // recupero il frame in cui si trova
|
||||
// Frame3d frRaw ;
|
||||
// m_pGeomDB->GetGlobFrame( nRawSolidId, frRaw) ;
|
||||
// if ( pGObj == nullptr)
|
||||
// return false ;
|
||||
// // controllo che sia una Trimesh
|
||||
// if ( pGObj->GetType() == SRF_TRIMESH) {
|
||||
// // Trimesh della parte p-esima
|
||||
// PtrOwner<ISurfTriMesh> pStmRawPart( CloneSurfTriMesh( GetSurfTriMesh( pGObj))) ;
|
||||
// if ( IsNull( pStmRawPart))
|
||||
// return false ;
|
||||
// // porto la trimesh in globale
|
||||
// pStmRawPart->LocToLoc( frRaw, frPocket) ;
|
||||
// // lo aggiungo alla Trimesh complessiva
|
||||
// pSrfTMRaw->Add( *Release( pStmRawPart)) ;
|
||||
// }
|
||||
// }
|
||||
// // passo al grezzo successivo
|
||||
// nRawId = m_pMchMgr->GetNextRawPart( nRawId) ;
|
||||
//}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -10868,7 +10963,7 @@ Pocketing::GetProjStmOnSfr( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pSt
|
||||
|
||||
// copio la superficie in globale
|
||||
PtrOwner<ISurfFlatRegion> pSfrPock( CloneSurfFlatRegion( pSfr)) ;
|
||||
if( IsNull( pSfrPock))
|
||||
if ( IsNull( pSfrPock))
|
||||
return false ;
|
||||
|
||||
// costante di estrusione per creazione delle regioni
|
||||
@@ -11036,6 +11131,7 @@ Pocketing::GetProjStmOnSfr( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pSt
|
||||
// creo la curva composita associata
|
||||
PtrOwner<ICurveComposite> pCrvBorderProj_f( CreateCurveComposite()) ;
|
||||
pCrvBorderProj_f->AddCurve( Release( pCrvProjFacef)) ;
|
||||
//m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvBorderProj_f->Clone()) ;
|
||||
// 1) controllo se una sottocurva della curva composita del bordo è sufficientemente vicina ad una curva aperta
|
||||
// della curva originale di bordo della superificie esterna
|
||||
bool bNeedProj = false ;
|
||||
@@ -11068,6 +11164,47 @@ Pocketing::GetProjStmOnSfr( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pSt
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( ! bNeedProj) {
|
||||
// 3) controllo se la questa curva contiene o interseca un lato aperto
|
||||
// 3.1) creo una flat region ausiliaria per determinare il verso corretto della curva proeittata
|
||||
PtrOwner<ISurfFlatRegion> pSrf_HelpProjPart( CreateSurfFlatRegion()) ;
|
||||
if ( IsNull( pSrf_HelpProjPart))
|
||||
return false ;
|
||||
pSrf_HelpProjPart->AddExtLoop( pCrvBorderProj_f->Clone()) ;
|
||||
if ( AreOppositeVectorApprox( pSrf_HelpProjPart->GetNormVersor(), pSrfOrig->GetNormVersor()))
|
||||
pSrf_HelpProjPart->Invert() ;
|
||||
// 3.2) ricavo la curva di bordo della regione ( lascio le isole invariate) <- possibile miglioria (?)
|
||||
PtrOwner<ICurveComposite> pCrvBorder_Check( ConvertCurveToComposite( pSfrPock->GetLoop( 0, 0))) ;
|
||||
if ( IsNull( pCrvBorder_Check) || ! pCrvBorder_Check->IsValid())
|
||||
return false ;
|
||||
// 3.3) classificazione
|
||||
CRVCVECTOR ccClass_H ;
|
||||
|
||||
//int G = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSrf_HelpProjPart->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( G, YELLOW) ;
|
||||
//int GG = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvBorder_Check->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( GG, YELLOW) ;
|
||||
|
||||
|
||||
|
||||
if ( pSrf_HelpProjPart->GetCurveClassification( *pCrvBorder_Check, EPS_SMALL, ccClass_H)) {
|
||||
for ( int j = 0 ; j < ( int)ccClass_H.size() && !bNeedProj ; ++ j) {
|
||||
if ( ccClass_H[j].nClass == CRVC_IN) {
|
||||
// se tratto j di curva interno, controllo se c'è un sotto-tratto jj aperto
|
||||
PtrOwner<ICurveComposite> pCrvCompo_forOpens(
|
||||
ConvertCurveToComposite( pCrvBorder_Check->CopyParamRange( ccClass_H[j].dParS, ccClass_H[j].dParE))) ;
|
||||
if ( ! IsNull( pCrvCompo_forOpens) && pCrvCompo_forOpens->IsValid()) {
|
||||
// scorro le sottocurve del tratto j
|
||||
for ( int u = 0 ; u < pCrvCompo_forOpens->GetCurveCount() && !bNeedProj ; ++ u) {
|
||||
int nTmpProp0 = 0 ;
|
||||
if ( pCrvCompo_forOpens->GetCurveTempProp( u, nTmpProp0, 0) && nTmpProp0 == 1)
|
||||
bNeedProj = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( ! bNeedProj) // se non devo proiettare passo alla prossima
|
||||
continue ;
|
||||
|
||||
@@ -11173,6 +11310,7 @@ Pocketing::GetProjStmOnSfr( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pSt
|
||||
PtrOwner<ISurfFlatRegion> pSrfWithOEModified( CreateSurfFlatRegion()) ;
|
||||
if ( IsNull( pSrfWithOEModified))
|
||||
return false ;
|
||||
// sistemo le rette ottenute per allargare la superificie presso i lati aperti
|
||||
pSrfWithOEModified->AddExtLoop( Release( pCrvExt)) ; // la modifico con la curva appena restituita
|
||||
// ( allargata dai lati aperti)
|
||||
if ( pSrfWithOEModified->IsValid()) { // se la superificie ottenuta è valida...
|
||||
@@ -11204,7 +11342,7 @@ Pocketing::GetProjStmOnSfr( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pSt
|
||||
return false ;
|
||||
//int ghh = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSfrProj_Clone->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( ghh, ORANGE) ;
|
||||
// Recupero le TmpProp e creo la nuova superificie mediante questo loop esterno
|
||||
// Recupero le TmpProp e creo la nuova superificie mediante questo loop esterno
|
||||
PtrOwner<ICurve> pCrv_NewExt( pSfrProj_Clone->GetLoop( 0, 0)) ;
|
||||
if ( IsNull( pCrv_NewExt) || ! pCrv_NewExt->IsValid())
|
||||
return false ;
|
||||
@@ -11214,13 +11352,6 @@ Pocketing::GetProjStmOnSfr( const ISurfFlatRegion* pSfr, const ISurfTriMesh* pSt
|
||||
pCrvCompo_NewExt->AddCurve( Release( pCrv_NewExt)) ;
|
||||
// Imposto le temp prop
|
||||
if ( pCrvCompo_NewExt->IsValid()) {
|
||||
/*if( nStep == 2) {
|
||||
m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvCompo_NewExt->Clone()) ;
|
||||
for ( int ii = 0 ; ii < vCrvExtProj.size() ; ++ii) {
|
||||
int jjj = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, vCrvExtProj[ii]->Clone()) ;
|
||||
m_pGeomDB->SetMaterial( jjj, RED) ;
|
||||
}
|
||||
}*/
|
||||
if ( ! SetTmpPropWithRawProjectedFaces( pCrvCompo_NewExt, vCrvExtProj, pSfr->GetNormVersor()) ||
|
||||
! CheckSmallPartsForOpenEdge( pCrvCompo))
|
||||
return false ;
|
||||
@@ -11705,6 +11836,10 @@ Pocketing::GetParamForPtStartOnEdge( const ICurve* pCrvCheck, const ICurveCompos
|
||||
// lavorare, i quali Offset non hanno generato alcuna curva di pCrvCheck )
|
||||
// ==========================================================================================
|
||||
|
||||
//for ( int u = 0 ; u < pCrvCompo->GetCurveCount() ; ++ u) {
|
||||
// int c = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvCompo->GetCurve( u)->Clone()) ;
|
||||
// m_pGeomDB->SetMaterial( c, pCrvCompo->GetCurve( u)->GetTempProp( 0) == 0 ? BLUE : RED) ;
|
||||
//}
|
||||
|
||||
// controllo dei parametri
|
||||
if ( pCrvCheck == nullptr || ! pCrvCheck->IsValid() ||
|
||||
@@ -11752,10 +11887,10 @@ Pocketing::GetParamForPtStartOnEdge( const ICurve* pCrvCheck, const ICurveCompos
|
||||
if ( IsNull( pCrvArc) || ! GetCoeffLinArc( pCrvArc, dDiam, dSubArc))
|
||||
return false ;
|
||||
}
|
||||
double dDiv = dSubArc < 0 ? dDiam : dSubArc;
|
||||
double dDiv = dSubArc < 0 ? dDiam : dSubArc ;
|
||||
double dMaxInt = floor( dLen / dDiv) ;
|
||||
if ( dMaxInt < EPS_SMALL)
|
||||
return false ;
|
||||
//if ( dMaxInt < EPS_SMALL)
|
||||
// return false ;
|
||||
|
||||
int nDen = 2 ; // intervalli in cui suddivido la curva
|
||||
dMaxInt = max( 2.0, dMaxInt) ; // così se entra una volta controllo sempre dParT = 0.5
|
||||
@@ -11935,7 +12070,7 @@ Pocketing::SetBetterPtStartForSubChunks( ICurveComposite* pCrvOffsAct, const ISu
|
||||
pCrv->SetCurveTempProp( i, 0, 0) ;
|
||||
}
|
||||
else
|
||||
pCrv->SetCurveTempProp( i, 0, 0) ;
|
||||
pCrv->SetCurveTempProp( i, 1, 0) ; // <- tmp prop = 0
|
||||
}
|
||||
|
||||
|
||||
@@ -12042,6 +12177,9 @@ Pocketing::SetTmpPropByOverlap( ICurveComposite* pCrv_, int nInd, const ICurveCo
|
||||
if ( dUE - floor( dUE) < EPS_SMALL)
|
||||
nRealDUE = ( int)floor( dUE) ;
|
||||
|
||||
if ( nRealDUS == pCrvOri->GetCurveCount())
|
||||
nRealDUS = 0 ;
|
||||
|
||||
// controllo subito se tocco più curve sulla originale con stesse temp prop
|
||||
bool bHasAllSameProp = true ;
|
||||
int nProp_prec ; pCrvOri->GetCurveTempProp( nRealDUS, nProp_prec, 0) ;
|
||||
@@ -12184,17 +12322,17 @@ Pocketing::SetTmpPropWithRawProjectedFaces( ICurveComposite* pCrvCompo_NewExt, I
|
||||
if ( ! frLoc.IsValid())
|
||||
return false ;
|
||||
|
||||
//int PU = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvCompo_NewExt->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( PU, PURPLE) ;
|
||||
//for ( int i = 0 ; i < (int)vCrvExtProj.size() ; ++ i) {
|
||||
// int rr = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, vCrvExtProj[i]->Clone()) ;
|
||||
// m_pGeomDB->SetMaterial( rr, i == 0 ? LIME : GRAY) ;
|
||||
//}
|
||||
|
||||
// inizialmente imposto tutte le curve come chiuse
|
||||
for ( int u = 0 ; u < pCrvCompo_NewExt->GetCurveCount() ; ++ u)
|
||||
pCrvCompo_NewExt->SetCurveTempProp( u, 0, 0) ;
|
||||
|
||||
//int ww = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvCompo_NewExt->Clone()) ;
|
||||
//m_pGeomDB->SetMaterial( ww, WHITE) ;
|
||||
//for ( int i = 0 ; i < ( int)vCrvExtProj.size() ; ++ i) {
|
||||
// int ww2 = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, vCrvExtProj[i]->Clone()) ;
|
||||
// m_pGeomDB->SetMaterial( ww2, BLACK) ;
|
||||
//}
|
||||
|
||||
// imposto le proprietà temporanee delle curve
|
||||
for ( int u = 0 ; u < pCrvCompo_NewExt->GetCurveCount() ; ++ u) {
|
||||
bool bFound = false ;
|
||||
@@ -12253,7 +12391,7 @@ Pocketing::SetTmpPropWithRawProjectedFaces( ICurveComposite* pCrvCompo_NewExt, I
|
||||
int nStat1 = -1 ;
|
||||
// richiamo la SetTmpPropByOverlap in quanto potrebbe fare overlap con l'indice 0 di vCrvExtProj.
|
||||
// L'indice 0 contiene il bordo con i lati aperti/chiusi settati della intersezione con il grezzo
|
||||
if ( SetTmpPropByOverlap( pCrvCompo_Step, 0, vCrvExtProj[i], nStat1, dToll) && nStat1 != -1)
|
||||
if ( SetTmpPropByOverlap( pCrvCompo_Step, 0, vCrvExtProj[i], nStat1, dToll) && nStat1 != 1)
|
||||
pCrvCompo_Step->SetCurveTempProp( 0, 0, 0) ; // chiusa se non c'è Overlap
|
||||
pCrvCompoH->AddCurve( Release( pCrvCompo_Step)) ;
|
||||
}
|
||||
@@ -12266,6 +12404,9 @@ Pocketing::SetTmpPropWithRawProjectedFaces( ICurveComposite* pCrvCompo_NewExt, I
|
||||
// overlap ha fatto con le curve esterne delle proiezioni
|
||||
if ( pCrvCompoH->GetCurveCount() > 1)
|
||||
pCrvCompoCurr.Set( Release( pCrvCompoH)) ;
|
||||
else {
|
||||
|
||||
}
|
||||
}
|
||||
// sostituisco la CURVA COMPOSITA creata con alla CURVA SEMPLICE originaria
|
||||
PtrOwner<ICurveComposite> pCrv_Bef( CloneCurveComposite( pCrvCompo_NewExt)) ; // tratto precente
|
||||
|
||||
+3
-2
@@ -137,6 +137,7 @@ class Pocketing : public Machining
|
||||
bool AdjustContourWithOpenEdges( ICurveComposite* pCompo, ICRVCOMPOPOVECTOR& vCrvIsl,
|
||||
double dDiam, double dOffR, double dStepPrec, const Vector3d& vtTrasl,
|
||||
ISurfTriMesh* pStmRaw = nullptr, bool bInVsOut = false) ;
|
||||
bool AdustTmpPropLinesForProjection( ICurveComposite* pCompo) ;
|
||||
bool AdjustPathOutsideRawForOpenEdges( const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vCrvIsland,
|
||||
ICurveComposite* pCrvOpenOffs, const Point3d& ptCrvOpenS,
|
||||
const Point3d& ptCrvOpenE, const double dRad, const double dDiam,
|
||||
@@ -230,6 +231,7 @@ class Pocketing : public Machining
|
||||
double dDepth, int& nOutsideRaw) ;
|
||||
bool ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite * pCompo, const Vector3d& vtMainDir, bool bLeadIn, const Vector3d& vtTool, double dDepth,
|
||||
bool& bIsOutsideRaw) ;
|
||||
bool GetSignedDistFromRealDirection( const Point3d ptP, const Vector3d vtDir, double& dDist, Vector3d& vtNorm) ;
|
||||
// =========================================================================
|
||||
|
||||
// ============================ FEED =======================================
|
||||
@@ -259,7 +261,6 @@ class Pocketing : public Machining
|
||||
// ============================ IN/OUT =====================================
|
||||
bool VerifyLeadInHelix( ISurfFlatRegion* pSrfChunk, const Point3d& ptCen, double dRad) const ;
|
||||
bool VerifyLeadInZigZag( ISurfFlatRegion* pSrfChunk, const Point3d& ptPa, const Point3d& ptPb) const ;
|
||||
bool CalcDistanceFromRawSurface( int nPhase, const Point3d& ptP, const Vector3d& vtDir, double& dDist, Vector3d& vtNorm) ;
|
||||
bool ComputePolishingPath( ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool bSplitArcs) ;
|
||||
bool AddEpicycles( ICurveComposite * pCompo, ICurveComposite * pCrv, ICurveComposite * pCrvBound = nullptr) ;
|
||||
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ,
|
||||
@@ -340,7 +341,7 @@ class Pocketing : public Machining
|
||||
double m_dMaxLenRawProj = 100 ; // lunghezza massima per contatto di proiezione
|
||||
bool m_bOptOffset = true ; // flag per ottimizzazione numero di Offset necessari
|
||||
bool m_bOptOffsetCM = false ; // flag per ottimizzazione numero di Offset necessari con centroidi e medial Axis
|
||||
bool m_bAssignFeed = true ; // flag per controllo della Feed
|
||||
bool m_bAssignFeed = false ; // flag per controllo della Feed
|
||||
double m_dDiam_Prec = 0.0 ; // diametro utensile per precedente svuotatura
|
||||
double m_dOffsetR_Prec = 0.0 ; // offset radiale della svuotatura precedente
|
||||
double m_dSideStep_Prec = 0.0 ; // side Step della svuotatura precedente
|
||||
|
||||
Reference in New Issue
Block a user