diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index f3f7b94..f4655db 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/PolyLine.cpp b/PolyLine.cpp index 117ce9d..9557017 100644 --- a/PolyLine.cpp +++ b/PolyLine.cpp @@ -1085,8 +1085,15 @@ PolyLine::Invert( bool bInvertU) //---------------------------------------------------------------------------- bool -PolyLine::MyRemoveSamePoints( double dToler) +PolyLine::Flatten( double dZ) { + // verifico non sia vuota + if ( m_lUPoints.empty()) + return true ; + // ciclo su tutti gli elementi per portarli alla Z indicata + for ( auto& UPoint : m_lUPoints) { + UPoint.first.z = dZ ; + } // elimino i punti consecutivi diventati coincidenti (almeno 2) if ( m_lUPoints.size() < 2) return true ; @@ -1097,7 +1104,7 @@ PolyLine::MyRemoveSamePoints( double dToler) // mentre esiste un corrente while ( currP != m_lUPoints.end()) { // se coincidono - if ( AreSamePointEpsilon( precP->first, currP->first, dToler)) { + if ( AreSamePointApprox( precP->first, currP->first)) { // elimino il punto corrente currP = m_lUPoints.erase( currP) ; // il precedente rimane inalterato @@ -1112,50 +1119,6 @@ PolyLine::MyRemoveSamePoints( double dToler) return true ; } -//---------------------------------------------------------------------------- -bool -PolyLine::Flatten( double dZ) -{ - // verifico non sia vuota - if ( m_lUPoints.empty()) - return true ; - // ciclo su tutti gli elementi per portarli alla Z indicata - for ( auto& UPoint : m_lUPoints) - UPoint.first.z = dZ ; - // elimino i punti consecutivi diventati coincidenti - MyRemoveSamePoints() ; - return true ; -} - -//---------------------------------------------------------------------------- -bool -PolyLine::FlattenAdv( double dToler) -{ - // verifico non sia vuota - if ( m_lUPoints.empty()) - return true ; - // recupero dati sulla planarità della polilinea - int nRank ; - Point3d ptCen ; - Vector3d vtDir ; - bool bFlat = IsFlat( nRank, ptCen, vtDir, dToler) ; - // se non planare entro la tolleranza, esco - if ( ! bFlat) - return false ; - // se punto o linea, non devo fare alcunché - if ( nRank == 0 || nRank == 1) - return true ; - // assegno il piano medio - Plane3d plPlane ; - plPlane.Set( ptCen, vtDir) ; - // proietto i punti su questo piano - for ( auto& UPoint : m_lUPoints) - UPoint.first = ProjectPointOnPlane( UPoint.first, plPlane) ; - // elimino i punti consecutivi diventati coincidenti - MyRemoveSamePoints() ; - return true ; -} - //---------------------------------------------------------------------------- bool PolyLine::GetConvexHullXY( PNTVECTOR& vConvHull) const