diff --git a/VolZmapVolume.cpp b/VolZmapVolume.cpp index 48df158..794bc21 100644 --- a/VolZmapVolume.cpp +++ b/VolZmapVolume.cpp @@ -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 #include @@ -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 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 DBLDBL ; static bool -IntersLineBezierSurfSet( const Point3d& ptLineStart, const Vector3d& vtLineDir, double dMin, double dMax, +IntersLineBezierSurfSet( const Point3d& ptLineStart, const Vector3d& vtLineDir, const vector& vSurfBez, PNTVEC3DVECTOR& vInters, INTVECTOR& vSurfInters, - int nGrid, const Vector3d& vtN, vector& vInterv) + const Vector3d& vtN, vector& 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 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 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()) ; - // 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 cBezTopStart3( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStart3, nDegU, bRat))) ; - PtrOwner 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 cBezTopStart4( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStart4, nDegU, bRat))) ; - PtrOwner 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 cBezTipStart( GetBasicCurveBezier( LineToBezierCurve( &cLineStart, nDegU, bRat))) ; - CurveLine cLineEnd ; cLineEnd.Set( vPntTipEndBack.front(), vPntTipEndBack.back()) ; - PtrOwner 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 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()) ; - // 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 cBezTipStart3( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStart3, nDegU, bRat))) ; - PtrOwner 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 cBezTipStart4( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStart4, nDegU, bRat))) ; - PtrOwner 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 cBezTopStart( GetBasicCurveBezier( LineToBezierCurve( &cLineStart, nDegU, bRat))) ; - CurveLine cLineEnd ; cLineEnd.Set( vPntTopEndBack.back(), vPntTopEndBack.front()) ; - PtrOwner 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 cBezTipStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStartFront1, nDegU, bRat))) ; - PtrOwner 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 cBezTipStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipStartFront1, nDegU, bRat))) ; + PtrOwner 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 cBezTipEndBack1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEndBack1, nDegU, bRat))) ; - PtrOwner 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 cBezTipEndBack1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTipEndBack1, nDegU, bRat))) ; + PtrOwner 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 cBezTopStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStartFront1, nDegU, bRat))) ; - PtrOwner 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 cBezTopStartFront1( GetBasicCurveBezier(ArcToBezierCurve( &cArcTopStartFront1, nDegU, bRat))) ; + PtrOwner 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 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& vDexel = m_Values[nGrid][nPos] ; vector 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 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 ;