EgtGeomKernel :
- evitati duplicati di archi di bezier.
This commit is contained in:
+136
-175
@@ -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()) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user