EgtGeomKernel :
- pulizia codice.
This commit is contained in:
+68
-268
@@ -22,11 +22,10 @@
|
||||
#include "/EgtDev/Include/EGkIntervals.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
#include "/EgtDev/Include/EgtNumUtils.h"
|
||||
#include "/EgtDev/Include/EgtPerfCounter.h"
|
||||
//#include "/EgtDev/Include/EgtPerfCounter.h"
|
||||
#include "/EgtDev/Include/EGkSurfBezier.h"
|
||||
#include "/EgtDev/Include/ENkPolynomialRoots.h"
|
||||
#include "/EgtDev/Include/EGkIntersLineBox.h"
|
||||
#include "/EgtDev/Include/EGkGeoObjSave.h" // debug
|
||||
#include "SurfBezier.h"
|
||||
#include <future>
|
||||
#include <numeric>
|
||||
@@ -1083,12 +1082,12 @@ VolZmap::MillingStep( int nCurrTool,
|
||||
Vector3d vtALe = GetToLoc( vtAe, m_MapFrame) ;
|
||||
vtALe.Normalize() ;
|
||||
|
||||
static PerformanceCounter Counter ;
|
||||
{
|
||||
string sOut = "Draw=" + ToString( Counter.Stop(), 3) ;
|
||||
LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
Counter.Start() ;
|
||||
}
|
||||
//static PerformanceCounter Counter ;
|
||||
//{
|
||||
//string sOut = "Draw=" + ToString( Counter.Stop(), 3) ;
|
||||
//LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
//Counter.Start() ;
|
||||
//}
|
||||
|
||||
// Se pura traslazione
|
||||
bool bOk ;
|
||||
@@ -1098,20 +1097,20 @@ VolZmap::MillingStep( int nCurrTool,
|
||||
else
|
||||
bOk = MillingGeneralMotionStep( ptPLs, vtDLs, vtALs, ptPLe, vtDLe, vtALe) ;
|
||||
|
||||
{
|
||||
// debug per 5 assi
|
||||
double dPartCount = Counter.Stop() ;
|
||||
if ( ! AreSameVectorApprox( vtDLs, vtDLe)) {
|
||||
dTotCount += dPartCount ;
|
||||
string sOut = "Calc5Axis=" + ToString( dTotCount, 3) ;
|
||||
LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
}
|
||||
//debug per 5 assi
|
||||
//{
|
||||
//// debug per 5 assi
|
||||
//double dPartCount = Counter.Stop() ;
|
||||
//if ( ! AreSameVectorApprox( vtDLs, vtDLe)) {
|
||||
// dTotCount += dPartCount ;
|
||||
// string sOut = "Calc5Axis=" + ToString( dTotCount, 3) ;
|
||||
// LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
//}
|
||||
////debug per 5 assi
|
||||
|
||||
string sOut = "Calc=" + ToString( Counter.Stop(), 3) ;
|
||||
LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
Counter.Start() ;
|
||||
}
|
||||
//string sOut = "Calc=" + ToString( Counter.Stop(), 3) ;
|
||||
//LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
//Counter.Start() ;
|
||||
//}
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
@@ -1313,14 +1312,6 @@ VolZmap::GenTool_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR&
|
||||
return true ;
|
||||
}
|
||||
|
||||
#if false
|
||||
//debug
|
||||
#define TEST
|
||||
static vector<IGeoObj*> vGeo ;
|
||||
//static int nCount = 0 ;
|
||||
//debug
|
||||
#endif
|
||||
|
||||
static void
|
||||
SortGroupInters( PNTVEC3DVECTOR& vInters, INTINTVECTOR& vStartEnds, const Vector3d& vMainAx) {
|
||||
if( AreSameVectorExact(vMainAx, Z_AX))
|
||||
@@ -1394,14 +1385,12 @@ struct SurfBezForInters {
|
||||
Vector3d a3, a2, a1, a0, b3, b2, b1, b0 ;
|
||||
};
|
||||
|
||||
static int nIntersCalc = 0 ;
|
||||
|
||||
typedef std::pair<double, double> DBLDBL ;
|
||||
|
||||
static bool
|
||||
IntersLineBezierSurfSet( const Point3d& ptLineStart, const Vector3d& vtLineDir, double dMin, double dMax,
|
||||
IntersLineBezierSurfSet( const Point3d& ptLineStart, const Vector3d& vtLineDir,
|
||||
const vector<SurfBezForInters>& vSurfBez, PNTVEC3DVECTOR& vInters, INTVECTOR& vSurfInters,
|
||||
int nGrid, const Vector3d& vtN, vector<DBLDBL>& vInterv)
|
||||
const Vector3d& vtN, vector<DBLDBL>& vInterv)
|
||||
{
|
||||
Point3d r = ptLineStart ;
|
||||
Vector3d q = vtLineDir ;
|
||||
@@ -1463,7 +1452,7 @@ IntersLineBezierSurfSet( const Point3d& ptLineStart, const Vector3d& vtLineDir,
|
||||
INTDBLVECTOR vIntBoxBox ;
|
||||
bool bCalcInters = false ;
|
||||
int nInterv = -1 ;
|
||||
if( dMax > EPS_ZERO && ! bCalcAll) {
|
||||
if( vInterv.size() > 0 && !bCalcAll ) {
|
||||
Point3d ptMin = bbox.GetMin(), ptMax = bbox.GetMax() ;
|
||||
for ( int k = 0 ; k < int(vInterv.size()) && ! bCalcInters; ++k) {
|
||||
bCalcInters = ( vInterv[k].first >= ptMin.z && vInterv[k].first <= ptMax.z) || // minimo compreso nel box
|
||||
@@ -1479,15 +1468,6 @@ IntersLineBezierSurfSet( const Point3d& ptLineStart, const Vector3d& vtLineDir,
|
||||
|
||||
// verifico che lo spillone faccia interferenza con il box della superficie
|
||||
if ( bCalcInters) {
|
||||
// debug
|
||||
++nIntersCalc ;
|
||||
string sOut = " actual inters calc " + ToString(nIntersCalc) ;
|
||||
//sOut += " Griglia" + ToString(nGrid) + " toolZ: " + ToString( vtN.z, 3) ;
|
||||
//if( dMax < EPS_ZERO)
|
||||
// sOut += " --additional calc" ;
|
||||
LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
////debug
|
||||
|
||||
// se la linea è parallela all'asse X o Y allora ruoto tutto di 45 gradi rispetto a Z
|
||||
Vector3d a3, a2, a1, a0, b3, b2, b1, b0 ;
|
||||
if ( ! bNeedToRot) {
|
||||
@@ -1604,8 +1584,6 @@ IntersLineBezierSurfSet( const Point3d& ptLineStart, const Vector3d& vtLineDir,
|
||||
srf.sBez.GetPointNrmD1D2(dU, dV, ISurfBezier::Side::FROM_MINUS, ISurfBezier::Side::FROM_MINUS, ptBez, vtN) ;
|
||||
vtN *= -1 ;
|
||||
UpdateMaxMin( ptBez, vtN, vInters) ;
|
||||
|
||||
//debug
|
||||
vSurfInters.push_back( s) ;
|
||||
|
||||
vbAlreadyCalc[s] = true ;
|
||||
@@ -1645,19 +1623,12 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
int nSub = 2 ; // numero di bezier di grado 3x1 con cui approssimare il (quasi) semi-cilindro ellissoide che descrive il volume della punta e della cima del tool
|
||||
PNTVECTOR d ;
|
||||
Vector3d q = Z_AX ;
|
||||
|
||||
//debug
|
||||
if( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX || n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE)
|
||||
n5AxisType = VolZmap::Move5Axis::NO_BASE_INTERS ;
|
||||
//debug
|
||||
|
||||
int nTotSurf = 4;
|
||||
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS)
|
||||
nTotSurf = 2 * nStepCnt + nSub * 2 * nStepCnt + nSub * 2 + 8 ; // sup laterali, sup superiori e inferiori, superfici verticali di inizio e fine, superfici di base dei tool
|
||||
else if( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX || n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE)
|
||||
nTotSurf = 2 * nStepCnt + nSub * 2 * nStepCnt + nStepCnt + nSub * 2 + 12 ; // ..come sopra..
|
||||
else if( n5AxisType == VolZmap::Move5Axis::ACROSS)
|
||||
nTotSurf = 2 * nStepCnt + nSub * 4 * nStepCnt + nSub * 2 + 16 ; // come caso ALONG
|
||||
nTotSurf = 2 * nStepCnt + nSub * 4 * nStepCnt + nSub * 2 + 16 ; // come sopra
|
||||
|
||||
int nSurfInd = 0 ;
|
||||
vector<SurfBezForInters> vSurfBez( nTotSurf) ;
|
||||
@@ -1673,13 +1644,6 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
PNTVECTOR vPntTopEndExB ;
|
||||
Point3d ptP1TEx, ptP2TEx ;
|
||||
|
||||
#ifdef TEST
|
||||
//debug
|
||||
if( nGrid == 0)
|
||||
vGeo.clear() ;
|
||||
//debug
|
||||
#endif
|
||||
|
||||
for ( int s = 0 ; s < nStepCnt ; ++s) {
|
||||
// punti di riferimento sul tool
|
||||
Point3d ptTop1s ;
|
||||
@@ -1748,11 +1712,6 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
Point3d ptRefStart = ptS[s] + vtTopBaseStart ;
|
||||
dSide = (ptRefEnd - ptRefStart) * vtLs[s] ;
|
||||
|
||||
//debug
|
||||
string sOut = ToString( dSide) ;
|
||||
LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
//debug
|
||||
|
||||
// calcolo anche i vettori per le basi inferiori
|
||||
Vector3d vtTipBaseStart = - (vtLs[s] ^ vtDirTip) ;
|
||||
vtTipBaseStart.Normalize() ;
|
||||
@@ -1953,100 +1912,6 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTop2.begin(), vPntTop2.end()) ;
|
||||
}
|
||||
}
|
||||
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
|
||||
// superfici
|
||||
CurveArc cArcTopStart1, cArcTopEnd1, cArcTopStart2, cArcTopEnd2 ;
|
||||
cArcTopStart1.SetC2PN( ptS[s], vPntTopStartFront[1], vPntTopStartFront[0], vtLs[s]) ;
|
||||
cArcTopEnd1.SetC2PN( ptE[s], vPntTopEndFront[1], vPntTopEndFront[0], vtLe[s]) ;
|
||||
cArcTopStart2.SetC2PN( ptS[s], vPntTopStartFront[2], vPntTopStartFront[1], vtLs[s]) ;
|
||||
cArcTopEnd2.SetC2PN( ptE[s], vPntTopEndFront[2], vPntTopEndFront[1], vtLe[s]) ;
|
||||
// superfici superiori 1
|
||||
PtrOwner<CurveBezier> cBezTopStart1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStart1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTopEnd1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopEnd1, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTopStart1->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTop1 = cBezTopEnd1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTop1.begin(), vPntTop1.end()) ;
|
||||
// superfici superiori 2
|
||||
PtrOwner<CurveBezier> cBezTopStart2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStart2, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTopEnd2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopEnd2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTopStart2->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTop2 = cBezTopEnd2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTop2.begin(), vPntTop2.end()) ;
|
||||
// superfici
|
||||
CurveArc cArcTopStart3, cArcTopEnd3, cArcTopStart4, cArcTopEnd4 ;
|
||||
cArcTopStart3.SetC2PN( ptS[s], vPntTopStartBack[0], vPntTopStartBack[1], vtLs[s]) ;
|
||||
cArcTopEnd3.SetC2PN( ptE[s], vPntTopEndBack[0], vPntTopEndBack[1], vtLe[s]) ;
|
||||
cArcTopStart4.SetC2PN( ptS[s], vPntTopStartBack[1], vPntTopStartBack[2], vtLs[s]) ;
|
||||
cArcTopEnd4.SetC2PN( ptE[s], vPntTopEndBack[1], vPntTopEndBack[2], vtLe[s]) ;
|
||||
// superfici superiori indietro 1
|
||||
PtrOwner<CurveBezier> cBezTopStart3( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStart3, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTopEnd3( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopEnd3, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTopStart3->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTop3 = cBezTopEnd3->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTop3.begin(), vPntTop3.end()) ;
|
||||
// superfici superiori indietro 2
|
||||
PtrOwner<CurveBezier> cBezTopStart4( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStart4, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTopEnd4( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopEnd4, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTopStart4->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTop4 = cBezTopEnd4->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTop4.begin(), vPntTop4.end()) ;
|
||||
|
||||
// superfici inferiori semplici
|
||||
CurveLine cLineStart ; cLineStart.Set( vPntTipStartBack.front(), vPntTipStartBack.back()) ;
|
||||
PtrOwner<CurveBezier> cBezTipStart( GetBasicCurveBezier( LineToBezierCurve( &cLineStart, nDegU, bRat))) ;
|
||||
CurveLine cLineEnd ; cLineEnd.Set( vPntTipEndBack.front(), vPntTipEndBack.back()) ;
|
||||
PtrOwner<CurveBezier> cBezTipEnd( GetBasicCurveBezier( LineToBezierCurve( &cLineEnd, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTipStart->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTip = cBezTipEnd->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTip.begin(), vPntTip.end()) ;
|
||||
}
|
||||
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
|
||||
// inferiori
|
||||
CurveArc cArcTipStart1, cArcTipEnd1, cArcTipStart2, cArcTipEnd2 ;
|
||||
cArcTipStart1.SetC2PN( ptP1T, vPntTipStartFront[0], vPntTipStartFront[1], vtLs[s]) ;
|
||||
cArcTipEnd1.SetC2PN( ptP2T, vPntTipEndFront[0], vPntTipEndFront[1], vtLe[s]) ;
|
||||
cArcTipStart2.SetC2PN( ptP1T, vPntTipStartFront[1], vPntTipStartFront[2], vtLs[s]) ;
|
||||
cArcTipEnd2.SetC2PN( ptP2T, vPntTipEndFront[1], vPntTipEndFront[2], vtLe[s]) ;
|
||||
// inferiori 1
|
||||
PtrOwner<CurveBezier> cBezTipStart1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStart1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipEnd1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEnd1, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTipStart1->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTip1 = cBezTipEnd1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTip1.begin(), vPntTip1.end()) ;
|
||||
// inferiori 2
|
||||
PtrOwner<CurveBezier> cBezTipStart2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStart2, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipEnd2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEnd2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTipStart2->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTip2 = cBezTipEnd2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTip2.begin(), vPntTip2.end()) ;
|
||||
// inferiori
|
||||
CurveArc cArcTipStart3, cArcTipEnd3, cArcTipStart4, cArcTipEnd4 ;
|
||||
cArcTipStart3.SetC2PN( ptP1T, vPntTipStartBack[1], vPntTipStartBack[0], vtLs[s]) ;
|
||||
cArcTipEnd3.SetC2PN( ptP2T, vPntTipEndBack[1], vPntTipEndBack[0], vtLe[s]) ;
|
||||
cArcTipStart4.SetC2PN( ptP1T, vPntTipStartBack[2], vPntTipStartBack[1], vtLs[s]) ;
|
||||
cArcTipEnd4.SetC2PN( ptP2T, vPntTipEndBack[2], vPntTipEndBack[1], vtLe[s]) ;
|
||||
// inferiori indietro 1
|
||||
PtrOwner<CurveBezier> cBezTipStart3( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStart3, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipEnd3( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEnd3, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTipStart3->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTip3 = cBezTipEnd3->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTip3.begin(), vPntTip3.end()) ;
|
||||
// inferiori indietro 2
|
||||
PtrOwner<CurveBezier> cBezTipStart4( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStart4, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipEnd4( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEnd4, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTipStart4->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTip4 = cBezTipEnd4->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTip4.begin(), vPntTip4.end()) ;
|
||||
|
||||
// superfici superiori semplici
|
||||
CurveLine cLineStart ; cLineStart.Set( vPntTopStartBack.back(), vPntTopStartBack.front()) ;
|
||||
PtrOwner<CurveBezier> cBezTopStart( GetBasicCurveBezier( LineToBezierCurve( &cLineStart, nDegU, bRat))) ;
|
||||
CurveLine cLineEnd ; cLineEnd.Set( vPntTopEndBack.back(), vPntTopEndBack.front()) ;
|
||||
PtrOwner<CurveBezier> cBezTopEnd( GetBasicCurveBezier( LineToBezierCurve( &cLineEnd, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( cBezTopStart->GetAllControlPoints()) ;
|
||||
PNTVECTOR vPntTop = cBezTopEnd->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTop.begin(), vPntTop.end()) ;
|
||||
}
|
||||
|
||||
// all'ultimo step chiudo il volume con le superfici verticali e le basi dei tool
|
||||
if ( s == nStepCnt - 1) {
|
||||
@@ -2087,8 +1952,7 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntStart2.begin(), vPntStart2.end()) ;
|
||||
|
||||
// superfici di base dei tool
|
||||
if ( (! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide < 0)) &&
|
||||
n5AxisType != VolZmap::Move5Axis::ALONG_CONCAVE) {
|
||||
if ( ! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide < 0)) {
|
||||
// start back tip
|
||||
CurveArc cArcTipStartBack1, cArcTipStartBack2 ;
|
||||
cArcTipStartBack1.SetC2PN( ptP1TEx, vPntTipStartExB[0], vPntTipStartExB[1], vtLs.front()) ;
|
||||
@@ -2101,23 +1965,20 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1TEx, ptP1TEx, ptP1TEx, ptP1TEx}) ;
|
||||
PNTVECTOR vPntTipStartBack2 = cBezTipStartBack2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartBack2.begin(), vPntTipStartBack2.end()) ;
|
||||
if( n5AxisType != VolZmap::Move5Axis::ALONG_CONVEX) {
|
||||
// start front tip
|
||||
CurveArc cArcTipStartFront1, cArcTipStartFront2 ;
|
||||
cArcTipStartFront1.SetC2PN( ptP1TEx, vPntTipStartExF[0], vPntTipStartExF[1], vtLs.front()) ;
|
||||
cArcTipStartFront2.SetC2PN( ptP1TEx, vPntTipStartExF[1], vPntTipStartExF[2], vtLs.front()) ;
|
||||
PtrOwner<CurveBezier> cBezTipStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStartFront1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipStartFront2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStartFront2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1TEx, ptP1TEx, ptP1TEx, ptP1TEx}) ;
|
||||
PNTVECTOR vPntTipStartFront1 = cBezTipStartFront1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartFront1.begin(), vPntTipStartFront1.end()) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1TEx, ptP1TEx, ptP1TEx, ptP1TEx}) ;
|
||||
PNTVECTOR vPntTipStartFront2 = cBezTipStartFront2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartFront2.begin(), vPntTipStartFront2.end()) ;
|
||||
}
|
||||
// start front tip
|
||||
CurveArc cArcTipStartFront1, cArcTipStartFront2 ;
|
||||
cArcTipStartFront1.SetC2PN( ptP1TEx, vPntTipStartExF[0], vPntTipStartExF[1], vtLs.front()) ;
|
||||
cArcTipStartFront2.SetC2PN( ptP1TEx, vPntTipStartExF[1], vPntTipStartExF[2], vtLs.front()) ;
|
||||
PtrOwner<CurveBezier> cBezTipStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStartFront1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipStartFront2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStartFront2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1TEx, ptP1TEx, ptP1TEx, ptP1TEx}) ;
|
||||
PNTVECTOR vPntTipStartFront1 = cBezTipStartFront1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartFront1.begin(), vPntTipStartFront1.end()) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1TEx, ptP1TEx, ptP1TEx, ptP1TEx}) ;
|
||||
PNTVECTOR vPntTipStartFront2 = cBezTipStartFront2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartFront2.begin(), vPntTipStartFront2.end()) ;
|
||||
}
|
||||
if ( ( ! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide > 0) ||
|
||||
( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE))) {
|
||||
if ( ! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide > 0)) {
|
||||
// end front tip
|
||||
CurveArc cArcTipEndFront1, cArcTipEndFront2 ;
|
||||
cArcTipEndFront1.SetC2PN( ptP2TEx, vPntTipEndExF[0], vPntTipEndExF[1], vtLe.back()) ;
|
||||
@@ -2130,24 +1991,21 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2TEx, ptP2TEx, ptP2TEx, ptP2TEx}) ;
|
||||
PNTVECTOR vPntTipEndFront2 = cBezTipEndFront2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndFront2.begin(), vPntTipEndFront2.end()) ;
|
||||
if( n5AxisType != VolZmap::Move5Axis::ALONG_CONVEX) {
|
||||
// end back tip
|
||||
CurveArc cArcTipEndBack1, cArcTipEndBack2 ;
|
||||
cArcTipEndBack1.SetC2PN( ptP2TEx, vPntTipEndExB[0], vPntTipEndExB[1], vtLe.back()) ;
|
||||
cArcTipEndBack2.SetC2PN( ptP2TEx, vPntTipEndExB[1], vPntTipEndExB[2], vtLe.back()) ;
|
||||
PtrOwner<CurveBezier> cBezTipEndBack1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEndBack1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipEndBack2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEndBack2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2TEx, ptP2TEx, ptP2TEx, ptP2TEx}) ;
|
||||
PNTVECTOR vPntTipEndBack1 = cBezTipEndBack1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndBack1.begin(), vPntTipEndBack1.end()) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2TEx, ptP2TEx, ptP2TEx, ptP2TEx}) ;
|
||||
PNTVECTOR vPntTipEndBack2 = cBezTipEndBack2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndBack2.begin(), vPntTipEndBack2.end()) ;
|
||||
}
|
||||
// end back tip
|
||||
CurveArc cArcTipEndBack1, cArcTipEndBack2 ;
|
||||
cArcTipEndBack1.SetC2PN( ptP2TEx, vPntTipEndExB[0], vPntTipEndExB[1], vtLe.back()) ;
|
||||
cArcTipEndBack2.SetC2PN( ptP2TEx, vPntTipEndExB[1], vPntTipEndExB[2], vtLe.back()) ;
|
||||
PtrOwner<CurveBezier> cBezTipEndBack1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEndBack1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTipEndBack2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEndBack2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2TEx, ptP2TEx, ptP2TEx, ptP2TEx}) ;
|
||||
PNTVECTOR vPntTipEndBack1 = cBezTipEndBack1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndBack1.begin(), vPntTipEndBack1.end()) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2TEx, ptP2TEx, ptP2TEx, ptP2TEx}) ;
|
||||
PNTVECTOR vPntTipEndBack2 = cBezTipEndBack2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndBack2.begin(), vPntTipEndBack2.end()) ;
|
||||
}
|
||||
|
||||
if ( (! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide > 0)) &&
|
||||
n5AxisType != VolZmap::Move5Axis::ALONG_CONVEX) {
|
||||
if ( ! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide > 0)) {
|
||||
// start back top
|
||||
CurveArc cArcTopStartBack1, cArcTopStartBack2 ;
|
||||
cArcTopStartBack1.SetC2PN( ptS.front(), vPntTopStartExB[1], vPntTopStartExB[0], vtLs.front()) ;
|
||||
@@ -2160,23 +2018,20 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptS[0], ptS[0], ptS[0], ptS[0]}) ;
|
||||
PNTVECTOR vPntTopStartBack2 = cBezTopStartBack2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartBack2.begin(), vPntTopStartBack2.end()) ;
|
||||
if( n5AxisType != VolZmap::Move5Axis::ALONG_CONCAVE) {
|
||||
// start front top
|
||||
CurveArc cArcTopStartFront1, cArcTopStartFront2 ;
|
||||
cArcTopStartFront1.SetC2PN( ptS.front(), vPntTopStartExF[1], vPntTopStartExF[0], vtLs.front()) ;
|
||||
cArcTopStartFront2.SetC2PN( ptS.front(), vPntTopStartExF[2], vPntTopStartExF[1], vtLs.front()) ;
|
||||
PtrOwner<CurveBezier> cBezTopStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStartFront1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTopStartFront2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStartFront2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptS[0], ptS[0], ptS[0], ptS[0]}) ;
|
||||
PNTVECTOR vPntTopStartFront1 = cBezTopStartFront1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront1.begin(), vPntTopStartFront1.end()) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptS[0], ptS[0], ptS[0], ptS[0]}) ;
|
||||
PNTVECTOR vPntTopStartFront2 = cBezTopStartFront2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront2.begin(), vPntTopStartFront2.end()) ;
|
||||
}
|
||||
// start front top
|
||||
CurveArc cArcTopStartFront1, cArcTopStartFront2 ;
|
||||
cArcTopStartFront1.SetC2PN( ptS.front(), vPntTopStartExF[1], vPntTopStartExF[0], vtLs.front()) ;
|
||||
cArcTopStartFront2.SetC2PN( ptS.front(), vPntTopStartExF[2], vPntTopStartExF[1], vtLs.front()) ;
|
||||
PtrOwner<CurveBezier> cBezTopStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStartFront1, nDegU, bRat))) ;
|
||||
PtrOwner<CurveBezier> cBezTopStartFront2( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStartFront2, nDegU, bRat))) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptS[0], ptS[0], ptS[0], ptS[0]}) ;
|
||||
PNTVECTOR vPntTopStartFront1 = cBezTopStartFront1->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront1.begin(), vPntTopStartFront1.end()) ;
|
||||
vvPtCtrl.emplace_back( PNTVECTOR{ ptS[0], ptS[0], ptS[0], ptS[0]}) ;
|
||||
PNTVECTOR vPntTopStartFront2 = cBezTopStartFront2->GetAllControlPoints() ;
|
||||
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront2.begin(), vPntTopStartFront2.end()) ;
|
||||
}
|
||||
if ( ( ! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide < 0) ||
|
||||
( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX))) {
|
||||
if ( ! ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && dSide < 0)) {
|
||||
// end front top
|
||||
CurveArc cArcTopEndFront1, cArcTopEndFront2 ;
|
||||
cArcTopEndFront1.SetC2PN( ptE.back(), vPntTopEndExF[1], vPntTopEndExF[0], vtLe.back()) ;
|
||||
@@ -2272,25 +2127,10 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
vPtCtrlLoc[p].ToLoc( vSurfBez[nSurfInd].frYMainDim) ;
|
||||
vSurfBez[nSurfInd].bbSurfY.Add( vPtCtrlLoc) ;
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
if ( nGrid == 0)
|
||||
vGeo.push_back( vSurfBez[nSurfInd].sBez.Clone()) ;
|
||||
#endif
|
||||
++ nSurfInd ;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
//debug
|
||||
if ( nGrid == 0 && false) {
|
||||
vector<Color> vCol( vGeo.size()) ;
|
||||
fill(vCol.begin(), vCol.end(), Color( 255,128,0)) ;
|
||||
SaveGeoObj( vGeo, vCol, "D:/Temp/VirtualMilling/5axisAdvanced/finalApprox.nge", 2) ;
|
||||
}
|
||||
//debug
|
||||
#endif
|
||||
|
||||
// scorro tutti gli spilloni interessati
|
||||
int j = 0 ;
|
||||
int nLastForwardJ = -1 ;
|
||||
@@ -2321,9 +2161,7 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
PNTVEC3DVECTOR vInters ;
|
||||
INTINTVECTOR vStartEnds ;
|
||||
|
||||
//debug
|
||||
INTVECTOR vSurfInters ;
|
||||
//debug
|
||||
int nPos = j * m_nNx[nGrid] + i ;
|
||||
vector<Data>& vDexel = m_Values[nGrid][nPos] ;
|
||||
vector<DBLDBL> vInterv, vEmpty ;
|
||||
@@ -2335,19 +2173,7 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
if ( vDexel.size() != 0) {
|
||||
dMin = vDexel.front().dMin ;
|
||||
dMax = vDexel.back().dMax ;
|
||||
|
||||
#ifdef TEST
|
||||
//debug
|
||||
if ( false ) {
|
||||
vector<Color> vCol( vGeo.size()) ;
|
||||
fill(vCol.begin(), vCol.end(), Color( 255,128,0)) ;
|
||||
SaveGeoObj( vGeo, vCol, "D:/Temp/VirtualMilling/5axisAdvanced/finalApprox.nge", 2) ;
|
||||
}
|
||||
//debug
|
||||
#endif
|
||||
|
||||
|
||||
IntersLineBezierSurfSet( r, q, dMin, dMax, vSurfBez, vInters, vSurfInters, nGrid, vtLs[0], vInterv) ;
|
||||
IntersLineBezierSurfSet( r, q, vSurfBez, vInters, vSurfInters, vtLs[0], vInterv) ;
|
||||
if ( vInters.size() > 2) {
|
||||
SortGroupInters( vInters, vStartEnds, Z_AX) ;
|
||||
if ( bForward && vStartEnds.size() > 1) {
|
||||
@@ -2362,11 +2188,6 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
if( ! bAllSameType) {
|
||||
bUseOnlyExtremes = false ;
|
||||
|
||||
//debug
|
||||
string sOut = " calcoli addizionali per capire dentro/fouri" ; // debug
|
||||
LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
//debug
|
||||
|
||||
// calcolo le intersezioni anche sugli altri due spilloni passanti per un punto a metà tra due dei vari intervalli
|
||||
// ho almeno due intervalli; prendo un punto a metà tra la fine del primo e l'inzio del secondo
|
||||
Point3d ptLineStart = (vInters[vStartEnds[0].second].first + vInters[vStartEnds[1].first].first ) / 2 ;
|
||||
@@ -2375,7 +2196,7 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
INTVECTOR vSurfX ;
|
||||
INTINTVECTOR vStartEndsX ;
|
||||
bool bXInclude = false ;
|
||||
IntersLineBezierSurfSet( ptLineStart, vtLineStart, 0, 0, vSurfBez, vIntersX, vSurfX, -1, V_NULL, vEmpty) ;
|
||||
IntersLineBezierSurfSet( ptLineStart, vtLineStart, vSurfBez, vIntersX, vSurfX, V_NULL, vEmpty) ;
|
||||
if( vIntersX.size() > 1) {
|
||||
SortGroupInters( vIntersX, vStartEndsX, X_AX) ;
|
||||
if( vStartEndsX.size() != 0)
|
||||
@@ -2388,7 +2209,7 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
|
||||
INTVECTOR vSurfY ;
|
||||
INTINTVECTOR vStartEndsY ;
|
||||
bool bYInclude = false ;
|
||||
IntersLineBezierSurfSet( ptLineStart, vtLineStart, 0, 0, vSurfBez, vIntersY, vSurfY, -1, V_NULL, vEmpty) ;
|
||||
IntersLineBezierSurfSet( ptLineStart, vtLineStart, vSurfBez, vIntersY, vSurfY, V_NULL, vEmpty) ;
|
||||
if ( vIntersY.size() > 1) {
|
||||
SortGroupInters( vIntersY, vStartEndsY, Y_AX) ;
|
||||
if( vStartEndsY.size() != 0)
|
||||
@@ -2668,29 +2489,8 @@ VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, co
|
||||
else
|
||||
n5AxisType = VolZmap::Move5Axis::NO_BASE_INTERS ;
|
||||
}
|
||||
else if ( bAlong) {
|
||||
if ( bAlongInters) {
|
||||
if ( dAlongAngDeg > 0)
|
||||
n5AxisType = VolZmap::Move5Axis::ALONG_CONVEX ;
|
||||
else
|
||||
n5AxisType = VolZmap::Move5Axis::ALONG_CONCAVE ;
|
||||
}
|
||||
else
|
||||
else if ( bAlong)
|
||||
n5AxisType = VolZmap::Move5Axis::NO_BASE_INTERS ;
|
||||
}
|
||||
|
||||
//debug
|
||||
string sOut = "" ;
|
||||
if( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS)
|
||||
sOut = "NO_BASE_INTERS" ;
|
||||
else if( n5AxisType == VolZmap::Move5Axis::ACROSS)
|
||||
sOut = "ACROSS" ;
|
||||
else if( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX)
|
||||
sOut = "ALONG_CONVEX" ;
|
||||
else if( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE)
|
||||
sOut = "ALONG_CONCAVE" ;
|
||||
LOG_INFO( GetEGkLogger(), sOut.c_str())
|
||||
//debug
|
||||
|
||||
bool bOk = true ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user