EgtGeomKernel :
- modifiche per lettura/scrittura Zmap con tridexel.
This commit is contained in:
@@ -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)
|
||||
|
||||
+2
-1
@@ -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*/) ;
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
+69
-49
@@ -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 ;
|
||||
}
|
||||
|
||||
@@ -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<std::vector<double>> 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<std::vector<double>> 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 ;
|
||||
|
||||
Reference in New Issue
Block a user