From dc17c648dc6984cc7ab9516e770d2c79aa68ca2d Mon Sep 17 00:00:00 2001 From: LorenzoM Date: Fri, 25 Jun 2021 17:10:15 +0200 Subject: [PATCH] Migliorie in polyline e split parti triangolabili --- PolyLine.cpp | 20 +++++++++++--------- SurfTriMeshBooleans.cpp | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/PolyLine.cpp b/PolyLine.cpp index 4875cf9..7604606 100644 --- a/PolyLine.cpp +++ b/PolyLine.cpp @@ -1300,7 +1300,7 @@ PolyLine::Trim( const Plane3d& plPlane, bool bInVsOut) } //---------------------------------------------------------------------------- -/*static*/ bool +bool ChangePolyLineStart( const Point3d& ptNewStart, PolyLine& Loop, double dTol) { // Rinomino la lista di punti della PolyLine. @@ -1361,11 +1361,12 @@ ChangePolyLineStart( const Point3d& ptNewStart, PolyLine& Loop, double dTol) //---------------------------------------------------------------------------- // nSegNum 0-based -/*static*/ bool -PointPositionOnPolyLine( const Point3d& ptPoint, /*const*/ PolyLine& Loop, int& nSegNum, double& dParOnSeg, double dTol) +bool +PointPositionOnPolyLine( const Point3d& ptPoint, const PolyLine& Loop, int& nSegNum, double& dParOnSeg, double dTol) { // Rinomino la lista di punti della PolyLine. - /*const*/ PNTULIST& LoopList = Loop.GetUPointList() ; + PolyLine& MyLoopRef = const_cast ( Loop) ; + const PNTULIST& LoopList = MyLoopRef.GetUPointList() ; // Ciclo sui segmenti del loop per cercare il tratto del loop chiuso più vicino al punto. nSegNum = - 1 ; double dMinSqDist = DBL_MAX ; @@ -1404,14 +1405,15 @@ PointPositionOnPolyLine( const Point3d& ptPoint, /*const*/ PolyLine& Loop, int& } //---------------------------------------------------------------------------- -/*static*/ bool -IsPointInsidePolyLine( const Point3d& ptP, /*const*/ PolyLine& plPoly) +bool +IsPointInsidePolyLine( const Point3d& ptP, const PolyLine& plPoly) { // Se la PolyLine non è chiusa, il punto non può essere interno. if ( ! plPoly.IsClosed()) return false ; // Lista dei punti - /*const*/ PNTULIST& List = plPoly.GetUPointList() ; + PolyLine& MyPolyRef = const_cast ( plPoly) ; + const PNTULIST& List = MyPolyRef.GetUPointList() ; // Ciclo sui segmenti della PolyLine per cercarne il tratto più vicino al punto. double dMinSqDist = DBL_MAX ; Point3d ptMinDist ; @@ -1541,7 +1543,7 @@ DistPointPolyLine( const Point3d& ptP, const PolyLine& plPoly, double& dPointPol } //---------------------------------------------------------------------------- -/*static*/ bool +bool SplitPolyLineAtPoint( const Point3d& ptPoint, /*const*/ PolyLine& Loop, PolyLine& Loop1, PolyLine& Loop2, double dTol) { // Rinomino la lista di punti della PolyLine. @@ -1594,7 +1596,7 @@ SplitPolyLineAtPoint( const Point3d& ptPoint, /*const*/ PolyLine& Loop, PolyLine } //---------------------------------------------------------------------------- -/*static*/ bool +bool AddPolyLineToPolyLine( PolyLine& Poly, PolyLine& PolyToAdd, double dTol) { // Se la PolyLine a cui devo aggiungere l'altra è chiusa, non posso aggiungere nulla. diff --git a/SurfTriMeshBooleans.cpp b/SurfTriMeshBooleans.cpp index 64dfe29..d7f0f9d 100644 --- a/SurfTriMeshBooleans.cpp +++ b/SurfTriMeshBooleans.cpp @@ -4162,7 +4162,7 @@ SplitPolyLineContour( const POLYLINEVECTOR& vContourVec, POLYLINEVECTOR& vContou return false ; // Se la complessità non è eccessiva, non procedo. int nPointsNum = vContourVec[0].GetPointNbr() ; - if ( nPointsNum < 10) + if ( nPointsNum < 4) return false ; for ( int n = 1 ; n < int( vContourVec.size()) ; ++ n) nPointsNum += vContourVec[n].GetPointNbr() ; @@ -4478,7 +4478,7 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) { //////////////////////////////////////////////////////////////////////////////////////////////////////// static int nTime = 0; nTime++; - if (nTime == 14) + if (nTime == 4) nTime = 0; //////////////////////////////////////////////////////////////////////////////////////////////////////// SurfTriMesh& SurfB = Other ;