From 5d09d963e77fafca44c896c4a753cd661fdb30cc Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 19 Dec 2016 18:26:25 +0000 Subject: [PATCH] EgtGeomKernel : - modifiche per lettura/scrittura Zmap con tridexel. --- NgeReader.cpp | 11 ++++ NgeReader.h | 3 +- VolTriZmapVolume.cpp | 5 +- VolZmap.cpp | 118 +++++++++++++++++++++++++------------------ VolZmap.h | 32 ++++++------ 5 files changed, 100 insertions(+), 69 deletions(-) diff --git a/NgeReader.cpp b/NgeReader.cpp index 63e2419..7b58801 100644 --- a/NgeReader.cpp +++ b/NgeReader.cpp @@ -187,6 +187,17 @@ NgeReader::ReadInt( int& nVal, const char* szSep, bool bEndL) } } +//---------------------------------------------------------------------------- +bool +NgeReader::ReadInt( unsigned int& nVal, const char* szSep, bool bEndL) +{ + int nTemp ; + if ( ! ReadInt( nTemp, szSep, bEndL)) + return false ; + nVal = unsigned int( nTemp) ; + return true ; +} + //---------------------------------------------------------------------------- bool NgeReader::ReadDouble( double& dVal, const char* szSep, bool bEndL) diff --git a/NgeReader.h b/NgeReader.h index 9d523e5..7f39b98 100644 --- a/NgeReader.h +++ b/NgeReader.h @@ -34,11 +34,12 @@ class NgeReader bool ReadUchar( unsigned char& ucVal, const char* szSep, bool bEndL = false) ; bool ReadBool( bool& bVal, const char* szSep, bool bEndL = false) ; bool ReadInt( int& nVal, const char* szSep, bool bEndL = false) ; + bool ReadInt( unsigned int& nVal, const char* szSep, bool bEndL = false) ; bool ReadDouble( double& dVal, const char* szSep, bool bEndL = false) ; bool ReadVector( Vector3d& vtV, const char* szSep, bool bEndL = false) ; bool ReadPoint( Point3d& ptP, const char* szSep, bool bEndL = false) ; bool ReadPointW( Point3d& ptP, double& dW, const char* szSep, bool bEndL = false) ; - bool ReadFrame( Frame3d& frF, const char* szSep, bool bEndL) ; + bool ReadFrame( Frame3d& frF, const char* szSep, bool bEndL = false) ; bool ReadCol( Color& cCol, const char* szSep, bool bEndL = false) ; bool ReadString( std::string& sVal, const char* szSep, bool bEndL = false) ; bool ReadKey( int& nKey /* bEndL = true*/) ; diff --git a/VolTriZmapVolume.cpp b/VolTriZmapVolume.cpp index 24bd458..274162f 100644 --- a/VolTriZmapVolume.cpp +++ b/VolTriZmapVolume.cpp @@ -3345,7 +3345,8 @@ VolZmap::CompConus_Drilling( unsigned int nGrid, const Point3d & ptS, const Poin //---------------------------------------------------------------------------- bool -VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir, double dHei, double dRad) +VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, + const Vector3d& vtToolDir, double dHei, double dRad) { double dMin, dMax ; unsigned int nStartI, nStartJ, nEndI, nEndJ ; @@ -3353,7 +3354,6 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d // Verifica sull'interferenza utensile Zmap bool Control = BBoxComponent( nGrid, ptS, ptE, vtToolDir, vtToolDir, nStartI, nStartJ, nEndI, nEndJ, dRad, dRad, dHei) ; - if ( ! Control) return true ; @@ -3541,7 +3541,6 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d & ptS, const Point3d SubtractIntervals( nGrid, i, j, dMin, dMax) ; } - // Parallelepipedo Point3d ptInt1 = ptC + ( ( ( vtRIPlus - vtC) * vtV3) / ( Z_AX * vtV3)) * Z_AX ; Point3d ptInt2 = ptC + ( ( ( vtRIMinus - vtC) * vtV3) / ( Z_AX * vtV3)) * Z_AX ; diff --git a/VolZmap.cpp b/VolZmap.cpp index 71cf1ed..e8bec1b 100644 --- a/VolZmap.cpp +++ b/VolZmap.cpp @@ -31,7 +31,7 @@ VolZmap::VolZmap(void) : m_nStatus( TO_VERIFY), m_dStep( EPS_SMALL), m_nTempProp( 0), m_dLinTol( LIN_TOL_STD), m_dAngTolDeg( ANG_TOL_APPROX_DEG) { m_nMapNum = 0 ; - for ( int i = 0 ; i < 3 ; ++ i) { + for ( int i = 0 ; i < N_MAPS ; ++ i) { m_nVNx[i] = 0 ; m_nVNy[i] = 0 ; m_nVDim[i] = 0 ; @@ -45,6 +45,33 @@ VolZmap::~VolZmap( void) { } +//---------------------------------------------------------------------------- +bool +VolZmap::Clear( void) +{ + m_nStatus = TO_VERIFY ; + m_nMapNum = 0 ; + for ( int i = 0 ; i < N_MAPS ; ++ i) { + m_MapFrame[i].Reset() ; + m_nVNx[i] = 0 ; + m_nVNy[i] = 0 ; + m_nVDim[i] = 0 ; + m_dVMinZ[i] = 0 ; + m_dVMaxZ[i] = 0 ; + m_TriZValues[i].clear() ; + } + m_dStep = EPS_SMALL ; + m_dLinTol = LIN_TOL_STD ; + m_dAngTolDeg = ANG_TOL_APPROX_DEG; + + m_nTempProp = 0 ; + + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + + return true ; +} + //---------------------------------------------------------------------------- VolZmap* VolZmap::Clone( void) const @@ -134,38 +161,39 @@ VolZmap::GetNgeId( void) const bool VolZmap::Save( NgeWriter& ngeOut) const { - // parametri di scrittura: sistema di riferimento, numero di passi - // in direzione x e y, minimo incremento e per ogni casella, numero di valori e valori - for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) { - if ( ! ngeOut.WriteFrame( m_MapFrame[i], ",", true)) + // numero di mappe + if ( ! ngeOut.WriteInt( m_nMapNum, ";", true)) + return false ; + // per ogni mappa : sistema di riferimento, numero di passi in X e Y intrinseci + for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) { + if ( ! ngeOut.WriteFrame( m_MapFrame[i], ";", true)) return false ; if ( ! ngeOut.WriteInt( m_nVNx[i], ",", false)) return false ; - if ( ! ngeOut.WriteInt( m_nVNy[i], ",", true)) + if ( ! ngeOut.WriteInt( m_nVNy[i], ";", true)) return false ; } - - if ( ! ngeOut.WriteDouble( m_dStep, ";", false)) + // passo di campionamento (distanza tra spilloni) + if ( ! ngeOut.WriteDouble( m_dStep, ";", true)) return false ; - // ciclo sulle mappe - for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) { + for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) { // ciclo sui dexel for ( unsigned int j = 0 ; j < m_nVDim[i] ; ++ j) { // numero di estremi - int nDim = int( m_TriZValues[i][j].size()) ; + unsigned int nDim = unsigned int( m_TriZValues[i][j].size()) ; if ( ! ngeOut.WriteInt( nDim, ",", false)) - return false ; + return false ; // se dexel nullo if ( nDim == 0) { - // scrivo un valore dummy - if ( ! ngeOut.WriteDouble( 0, ";", true)) - return false ; + // scrivo un valore dummy + if ( ! ngeOut.WriteDouble( 0, ";", true)) + return false ; } // altrimenti else { - for ( unsigned int k = 0 ; k < m_TriZValues[i][j].size() ; ++ k) { - bool bEndL = ( k == m_TriZValues[i][j].size() - 1) ; + for ( unsigned int k = 0 ; k < nDim ; ++ k) { + bool bEndL = ( k == nDim - 1) ; if ( ! ngeOut.WriteDouble( m_TriZValues[i][j][k], ( bEndL ? ";" : ","), bEndL)) return false ; } @@ -179,58 +207,50 @@ VolZmap::Save( NgeWriter& ngeOut) const bool VolZmap::Load( NgeReader& ngeIn) { - m_nStatus = TO_VERIFY ; - // parametri di lettura: sistema di riferimento, numero di passi - // in direzione x e y, minimo incremento e per ogni casella, numero di valori e valori - - int nTemp ; - - for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) { - + Clear() ; + // numero di mappe + if ( ! ngeIn.ReadInt( m_nMapNum, ";", true)) + return false ; + // per ogni mappa : sistema di riferimento, numero di passi in X e Y intrinseci + for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) { if ( ! ngeIn.ReadFrame( m_MapFrame[i], ";", true)) return false ; - if ( ! ngeIn.ReadInt( nTemp, ",", false)) + if ( ! ngeIn.ReadInt( m_nVNx[i], ",", false)) return false ; - m_nVNx[i] = nTemp ; - if ( ! ngeIn.ReadInt( nTemp, ";", true)) + if ( ! ngeIn.ReadInt( m_nVNy[i], ";", true)) return false ; - m_nVNy[i] = nTemp ; - } - - if ( ! ngeIn.ReadDouble( m_dStep, ",", false)) - return false ; - - // dimensione dei vettori di dexel - for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) { - m_nVDim[i] = m_nVNx[i] * m_nVNy[i] ; - m_TriZValues[i].resize(m_nVDim[i]) ; } - + // passo di campionamento (distanza tra spilloni) + if ( ! ngeIn.ReadDouble( m_dStep, ";", true)) + return false ; // ciclo sulle mappe - for ( int i = 0 ; i < int ( m_nMapNum) ; ++ i) { + for ( unsigned int i = 0 ; i < m_nMapNum ; ++ i) { + // dimensiono i vettori + m_TriZValues[i].resize( m_nVDim[i]) ; // ciclo sui dexel for ( unsigned int j = 0 ; j < m_nVDim[i] ; ++ j) { // leggo il numero di estremi nel dexel - if ( ! ngeIn.ReadInt( nTemp, ",", false)) + unsigned int nDim ; + if ( ! ngeIn.ReadInt( nDim, ",", false)) return false ; // devono essere pari - if ( ( nTemp % 2) != 0) + if ( ( nDim % 2) != 0) return false ; // se dexel nullo - if ( nTemp == 0) { + if ( nDim == 0) { // leggo un valore dummy double dDummy ; - if ( ! ngeIn.ReadDouble( dDummy, ",", true)) + if ( ! ngeIn.ReadDouble( dDummy, ";", true)) return false ; } // altrimenti else { - // dimensiono l'array - m_TriZValues[i][j].resize(nTemp) ; - // leggo i valori - for ( unsigned int k = 0 ; k < m_TriZValues[i][j].size() ; ++ k) { - bool bEndL = ( k == m_TriZValues[i][j].size() - 1) ; + // dimensiono l'array + m_TriZValues[i][j].resize( nDim) ; + // leggo i valori + for ( unsigned int k = 0 ; k < nDim ; ++ k) { + bool bEndL = ( k == nDim - 1) ; if ( ! ngeIn.ReadDouble( m_TriZValues[i][j][k], ( bEndL ? ";" : ","), bEndL)) return false ; } diff --git a/VolZmap.h b/VolZmap.h index dbca216..69711a1 100644 --- a/VolZmap.h +++ b/VolZmap.h @@ -60,6 +60,7 @@ class VolZmap : public IVolZmap, public IGeoObjRW public : // IVolZmap bool CopyFrom( const IGeoObj* pGObjSrc) override ; + bool Clear( void) override ; bool Create( const Point3d& ptO, double dDimX, double dDimY, double dDimZ, double dPrec, bool bTriDex) override ; bool CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double dPrec, bool bTriDex) override ; bool CreateFromTriMesh( const ISurfTriMesh& Surf, double dPrec, bool bTriDex) override ; @@ -70,12 +71,10 @@ class VolZmap : public IVolZmap, public IGeoObjRW bool SetAdvTool( const std::string& pToolName, double dH, double dR, double dTipH, double dTipR, double dCornR) override ; bool SetGenTool( const std::string& pToolName, const ICurveComposite* pToolOutline) override ; + bool MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Point3d& ptPe, const Vector3d& vtDe) override ; bool GetDepth( const Point3d& ptP, const Vector3d& vtDir, double& dInLength, double& dOutLength) override ; bool AvoidBox( const Frame3d& frBox, const Vector3d& vtDiag) override ; - - bool MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Point3d& ptPe, const Vector3d& vtDe) override ; - public : // IGeoObjRW virtual int GetNgeId( void) const ; virtual bool Save( NgeWriter& ngeOut) const ; @@ -212,21 +211,22 @@ class VolZmap : public IVolZmap, public IGeoObjRW private : enum Status { ERR = 0, OK = 1, TO_VERIFY = 2} ; + static const int N_MAPS = 3 ; private : - ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto - Status m_nStatus ; // stato - int m_nTempProp ; // proprietà temporanea - double m_dStep ; // passo delle griglie - unsigned int m_nMapNum ; // numero di griglie ( 1 o 3) - Frame3d m_MapFrame[3] ; // riferimenti delle griglie - unsigned int m_nVNx[3] ; // dimensione di ciascuna griglia in X - unsigned int m_nVNy[3] ; // dimensione di ciascuna griglia in Y - unsigned int m_nVDim[3] ; // dimensione di ciascuna griglia ( X * Y) - double m_dVMinZ[3] ; // minimo in Zlocale di ciascuna griglia - double m_dVMaxZ[3] ; // massimo in Zlocale di ciascuna griglia - std::vector> m_TriZValues[3] ; // dexel delle 3 griglie - double m_dLinTol ; // dati per utensile + ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto + Status m_nStatus ; // stato + int m_nTempProp ; // proprietà temporanea + double m_dStep ; // passo delle griglie + unsigned int m_nMapNum ; // numero di griglie ( 1 o 3) + Frame3d m_MapFrame[N_MAPS] ; // riferimenti delle griglie + unsigned int m_nVNx[N_MAPS] ; // dimensione di ciascuna griglia in X + unsigned int m_nVNy[N_MAPS] ; // dimensione di ciascuna griglia in Y + unsigned int m_nVDim[N_MAPS] ; // dimensione di ciascuna griglia ( X * Y) + double m_dVMinZ[N_MAPS] ; // minimo in Zlocale di ciascuna griglia + double m_dVMaxZ[N_MAPS] ; // massimo in Zlocale di ciascuna griglia + std::vector> m_TriZValues[N_MAPS] ; // dexel delle 3 griglie + double m_dLinTol ; // dati per utensile double m_dAngTolDeg ; std::string m_sToolName ; unsigned int m_nToolType ;