From 8a416970a32fd019afcfa168a8c7d7e03110db80 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 17 Feb 2014 09:39:49 +0000 Subject: [PATCH] =?UTF-8?q?EgtGeomKernel=20:=20-=20correzione=20a=20PolyLi?= =?UTF-8?q?ne=20(Splice)=20-=20impostazione=20Reset=20grafica=20sulle=20di?= =?UTF-8?q?verse=20entit=C3=A0=20geometriche.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CurveArc.cpp | 66 +++++++++++------- CurveArc.h | 3 +- CurveBezier.cpp | 169 +++++++++++++++++++++------------------------ CurveComposite.cpp | 111 +++++++++++++++++------------ CurveLine.cpp | 55 ++++++++++----- CurveLine.h | 3 +- GeoFrame3d.cpp | 23 +++--- GeoFrame3d.h | 16 +++-- GeoPoint3d.cpp | 10 ++- GeoPoint3d.h | 20 +++--- GeoVector3d.cpp | 10 ++- GeoVector3d.h | 18 ++--- ObjGraphicsMgr.h | 4 +- PolyLine.cpp | 3 +- 14 files changed, 287 insertions(+), 224 deletions(-) diff --git a/CurveArc.cpp b/CurveArc.cpp index 0fdffe2..4c715d7 100644 --- a/CurveArc.cpp +++ b/CurveArc.cpp @@ -113,6 +113,9 @@ CurveArc::Set( const Point3d& ptCen, double dRad) m_dDeltaN = 0 ; m_nStatus = TO_VERIFY ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return Validate() ; } @@ -161,14 +164,14 @@ CurveArc::Save( ostream& osOut) const bool CurveArc::Load( Scanner& TheScanner) { - string sLine ; - STRVECTOR vsParams ; - - + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; // leggo la prossima linea + string sLine ; if ( ! TheScanner.GetLine( sLine)) return false ; // la divido in parametri + STRVECTOR vsParams ; Tokenize( sLine, ";", vsParams) ; // 6 parametri : centro, versore normale, raggio, versore iniziale, angolo al centro e delta Z if ( vsParams.size() != 6) @@ -313,11 +316,7 @@ CurveArc::GetEndPoint( Point3d& ptEnd) const bool CurveArc::GetPointD1D2( double dU, Side nS, Point3d& ptPos, Vector3d* pvtDer1, Vector3d* pvtDer2) const { - double dAng ; - Vector3d vtDir ; - - - // la curva deve essere validata + // la curva deve essere valida if ( m_nStatus != OK) return false ; @@ -328,8 +327,8 @@ CurveArc::GetPointD1D2( double dU, Side nS, Point3d& ptPos, Vector3d* pvtDer1, V dU = 1 ; // versore al punto nel piano della circonferenza (ruoto m_VtS di dU di m_dAngCenDeg attorno a m_VtN) - dAng = dU * m_dAngCenDeg * DEGTORAD ; - vtDir = cos( dAng) * m_VtS + sin( dAng) * ( m_VtN ^ m_VtS) ; + double dAng = dU * m_dAngCenDeg * DEGTORAD ; + Vector3d vtDir = cos( dAng) * m_VtS + sin( dAng) * ( m_VtN ^ m_VtS) ; // calcolo del punto ptPos = m_PtCen + m_dRad * vtDir ; @@ -384,10 +383,6 @@ CurveArc::ApproxWithLines( double dLinTol, double dAngTolDeg, PolyLine& PL) cons bool CurveArc::Invert( void) { - double dAng ; - Point3d ptTemp ; - - // la curva deve essere validata if ( m_nStatus != OK) return false ; @@ -397,13 +392,16 @@ CurveArc::Invert( void) m_PtCen += m_dDeltaN * m_VtN ; // il versore normale rimane inalterato // il versore iniziale diventa quello finale - dAng = m_dAngCenDeg * DEGTORAD ; + double dAng = m_dAngCenDeg * DEGTORAD ; m_VtS = cos( dAng) * m_VtS + sin( dAng) * ( m_VtN ^ m_VtS) ; // il raggio non cambia // l'angolo al centro inverte il segno m_dAngCenDeg = - m_dAngCenDeg ; // l'incremento sulla normale inverte il segno m_dDeltaN = - m_dDeltaN ; + + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; return true ; } @@ -448,15 +446,11 @@ CurveArc::TrimEndAtParam( double dUTrim) bool CurveArc::TrimStartAtLen( double dLenTrim) { - double dLen ; - double dAngRot ; - double dMoveN ; - - // lunghezze negative vengono considerate nulle dLenTrim = __max( dLenTrim, 0) ; // verifico che sia abbastanza lunga + double dLen ; if ( ! GetLength( dLen)) return false ; if ( ( dLen - dLenTrim) < EPS_SMALL) @@ -464,6 +458,8 @@ CurveArc::TrimStartAtLen( double dLenTrim) // eseguo il trim if ( dLenTrim > EPS_ZERO) { + double dAngRot ; + double dMoveN ; dAngRot = m_dAngCenDeg * dLenTrim / dLen ; m_VtS.Rotate( m_VtN, dAngRot * DEGTORAD) ; m_dAngCenDeg -= dAngRot ; @@ -474,7 +470,8 @@ CurveArc::TrimStartAtLen( double dLenTrim) } } - // con i controlli sopra fatti rimane validata + // con i controlli sopra fatti rimane validata, ma la grafica va ricalcolata + m_OGrMgr.Reset() ; return true ; } @@ -483,13 +480,11 @@ CurveArc::TrimStartAtLen( double dLenTrim) bool CurveArc::TrimEndAtLen( double dLenTrim) { - double dLen ; - - // lunghezze negative vengono considerate nulle dLenTrim = __max( dLenTrim, 0) ; // verifico che sia abbastanza lunga + double dLen ; if ( ! GetLength( dLen)) return false ; if ( dLenTrim < EPS_SMALL) @@ -502,7 +497,8 @@ CurveArc::TrimEndAtLen( double dLenTrim) m_dDeltaN *= dLenTrim / dLen ; } - // con i controlli sopra fatti rimane validata + // con i controlli sopra fatti rimane validata, ma la grafica va ricalcolata + m_OGrMgr.Reset() ; return true ; } @@ -518,6 +514,9 @@ CurveArc::Translate( const Vector3d& vtMove) // traslo il centro m_PtCen.Translate( vtMove) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -538,6 +537,9 @@ CurveArc::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, dou m_VtN.Rotate( vtAx, dCosAng, dSinAng) ; m_VtS.Rotate( vtAx, dCosAng, dSinAng) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -565,6 +567,9 @@ CurveArc::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dC m_VtS = - m_VtS ; m_nStatus = TO_VERIFY ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return Validate() ; } @@ -586,6 +591,9 @@ CurveArc::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) m_VtS.Mirror( vtNorm) ; m_dAngCenDeg *= -1 ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -606,6 +614,9 @@ CurveArc::ToGlob( const Frame3d& frRef) m_VtN.ToGlob( frRef) ; m_VtS.ToGlob( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -626,6 +637,9 @@ CurveArc::ToLoc( const Frame3d& frRef) m_VtN.ToLoc( frRef) ; m_VtS.ToLoc( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } diff --git a/CurveArc.h b/CurveArc.h index beb4920..0a4b397 100644 --- a/CurveArc.h +++ b/CurveArc.h @@ -48,7 +48,8 @@ class CurveArc : public ICurveArc { return m_OGrMgr.GetObjGraphics() ; } public : // ICurve - virtual bool IsSimple( void) const { return true ; } + virtual bool IsSimple( void) const + { return true ; } virtual bool IsClosed( void) const { return ::IsClosed( *this) ; } virtual bool GetStartPoint( Point3d& ptStart) const ; diff --git a/CurveBezier.cpp b/CurveBezier.cpp index 1865e39..124a2f9 100644 --- a/CurveBezier.cpp +++ b/CurveBezier.cpp @@ -104,6 +104,9 @@ CurveBezier::Init( int nDeg, bool bIsRational) } m_nStatus = TO_VERIFY ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return Validate() ; } @@ -125,6 +128,9 @@ CurveBezier::SetControlPoint( int nInd, const Point3d& ptCtrl) // annullo analisi presenza singolarità m_dParSing = - 2 ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -147,6 +153,9 @@ CurveBezier::SetControlPoint( int nInd, const Point3d& ptCtrl, double dW) // annullo analisi presenza singolarità m_dParSing = - 2 ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -279,15 +288,12 @@ CurveBezier::GetKey( void) const bool CurveBezier::Save( ostream& osOut) const { - int i ; - - // flag razionale osOut << m_bRat ; // dati della curva di bezier osOut << ";" << ToString( m_nDeg) ; // ciclo sui punti di controllo ( con pesi se razionale) - for ( i = 0 ; i <= m_nDeg ; ++ i) { + for ( int i = 0 ; i <= m_nDeg ; ++ i) { osOut << ";" << ToString( m_aPtCtrl[i]) ; if ( m_bRat) { osOut << "," << ToString( m_aWeCtrl[i]) ; @@ -303,27 +309,24 @@ CurveBezier::Save( ostream& osOut) const bool CurveBezier::Load( Scanner& TheScanner) { - string sLine ; - STRVECTOR vsParams ; - bool bIsRat ; - int nDeg ; - Point3d ptP ; - double dW ; - int i ; - - + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; // leggo la prossima linea + string sLine ; if ( ! TheScanner.GetLine( sLine)) return false ; // la divido in parametri + STRVECTOR vsParams ; Tokenize( sLine, ";", vsParams) ; // almeno 2 parametri : flag razionale e grado if ( vsParams.size() < 2) return false ; // recupero il flag + bool bIsRat ; if ( ! FromString( vsParams[0], bIsRat)) return false ; // recupero il grado + int nDeg ; if ( ! FromString( vsParams[1], nDeg)) return false ; // ri-controllo il numero dei parametri @@ -335,7 +338,8 @@ CurveBezier::Load( Scanner& TheScanner) // se integrale if ( ! bIsRat) { // recupero e setto punti di controllo - for ( i = 0 ; i <= nDeg ; ++ i) { + Point3d ptP ; + for ( int i = 0 ; i <= nDeg ; ++ i) { if ( ! FromString( vsParams[i+2], ptP) || ! SetControlPoint( i, ptP)) return false ; @@ -344,7 +348,9 @@ CurveBezier::Load( Scanner& TheScanner) // altrimenti razionale else { // recupero e setto punti di controllo - for ( i = 0 ; i <= nDeg ; ++ i) { + Point3d ptP ; + double dW ; + for ( int i = 0 ; i <= nDeg ; ++ i) { if ( ! FromString( vsParams[i+2], ptP, dW) || ! SetControlPoint( i, ptP, dW)) return false ; @@ -777,16 +783,13 @@ CurveBezier::ToPowerBase( PolynomialPoint3d& pol3Num, Polynomial& polDen) const bool CurveBezier::GetControlPolygonLength( double& dLen) const { - int i ; - - - // la curva deve essere validata + // la curva deve essere valida if ( m_nStatus != OK) return false ; // ciclo sui punti di controllo dLen = 0 ; - for ( i = 1 ; i <= m_nDeg ; ++ i) + for ( int i = 1 ; i <= m_nDeg ; ++ i) dLen += Dist( m_aPtCtrl[i], m_aPtCtrl[i-1]) ; return true ; @@ -861,7 +864,6 @@ bool CurveBezier::GetLengthAtParam( double dU, double& dLen) const { const int NUM_SEG = 16 ; - int i ; double dUIni ; double dUMid ; double dUFin ; @@ -890,7 +892,7 @@ CurveBezier::GetLengthAtParam( double dU, double& dLen) const dLen = 0 ; dUIni = 0 ; GetPointD1D2( 0, ICurve::FROM_MINUS, ptIni) ; - for ( i = 1 ; i <= NUM_SEG ; ++ i) { + for ( int i = 1 ; i <= NUM_SEG ; ++ i) { // ricavo il punto dUFin = i / (double) NUM_SEG * dU ; GetPointD1D2( dUFin, ICurve::FROM_MINUS, ptFin) ; @@ -918,19 +920,16 @@ CurveBezier::GetSegmentParam( double dLen, double& dCurrLen, double& dSegLen, double& dUIni, double& dUFin) const { const int NUM_SEG = 16 ; - int i ; - double dUStart ; - double dUEnd ; - double dUMid ; + double dUMid ; Point3d ptIni ; Point3d ptMid ; Point3d ptFin ; - dUStart = dUIni ; - dUEnd = dUFin ; + double dUStart = dUIni ; + double dUEnd = dUFin ; GetPointD1D2( dUIni, ICurve::FROM_MINUS, ptIni) ; - for ( i = 1 ; i <= NUM_SEG ; ++ i) { + for ( int i = 1 ; i <= NUM_SEG ; ++ i) { // ricavo il punto dUFin = dUStart + i / (double) NUM_SEG * ( dUEnd - dUStart) ; GetPointD1D2( dUFin, ICurve::FROM_MINUS, ptFin) ; @@ -962,12 +961,6 @@ bool CurveBezier::GetParamAtLength( double dLen, double& dU) const { const double MAX_SEG_LEN = 0.2 ; - bool bOk ; - double dCurrLen ; - double dSegLen ; - double dUIni ; - double dUFin ; - // la curva deve essere validata if ( m_nStatus != OK) @@ -980,9 +973,11 @@ CurveBezier::GetParamAtLength( double dLen, double& dU) const } // approfondisco nell'intervallo di interesse - dCurrLen = 0 ; - dUIni = 0 ; - dUFin = 1 ; + bool bOk ; + double dSegLen ; + double dCurrLen = 0 ; + double dUIni = 0 ; + double dUFin = 1 ; while ( ( bOk = GetSegmentParam( dLen, dCurrLen, dSegLen, dUIni, dUFin)) && dSegLen > MAX_SEG_LEN) ; // aggiustamento finale parametro @@ -1110,22 +1105,20 @@ CurveBezier::ApproxWithLines( double dLinTol, double dAngTolDeg, PolyLine& PL) c bool CurveBezier::Invert( void) { - int i ; - int nMid ; - Point3d ptTemp ; - - - // la curva deve essere validata + // la curva deve essere valida if ( m_nStatus != OK) return false ; // inverto i punti di controllo - nMid = ( m_nDeg + 1) / 2 ; - for ( i = 0 ; i < nMid ; ++ i) { - ptTemp = m_aPtCtrl[i] ; + int nMid = ( m_nDeg + 1) / 2 ; + for ( int i = 0 ; i < nMid ; ++ i) { + Point3d ptTemp = m_aPtCtrl[i] ; m_aPtCtrl[i] = m_aPtCtrl[m_nDeg-i] ; m_aPtCtrl[m_nDeg-i] = ptTemp ; } + + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; return true ; } @@ -1134,11 +1127,7 @@ CurveBezier::Invert( void) bool CurveBezier::TrimStartAtParam( double dUTrim) { - int i ; - int k ; - - - // la curva deve essere validata + // la curva deve essere valida if ( m_nStatus != OK) return false ; @@ -1149,8 +1138,8 @@ CurveBezier::TrimStartAtParam( double dUTrim) if ( dUTrim >= 1) return false ; // eseguo il trim (algoritmo di de Casteljau) - for ( k = 1 ; k <= m_nDeg ; k ++) { - for ( i = 0 ; i <= m_nDeg - k ; i ++) { + for ( int k = 1 ; k <= m_nDeg ; k ++) { + for ( int i = 0 ; i <= m_nDeg - k ; i ++) { if ( ! m_bRat) { m_aPtCtrl[i] = ( 1 - dUTrim) * m_aPtCtrl[i] + dUTrim * m_aPtCtrl[i+1] ; } @@ -1162,6 +1151,9 @@ CurveBezier::TrimStartAtParam( double dUTrim) } } + // con i controlli sopra fatti rimane validata, ma la grafica va ricalcolata + m_OGrMgr.Reset() ; + return true ; } @@ -1169,11 +1161,7 @@ CurveBezier::TrimStartAtParam( double dUTrim) bool CurveBezier::TrimEndAtParam( double dUTrim) { - int i ; - int k ; - - - // la curva deve essere validata + // la curva deve essere valida if ( m_nStatus != OK) return false ; @@ -1184,8 +1172,8 @@ CurveBezier::TrimEndAtParam( double dUTrim) if ( dUTrim >= 1) return true ; // eseguo il trim (algoritmo di de Casteljau) - for ( k = 1 ; k <= m_nDeg ; k ++) { - for ( i = m_nDeg ; i >= k ; i --) { + for ( int k = 1 ; k <= m_nDeg ; k ++) { + for ( int i = m_nDeg ; i >= k ; i --) { if ( ! m_bRat) { m_aPtCtrl[i] = ( 1 - dUTrim) * m_aPtCtrl[i-1] + dUTrim * m_aPtCtrl[ i] ; } @@ -1197,6 +1185,9 @@ CurveBezier::TrimEndAtParam( double dUTrim) } } + // con i controlli sopra fatti rimane validata, ma la grafica va ricalcolata + m_OGrMgr.Reset() ; + return true ; } @@ -1204,13 +1195,11 @@ CurveBezier::TrimEndAtParam( double dUTrim) bool CurveBezier::TrimStartAtLen( double dLenTrim) { - double dUTrim ; - - // lunghezze negative vengono considerate nulle dLenTrim = __max( dLenTrim, 0) ; // converto le lunghezze in valori parametrici + double dUTrim ; if ( ! GetParamAtLength( dLenTrim, dUTrim)) return false ; @@ -1222,13 +1211,11 @@ CurveBezier::TrimStartAtLen( double dLenTrim) bool CurveBezier::TrimEndAtLen( double dLenTrim) { - double dUTrim ; - - // lunghezze negative vengono considerate nulle dLenTrim = __max( dLenTrim, 0) ; // converto le lunghezze in valori parametrici + double dUTrim ; if ( ! GetParamAtLength( dLenTrim, dUTrim)) return false ; @@ -1240,17 +1227,17 @@ CurveBezier::TrimEndAtLen( double dLenTrim) bool CurveBezier::Translate( const Vector3d& vtMove) { - int i ; - - // la curva deve essere validata if ( m_nStatus != OK) return false ; // traslo i punti di controllo - for ( i = 0 ; i <= m_nDeg ; ++ i) + for ( int i = 0 ; i <= m_nDeg ; ++ i) m_aPtCtrl[i].Translate( vtMove) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -1258,9 +1245,6 @@ CurveBezier::Translate( const Vector3d& vtMove) bool CurveBezier::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) { - int i ; - - // la curva deve essere validata if ( m_nStatus != OK) return false ; @@ -1270,9 +1254,12 @@ CurveBezier::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, return false ; // ruoto i punti di controllo - for ( i = 0 ; i <= m_nDeg ; ++ i) + for ( int i = 0 ; i <= m_nDeg ; ++ i) m_aPtCtrl[i].Rotate( ptAx, vtAx, dCosAng, dSinAng) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -1280,9 +1267,6 @@ CurveBezier::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, bool CurveBezier::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) { - int i ; - - // la curva deve essere validata if ( m_nStatus != OK) return false ; @@ -1292,9 +1276,12 @@ CurveBezier::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double return false ; // scalo i punti di controllo - for ( i = 0 ; i <= m_nDeg ; ++ i) + for ( int i = 0 ; i <= m_nDeg ; ++ i) m_aPtCtrl[i].Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -1302,9 +1289,6 @@ CurveBezier::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double bool CurveBezier::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) { - int i ; - - // la curva deve essere validata if ( m_nStatus != OK) return false ; @@ -1314,9 +1298,12 @@ CurveBezier::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) return false ; // specchio i punti di controllo - for ( i = 0 ; i <= m_nDeg ; ++ i) + for ( int i = 0 ; i <= m_nDeg ; ++ i) m_aPtCtrl[i].Mirror( ptOn, vtNorm) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -1324,9 +1311,6 @@ CurveBezier::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) bool CurveBezier::ToGlob( const Frame3d& frRef) { - int i ; - - // la curva deve essere validata if ( m_nStatus != OK) return false ; @@ -1336,9 +1320,12 @@ CurveBezier::ToGlob( const Frame3d& frRef) return false ; // trasformo i punti di controllo - for ( i = 0 ; i <= m_nDeg ; ++ i) + for ( int i = 0 ; i <= m_nDeg ; ++ i) m_aPtCtrl[i].ToGlob( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -1346,9 +1333,6 @@ CurveBezier::ToGlob( const Frame3d& frRef) bool CurveBezier::ToLoc( const Frame3d& frRef) { - int i ; - - // la curva deve essere validata if ( m_nStatus != OK) return false ; @@ -1358,8 +1342,11 @@ CurveBezier::ToLoc( const Frame3d& frRef) return false ; // trasformo i punti di controllo - for ( i = 0 ; i <= m_nDeg ; ++ i) + for ( int i = 0 ; i <= m_nDeg ; ++ i) m_aPtCtrl[i].ToLoc( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } diff --git a/CurveComposite.cpp b/CurveComposite.cpp index 182c555..bff8a5c 100644 --- a/CurveComposite.cpp +++ b/CurveComposite.cpp @@ -56,6 +56,9 @@ CurveComposite::Clear( void) m_nCounter = 0 ; m_bClosed = false ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -100,6 +103,9 @@ CurveComposite::AddCurve( const ICurve& cCrv) } } + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -184,6 +190,9 @@ CurveComposite::FromSplit( const ICurve& cCrv, int nParts) return false ; } + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -212,21 +221,16 @@ CurveComposite::GetKey( void) const bool CurveComposite::Save( ostream& osOut) const { - int i ; - string sCrvName ; - const ICurve* pCrvSmpl ; - - // numero di curve osOut << ToString( m_nCounter) << endl ; // ciclo sulle curve componenti - i = 0 ; - pCrvSmpl = GetFirstCurve() ; + int i = 0 ; + const ICurve* pCrvSmpl = GetFirstCurve() ; while ( pCrvSmpl != nullptr) { // emetto tipo della curva semplice osOut << pCrvSmpl->GetKey() << endl ; // assegno ed emetto nome della curva semplice - sCrvName = "#" + ToString( ++i) ; + string sCrvName = "#" + ToString( ++i) ; osOut << sCrvName << endl ; // salvataggio della curva semplice if ( ! pCrvSmpl->Save( osOut)) @@ -242,43 +246,38 @@ CurveComposite::Save( ostream& osOut) const bool CurveComposite::Load( Scanner& TheScanner) { - int nType ; - string sLine ; - STRVECTOR vsParams ; - bool bOk ; - int i ; - int nCounter ; - IGeoObj* pGeoO ; - ICurve* pCrv ; - - + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; // leggo la prossima linea + string sLine ; if ( ! TheScanner.GetLine( sLine)) return false ; // la divido in parametri + STRVECTOR vsParams ; Tokenize( sLine, ",", vsParams) ; // 1 parametro : numero di curve componenti if ( vsParams.size() != 1) return false ; // recupero il numero di curve componenti + int nCounter ; if ( ! FromString( vsParams[0], nCounter)) return false ; // leggo le curve componenti - for ( i = 0 ; i < nCounter ; ++ i) { + for ( int i = 0 ; i < nCounter ; ++ i) { // recupero la prossima linea (con il tipo di oggetto) if ( ! TheScanner.GetLine( sLine)) return false ; // creo l'oggetto - nType = GEOOBJ_KEYTOTYPE( sLine) ; - pGeoO = GEOOBJ_CREATE( nType) ; + int nType = GEOOBJ_KEYTOTYPE( sLine) ; + IGeoObj* pGeoO = GEOOBJ_CREATE( nType) ; if ( pGeoO == nullptr) return false ; // recupero la linea con il nome - bOk = TheScanner.GetLine( sLine) ; + bool bOk = TheScanner.GetLine( sLine) ; // ne leggo i dati bOk = bOk && pGeoO->Load( TheScanner) ; // verifico sia una curva - pCrv = ::GetCurve( pGeoO) ; + ICurve* pCrv = ::GetCurve( pGeoO) ; bOk = bOk && ( pCrv != nullptr && pCrv->IsSimple()) ; // aggiungo questa curva (sicuramente semplice) bOk = bOk && AddSimpleCurve( pCrv) ; @@ -341,8 +340,6 @@ CurveComposite::GetBBox( const Frame3d& frRef, BBox3d& b3Ref) const pCrvSmpl = GetNextCurve() ; } return true ; - - return true ; } //---------------------------------------------------------------------------- @@ -518,10 +515,8 @@ CurveComposite::ApproxWithLines( double dLinTol, double dAngTolDeg, PolyLine& PL bool CurveComposite::Invert( void) { - PCRVSMPL_LIST::iterator Iter ; - - // inverto le singole curve + PCRVSMPL_LIST::iterator Iter ; for ( Iter = m_CrvSmplS.begin() ; Iter != m_CrvSmplS.end() ; ++Iter) (*Iter)->Invert() ; @@ -530,6 +525,9 @@ CurveComposite::Invert( void) // scambio punti iniziale e finale swap( m_PtStart, m_PtEnd) ; + + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; return true ; } @@ -582,6 +580,9 @@ CurveComposite::TrimStartAtParam( double dUTrim) } } + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -643,6 +644,9 @@ CurveComposite::TrimEndAtParam( double dUTrim) } } + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -694,6 +698,9 @@ CurveComposite::TrimStartAtLen( double dLenTrim) } } + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -759,6 +766,9 @@ CurveComposite::TrimEndAtLen( double dLenTrim) } } + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -766,10 +776,8 @@ CurveComposite::TrimEndAtLen( double dLenTrim) bool CurveComposite::Translate( const Vector3d& vtMove) { - PCRVSMPL_LIST::iterator Iter ; - - // traslo le singole curve + PCRVSMPL_LIST::iterator Iter ; for ( Iter = m_CrvSmplS.begin() ; Iter != m_CrvSmplS.end() ; ++Iter) (*Iter)->Translate( vtMove) ; @@ -777,6 +785,9 @@ CurveComposite::Translate( const Vector3d& vtMove) m_PtStart.Translate( vtMove) ; m_PtEnd.Translate( vtMove) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -784,14 +795,12 @@ CurveComposite::Translate( const Vector3d& vtMove) bool CurveComposite::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) { - PCRVSMPL_LIST::iterator Iter ; - - // verifico validità dell'asse di rotazione if ( vtAx.IsSmall()) return false ; // ruoto le singole curve + PCRVSMPL_LIST::iterator Iter ; for ( Iter = m_CrvSmplS.begin() ; Iter != m_CrvSmplS.end() ; ++Iter) (*Iter)->Rotate( ptAx, vtAx, dCosAng, dSinAng) ; @@ -799,6 +808,9 @@ CurveComposite::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAn m_PtStart.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; m_PtEnd.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -806,9 +818,6 @@ CurveComposite::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAn bool CurveComposite::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) { - PCRVSMPL_LIST::iterator Iter ; - - // verifico non sia nulla if ( fabs( dCoeffX) < EPS_ZERO && fabs( dCoeffY) < EPS_ZERO && fabs( dCoeffZ) < EPS_ZERO) return false ; @@ -820,6 +829,7 @@ CurveComposite::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, dou } // scalo le singole curve + PCRVSMPL_LIST::iterator Iter ; for ( Iter = m_CrvSmplS.begin() ; Iter != m_CrvSmplS.end() ; ++Iter) { // eseguo la scalatura if ( ! (*Iter)->Scale( frRef, dCoeffX, dCoeffY, dCoeffZ)) @@ -830,6 +840,9 @@ CurveComposite::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, dou m_PtStart.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ; m_PtEnd.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return Validate() ; } @@ -837,14 +850,12 @@ CurveComposite::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, dou bool CurveComposite::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) { - PCRVSMPL_LIST::iterator Iter ; - - // verifico validità del piano di specchiatura if ( vtNorm.IsSmall()) return false ; // specchio le singole curve + PCRVSMPL_LIST::iterator Iter ; for ( Iter = m_CrvSmplS.begin() ; Iter != m_CrvSmplS.end() ; ++Iter) (*Iter)->Mirror( ptOn, vtNorm) ; @@ -852,6 +863,9 @@ CurveComposite::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) m_PtStart.Mirror( ptOn, vtNorm) ; m_PtEnd.Mirror( ptOn, vtNorm) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -859,14 +873,12 @@ CurveComposite::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) bool CurveComposite::ToGlob( const Frame3d& frRef) { - PCRVSMPL_LIST::iterator Iter ; - - // verifico validità del frame if ( frRef.GetType() == Frame3d::ERR) return false ; // trasformo le singole curve + PCRVSMPL_LIST::iterator Iter ; for ( Iter = m_CrvSmplS.begin() ; Iter != m_CrvSmplS.end() ; ++Iter) (*Iter)->ToGlob( frRef) ; @@ -874,6 +886,9 @@ CurveComposite::ToGlob( const Frame3d& frRef) m_PtStart.ToGlob( frRef) ; m_PtEnd.ToGlob( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -881,14 +896,12 @@ CurveComposite::ToGlob( const Frame3d& frRef) bool CurveComposite::ToLoc( const Frame3d& frRef) { - PCRVSMPL_LIST::iterator Iter ; - - // verifico validità del frame if ( frRef.GetType() == Frame3d::ERR) return false ; // trasformo le singole curve + PCRVSMPL_LIST::iterator Iter ; for ( Iter = m_CrvSmplS.begin() ; Iter != m_CrvSmplS.end() ; ++Iter) (*Iter)->ToLoc( frRef) ; @@ -896,6 +909,9 @@ CurveComposite::ToLoc( const Frame3d& frRef) m_PtStart.ToLoc( frRef) ; m_PtEnd.ToLoc( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -993,5 +1009,8 @@ CurveComposite::ArcsToBezierCurves( void) } } + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } diff --git a/CurveLine.cpp b/CurveLine.cpp index a1d5df8..75b48c3 100644 --- a/CurveLine.cpp +++ b/CurveLine.cpp @@ -38,10 +38,14 @@ CurveLine::~CurveLine( void) bool CurveLine::Set( const Point3d& ptStart, const Point3d& ptEnd) { + // assegno i dati m_PtStart = ptStart ; m_PtEnd = ptEnd ; m_nStatus = TO_VERIFY ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return Validate() ; } @@ -81,14 +85,14 @@ CurveLine::Save( ostream& osOut) const bool CurveLine::Load( Scanner& TheScanner) { - string sLine ; - STRVECTOR vsParams ; - - + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; // leggo la prossima linea + string sLine ; if ( ! TheScanner.GetLine( sLine)) return false ; // la divido in parametri + STRVECTOR vsParams ; Tokenize( sLine, ";", vsParams) ; // 2 parametri : punto iniziale e punto finale if ( vsParams.size() != 2) @@ -241,6 +245,9 @@ CurveLine::Invert( void) // inverto i punti estremi swap( m_PtStart, m_PtEnd) ; + + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; return true ; } @@ -249,13 +256,11 @@ CurveLine::Invert( void) bool CurveLine::TrimStartAtParam( double dUTrim) { - double dLen ; - - // riporto i parametri nel loro range dUTrim = ( ( dUTrim < 0) ? 0 : (( dUTrim > 1) ? 1 : dUTrim)) ; // recupero lunghezza + double dLen ; if ( ! GetLength( dLen)) return false ; @@ -267,13 +272,11 @@ CurveLine::TrimStartAtParam( double dUTrim) bool CurveLine::TrimEndAtParam( double dUTrim) { - double dLen ; - - // riporto i parametri nel loro range dUTrim = ( ( dUTrim < 0) ? 0 : (( dUTrim > 1) ? 1 : dUTrim)) ; // recupero lunghezza + double dLen ; if ( ! GetLength( dLen)) return false ; @@ -285,13 +288,11 @@ CurveLine::TrimEndAtParam( double dUTrim) bool CurveLine::TrimStartAtLen( double dLenTrim) { - double dLen ; - - // lunghezze negative vengono considerate nulle dLenTrim = __max( dLenTrim, 0) ; // verifico che sia abbastanza lunga + double dLen ; if ( ! GetLength( dLen)) return false ; if ( ( dLen - dLenTrim) < EPS_SMALL) @@ -301,7 +302,8 @@ CurveLine::TrimStartAtLen( double dLenTrim) if ( dLenTrim > EPS_ZERO) m_PtStart = Media( m_PtStart, m_PtEnd, ( dLenTrim / dLen)) ; - // con i controlli sopra fatti rimane validata + // con i controlli sopra fatti rimane validata, ma la grafica va ricalcolata + m_OGrMgr.Reset() ; return true ; } @@ -310,13 +312,11 @@ CurveLine::TrimStartAtLen( double dLenTrim) bool CurveLine::TrimEndAtLen( double dLenTrim) { - double dLen ; - - // lunghezze negative vengono considerate nulle dLenTrim = __max( dLenTrim, 0) ; // verifico che sia abbastanza lunga + double dLen ; if ( ! GetLength( dLen)) return false ; if ( dLenTrim < EPS_SMALL) @@ -326,7 +326,8 @@ CurveLine::TrimEndAtLen( double dLenTrim) if ( ( dLen - dLenTrim) > EPS_ZERO) m_PtEnd = Media( m_PtStart, m_PtEnd, ( dLenTrim / dLen)) ; - // con i controlli sopra fatti rimane validata + // con i controlli sopra fatti rimane validata, ma la grafica va ricalcolata + m_OGrMgr.Reset() ; return true ; } @@ -339,6 +340,9 @@ CurveLine::Translate( const Vector3d& vtMove) m_PtStart.Translate( vtMove) ; m_PtEnd.Translate( vtMove) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -354,6 +358,9 @@ CurveLine::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, do m_PtStart.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; m_PtEnd.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -370,6 +377,9 @@ CurveLine::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double d m_PtEnd.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ; m_nStatus = TO_VERIFY ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return Validate() ; } @@ -385,6 +395,9 @@ CurveLine::Mirror( const Point3d& ptOn, const Vector3d& vtNorm) m_PtStart.Mirror( ptOn, vtNorm) ; m_PtEnd.Mirror( ptOn, vtNorm) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -400,6 +413,9 @@ CurveLine::ToGlob( const Frame3d& frRef) m_PtStart.ToGlob( frRef) ; m_PtEnd.ToGlob( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -415,5 +431,8 @@ CurveLine::ToLoc( const Frame3d& frRef) m_PtStart.ToLoc( frRef) ; m_PtEnd.ToLoc( frRef) ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } diff --git a/CurveLine.h b/CurveLine.h index a34f7a8..6651d25 100644 --- a/CurveLine.h +++ b/CurveLine.h @@ -48,7 +48,8 @@ class CurveLine : public ICurveLine { return m_OGrMgr.GetObjGraphics() ; } public : // ICurve - virtual bool IsSimple( void) const { return true ; } + virtual bool IsSimple( void) const + { return true ; } virtual bool IsClosed( void) const { return ::IsClosed( *this) ; } virtual bool GetStartPoint( Point3d& ptStart) const ; diff --git a/GeoFrame3d.cpp b/GeoFrame3d.cpp index 4513461..2ecf7f9 100644 --- a/GeoFrame3d.cpp +++ b/GeoFrame3d.cpp @@ -39,6 +39,9 @@ bool GeoFrame3d::Set( const Point3d& ptOrig, const Vector3d& vtDirX, const Vector3d& vtDirY, const Vector3d& vtDirZ) { + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + // assegno i dati return m_frF.Set( ptOrig, vtDirX, vtDirY, vtDirZ) ; } @@ -46,8 +49,12 @@ GeoFrame3d::Set( const Point3d& ptOrig, const Vector3d& vtDirX, bool GeoFrame3d::Set( const Frame3d& frF) { + // assegno i dati m_frF = frF ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -93,32 +100,32 @@ GeoFrame3d::Save( ostream& osOut) const bool GeoFrame3d::Load( Scanner& TheScanner) { - Point3d ptOrig ; - Vector3d vtDirX ; - Vector3d vtDirY ; - Vector3d vtDirZ ; - string sLine ; - STRVECTOR vsParams ; - - + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; // leggo la prossima linea + string sLine ; if ( ! TheScanner.GetLine( sLine)) return false ; // la divido in parametri + STRVECTOR vsParams ; Tokenize( sLine, ";", vsParams) ; // 4 parametri : origine, versore X, versore Y, versore Z if ( vsParams.size() != 4) return false ; // recupero l'origine + Point3d ptOrig ; if ( ! FromString( vsParams[0], ptOrig)) return false ; // recupero il versore X + Vector3d vtDirX ; if ( ! FromString( vsParams[1], vtDirX)) return false ; // recupero il versore Y + Vector3d vtDirY ; if ( ! FromString( vsParams[2], vtDirY)) return false ; // recupero il versore Z + Vector3d vtDirZ ; if ( ! FromString( vsParams[3], vtDirZ)) return false ; // imposto il riferimento diff --git a/GeoFrame3d.h b/GeoFrame3d.h index 51a7da3..7d94569 100644 --- a/GeoFrame3d.h +++ b/GeoFrame3d.h @@ -23,9 +23,11 @@ class GeoFrame3d : public IGeoFrame3d public : // IGeoObj virtual ~GeoFrame3d( void) ; virtual GeoFrame3d* Clone( void) const ; - virtual GeoObjType GetType( void) const { return GEO_FRAME3D ; } + virtual GeoObjType GetType( void) const + { return GEO_FRAME3D ; } virtual const std::string& GetKey( void) const ; - virtual bool IsValid( void) const { return ( m_frF.GetType() != Frame3d::ERR) ; } + virtual bool IsValid( void) const + { return ( m_frF.GetType() != Frame3d::ERR) ; } virtual bool Save( std::ostream& osOut) const ; virtual bool Load( Scanner& TheScanner) ; virtual bool GetLocalBBox( BBox3d& b3Loc) const ; @@ -33,9 +35,9 @@ class GeoFrame3d : public IGeoFrame3d virtual bool GetFrame( Frame3d& frF) const { frF = m_frF ; return true ;} virtual bool Translate( const Vector3d& vtMove) - { m_frF.Translate( vtMove) ; return true ; } + { m_OGrMgr.Reset() ; m_frF.Translate( vtMove) ; return true ; } virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) - { return m_frF.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; } + { m_OGrMgr.Reset() ; return m_frF.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; } virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad) { return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ; } virtual bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) @@ -43,9 +45,9 @@ class GeoFrame3d : public IGeoFrame3d virtual bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) { return false ; } virtual bool ToGlob( const Frame3d& frRef) - { return m_frF.ToGlob( frRef) ;} + { m_OGrMgr.Reset() ; return m_frF.ToGlob( frRef) ;} virtual bool ToLoc( const Frame3d& frRef) - { return m_frF.ToLoc( frRef) ;} + { m_OGrMgr.Reset() ; return m_frF.ToLoc( frRef) ;} virtual void SetObjGraphics( IObjGraphics* pOGr) { m_OGrMgr.SetObjGraphics( pOGr) ; } virtual IObjGraphics* GetObjGraphics( void) @@ -64,7 +66,7 @@ class GeoFrame3d : public IGeoFrame3d GeoFrame3d( void) ; inline const GeoFrame3d& operator =( const GeoFrame3d& gvSrc) { if ( &gvSrc != this) - m_frF = gvSrc.m_frF ; + Set( gvSrc.m_frF) ; return *this ; } public : diff --git a/GeoPoint3d.cpp b/GeoPoint3d.cpp index da01ba4..2906420 100644 --- a/GeoPoint3d.cpp +++ b/GeoPoint3d.cpp @@ -38,8 +38,12 @@ GeoPoint3d::~GeoPoint3d( void) bool GeoPoint3d::Set( const Point3d& ptP) { + // assegno i dati m_ptP = ptP ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -79,10 +83,10 @@ GeoPoint3d::Save( ostream& osOut) const bool GeoPoint3d::Load( Scanner& TheScanner) { - string sLine ; - - + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; // leggo la prossima linea + string sLine ; if ( ! TheScanner.GetLine( sLine)) return false ; // 1 solo parametro : il punto diff --git a/GeoPoint3d.h b/GeoPoint3d.h index f5caed6..bfc6893 100644 --- a/GeoPoint3d.h +++ b/GeoPoint3d.h @@ -23,9 +23,11 @@ class GeoPoint3d : public IGeoPoint3d public : virtual ~GeoPoint3d( void) ; virtual GeoPoint3d* Clone( void) const ; - virtual GeoObjType GetType( void) const { return GEO_PNT3D ; } + virtual GeoObjType GetType( void) const + { return GEO_PNT3D ; } virtual const std::string& GetKey( void) const ; - virtual bool IsValid( void) const { return true ; } + virtual bool IsValid( void) const + { return true ; } virtual bool Save( std::ostream& osOut) const ; virtual bool Load( Scanner& TheScanner) ; virtual bool GetLocalBBox( BBox3d& b3Loc) const ; @@ -33,19 +35,19 @@ class GeoPoint3d : public IGeoPoint3d virtual bool GetPoint( Point3d& ptP) const { ptP = m_ptP ; return true ;} virtual bool Translate( const Vector3d& vtMove) - { m_ptP.Translate( vtMove) ; return true ; } + { m_OGrMgr.Reset() ; m_ptP.Translate( vtMove) ; return true ; } virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) - { return m_ptP.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; } + { m_OGrMgr.Reset() ; return m_ptP.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; } virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad) { return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ; } virtual bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) - { return m_ptP.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;} + { m_OGrMgr.Reset() ; return m_ptP.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;} virtual bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) - { return m_ptP.Mirror( ptOn, vtNorm) ;} + { m_OGrMgr.Reset() ; return m_ptP.Mirror( ptOn, vtNorm) ;} virtual bool ToGlob( const Frame3d& frRef) - { return m_ptP.ToGlob( frRef) ;} + { m_OGrMgr.Reset() ; return m_ptP.ToGlob( frRef) ;} virtual bool ToLoc( const Frame3d& frRef) - { return m_ptP.ToLoc( frRef) ;} + { m_OGrMgr.Reset() ; return m_ptP.ToLoc( frRef) ;} virtual void SetObjGraphics( IObjGraphics* pOGr) { m_OGrMgr.SetObjGraphics( pOGr) ; } virtual IObjGraphics* GetObjGraphics( void) @@ -62,7 +64,7 @@ class GeoPoint3d : public IGeoPoint3d GeoPoint3d( void) ; const GeoPoint3d& operator =( const GeoPoint3d& gpSrc) { if ( &gpSrc != this) - m_ptP = gpSrc.m_ptP ; + Set( gpSrc.m_ptP) ; return *this ; } public : diff --git a/GeoVector3d.cpp b/GeoVector3d.cpp index 7c1efa5..5be8de0 100644 --- a/GeoVector3d.cpp +++ b/GeoVector3d.cpp @@ -38,8 +38,12 @@ GeoVector3d::~GeoVector3d( void) bool GeoVector3d::Set( const Vector3d& vtV) { + // assegno i dati m_vtV = vtV ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; } @@ -78,10 +82,10 @@ GeoVector3d::Save( ostream& osOut) const bool GeoVector3d::Load( Scanner& TheScanner) { - string sLine ; - - + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; // leggo la prossima linea + string sLine ; if ( ! TheScanner.GetLine( sLine)) return false ; // 1 solo parametro : il vettore diff --git a/GeoVector3d.h b/GeoVector3d.h index 1cbbf9a..223d2ed 100644 --- a/GeoVector3d.h +++ b/GeoVector3d.h @@ -23,9 +23,11 @@ class GeoVector3d : public IGeoVector3d public : virtual ~GeoVector3d( void) ; virtual GeoVector3d* Clone( void) const ; - virtual GeoObjType GetType( void) const { return GEO_VECT3D ; } + virtual GeoObjType GetType( void) const + { return GEO_VECT3D ; } virtual const std::string& GetKey( void) const ; - virtual bool IsValid( void) const { return true ; } + virtual bool IsValid( void) const + { return true ; } virtual bool Save( std::ostream& osOut) const ; virtual bool Load( Scanner& TheScanner) ; virtual bool GetLocalBBox( BBox3d& b3Loc) const ; @@ -35,17 +37,17 @@ class GeoVector3d : public IGeoVector3d virtual bool Translate( const Vector3d& vtMove) { return true ; } virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) - { return m_vtV.Rotate( vtAx, dCosAng, dSinAng) ; } + { m_OGrMgr.Reset() ; return m_vtV.Rotate( vtAx, dCosAng, dSinAng) ; } virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad) { return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ; } virtual bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) - { return m_vtV.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;} + { m_OGrMgr.Reset() ; return m_vtV.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;} virtual bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) - { return m_vtV.Mirror( vtNorm) ;} + { m_OGrMgr.Reset() ; return m_vtV.Mirror( vtNorm) ;} virtual bool ToGlob( const Frame3d& frRef) - { return m_vtV.ToGlob( frRef) ;} + { m_OGrMgr.Reset() ; return m_vtV.ToGlob( frRef) ;} virtual bool ToLoc( const Frame3d& frRef) - { return m_vtV.ToLoc( frRef) ;} + { m_OGrMgr.Reset() ; return m_vtV.ToLoc( frRef) ;} virtual void SetObjGraphics( IObjGraphics* pOGr) { m_OGrMgr.SetObjGraphics( pOGr) ; } virtual IObjGraphics* GetObjGraphics( void) @@ -62,7 +64,7 @@ class GeoVector3d : public IGeoVector3d GeoVector3d( void) ; inline const GeoVector3d& operator =( const GeoVector3d& gvSrc) { if ( &gvSrc != this) - m_vtV = gvSrc.m_vtV ; + Set( gvSrc.m_vtV) ; return *this ; } public : diff --git a/ObjGraphicsMgr.h b/ObjGraphicsMgr.h index 2bbecb1..1a1ca70 100644 --- a/ObjGraphicsMgr.h +++ b/ObjGraphicsMgr.h @@ -33,9 +33,9 @@ class ObjGraphicsMgr { return m_pOGr ; } const IObjGraphics* GetObjGraphics( void) const { return m_pOGr ; } - void Invalidate( void) + void Reset( void) { if ( m_pOGr != nullptr) - m_pOGr->Invalidate() ; } + m_pOGr->Reset() ; } private : IObjGraphics* m_pOGr ; diff --git a/PolyLine.cpp b/PolyLine.cpp index c434ade..bd28f29 100644 --- a/PolyLine.cpp +++ b/PolyLine.cpp @@ -75,7 +75,8 @@ bool PolyLine::Splice( PolyLine& PL) { m_lUPoints.splice( m_lUPoints.end(), PL.m_lUPoints) ; - + m_nCount += PL.GetPointNbr() ; + return true ; }