EgtGeomKernel :

- pulizia codice.
This commit is contained in:
Daniele Bariletti
2025-09-12 15:02:15 +02:00
parent d7380a09c1
commit b179771ec9
+68 -268
View File
@@ -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 ;