EgtGeomKernel :

- evitati duplicati di archi di bezier.
This commit is contained in:
Daniele Bariletti
2025-09-30 16:05:59 +02:00
parent ead94e7915
commit 02e164dcdf
+136 -175
View File
@@ -1632,7 +1632,7 @@ VolZmap::Comp_5AxisMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
vPntTopEndBack[0] = ptE + vtTopBaseEnd ;
vPntTipStartBack[0] = ptP1T - vtTipBaseStart ;
vPntTipEndBack[0] = ptP2T - vtTipBaseEnd ;
double dSubAng = 90;
double dSubAng = 90 ;
// girano tutti in verso CCW rispetto alla normale del tool
for ( int i = 1; i < 3; ++i) {
// punti sulla base superiore dei cilindri
@@ -1688,259 +1688,220 @@ VolZmap::Comp_5AxisMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
vvPtCtrl.emplace_back( PNTVECTOR( { vPntTopStartFront.back(), vPntTopStartFront.front(), vPntTopEndFront.back(), vPntTopEndFront.front() })) ;
}
else {
// costruisco tutti gli archi subito
// archi inferiori front
CurveArc cArcTipStartF1, cArcTipEndF1, cArcTipStartF2, cArcTipEndF2 ;
cArcTipStartF1.SetC2PN(ptP1T, vPntTipStartFront[0], vPntTipStartFront[1], vtLs);
cArcTipEndF1.SetC2PN(ptP2T, vPntTipEndFront[0], vPntTipEndFront[1], vtLe);
cArcTipStartF2.SetC2PN(ptP1T, vPntTipStartFront[1], vPntTipStartFront[2], vtLs);
cArcTipEndF2.SetC2PN(ptP2T, vPntTipEndFront[1], vPntTipEndFront[2], vtLe);
PtrOwner<CurveBezier> cBezTipStartF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartF1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTipEndF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipEndF1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTipStartF2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartF2, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTipEndF2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipEndF2, nDegU, bRat)));
// archi inferiori back
CurveArc cArcTipStartB1, cArcTipEndB1, cArcTipStartB2, cArcTipEndB2;
cArcTipStartB1.SetC2PN(ptP1T, vPntTipStartBack[0], vPntTipStartBack[1], vtLs);
cArcTipEndB1.SetC2PN(ptP2T, vPntTipEndBack[0], vPntTipEndBack[1], vtLe);
cArcTipStartB2.SetC2PN(ptP1T, vPntTipStartBack[1], vPntTipStartBack[2], vtLs);
cArcTipEndB2.SetC2PN(ptP2T, vPntTipEndBack[1], vPntTipEndBack[2], vtLe);
PtrOwner<CurveBezier> cBezTipStartB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartB1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTipEndB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipEndB1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTipStartB2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartB2, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTipEndB2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipEndB2, nDegU, bRat)));
// archi superiori front
CurveArc cArcTopStartF1, cArcTopEndF1, cArcTopStartF2, cArcTopEndF2;
cArcTopStartF1.SetC2PN(ptS, vPntTopStartFront[0], vPntTopStartFront[1], vtLs);
cArcTopEndF1.SetC2PN(ptE, vPntTopEndFront[0], vPntTopEndFront[1], vtLe);
cArcTopStartF2.SetC2PN(ptS, vPntTopStartFront[1], vPntTopStartFront[2], vtLs);
cArcTopEndF2.SetC2PN(ptE, vPntTopEndFront[1], vPntTopEndFront[2], vtLe);
PtrOwner<CurveBezier> cBezTopStartF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartF1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTopEndF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopEndF1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTopStartF2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartF2, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTopEndF2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopEndF2, nDegU, bRat)));
// archi superiori back
CurveArc cArcTopStartB1, cArcTopEndB1, cArcTopStartB2, cArcTopEndB2;
cArcTopStartB1.SetC2PN(ptS, vPntTopStartBack[0], vPntTopStartBack[1], vtLs);
cArcTopEndB1.SetC2PN(ptE, vPntTopEndBack[0], vPntTopEndBack[1], vtLe);
cArcTopStartB2.SetC2PN(ptS, vPntTopStartBack[1], vPntTopStartBack[2], vtLs);
cArcTopEndB2.SetC2PN(ptE, vPntTopEndBack[1], vPntTopEndBack[2], vtLe);
PtrOwner<CurveBezier> cBezTopStartB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartB1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTopEndB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopEndB1, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTopStartB2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartB2, nDegU, bRat)));
PtrOwner<CurveBezier> cBezTopEndB2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopEndB2, nDegU, bRat)));
if ( n5AxisType == Move5Axis::NO_BASE_INTERS || n5AxisType == Move5Axis::ACROSS) {
// inferiori
CurveArc cArcTipStart1, cArcTipEnd1, cArcTipStart2, cArcTipEnd2 ;
if ( dSide > 0) {
cArcTipStart1.SetC2PN( ptP1T, vPntTipStartFront[0], vPntTipStartFront[1], vtLs) ;
cArcTipEnd1.SetC2PN( ptP2T, vPntTipEndFront[0], vPntTipEndFront[1], vtLe) ;
cArcTipStart2.SetC2PN( ptP1T, vPntTipStartFront[1], vPntTipStartFront[2], vtLs) ;
cArcTipEnd2.SetC2PN( ptP2T, vPntTipEndFront[1], vPntTipEndFront[2], vtLe) ;
vvPtCtrl.emplace_back(cBezTipStartF1->GetAllControlPoints());
PNTVECTOR vPntTipEnd1 = cBezTipEndF1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTipEnd1.begin(), vPntTipEnd1.end());
vvPtCtrl.emplace_back(cBezTipStartF2->GetAllControlPoints());
PNTVECTOR vPntTipEnd2 = cBezTipEndF2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTipEnd2.begin(), vPntTipEnd2.end());
}
else {
cArcTipStart1.SetC2PN( ptP1T, vPntTipStartBack[1], vPntTipStartBack[0], vtLs) ;
cArcTipEnd1.SetC2PN( ptP2T, vPntTipEndBack[1], vPntTipEndBack[0], vtLe) ;
cArcTipStart2.SetC2PN( ptP1T, vPntTipStartBack[2], vPntTipStartBack[1], vtLs) ;
cArcTipEnd2.SetC2PN( ptP2T, vPntTipEndBack[2], vPntTipEndBack[1], vtLe) ;
PNTVECTOR vPntTipEnd01 = cBezTipStartB1->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTipEnd01.rbegin(), vPntTipEnd01.rend());
PNTVECTOR vPntTipEnd1 = cBezTipEndB1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTipEnd1.rbegin(), vPntTipEnd1.rend());
PNTVECTOR vPntTipEnd02 = cBezTipStartB2->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTipEnd02.rbegin(), vPntTipEnd02.rend());
PNTVECTOR vPntTipEnd2 = cBezTipEndB2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTipEnd2.rbegin(), vPntTipEnd2.rend());
}
// superfici inferiori 1
PtrOwner<CurveBezier> cBezTipStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTipEnd1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEnd1, nDegU, bRat))) ;
vvPtCtrl.emplace_back( cBezTipStart1->GetAllControlPoints()) ;
PNTVECTOR vPntTipEnd1 = cBezTipEnd1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEnd1.begin(), vPntTipEnd1.end()) ;
// superfici inferiori 2
PtrOwner<CurveBezier> cBezTipStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart2, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTipEnd2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEnd2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( cBezTipStart2->GetAllControlPoints()) ;
PNTVECTOR vPntTipEnd2 = cBezTipEnd2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEnd2.begin(), vPntTipEnd2.end()) ;
// superiori
CurveArc cArcTopStart1, cArcTopEnd1, cArcTopStart2, cArcTopEnd2 ;
if ( dSide > 0) {
cArcTopStart1.SetC2PN( ptS, vPntTopStartBack[0], vPntTopStartBack[1], vtLs) ;
cArcTopEnd1.SetC2PN( ptE, vPntTopEndBack[0], vPntTopEndBack[1], vtLe) ;
cArcTopStart2.SetC2PN( ptS, vPntTopStartBack[1], vPntTopStartBack[2], vtLs) ;
cArcTopEnd2.SetC2PN( ptE, vPntTopEndBack[1], vPntTopEndBack[2], vtLe) ;
vvPtCtrl.emplace_back(cBezTopStartB1->GetAllControlPoints());
PNTVECTOR vPntTopEnd1 = cBezTopEndB1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTopEnd1.begin(), vPntTopEnd1.end());
vvPtCtrl.emplace_back(cBezTopStartB2->GetAllControlPoints());
PNTVECTOR vPntTopEnd2 = cBezTopEndB2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTopEnd2.begin(), vPntTopEnd2.end());
}
else {
cArcTopStart1.SetC2PN( ptS, vPntTopStartFront[1], vPntTopStartFront[0], vtLs) ;
cArcTopEnd1.SetC2PN( ptE, vPntTopEndFront[1], vPntTopEndFront[0], vtLe) ;
cArcTopStart2.SetC2PN( ptS, vPntTopStartFront[2], vPntTopStartFront[1], vtLs) ;
cArcTopEnd2.SetC2PN( ptE, vPntTopEndFront[2], vPntTopEndFront[1], vtLe) ;
PNTVECTOR vPntTopEnd01 = cBezTopStartF1->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTopEnd01.rbegin(), vPntTopEnd01.rend());
PNTVECTOR vPntTopEnd1 = cBezTopEndF1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTopEnd1.rbegin(), vPntTopEnd1.rend());
PNTVECTOR vPntTopEnd02 = cBezTopStartF2->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTopEnd02.rbegin(), vPntTopEnd02.rend());
PNTVECTOR vPntTopEnd2 = cBezTopEndF2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTopEnd2.rbegin(), vPntTopEnd2.rend());
}
// 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 vPntTopEnd1 = cBezTopEnd1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEnd1.begin(), vPntTopEnd1.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 vPntTopEnd2 = cBezTopEnd2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEnd2.begin(), vPntTopEnd2.end()) ;
// aggiungo le superfici bilineari anche nell'altro verso sia per il top che per il tip
if ( n5AxisType == Move5Axis::ACROSS) {
// inferiori
CurveArc cArcTipStart1, cArcTipEnd1, cArcTipStart2, cArcTipEnd2 ;
if ( dSide > 0) {
cArcTipStart1.SetC2PN( ptP1T, vPntTipStartBack[1], vPntTipStartBack[0], vtLs) ;
cArcTipEnd1.SetC2PN( ptP2T, vPntTipEndBack[1], vPntTipEndBack[0], vtLe) ;
cArcTipStart2.SetC2PN( ptP1T, vPntTipStartBack[2], vPntTipStartBack[1], vtLs) ;
cArcTipEnd2.SetC2PN( ptP2T, vPntTipEndBack[2], vPntTipEndBack[1], vtLe) ;
PNTVECTOR vPntTip01 = cBezTipStartB1->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTip01.rbegin(), vPntTip01.rend());
PNTVECTOR vPntTip1 = cBezTipEndB1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTip1.rbegin(), vPntTip1.rend());
PNTVECTOR vPntTip02 = cBezTipStartB2->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTip02.rbegin(), vPntTip02.rend());
PNTVECTOR vPntTip2 = cBezTipEndB2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTip2.rbegin(), vPntTip2.rend());
}
else {
cArcTipStart1.SetC2PN( ptP1T, vPntTipStartFront[0], vPntTipStartFront[1], vtLs) ;
cArcTipEnd1.SetC2PN( ptP2T, vPntTipEndFront[0], vPntTipEndFront[1], vtLe) ;
cArcTipStart2.SetC2PN( ptP1T, vPntTipStartFront[1], vPntTipStartFront[2], vtLs) ;
cArcTipEnd2.SetC2PN( ptP2T, vPntTipEndFront[1], vPntTipEndFront[2], vtLe) ;
vvPtCtrl.emplace_back(cBezTipStartF1->GetAllControlPoints());
PNTVECTOR vPntTip1 = cBezTipEndF1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTip1.begin(), vPntTip1.end());
vvPtCtrl.emplace_back(cBezTipStartF2->GetAllControlPoints());
PNTVECTOR vPntTip2 = cBezTipEndF2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTip2.begin(), vPntTip2.end());
}
// 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()) ;
// superiori
CurveArc cArcTopStart1, cArcTopEnd1, cArcTopStart2, cArcTopEnd2 ;
if ( dSide > 0) {
cArcTopStart1.SetC2PN( ptS, vPntTopStartFront[1], vPntTopStartFront[0], vtLs) ;
cArcTopEnd1.SetC2PN( ptE, vPntTopEndFront[1], vPntTopEndFront[0], vtLe) ;
cArcTopStart2.SetC2PN( ptS, vPntTopStartFront[2], vPntTopStartFront[1], vtLs) ;
cArcTopEnd2.SetC2PN( ptE, vPntTopEndFront[2], vPntTopEndFront[1], vtLe) ;
PNTVECTOR vPntTop01 = cBezTopStartF1->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTop01.rbegin(), vPntTop01.rend());
PNTVECTOR vPntTop1 = cBezTopEndF1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTop1.rbegin(), vPntTop1.rend());
PNTVECTOR vPntTop02 = cBezTopStartF2->GetAllControlPoints();
vvPtCtrl.emplace_back(vPntTop02.rbegin(), vPntTop02.rend());
PNTVECTOR vPntTop2 = cBezTopEndF2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTop2.rbegin(), vPntTop2.rend());
}
else {
cArcTopStart1.SetC2PN( ptS, vPntTopStartBack[0], vPntTopStartBack[1], vtLs) ;
cArcTopEnd1.SetC2PN( ptE, vPntTopEndBack[0], vPntTopEndBack[1], vtLe) ;
cArcTopStart2.SetC2PN( ptS, vPntTopStartBack[1], vPntTopStartBack[2], vtLs) ;
cArcTopEnd2.SetC2PN( ptE, vPntTopEndBack[1], vPntTopEndBack[2], vtLe) ;
}
// 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()) ;
vvPtCtrl.emplace_back(cBezTopStartB1->GetAllControlPoints());
PNTVECTOR vPntTop1 = cBezTopEndB1->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTop1.begin(), vPntTop1.end());
vvPtCtrl.emplace_back(cBezTopStartB2->GetAllControlPoints());
PNTVECTOR vPntTop2 = cBezTopEndB2->GetAllControlPoints();
vvPtCtrl.back().insert(vvPtCtrl.back().end(), vPntTop2.begin(), vPntTop2.end());
}
}
}
// chiudo il volume con le superfici verticali e le basi dei tool
// chiudo il volume con le superici verticali end 1
CurveArc cArcTipEnd1, cArcTopEnd1, cArcTipEnd2, cArcTopEnd2 ;
cArcTipEnd1.SetC2PN( ptP2T, vPntTipEndFront[0], vPntTipEndFront[1], vtLe) ;
cArcTopEnd1.SetC2PN( ptE, vPntTopEndFront[0], vPntTopEndFront[1], vtLe) ;
cArcTipEnd2.SetC2PN( ptP2T, vPntTipEndFront[1], vPntTipEndFront[2], vtLe) ;
cArcTopEnd2.SetC2PN( ptE, vPntTopEndFront[1], vPntTopEndFront[2], vtLe) ;
PtrOwner<CurveBezier> cBezTipEnd1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEnd1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopEnd1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEnd1, nDegU, bRat))) ;
vvPtCtrl.emplace_back( cBezTipEnd1->GetAllControlPoints()) ;
PNTVECTOR vPntEnd1 = cBezTopEnd1->GetAllControlPoints() ;
vvPtCtrl.emplace_back( cBezTipEndF1->GetAllControlPoints()) ;
PNTVECTOR vPntEnd1 = cBezTopEndF1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntEnd1.begin(), vPntEnd1.end()) ;
// chiudo il volume con le superici verticali end 2
PtrOwner<CurveBezier> cBezTipEnd2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEnd2, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopEnd2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEnd2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( cBezTipEnd2->GetAllControlPoints()) ;
PNTVECTOR vPntEnd2 = cBezTopEnd2->GetAllControlPoints() ;
vvPtCtrl.emplace_back( cBezTipEndF2->GetAllControlPoints()) ;
PNTVECTOR vPntEnd2 = cBezTopEndF2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntEnd2.begin(), vPntEnd2.end()) ;
// chiudo il volume con le superici verticali start 1
CurveArc cArcTipStart1, cArcTopStart1, cArcTipStart2, cArcTopStart2 ;
cArcTipStart1.SetC2PN( ptP1T, vPntTipStartBack[0], vPntTipStartBack[1], vtLs) ;
cArcTopStart1.SetC2PN( ptS, vPntTopStartBack[0], vPntTopStartBack[1], vtLs) ;
cArcTipStart2.SetC2PN( ptP1T, vPntTipStartBack[1], vPntTipStartBack[2], vtLs) ;
cArcTopStart2.SetC2PN( ptS, vPntTopStartBack[1], vPntTopStartBack[2], vtLs) ;
PtrOwner<CurveBezier> cBezTipStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStart1, nDegU, bRat))) ;
vvPtCtrl.emplace_back( cBezTipStart1->GetAllControlPoints()) ;
PNTVECTOR vPntStart1 = cBezTopStart1->GetAllControlPoints() ;
vvPtCtrl.emplace_back( cBezTipStartB1->GetAllControlPoints()) ;
PNTVECTOR vPntStart1 = cBezTopStartB1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntStart1.begin(), vPntStart1.end()) ;
// chiudo il volume con le superfici verticali start 2
PtrOwner<CurveBezier> cBezTipStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart2, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStart2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( cBezTipStart2->GetAllControlPoints()) ;
PNTVECTOR vPntStart2 = cBezTopStart2->GetAllControlPoints() ;
vvPtCtrl.emplace_back( cBezTipStartB2->GetAllControlPoints()) ;
PNTVECTOR vPntStart2 = cBezTopStartB2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntStart2.begin(), vPntStart2.end()) ;
// superfici di base dei tool
if ( ! ( n5AxisType == Move5Axis::NO_BASE_INTERS && dSide < 0)) {
// start back tip
CurveArc cArcTipStartBack1, cArcTipStartBack2 ;
cArcTipStartBack1.SetC2PN( ptP1T, vPntTipStartBack[0], vPntTipStartBack[1], vtLs) ;
cArcTipStartBack2.SetC2PN( ptP1T, vPntTipStartBack[1], vPntTipStartBack[2], vtLs) ;
PtrOwner<CurveBezier> cBezTipStartBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStartBack1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTipStartBack2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStartBack2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1T, ptP1T, ptP1T, ptP1T }) ;
PNTVECTOR vPntTipStartBack1 = cBezTipStartBack1->GetAllControlPoints() ;
PNTVECTOR vPntTipStartBack1 = cBezTipStartB1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartBack1.begin(), vPntTipStartBack1.end()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1T, ptP1T, ptP1T, ptP1T }) ;
PNTVECTOR vPntTipStartBack2 = cBezTipStartBack2->GetAllControlPoints() ;
PNTVECTOR vPntTipStartBack2 = cBezTipStartB2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartBack2.begin(), vPntTipStartBack2.end()) ;
// start front tip
CurveArc cArcTipStartFront1, cArcTipStartFront2 ;
cArcTipStartFront1.SetC2PN( ptP1T, vPntTipStartFront[0], vPntTipStartFront[1], vtLs) ;
cArcTipStartFront2.SetC2PN( ptP1T, vPntTipStartFront[1], vPntTipStartFront[2], vtLs) ;
PtrOwner<CurveBezier> cBezTipStartFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStartFront1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTipStartFront2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStartFront2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1T, ptP1T, ptP1T, ptP1T }) ;
PNTVECTOR vPntTipStartFront1 = cBezTipStartFront1->GetAllControlPoints() ;
PNTVECTOR vPntTipStartFront1 = cBezTipStartF1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartFront1.begin(), vPntTipStartFront1.end()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP1T, ptP1T, ptP1T, ptP1T }) ;
PNTVECTOR vPntTipStartFront2 = cBezTipStartFront2->GetAllControlPoints() ;
PNTVECTOR vPntTipStartFront2 = cBezTipStartF2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipStartFront2.begin(), vPntTipStartFront2.end()) ;
}
if ( ! ( n5AxisType == Move5Axis::NO_BASE_INTERS && dSide > 0)) {
// end front tip
CurveArc cArcTipEndFront1, cArcTipEndFront2 ;
cArcTipEndFront1.SetC2PN( ptP2T, vPntTipEndFront[0], vPntTipEndFront[1], vtLe) ;
cArcTipEndFront2.SetC2PN( ptP2T, vPntTipEndFront[1], vPntTipEndFront[2], vtLe) ;
PtrOwner<CurveBezier> cBezTipEndFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEndFront1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTipEndFront2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEndFront2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2T, ptP2T, ptP2T, ptP2T }) ;
PNTVECTOR vPntTipEndFront1 = cBezTipEndFront1->GetAllControlPoints() ;
PNTVECTOR vPntTipEndFront1 = cBezTipEndF1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndFront1.begin(), vPntTipEndFront1.end()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2T, ptP2T, ptP2T, ptP2T }) ;
PNTVECTOR vPntTipEndFront2 = cBezTipEndFront2->GetAllControlPoints() ;
PNTVECTOR vPntTipEndFront2 = cBezTipEndF2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndFront2.begin(), vPntTipEndFront2.end()) ;
// end back tip
CurveArc cArcTipEndBack1, cArcTipEndBack2 ;
cArcTipEndBack1.SetC2PN( ptP2T, vPntTipEndBack[0], vPntTipEndBack[1], vtLe) ;
cArcTipEndBack2.SetC2PN( ptP2T, vPntTipEndBack[1], vPntTipEndBack[2], vtLe) ;
PtrOwner<CurveBezier> cBezTipEndBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEndBack1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTipEndBack2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEndBack2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2T, ptP2T, ptP2T, ptP2T }) ;
PNTVECTOR vPntTipEndBack1 = cBezTipEndBack1->GetAllControlPoints() ;
PNTVECTOR vPntTipEndBack1 = cBezTipEndB1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndBack1.begin(), vPntTipEndBack1.end()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptP2T, ptP2T, ptP2T, ptP2T }) ;
PNTVECTOR vPntTipEndBack2 = cBezTipEndBack2->GetAllControlPoints() ;
PNTVECTOR vPntTipEndBack2 = cBezTipEndB2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTipEndBack2.begin(), vPntTipEndBack2.end()) ;
}
if ( ! ( n5AxisType == Move5Axis::NO_BASE_INTERS && dSide > 0)) {
// start back top
CurveArc cArcTopStartBack1, cArcTopStartBack2 ;
cArcTopStartBack1.SetC2PN( ptS, vPntTopStartBack[1], vPntTopStartBack[0], vtLs) ;
cArcTopStartBack2.SetC2PN( ptS, vPntTopStartBack[2], vPntTopStartBack[1], vtLs) ;
PtrOwner<CurveBezier> cBezTopStartBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStartBack1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopStartBack2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStartBack2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptS, ptS, ptS, ptS }) ;
PNTVECTOR vPntTopStartBack1 = cBezTopStartBack1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartBack1.begin(), vPntTopStartBack1.end()) ;
PNTVECTOR vPntTopStartBack1 = cBezTopStartB1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartBack1.rbegin(), vPntTopStartBack1.rend()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptS, ptS, ptS, ptS }) ;
PNTVECTOR vPntTopStartBack2 = cBezTopStartBack2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartBack2.begin(), vPntTopStartBack2.end()) ;
PNTVECTOR vPntTopStartBack2 = cBezTopStartB2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartBack2.rbegin(), vPntTopStartBack2.rend()) ;
// start front top
CurveArc cArcTopStartFront1, cArcTopStartFront2 ;
cArcTopStartFront1.SetC2PN( ptS, vPntTopStartFront[1], vPntTopStartFront[0], vtLs) ;
cArcTopStartFront2.SetC2PN( ptS, vPntTopStartFront[2], vPntTopStartFront[1], vtLs) ;
PtrOwner<CurveBezier> cBezTopStartFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStartFront1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopStartFront2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStartFront2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptS, ptS, ptS, ptS }) ;
PNTVECTOR vPntTopStartFront1 = cBezTopStartFront1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront1.begin(), vPntTopStartFront1.end()) ;
PNTVECTOR vPntTopStartFront1 = cBezTopStartF1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront1.rbegin(), vPntTopStartFront1.rend()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptS, ptS, ptS, ptS }) ;
PNTVECTOR vPntTopStartFront2 = cBezTopStartFront2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront2.begin(), vPntTopStartFront2.end()) ;
PNTVECTOR vPntTopStartFront2 = cBezTopStartF2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopStartFront2.rbegin(), vPntTopStartFront2.rend()) ;
}
if ( ! ( n5AxisType == Move5Axis::NO_BASE_INTERS && dSide < 0)) {
// end front top
CurveArc cArcTopEndFront1, cArcTopEndFront2 ;
cArcTopEndFront1.SetC2PN( ptE, vPntTopEndFront[1], vPntTopEndFront[0], vtLe) ;
cArcTopEndFront2.SetC2PN( ptE, vPntTopEndFront[2], vPntTopEndFront[1], vtLe) ;
PtrOwner<CurveBezier> cBezTopEndFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEndFront1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopEndFront2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEndFront2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptE, ptE, ptE, ptE }) ;
PNTVECTOR vPntTopEndFront1 = cBezTopEndFront1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndFront1.begin(), vPntTopEndFront1.end()) ;
PNTVECTOR vPntTopEndFront1 = cBezTopEndF1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndFront1.rbegin(), vPntTopEndFront1.rend()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptE, ptE, ptE, ptE }) ;
PNTVECTOR vPntTopEndFront2 = cBezTopEndFront2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndFront2.begin(), vPntTopEndFront2.end()) ;
PNTVECTOR vPntTopEndFront2 = cBezTopEndF2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndFront2.rbegin(), vPntTopEndFront2.rend()) ;
// end back top
CurveArc cArcTopEndBack1, cArcTopEndBack2 ;
cArcTopEndBack1.SetC2PN( ptE, vPntTopEndBack[1], vPntTopEndBack[0], vtLe) ;
cArcTopEndBack2.SetC2PN( ptE, vPntTopEndBack[2], vPntTopEndBack[1], vtLe) ;
PtrOwner<CurveBezier> cBezTopEndBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEndBack1, nDegU, bRat))) ;
PtrOwner<CurveBezier> cBezTopEndBack2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEndBack2, nDegU, bRat))) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptE, ptE, ptE, ptE }) ;
PNTVECTOR vPntTopEndBack1 = cBezTopEndBack1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndBack1.begin(), vPntTopEndBack1.end()) ;
PNTVECTOR vPntTopEndBack1 = cBezTopEndB1->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndBack1.rbegin(), vPntTopEndBack1.rend()) ;
vvPtCtrl.emplace_back( PNTVECTOR{ ptE, ptE, ptE, ptE }) ;
PNTVECTOR vPntTopEndBack2 = cBezTopEndBack2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndBack2.begin(), vPntTopEndBack2.end()) ;
PNTVECTOR vPntTopEndBack2 = cBezTopEndB2->GetAllControlPoints() ;
vvPtCtrl.back().insert( vvPtCtrl.back().end(), vPntTopEndBack2.rbegin(), vPntTopEndBack2.rend()) ;
}
}