diff --git a/VolZmapVolume.cpp b/VolZmapVolume.cpp index f9b86d6..175c34a 100644 --- a/VolZmapVolume.cpp +++ b/VolZmapVolume.cpp @@ -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 cBezTipStartF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartF1, nDegU, bRat))); + PtrOwner cBezTipEndF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipEndF1, nDegU, bRat))); + PtrOwner cBezTipStartF2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartF2, nDegU, bRat))); + PtrOwner 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 cBezTipStartB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartB1, nDegU, bRat))); + PtrOwner cBezTipEndB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipEndB1, nDegU, bRat))); + PtrOwner cBezTipStartB2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTipStartB2, nDegU, bRat))); + PtrOwner 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 cBezTopStartF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartF1, nDegU, bRat))); + PtrOwner cBezTopEndF1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopEndF1, nDegU, bRat))); + PtrOwner cBezTopStartF2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartF2, nDegU, bRat))); + PtrOwner 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 cBezTopStartB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartB1, nDegU, bRat))); + PtrOwner cBezTopEndB1(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopEndB1, nDegU, bRat))); + PtrOwner cBezTopStartB2(GetBasicCurveBezier(ArcToBezierCurve(&cArcTopStartB2, nDegU, bRat))); + PtrOwner 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 cBezTipStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart1, nDegU, bRat))) ; - PtrOwner 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 cBezTipStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart2, nDegU, bRat))) ; - PtrOwner 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 cBezTopStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStart1, nDegU, bRat))) ; - PtrOwner 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 cBezTopStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStart2, nDegU, bRat))) ; - PtrOwner 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 cBezTipStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart1, nDegU, bRat))) ; - PtrOwner 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 cBezTipStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart2, nDegU, bRat))) ; - PtrOwner 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 cBezTopStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStart1, nDegU, bRat))) ; - PtrOwner 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 cBezTopStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStart2, nDegU, bRat))) ; - PtrOwner 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 cBezTipEnd1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEnd1, nDegU, bRat))) ; - PtrOwner 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 cBezTipEnd2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEnd2, nDegU, bRat))) ; - PtrOwner 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 cBezTipStart1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart1, nDegU, bRat))) ; - PtrOwner 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 cBezTipStart2( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStart2, nDegU, bRat))) ; - PtrOwner 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 cBezTipStartBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStartBack1, nDegU, bRat))) ; - PtrOwner 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 cBezTipStartFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipStartFront1, nDegU, bRat))) ; - PtrOwner 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 cBezTipEndFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEndFront1, nDegU, bRat))) ; - PtrOwner 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 cBezTipEndBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTipEndBack1, nDegU, bRat))) ; - PtrOwner 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 cBezTopStartBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStartBack1, nDegU, bRat))) ; - PtrOwner 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 cBezTopStartFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopStartFront1, nDegU, bRat))) ; - PtrOwner 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 cBezTopEndFront1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEndFront1, nDegU, bRat))) ; - PtrOwner 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 cBezTopEndBack1( GetBasicCurveBezier( ArcToBezierCurve( &cArcTopEndBack1, nDegU, bRat))) ; - PtrOwner 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()) ; } }