EgtGeomKernel 2.6c2 :

- modifiche a SurfTriMesh per flag visualizzazione spigoli vivi in shading
- modifiche a VolZmap per flag visualizzazione spigoli vivi in shading
- aggiunte funzioni PreSave, PostSave e PostLoad per consentire di convertire nuovi parametri delle entità in info prima del salvataggio e riprenderli alla lettura.
This commit is contained in:
Dario Sassi
2024-03-10 10:20:44 +01:00
parent 3630b85632
commit 7d3284fef3
20 changed files with 203 additions and 57 deletions
+62 -11
View File
@@ -16,6 +16,7 @@
#include "stdafx.h"
#include "SurfTriMesh.h"
#include "GeoObjFactory.h"
#include "GdbGeo.h"
#include "NgeWriter.h"
#include "NgeReader.h"
#include "SurfFlatRegion.h"
@@ -41,8 +42,9 @@ GEOOBJ_REGISTER( SRF_TRIMESH, NGE_S_TRM, SurfTriMesh) ;
//----------------------------------------------------------------------------
SurfTriMesh::SurfTriMesh( void)
: m_nStatus( TO_VERIFY), m_dLinTol( STM_STD_LIN_TOL), m_dBoundaryAng( STM_STD_BOUNDARY_ANG),
m_dSmoothAng( STM_STD_SMOOTH_ANG), m_bOriented( false), m_bClosed( false), m_bFaceted( false), m_bFacEdged( false),
m_nTimeStamp( 0), m_nTempProp{0,0}, m_dTempParam{0.0,0.0}, m_nMaxTFlag( 0), m_nParts( -1), m_pHGrd3d( nullptr)
m_dSmoothAng( STM_STD_SMOOTH_ANG), m_bShowEdges( false), m_bOriented( false), m_bClosed( false),
m_bFaceted( false), m_bFacEdged( false), m_nTimeStamp( 0), m_nTempProp{0,0}, m_dTempParam{0,0},
m_nMaxTFlag( 0), m_nParts( -1), m_pHGrd3d( nullptr)
{
m_dCosBndAng = cos( m_dBoundaryAng * DEGTORAD) ;
m_dCosSmAng = cos( m_dSmoothAng * DEGTORAD) ;
@@ -59,7 +61,7 @@ bool
SurfTriMesh::Init( int nNumVert, int nNumTria, int nNumFacet)
{
// imposto ricalcolo della grafica e di hashgrids3d
m_OGrMgr.Reset() ;
m_OGrMgr.Clear() ;
ResetHashGrids3d() ;
// se superficie vuota
if ( nNumVert == 0 && nNumTria == 0 && nNumFacet == 0)
@@ -91,6 +93,12 @@ bool
SurfTriMesh::Clear( void)
{
m_nStatus = OK ;
m_dLinTol = STM_STD_LIN_TOL ;
m_dBoundaryAng = STM_STD_BOUNDARY_ANG ;
m_dCosBndAng = cos( m_dBoundaryAng * DEGTORAD) ;
m_dSmoothAng = STM_STD_SMOOTH_ANG ;
m_dCosSmAng = cos( m_dSmoothAng * DEGTORAD) ;
m_bShowEdges = false ;
m_bOriented = false ;
m_bClosed = false ;
m_bFaceted = false ;
@@ -98,7 +106,13 @@ SurfTriMesh::Clear( void)
m_vVert.clear() ;
m_vTria.clear() ;
m_vFacet.clear() ;
m_OGrMgr.Clear() ;
ResetHashGrids3d() ;
m_nTimeStamp = 0 ;
m_nTempProp[0] = 0 ;
m_nTempProp[1] = 0 ;
m_dTempParam[0] = 0 ;
m_dTempParam[1] = 0 ;
m_nMaxTFlag = 0 ;
m_nParts = -1 ;
return true ;
@@ -875,7 +889,7 @@ SurfTriMesh::GetTriangleSmoothNormal( int nT, int nV, Vector3d& vtN) const
SurfTriMesh*
SurfTriMesh::CloneTriangle( int nT) const
{
// verifico validit superficie ed esistenza del triangolo
// verifico validità superficie ed esistenza del triangolo
if ( ! IsValid() || nT < 0 || nT >= GetTriangleSize() || m_vTria[nT].nIdVert[0] == SVT_DEL)
return nullptr ;
@@ -982,7 +996,7 @@ SurfTriMesh::GetLoops( POLYLINEVECTOR& vPL) const
if ( ! MarchAlongLoop( nT, 1, m_nTimeStamp, vPL.back()))
return false ;
}
// se il lato 0 di contorno
// se il lato 0 è di contorno
else if ( nAdjT[0] == SVT_NULL) {
// ho trovato l'inizio di un loop
vPL.emplace_back() ;
@@ -994,7 +1008,7 @@ SurfTriMesh::GetLoops( POLYLINEVECTOR& vPL) const
if ( ! MarchAlongLoop( nT, 1, m_nTimeStamp, vPL.back()))
return false ;
}
// se il lato 1 di contorno
// se il lato 1 è di contorno
else if ( nAdjT[1] == SVT_NULL) {
// ho trovato l'inizio di un loop
vPL.emplace_back() ;
@@ -1006,7 +1020,7 @@ SurfTriMesh::GetLoops( POLYLINEVECTOR& vPL) const
if ( ! MarchAlongLoop( nT, 2, m_nTimeStamp, vPL.back()))
return false ;
}
// se il lato 2 di contorno
// se il lato 2 è di contorno
else if ( nAdjT[2] == SVT_NULL) {
// ho trovato l'inizio di un loop
vPL.emplace_back() ;
@@ -1018,7 +1032,7 @@ SurfTriMesh::GetLoops( POLYLINEVECTOR& vPL) const
if ( ! MarchAlongLoop( nT, 0, m_nTimeStamp, vPL.back()))
return false ;
}
// altrimenti non c' contorno
// altrimenti non c'è contorno
else {
// marco il triangolo come verificato
m_vTria[nT].nTemp = m_nTimeStamp ;
@@ -1063,10 +1077,10 @@ SurfTriMesh::MarchOneTria( int& nT, int& nV, int nTimeStamp,
return false ;
// vertice di fine adiacenza e indice del successivo lato
int nAdjV = Next( nAdjS) ;
// verifico se il lato successivo un bordo
// verifico se il lato successivo è un bordo
int nNextT = m_vTria[nAdjT].nIdAdjac[nAdjV] ;
if ( nNextT == SVT_NULL) {
// se gi recuperato
// se già recuperato
if ( m_vTria[nAdjT].nTemp == nTimeStamp) {
bEnd = true ;
return true ;
@@ -1197,6 +1211,7 @@ SurfTriMesh::CopyFrom( const SurfTriMesh& stmSrc)
m_dCosBndAng = stmSrc.m_dCosBndAng ;
m_dSmoothAng = stmSrc.m_dSmoothAng ;
m_dCosSmAng = stmSrc.m_dCosSmAng ;
m_bShowEdges = stmSrc.m_bShowEdges ;
m_bOriented = stmSrc.m_bOriented ;
m_bClosed = stmSrc.m_bClosed ;
m_bFaceted = stmSrc.m_bFaceted ;
@@ -1332,12 +1347,33 @@ SurfTriMesh::Save( NgeWriter& ngeOut) const
return true ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::PreSave( GdbGeo& Wrapper) const
{
// salvo il flag di visualizzazione spigoli vivi anche in shading (default false)
if ( m_bShowEdges)
Wrapper.SetInfo( GDB_SI_SHOWEDGES, true) ;
return true ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::PostSave( GdbGeo& Wrapper) const
{
// elimino eventuali info aggiunte nella PreSave
Wrapper.RemoveInfo( GDB_SI_SHOWEDGES) ;
return true ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::Load( NgeReader& ngeIn)
{
// imposto ricalcolo della grafica, della connessione e di hashgrids3d
m_OGrMgr.Reset() ;
m_OGrMgr.Clear() ;
m_nMaxTFlag = 0 ;
m_nParts = -1 ;
ResetHashGrids3d() ;
@@ -1434,6 +1470,20 @@ SurfTriMesh::Load( NgeReader& ngeIn)
return Validate() ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::PostLoad( GdbGeo& Wrapper)
{
// recupero eventuale flag di visualizzazione spigoli vivi anche in shading
bool bVal ;
if ( Wrapper.GetInfo( GDB_SI_SHOWEDGES, bVal)) {
m_bShowEdges = bVal ;
Wrapper.RemoveInfo( GDB_SI_SHOWEDGES) ;
}
return true ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::Validate( bool bCorrect)
@@ -3643,6 +3693,7 @@ SurfTriMesh::ResetTFlags( void)
for ( int i = 0 ; i < int( m_vTria.size()) ; ++ i)
m_vTria[i].nTFlag = 0 ;
m_nMaxTFlag = 0 ;
m_OGrMgr.Clear() ;
return true ;
}