From e20b4b5b784b85eaa310d0e98b37a2fcd81c509e Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 3 Jun 2024 08:15:38 +0200 Subject: [PATCH] EgtGeomKernel 2.6f1 : - modifiche a pocketing. --- CalcPocketing.cpp | 78 ++++++++++++++++++++++----------------------- CurveAux.cpp | 8 +++++ CurveComposite.cpp | 2 +- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes SfrCreate.cpp | 39 ++++++----------------- SurfTriMesh.cpp | 2 +- 6 files changed, 59 insertions(+), 70 deletions(-) diff --git a/CalcPocketing.cpp b/CalcPocketing.cpp index 10ce91b..5002402 100644 --- a/CalcPocketing.cpp +++ b/CalcPocketing.cpp @@ -136,7 +136,7 @@ GetCoeffLinArc( const ICurveArc* pArc, double dDiam, double& dSubArc) //---------------------------------------------------------------------------- static bool GetParamForPtStartOnEdge( const ICurve* pCrvCheck, const ICurveComposite* pCrvCompo, - const ICRVCOMPOPOVECTOR& vOtherCrv, PocketParams PockParams, double& dPar) + const ICRVCOMPOPOVECTOR& vOtherCrv, const PocketParams& PockParams, double& dPar) { // ==================== INFO ================================================================ @@ -279,7 +279,7 @@ GetParamForPtStartOnEdge( const ICurve* pCrvCheck, const ICurveComposite* pCrvCo //---------------------------------------------------------------------------- static bool -AdjustContourStart( ICurveComposite* pCompo, PocketParams PockParams, const ICRVCOMPOPOVECTOR& vCrvIsl, +AdjustContourStart( ICurveComposite* pCompo, const PocketParams& PockParams, const ICRVCOMPOPOVECTOR& vCrvIsl, bool bOrder, Point3d ptRef) { // se cerco semplicemente il tratto lineare chiuso più lungo ... @@ -429,7 +429,7 @@ AdjustContourStart( ICurveComposite* pCompo, PocketParams PockParams, const ICRV //---------------------------------------------------------------------------- static bool -GetHomogeneousParts( ICurveComposite* pCrvCompo, PocketParams PockParams, ICRVCOMPOPOVECTOR& vpCrvs) +GetHomogeneousParts( ICurveComposite* pCrvCompo, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vpCrvs) { // controllo dei parametri @@ -603,7 +603,7 @@ static bool AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVECTOR& vCrvIsland, const double dParS, const double dParE, const Vector3d& vtTanS, const Vector3d& vtTanE, const double dRad, const double dDiamJ, - PocketParams PockParams, ICurveComposite* pCrvBorder) + const PocketParams& PockParams, ICurveComposite* pCrvBorder) { /* parametri : pCrvCompo -> curva originaria di bordo @@ -816,7 +816,7 @@ AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVECTOR& vCrvI //---------------------------------------------------------------------------- static bool AdjustContourWithOpenEdges( ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vCrvIsl, const double dDiam, - const double dOffR, const double dStep, PocketParams PockParams) + const double dOffR, const double dStep, const PocketParams& PockParams) { // controllo dei parametri if ( pCrvCompo == nullptr || ! pCrvCompo->IsValid()) @@ -929,7 +929,7 @@ CheckForRemovingIsland( const ICurveComposite* pCrvIslandBorder, double dOffs, b //---------------------------------------------------------------------------- static bool -ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, PocketParams PockParams) +ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, const PocketParams& PockParams) { // controllo parametri : if ( pSfr == nullptr || ! pSfr->IsValid()) @@ -1076,7 +1076,7 @@ ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, PocketParams PockParams) //---------------------------------------------------------------------------- static bool GetParamOnOpenSide( const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vOtherCrv, - const Frame3d& frPocket, PocketParams PockParams, Point3d& ptMid, Vector3d& vtMidOrt) + const Frame3d& frPocket, const PocketParams& PockParams, Point3d& ptMid, Vector3d& vtMidOrt) { // recupero il vettore estrusione Vector3d vtExtr = Z_AX ; @@ -1224,7 +1224,7 @@ GetParamOnOpenSide( const ICurveComposite* pCompo, const ICRVCOMPOPOVECTOR& vOth //---------------------------------------------------------------------------- static bool SetSpecialPtStartForOpenEdges( const ICurveComposite* pCrvOrig, const Frame3d& frPocket, - PocketParams PockParams, ICurveComposite* pCrvCompo, Point3d& ptStart, + const PocketParams& PockParams, ICurveComposite* pCrvCompo, Point3d& ptStart, Vector3d& vtMidOut, bool& bMidOut) { // controllo dei parametri @@ -1264,7 +1264,7 @@ SetSpecialPtStartForOpenEdges( const ICurveComposite* pCrvOrig, const Frame3d& f //---------------------------------------------------------------------------- static bool -SetPtStartForPath( ICurveComposite* pCrvOffsAct, PocketParams PockParams, const ISurfFlatRegion* pSrfToWork, +SetPtStartForPath( ICurveComposite* pCrvOffsAct, const PocketParams& PockParams, const ISurfFlatRegion* pSrfToWork, const Point3d& ptEndPrec, const Frame3d& frPocket, Point3d& ptStart, Vector3d& vtMidOut, bool& bMidOut, int nOffs, ICurveComposite* pCrvOrig) { @@ -1547,7 +1547,7 @@ OptimizedSpiralCirle( const ICurveComposite* pCrvCompo, const double dToll, doub //---------------------------------------------------------------------------- static bool CalcCircleSpiral( const Point3d& ptCen, const Vector3d& vtN, double dOutRad, double dIntRad, - PocketParams PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv) + const PocketParams& PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv) { /* calcola il percorso di a spirale assieme al percorso di ritorno */ @@ -1812,7 +1812,7 @@ PreparareTrapezoidTwoBases( const ICurveComposite* pCrvCompo, const double dDiam //---------------------------------------------------------------------------- static bool GetTrapezoidFromShape( const ICurveComposite* pCrvCompo, ICurveComposite* pCrvTrap, - Frame3d& frTrap, PocketParams PockParams, double& dPocketSize, int& nBase, int& nSecondBase) + Frame3d& frTrap, const PocketParams& PockParams, double& dPocketSize, int& nBase, int& nSecondBase) { // controllo parametri if ( pCrvCompo == nullptr || ! pCrvCompo->IsValid()) @@ -2205,7 +2205,7 @@ GetTrapezoidFromShape( const ICurveComposite* pCrvCompo, ICurveComposite* pCrvTr //---------------------------------------------------- static bool SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenClosed, - const ICurveComposite* pCrvPocket, PocketParams PockParams) + const ICurveComposite* pCrvPocket, const PocketParams& PockParams) { // parametri double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ; @@ -2283,7 +2283,7 @@ SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenC static bool CalcTrapezoidSpiralXCoord( const ICurveComposite* pCrvPocket, int nBase, int nSecondBase, bool bStart, double dYCoord, double& dXCoord, double dPocketSize, - PocketParams PockParams) + const PocketParams& PockParams) { // parametri double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ; @@ -2390,7 +2390,7 @@ CalcTrapezoidSpiralXCoord( const ICurveComposite* pCrvPocket, int nBase, int nSe //---------------------------------------------------- static bool SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenClosed, - PocketParams PockParams, const ICurveComposite* pCrvPocket) + const PocketParams& PockParams, const ICurveComposite* pCrvPocket) { // parametri double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ; @@ -2467,7 +2467,7 @@ SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const bool bEvenC //---------------------------------------------------- static bool AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveComposite* pCrvPocket, - PocketParams PockParams, bool bStart) + const PocketParams& PockParams, bool bStart) { // parametri double dDiam = PockParams.dRad_prec > 0 ? 2 * PockParams.dRad_prec : 2 * PockParams.dRad ; @@ -2623,7 +2623,7 @@ AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveComposite* p //---------------------------------------------------- static bool CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Frame3d& frTrap, double dPocketSize, int nBase, - int nSecondBase, PocketParams PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap) + int nSecondBase, const PocketParams& PockParams, ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap) { // parametri double dDiam = 2 * PockParams.dRad ; @@ -2814,7 +2814,7 @@ CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Frame3d& frTrap, double //---------------------------------------------------------------------------- static bool -ModifyCurveToSmoothed( ICurveComposite* pCrv, PocketParams PockParams, double dRightLen, double dLeftLen, bool bAsParam) +ModifyCurveToSmoothed( ICurveComposite* pCrv, const PocketParams& PockParams, double dRightLen, double dLeftLen, bool bAsParam) { // se non richiesto non faccio nulla if ( ! PockParams.bSmooth) @@ -3191,7 +3191,7 @@ ModifyBiArc( ICurve* pBiArcLink, double dToll, ICurveComposite* pNewBiArc) static bool CalcBoundedSmootedLink( const Point3d& ptStart, const Vector3d& vtStart, const Point3d& ptEnd, const Vector3d& vtEnd, double dParMeet, const ICRVCOMPOPOVECTOR& vOffIslands, - PocketParams PockParams, ICurveComposite* pCrvLink) + const PocketParams& PockParams, ICurveComposite* pCrvLink) { // se senza smusso, ritorno tratto lineare if ( ! PockParams.bSmooth) @@ -3314,8 +3314,8 @@ CalcBoundedSmootedLink( const Point3d& ptStart, const Vector3d& vtStart, const P //---------------------------------------------------------------------------- static bool CutCurveToConnect( ICurveComposite* pCrvS, ICurveComposite* pCrvE, const ICRVCOMPOPOVECTOR& vOffsCL, - const ICRVCOMPOPOVECTOR& vFirstOffset, PocketParams PockParams, ICurveComposite* pCrvLink, double dLenPercS, - double dLenPercE, int nMaxIter) + const ICRVCOMPOPOVECTOR& vFirstOffset, const PocketParams& PockParams, ICurveComposite* pCrvLink, + double dLenPercS, double dLenPercE, int nMaxIter) { // controllo i parametri if ( pCrvS == nullptr || pCrvE == nullptr ) @@ -3419,7 +3419,7 @@ CutCurveToConnect( ICurveComposite* pCrvS, ICurveComposite* pCrvE, const ICRVCOM //---------------------------------------------------------- static bool GetUnclearedRegion( ICRVCOMPOPOVECTOR& vFirstOffs, ICRVCOMPOPOVECTOR& vCrvs, ICURVEPOVECTOR& vLinks, - const ICurveComposite* pCrv_orig, PocketParams PockParams, ISurfFlatRegion* pSrfToCut) + const ICurveComposite* pCrv_orig, const PocketParams& PockParams, ISurfFlatRegion* pSrfToCut) { // controllo dei parametri @@ -3545,7 +3545,7 @@ RemoveFirstLoopFromSfr( ISurfFlatRegion* pSrfOrig) //---------------------------------------------------------------------------- static bool RemoveExtraPartByMedialAxis( const ISurfFlatRegion* pChunkToCut, ICRVCOMPOPOVECTOR& vOffsFirstCurve, - PocketParams PockParams, int& nOptFlag, Point3d& ptCentroid, ICurveComposite* pCrvPath) + const PocketParams& PockParams, int& nOptFlag, Point3d& ptCentroid, ICurveComposite* pCrvPath) { // nOptFlag : 0 -> non faccio nulla | 1 -> svuoto con un centroide | 2 -> svuoto con un percorso @@ -4016,7 +4016,7 @@ CutCurveByOffsets( ICurveComposite* pCurve, ICRVCOMPOPOVECTOR& vOffs) //---------------------------------------------------------------------------- static bool GetNewCurvetWithCentroid( const ICurveComposite* pCrvH1, const ICurveComposite* pCrvH2, - PocketParams PockParams, Point3d& ptC, + const PocketParams& PockParams, Point3d& ptC, bool bCir, ICRVCOMPOPOVECTOR& VFirstOff, ICurveComposite* pCrvNewCurve) { // creazione dei due possibili percorsi per raggiungere il centroide @@ -4107,7 +4107,7 @@ GetNewCurvetWithCentroid( const ICurveComposite* pCrvH1, const ICurveComposite* //---------------------------------------------------------------------------- static bool ManageSmoothAndAutoInters( ICurveComposite* pCrv, ICurveComposite* pCrvPath, ICurveComposite* pPath1, - PocketParams PockParams, ICurveComposite* pPath2, ICRVCOMPOPOVECTOR& vOffsCL) + const PocketParams& PockParams, ICurveComposite* pPath2, ICRVCOMPOPOVECTOR& vOffsCL) { // controllo parametri if ( pCrv == nullptr) @@ -4210,7 +4210,7 @@ ManageSmoothAndAutoInters( ICurveComposite* pCrv, ICurveComposite* pCrvPath, ICu //---------------------------------------------------------------------------- static bool GetNewCurvetWithPath( const ICurveComposite* pCrvH1, const ICurveComposite* pCrvH2, ICurveComposite* pCrvPath, - ICRVCOMPOPOVECTOR& VFirstOff, ICRVCOMPOPOVECTOR& VoffsCl, PocketParams PockParams, + ICRVCOMPOPOVECTOR& VFirstOff, ICRVCOMPOPOVECTOR& VoffsCl, const PocketParams& PockParams, ICurveComposite* pCrvNewCurve) { // inizializzo i due possibili percorsi @@ -4423,7 +4423,7 @@ ChoosePath( const ICurveComposite* pCrv1, const ICurveComposite* pCrv2, int nP, //---------------------------------------------------------------------------- static bool RemoveExtraParts( ISurfFlatRegion* pSrfToCut, ICRVCOMPOPOVECTOR& vOffs, ICRVCOMPOPOVECTOR& vOffsClosedCurves, - ICRVCOMPOPOVECTOR& vOffsFirstCurve, ICURVEPOVECTOR& vLinks, PocketParams PockParams) + ICRVCOMPOPOVECTOR& vOffsFirstCurve, ICURVEPOVECTOR& vLinks, const PocketParams& PockParams) { // controllo parametri @@ -4586,7 +4586,7 @@ RemoveExtraParts( ISurfFlatRegion* pSrfToCut, ICRVCOMPOPOVECTOR& vOffs, ICRVCOMP //---------------------------------------------------------------------------- static bool -CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, PocketParams PockParams, +CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, const PocketParams& PockParams, const ICRVCOMPOPOVECTOR& vOffsClosedCurves, const ICRVCOMPOPOVECTOR& vOffsFirstCurve) { // controllo dei parametri @@ -4717,7 +4717,7 @@ CreateSpiralPocketingPath( ICRVCOMPOPOVECTOR& vOffs, ICURVEPOVECTOR& vLinks, Poc //---------------------------------------------------------------------------- static bool CheckIfOffsetIsNecessary( const ICurveComposite* pCrvOffs, const double dOffs, const int nOffsCount, - const int nIter, const Vector3d& vtN, PocketParams PockParams, bool& bInsert) + const int nIter, const Vector3d& vtN, const PocketParams& PockParams, bool& bInsert) { // controllo dei parametri @@ -4800,7 +4800,7 @@ CheckIfOffsetIsNecessary( const ICurveComposite* pCrvOffs, const double dOffs, c //---------------------------------------------------------------------------- static bool -CalcSpiral( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, int& nReg, Point3d& ptStart, +CalcSpiral( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, int& nReg, Point3d& ptStart, ICurveComposite* pCrvOEWithFlags, ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap) { @@ -5066,7 +5066,7 @@ CheckSimpleOverlap( const ICurve* pCrv, const ICurveComposite* pCrvOri, int& nSt //---------------------------------------------------------- static bool -CalcZigZagLink( ICurveComposite* pCrv1, ICurveComposite* pCrv2, PocketParams PockParams, +CalcZigZagLink( ICurveComposite* pCrv1, ICurveComposite* pCrv2, const PocketParams& PockParams, ICurveComposite* pCrvLink) { // se non richiesto, esco @@ -5215,7 +5215,7 @@ CalcZigZagLink( ICurveComposite* pCrv1, ICurveComposite* pCrv2, PocketParams Poc //---------------------------------------------------------------------------- static bool -CalcZigZag( const ISurfFlatRegion* pSrfZigZag, PocketParams PockParams, ICRVCOMPOPOVECTOR& vpCrvs, +CalcZigZag( const ISurfFlatRegion* pSrfZigZag, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vpCrvs, bool bFromInfill) { @@ -5536,7 +5536,7 @@ CalcZigZag( const ISurfFlatRegion* pSrfZigZag, PocketParams PockParams, ICRVCOMP //---------------------------------------------------------------------------- static bool -AddSpiralIn( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, +AddSpiralIn( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, const ICRVCOMPOPOVECTOR& vCrvOrig, ICRVCOMPOPOVECTOR& vCrvCompoRes) { // ciclo sui chunk della superficie da svuotare @@ -5587,8 +5587,8 @@ AddSpiralIn( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, //---------------------------------------------------------------------------- static bool -AddSpiralOut( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, - const ICRVCOMPOPOVECTOR& vCrvOrig, ICRVCOMPOPOVECTOR& vCrvCompoRes) +AddSpiralOut( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, + const ICRVCOMPOPOVECTOR& vCrvOrig, ICRVCOMPOPOVECTOR& vCrvCompoRes) { // ciclo sui chunk della superficie da svuotare for ( int c = 0 ; c < pSrfPock->GetChunkCount() ; ++ c) { @@ -5641,7 +5641,7 @@ AddSpiralOut( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, //---------------------------------------------------------------------------- static bool -AddZigZag( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes) +AddZigZag( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes) { // Offset della regione per curva ZigZag @@ -5771,7 +5771,7 @@ OptimizeChunkOneWay( ISurfFlatRegion* pSrfOrig, ISURFFRPOVECTOR& vSrfIdeal) //---------------------------------------------------------------------------- static bool -AddOneWay( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes) +AddOneWay( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vCrvCompoRes) { double dOffs = PockParams.dRad ; @@ -5876,7 +5876,7 @@ AddOneWay( const ISurfFlatRegion* pSrfPock, PocketParams PockParams, ICRVCOMPOPO //---------------------------------------------------------------------------- bool -CalcPocketing( const ISurfFlatRegion *pSfr, double dRad, double dStep, double dAngle, int nType, bool bSmooth, +CalcPocketing( const ISurfFlatRegion* pSfr, double dRad, double dStep, double dAngle, int nType, bool bSmooth, ICRVCOMPOPOVECTOR& vCrvCompoRes) { // controllo dei parametri @@ -6048,7 +6048,7 @@ AdjustLinkSameY( ICurveComposite* pCrvLink, bool& bSplit) //---------------------------------------------------------------------------- static bool AdjustLinkDifferentY( const ICurve* pCrvSegPrec, const ICurve* pCrvSegSucc, - const ICurveComposite* pCrvLink, PocketParams PockParams, bool& bSplit) + const ICurveComposite* pCrvLink, const PocketParams& PockParams, bool& bSplit) { // controllo dei parametri if ( pCrvLink == nullptr || ! pCrvLink->IsValid()) @@ -6114,7 +6114,7 @@ AdjustLinkDifferentY( const ICurve* pCrvSegPrec, const ICurve* pCrvSegSucc, //---------------------------------------------------------------------------- static bool -AdjustLinkZigZagInfill( ICurveComposite* pCrvCompo, PocketParams PockParams, ICRVCOMPOPOVECTOR& vNewCrv) +AdjustLinkZigZagInfill( ICurveComposite* pCrvCompo, const PocketParams& PockParams, ICRVCOMPOPOVECTOR& vNewCrv) { // controllo dei parametri if ( pCrvCompo == nullptr || ! pCrvCompo->IsValid()) diff --git a/CurveAux.cpp b/CurveAux.cpp index a9e861c..9ab7f12 100644 --- a/CurveAux.cpp +++ b/CurveAux.cpp @@ -371,6 +371,14 @@ CurveDump( const ICurve& crvC, string& sOut, bool bMM, const char* szNewLine) sOut += string( "Closed") + ( bCCW ? " CCW" : " CW") + " AreaXY=" + ToString( dAreaUi, nDec) + szNewLine ; } + // eventuali proprietà temporanee + vector vProp{ crvC.GetTempProp( 0), crvC.GetTempProp( 1)} ; + if ( vProp[0] != 0 || vProp[1] != 0) + sOut += string( "TmpProp=") + ToString( vProp) + szNewLine ; + // eventuali parametri temporanei + vector vParam{ crvC.GetTempParam( 0), crvC.GetTempParam( 1)} ; + if ( abs( vParam[0]) > EPS_ZERO || abs( vParam[1]) > EPS_ZERO) + sOut += string( "TmpParam=") + ToString( vParam) + szNewLine ; return true ; } diff --git a/CurveComposite.cpp b/CurveComposite.cpp index 225e40f..d6dbc33 100644 --- a/CurveComposite.cpp +++ b/CurveComposite.cpp @@ -662,7 +662,7 @@ CurveComposite::Dump( string& sOut, bool bMM, const char* szNewLine) const while ( pCrvSmpl != nullptr && i < MAX_CRV) { // assegno ed emetto nome e tipo della curva semplice sOut += "#" + ToString( i) + " " + pCrvSmpl->GetTitle() + szNewLine ; - // salvataggio della curva semplice + // dati della curva semplice if ( ! pCrvSmpl->Dump( sOut, bMM, szNewLine)) return false ; // passo alla successiva diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index b1433b0e7c3bfc08f50d3144000ec71f3f786198..3e02bfac764c5734b198b5e3ebb5be4167593228 100644 GIT binary patch delta 118 zcmdlNy)SyhH#Sx?1|0^&&A-{?nVHiV3@0mc>u&bq>S2M3-{!MM7I$OZ+#~G9j8n2h Q8ZL=uq6g#VEaea`09rgA5&!@I delta 118 zcmdlNy)SyhH#SyN1|0^o&A-{?nVC}=%qA;x>u&bq>S2M3-{!MM7I$OZ+#~G9j8n2h Q8ZL=uq6g#VEaea`0Abu7G5`Po diff --git a/SfrCreate.cpp b/SfrCreate.cpp index e84ece2..c75c006 100644 --- a/SfrCreate.cpp +++ b/SfrCreate.cpp @@ -367,25 +367,14 @@ GetSurfFlatRegionFromTriangle( const Triangle3d& Tria) ISurfFlatRegion* GetSurfFlatRegionFromPolyLine( const PolyLine& ContourPolyLine) { - // Creo la regione. - PtrOwner pSfr( CreateBasicSurfFlatRegion()) ; - if ( IsNull( pSfr)) - return nullptr ; // Creo curva composita. PtrOwner pLoop( CreateBasicCurveComposite()) ; - if ( IsNull( pLoop)) + if ( IsNull( pLoop) || ! pLoop->FromPolyLine( ContourPolyLine)) + return nullptr ; + // Creo la regione. + PtrOwner pSfr( CreateBasicSurfFlatRegion()) ; + if ( IsNull( pSfr) || ! pSfr->AddExtLoop( Release( pLoop))) return nullptr ; - Point3d ptSt, ptEn ; - bool bContinue = ContourPolyLine.GetFirstPoint( ptSt) && - ContourPolyLine.GetNextPoint( ptEn) ; - while ( bContinue) { - CurveLine cvLine ; - cvLine.Set( ptSt, ptEn) ; - pLoop->AddCurve( cvLine) ; - ptSt = ptEn ; - bContinue = ContourPolyLine.GetNextPoint( ptEn) ; - } - pSfr->AddExtLoop( Release( pLoop)) ; return Release( pSfr) ; } @@ -401,25 +390,17 @@ GetSurfFlatRegionFromPolyLineVector( const POLYLINEVECTOR& vContoursPolyLineVec) for ( int nL = 0 ; nL < int( vContoursPolyLineVec.size()) ; ++ nL) { // Creo curva composita. PtrOwner pLoop( CreateBasicCurveComposite()) ; - if ( IsNull( pLoop)) + if ( IsNull( pLoop) || ! pLoop->FromPolyLine( vContoursPolyLineVec[nL])) return nullptr ; - Point3d ptSt, ptEn ; - bool bContinue = vContoursPolyLineVec[nL].GetFirstPoint( ptSt) && - vContoursPolyLineVec[nL].GetNextPoint( ptEn) ; - while ( bContinue) { - CurveLine cvLine ; - cvLine.Set( ptSt, ptEn) ; - pLoop->AddCurve( cvLine) ; - ptSt = ptEn ; - bContinue = vContoursPolyLineVec[nL].GetNextPoint( ptEn) ; - } // Loop esterno if ( nL == 0) { - pSfr->AddExtLoop( Release( pLoop)) ; + if ( ! pSfr->AddExtLoop( Release( pLoop))) + return nullptr ; } // Loop interno else { - pSfr->AddIntLoop( Release( pLoop)) ; + if ( ! pSfr->AddIntLoop( Release( pLoop))) + return nullptr ; } } return Release( pSfr) ; diff --git a/SurfTriMesh.cpp b/SurfTriMesh.cpp index 1e45dc8..f521865 100644 --- a/SurfTriMesh.cpp +++ b/SurfTriMesh.cpp @@ -1233,7 +1233,7 @@ SurfTriMesh::GetSilhouette( const Plane3d& plPlane, double dTol, POLYLINEVECTOR& // Se non esiste la regione if ( IsNull( pSfr)) - return false ; + return true ; // Effettuo contro-offset pSfr->Offset( -dTol, ICurve::OFF_EXTEND) ;