EgtGeomKernel :
- correzione al box del volume spazzato VM 5assi - modificata gestione conversione curve a bezier.
This commit is contained in:
+10
-86
@@ -857,66 +857,16 @@ GetCylMoveBBox( const Point3d& ptP1, const Point3d& ptP2, const Vector3d& vtV, d
|
||||
inline BBox3d
|
||||
GetCylMoveRotBBox( const Point3d& ptP1, const Point3d& ptP2, const Vector3d& vtV1, const Vector3d& vtV2, double dRad, double dH)
|
||||
{
|
||||
// Determinazione dei punti più laterali del tool, rispetto alla direzione di movimento
|
||||
// per la testa e per la punta del tool
|
||||
Point3d ptP1T = ptP1 - dH * vtV1 ;
|
||||
Point3d ptP2T = ptP2 - dH * vtV2 ;
|
||||
// costruisco gli archi che definiscono il top e bottom del tool di partenza nel loro riferimento e li porto nel frame
|
||||
BBox3d bbStart = GetCylMoveBBox( ptP1, ptP1, vtV1, dRad, dH) ;
|
||||
BBox3d bbEnd = GetCylMoveBBox( ptP2, ptP2, vtV2, dRad, dH) ;
|
||||
|
||||
// sommo i due box e li restituisco
|
||||
BBox3d bbVol ;
|
||||
bbVol.Add( bbStart) ;
|
||||
bbVol.Add( bbEnd) ;
|
||||
|
||||
Vector3d vtDirTop = ptP2 - ptP1 ;
|
||||
Vector3d vtDirTip = ptP2T - ptP1T ;
|
||||
vtDirTop.Normalize() ;
|
||||
vtDirTip.Normalize() ;
|
||||
|
||||
// determino i punti laterali del top e del bottom(tip), nella posizione di partenza
|
||||
Vector3d vtAuxTopS = vtV1 ^ vtDirTop ;
|
||||
vtAuxTopS.Normalize() ;
|
||||
vtAuxTopS *= dRad ;
|
||||
Point3d ptPTop1 = ptP1 + vtAuxTopS ;
|
||||
Point3d ptPTop2 = ptP1 - vtAuxTopS ;
|
||||
|
||||
Vector3d vtAuxBottomS = vtV1 ^ vtDirTip ;
|
||||
vtAuxBottomS.Normalize() ;
|
||||
vtAuxBottomS *= dRad ;
|
||||
Point3d ptPBottom1 = ptP1T + vtAuxBottomS ;
|
||||
Point3d ptPBottom2 = ptP1T - vtAuxBottomS ;
|
||||
|
||||
// determino i punti laterali del top e del bottom(tip), nella posizione di arrivo
|
||||
Vector3d vtAuxTopE = vtV2 ^ vtDirTop ;
|
||||
vtAuxTopE.Normalize() ;
|
||||
vtAuxTopE *= dRad ;
|
||||
Point3d ptPTop3 = ptP2 + vtAuxTopE ;
|
||||
Point3d ptPTop4 = ptP2 - vtAuxTopE ;
|
||||
|
||||
Vector3d vtAuxBottomE = vtV2 ^ vtDirTip ;
|
||||
vtAuxBottomE.Normalize() ;
|
||||
vtAuxBottomE *= dRad ;
|
||||
Point3d ptPBottom3 = ptP2T + vtAuxBottomE ;
|
||||
Point3d ptPBottom4 = ptP2T - vtAuxBottomE ;
|
||||
|
||||
// calcolo anche i punti estremi iniziali e finali dei cilindri
|
||||
Point3d ptTopEnd, ptBottomEnd, ptTopStart, ptBottomStart ;
|
||||
ptTopEnd = ptP2 + vtDirTop * dRad ;
|
||||
ptBottomEnd = ptP2T + vtDirTip * dRad ;
|
||||
ptTopStart = ptP1 - vtDirTop * dRad ;
|
||||
ptBottomStart = ptP1T - vtDirTip * dRad ;
|
||||
|
||||
// Calcolo del box del volume spazzato dal tool
|
||||
BBox3d b3Box ;
|
||||
b3Box.Add( ptPTop1) ;
|
||||
b3Box.Add( ptPTop2) ;
|
||||
b3Box.Add( ptPBottom1) ;
|
||||
b3Box.Add( ptPBottom2) ;
|
||||
b3Box.Add( ptPTop3) ;
|
||||
b3Box.Add( ptPTop4) ;
|
||||
b3Box.Add( ptPBottom3) ;
|
||||
b3Box.Add( ptPBottom4) ;
|
||||
b3Box.Add( ptTopEnd) ;
|
||||
b3Box.Add( ptBottomEnd) ;
|
||||
b3Box.Add( ptTopStart) ;
|
||||
b3Box.Add( ptBottomStart) ;
|
||||
|
||||
// Restituisco il box calcolato
|
||||
return b3Box ;
|
||||
return bbVol ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -1599,10 +1549,6 @@ Reiterate :
|
||||
return true ;
|
||||
}
|
||||
|
||||
#if true
|
||||
#define TEST
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::Comp_5AxisMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtLs, const Vector3d& vtLe,
|
||||
@@ -1999,11 +1945,6 @@ VolZmap::Comp_5AxisMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
vector<IGeoObj*> vGeo ;
|
||||
vector<Color> vCol( nTotSurf) ;
|
||||
#endif
|
||||
|
||||
// inizializzo le superfici bilineari e i parametri per le intersezioni
|
||||
for ( int z = 0 ; z < int( vvPtCtrl.size()) ; ++z) {
|
||||
vSurfBez[nSurfInd].sBez.Init( nDegU, nDegV, nSpanU, nSpanV, bRat) ;
|
||||
@@ -2070,23 +2011,6 @@ VolZmap::Comp_5AxisMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
vSurfBez[nSurfInd].bbSurfY.Add( vPtCtrlLoc) ;
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
//debug
|
||||
if ( nGrid == 0)
|
||||
vGeo.push_back( vSurfBez[nSurfInd].sBez.Clone()) ;
|
||||
//debug
|
||||
#endif
|
||||
|
||||
++nSurfInd ;
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
if ( false) {
|
||||
fill( vCol.begin(), vCol.end(), Color( 255, 128, 0)) ;
|
||||
SaveGeoObj( vGeo, vCol, "D:/Temp/VirtualMilling/5axisAdvanced/finalApprox.nge", 2) ;
|
||||
}
|
||||
#endif
|
||||
|
||||
// scorro tutti gli spilloni interessati
|
||||
int j = 0 ;
|
||||
int nLastForwardJ = -1 ;
|
||||
@@ -2499,7 +2423,7 @@ VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, co
|
||||
InitializePointsAndVectors( ptSti, ptEni, vtDSi, vtDEi, ptLs, ptLe, vtLs, vtLe);
|
||||
|
||||
// Standard è multithread
|
||||
constexpr bool MULTITHREAD = true;
|
||||
constexpr bool MULTITHREAD = true ;
|
||||
if ( MULTITHREAD) {
|
||||
// Ciclo sulle mappe
|
||||
vector<future<bool>> vRes( m_nMapNum) ;
|
||||
|
||||
Reference in New Issue
Block a user