EgtGeomKernel 1.5h5 :
- sistemata approssimazione di curve di Bezier con archi - aggiunta a CurveBezier metodo per sapere se è collassata in un punto - in PolyArc e PolyLine sostituite Splice con Join e aggiunte Split - in TSC non si accetta più la creazione di una curva di Bezier collassata in un punto.
This commit is contained in:
+39
-1
@@ -207,8 +207,20 @@ PolyLine::LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
PolyLine::Splice( PolyLine& PL)
|
||||
PolyLine::Join( PolyLine& PL, double dOffsetPar)
|
||||
{
|
||||
// se l'altra polilinea non contiene alcunchè, esco con ok
|
||||
if ( PL.m_nCount == 0)
|
||||
return true ;
|
||||
// verifico che l'ultimo punto di questa polilinea coincida con il primo dell'altra
|
||||
if ( m_nCount > 0 && ! AreSamePointApprox( m_lUPoints.back().second, PL.m_lUPoints.front().second))
|
||||
return false ;
|
||||
// cancello l'ultimo di questa
|
||||
EraseLastUPoint() ;
|
||||
// aggiungo eventuale offset all'altra
|
||||
if ( fabs( dOffsetPar) > EPS_PARAM)
|
||||
PL.AddOffsetToU( dOffsetPar) ;
|
||||
// sposto i punti dall'altra polilinea a questa e aggiorno i contatori
|
||||
m_lUPoints.splice( m_lUPoints.end(), PL.m_lUPoints) ;
|
||||
m_nCount += PL.GetPointNbr() ;
|
||||
PL.m_nCount = 0 ;
|
||||
@@ -216,6 +228,32 @@ PolyLine::Splice( PolyLine& PL)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
PolyLine::Split( double dU, PolyLine& PL)
|
||||
{
|
||||
// pulisco la polilinea destinazione
|
||||
PL.Clear() ;
|
||||
// ricerca del punto in cui dividere
|
||||
UPNTLIST::const_iterator iter ;
|
||||
iter = m_lUPoints.begin() ;
|
||||
while ( iter != m_lUPoints.end() && iter->first < ( dU + EPS_PARAM))
|
||||
++ iter ;
|
||||
if ( iter == m_lUPoints.end())
|
||||
return false ;
|
||||
// sposto i punti nell'altra polilinea
|
||||
PL.m_lUPoints.splice( PL.m_lUPoints.end(), m_lUPoints, iter, m_lUPoints.end()) ;
|
||||
PL.m_nCount = int( PL.m_lUPoints.size()) ;
|
||||
m_nCount -= PL.m_nCount ;
|
||||
// prepongo l'ultimo punto rimasto
|
||||
PL.m_lUPoints.push_front( m_lUPoints.back()) ;
|
||||
++ PL.m_nCount ;
|
||||
// annullo l'iteratore corrente
|
||||
m_iter = m_lUPoints.end() ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
PolyLine::IsClosed( void) const
|
||||
|
||||
Reference in New Issue
Block a user