EgtGraphics 2.5l6 :
- aggiunta gestione disegno grid asimmetrica, impostabile con SetGridGeoAdv.
This commit is contained in:
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2014-2020
|
||||
// EgalTech 2014-2024
|
||||
//----------------------------------------------------------------------------
|
||||
// File : Scene.h Data : 02.01.20 Versione : 2.2a1
|
||||
// File : Scene.h Data : 09.01.24 Versione : 2.5l7
|
||||
// Contenuto : Dichiarazione della classe gestione scena.
|
||||
//
|
||||
//
|
||||
@@ -142,6 +142,8 @@ class Scene : public IEGrScene
|
||||
// Grid
|
||||
bool SetGridShow( bool bShowGrid, bool bShowFrame) override ;
|
||||
bool SetGridGeo( double dSnapStep, int nMinLineSstep, int nMajLineSstep, int nExtSstep) override ;
|
||||
bool SetGridGeoAdv( double dSnapStep, int nMinLineSstep, int nMajLineSstep,
|
||||
double dXmin, double dXmax, double dYmin, double dYmax) override ;
|
||||
bool SetGridColor( Color colMinLine, Color colMajLine) override ;
|
||||
void GetGridParam( double& dSnapStep, int& nExtStep) const override ;
|
||||
bool GetShowGrid() override ;
|
||||
@@ -204,26 +206,26 @@ class Scene : public IEGrScene
|
||||
int GetOpenGLver( void)
|
||||
{ return m_nOglVer ; }
|
||||
// PointSize - LineWidth
|
||||
double GetPointSize( void)
|
||||
double GetPointSize( void) const
|
||||
{ return m_dPointSize ; }
|
||||
double GetSelPointSize( void)
|
||||
double GetSelPointSize( void) const
|
||||
{ return m_dSelPointSize ; }
|
||||
double GetMarkPointSize( void)
|
||||
double GetMarkPointSize( void) const
|
||||
{ return m_dMarkPointSize ; }
|
||||
double GetLineWidth( void)
|
||||
double GetLineWidth( void) const
|
||||
{ return m_dLineWidth ; }
|
||||
double GetSelLineWidth( void)
|
||||
double GetSelLineWidth( void) const
|
||||
{ return m_dSelLineWidth ; }
|
||||
double GetMarkLineWidth( void)
|
||||
double GetMarkLineWidth( void) const
|
||||
{ return m_dMarkLineWidth ; }
|
||||
double GetGridLineWidth( void)
|
||||
double GetGridLineWidth( void) const
|
||||
{ return m_dGridLineWidth ; }
|
||||
double GetFrameLineWidth( void)
|
||||
double GetFrameLineWidth( void) const
|
||||
{ return m_dFrameLineWidth ; }
|
||||
// Geometry
|
||||
Color GetMark( void)
|
||||
Color GetMark( void) const
|
||||
{ return m_colMark ; }
|
||||
Color GetSelSurf( void)
|
||||
Color GetSelSurf( void) const
|
||||
{ return m_colSelSurf ; }
|
||||
|
||||
private :
|
||||
@@ -355,6 +357,10 @@ class Scene : public IEGrScene
|
||||
int m_nMinLineSstep ; // interasse tra due linee minori come numero di passi di snap
|
||||
int m_nMajLineSstep ; // interasse tra due linee maggiori come numero di passi di snap
|
||||
int m_nExtSstep ; // estensione della griglia come numero di passi di snap
|
||||
double m_dGridMinX ; // minima estensione in X della griglia
|
||||
double m_dGridMaxX ; // massima estensione in X della griglia
|
||||
double m_dGridMinY ; // minima estensione in Y della griglia
|
||||
double m_dGridMaxY ; // massima estensione in Y della griglia
|
||||
Color m_colMinLine ; // colore delle linee minori
|
||||
Color m_colMajLine ; // colore delle linee maggiori
|
||||
// Glob Frame
|
||||
|
||||
+8
-5
@@ -32,7 +32,6 @@ static const double MIN_EXTENSION = 250 ;
|
||||
static const double MIN_W_H = 0.01 ;
|
||||
static const double MIN_ZCLIP_EXT = 25000 ;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
IEGrScene*
|
||||
CreateEGrScene( void)
|
||||
@@ -98,10 +97,14 @@ Scene::Scene( void)
|
||||
// Grid
|
||||
m_bShowGrid = false ;
|
||||
m_bShowFrame = false ;
|
||||
m_dSnapStep = 1 ;
|
||||
m_nMinLineSstep = 10 ;
|
||||
m_nMajLineSstep = 100 ;
|
||||
m_nExtSstep = 500 ;
|
||||
m_dSnapStep = 10 ;
|
||||
m_nMinLineSstep = 1 ;
|
||||
m_nMajLineSstep = 10 ;
|
||||
m_nExtSstep = 100 ;
|
||||
m_dGridMinX = -INFINITO ;
|
||||
m_dGridMaxX = INFINITO ;
|
||||
m_dGridMinY = -INFINITO ;
|
||||
m_dGridMaxY = INFINITO ;
|
||||
m_colMinLine.Set( 160, 160, 160) ;
|
||||
m_colMajLine.Set( 160, 160, 160) ;
|
||||
// Global Frame
|
||||
|
||||
+120
-53
@@ -20,6 +20,9 @@
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//--------------------------- Constants --------------------------------------
|
||||
const double MIN_SNAP_STEP = 0.1 ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Scene::SetGridShow( bool bShowGrid, bool bShowFrame)
|
||||
@@ -33,11 +36,41 @@ Scene::SetGridShow( bool bShowGrid, bool bShowFrame)
|
||||
bool
|
||||
Scene::SetGridGeo( double dSnapStep, int nMinLineSstep, int nMajLineSstep, int nExtSstep)
|
||||
{
|
||||
const double MIN_SNAP_STEP = 0.1 ;
|
||||
m_dSnapStep = max( abs( dSnapStep), MIN_SNAP_STEP) ;
|
||||
m_nMinLineSstep = abs( nMinLineSstep) ;
|
||||
m_nMajLineSstep = max( abs( nMajLineSstep), m_nMinLineSstep) ;
|
||||
if ( dSnapStep > 0)
|
||||
m_dSnapStep = max( dSnapStep, MIN_SNAP_STEP) ;
|
||||
if ( nMinLineSstep > 0)
|
||||
m_nMinLineSstep = nMinLineSstep ;
|
||||
if ( nMajLineSstep > 0)
|
||||
m_nMajLineSstep = max( nMajLineSstep, m_nMinLineSstep) ;
|
||||
m_nExtSstep = max( abs( nExtSstep), m_nMajLineSstep) ;
|
||||
m_dGridMinX = -INFINITO ;
|
||||
m_dGridMaxX = INFINITO ;
|
||||
m_dGridMinY = -INFINITO ;
|
||||
m_dGridMaxY = INFINITO ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Scene::SetGridGeoAdv( double dSnapStep, int nMinLineSstep, int nMajLineSstep,
|
||||
double dXmin, double dXmax, double dYmin, double dYmax)
|
||||
{
|
||||
if ( dSnapStep > 0)
|
||||
m_dSnapStep = max( dSnapStep, MIN_SNAP_STEP) ;
|
||||
if ( nMinLineSstep > 0)
|
||||
m_nMinLineSstep = nMinLineSstep ;
|
||||
if ( nMajLineSstep > 0)
|
||||
m_nMajLineSstep = max( nMajLineSstep, m_nMinLineSstep) ;
|
||||
if ( dXmin > dXmax)
|
||||
swap( dXmin, dXmax) ;
|
||||
if ( dYmin > dYmax)
|
||||
swap( dYmin, dYmax) ;
|
||||
int nExtSstep = int( ceil( max( max( abs( dXmin), abs( dYmin)), max( abs( dXmax), abs( dYmax))) / m_dSnapStep)) ;
|
||||
m_nExtSstep = max( abs( nExtSstep), m_nMajLineSstep) ;
|
||||
m_dGridMinX = dXmin ;
|
||||
m_dGridMaxX = dXmax ;
|
||||
m_dGridMinY = dYmin ;
|
||||
m_dGridMaxY = dYmax ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -89,6 +122,10 @@ Scene::DrawGrid( void)
|
||||
|
||||
// semi-estensione della griglia
|
||||
float dExt = float( m_nExtSstep * m_dSnapStep) ;
|
||||
float dExtMinX = max( float( m_dGridMinX), -dExt) ;
|
||||
float dExtMaxX = min( float( m_dGridMaxX), dExt) ;
|
||||
float dExtMinY = max( float( m_dGridMinY), -dExt) ;
|
||||
float dExtMaxY = min( float( m_dGridMaxY), dExt) ;
|
||||
// abbassamento in Z per evitare sovrapposizioni con geometria
|
||||
const float Z_DOWN = float( - 0.01) ;
|
||||
|
||||
@@ -105,18 +142,26 @@ Scene::DrawGrid( void)
|
||||
// se non si sovrappongono alle maggiori
|
||||
if ( ( i % m_nMajLineSstep) != 0) {
|
||||
float dPos = float( i * m_dSnapStep) ;
|
||||
// X +
|
||||
glVertex3f( dPos, - dExt, Z_DOWN) ;
|
||||
glVertex3f( dPos, dExt, Z_DOWN) ;
|
||||
// X -
|
||||
glVertex3f( - dPos, - dExt, Z_DOWN) ;
|
||||
glVertex3f( - dPos, dExt, Z_DOWN) ;
|
||||
// Y +
|
||||
glVertex3f( - dExt, dPos, Z_DOWN) ;
|
||||
glVertex3f( dExt, dPos, Z_DOWN) ;
|
||||
// Y -
|
||||
glVertex3f( - dExt, - dPos, Z_DOWN) ;
|
||||
glVertex3f( dExt, - dPos, Z_DOWN) ;
|
||||
// X +
|
||||
if ( dPos >= dExtMinX && dPos <= dExtMaxX) {
|
||||
glVertex3f( dPos, dExtMinY, Z_DOWN) ;
|
||||
glVertex3f( dPos, dExtMaxY, Z_DOWN) ;
|
||||
}
|
||||
// X -
|
||||
if ( -dPos >= dExtMinX && -dPos <= dExtMaxX) {
|
||||
glVertex3f( -dPos, dExtMinY, Z_DOWN) ;
|
||||
glVertex3f( -dPos, dExtMaxY, Z_DOWN) ;
|
||||
}
|
||||
// Y +
|
||||
if ( dPos >= dExtMinY && dPos <= dExtMaxY) {
|
||||
glVertex3f( dExtMinX, dPos, Z_DOWN) ;
|
||||
glVertex3f( dExtMaxX, dPos, Z_DOWN) ;
|
||||
}
|
||||
// Y -
|
||||
if ( -dPos >= dExtMinY && -dPos <= dExtMaxY) {
|
||||
glVertex3f( dExtMinX, -dPos, Z_DOWN) ;
|
||||
glVertex3f( dExtMaxX, -dPos, Z_DOWN) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
glEnd() ;
|
||||
@@ -129,50 +174,68 @@ Scene::DrawGrid( void)
|
||||
glColor3f( m_colMajLine.GetRed(), m_colMajLine.GetGreen(), m_colMajLine.GetBlue()) ;
|
||||
for ( int i = min( nCoeff * m_nMajLineSstep, m_nExtSstep) ; i <= m_nExtSstep ; i += nCoeff * m_nMajLineSstep) {
|
||||
float dPos = float( i * m_dSnapStep) ;
|
||||
// X +
|
||||
glVertex3f( dPos, - dExt, Z_DOWN) ;
|
||||
glVertex3f( dPos, dExt, Z_DOWN) ;
|
||||
// X -
|
||||
glVertex3f( - dPos, - dExt, Z_DOWN) ;
|
||||
glVertex3f( - dPos, dExt, Z_DOWN) ;
|
||||
// Y +
|
||||
glVertex3f( - dExt, dPos, Z_DOWN) ;
|
||||
glVertex3f( dExt, dPos, Z_DOWN) ;
|
||||
// Y -
|
||||
glVertex3f( - dExt, - dPos, Z_DOWN) ;
|
||||
glVertex3f( dExt, - dPos, Z_DOWN) ;
|
||||
// X +
|
||||
if ( dPos >= dExtMinX && dPos <= dExtMaxX) {
|
||||
glVertex3f( dPos, dExtMinY, Z_DOWN) ;
|
||||
glVertex3f( dPos, dExtMaxY, Z_DOWN) ;
|
||||
}
|
||||
// X -
|
||||
if ( -dPos >= dExtMinX && -dPos <= dExtMaxX) {
|
||||
glVertex3f( -dPos, dExtMinY, Z_DOWN) ;
|
||||
glVertex3f( -dPos, dExtMaxY, Z_DOWN) ;
|
||||
}
|
||||
// Y +
|
||||
if ( dPos >= dExtMinY && dPos <= dExtMaxY) {
|
||||
glVertex3f( dExtMinX, dPos, Z_DOWN) ;
|
||||
glVertex3f( dExtMaxX, dPos, Z_DOWN) ;
|
||||
}
|
||||
// Y -
|
||||
if ( -dPos >= dExtMinY && -dPos <= dExtMaxY) {
|
||||
glVertex3f( dExtMinX, -dPos, Z_DOWN) ;
|
||||
glVertex3f( dExtMaxX, -dPos, Z_DOWN) ;
|
||||
}
|
||||
}
|
||||
glEnd() ;
|
||||
}
|
||||
|
||||
// se richiesto, disegno assi del frame
|
||||
if ( m_bShowFrame) {
|
||||
// calcolo lunghezza asse Z
|
||||
// calcolo lunghezza asse Z
|
||||
GLint Viewport[4] ;
|
||||
glGetIntegerv(GL_VIEWPORT, Viewport) ;
|
||||
const double LEN_AX = 28 ;
|
||||
double dLenZ = LEN_AX * ( 2 * m_dHalfWidth) / Viewport[2] ;
|
||||
float fLenZ = float( min( m_dSnapStep, dLenZ)) ;
|
||||
glBegin( GL_LINES) ;
|
||||
// asse X+
|
||||
glColor3f( 0.8f, 0, 0) ;
|
||||
glVertex3f( 0, 0, Z_DOWN) ;
|
||||
glVertex3f( dExt, 0, Z_DOWN) ;
|
||||
// asse Y+
|
||||
glColor3f( 0, 0.8f, 0) ;
|
||||
glVertex3f( 0, 0, Z_DOWN) ;
|
||||
glVertex3f( 0, dExt, Z_DOWN) ;
|
||||
// asse Z+
|
||||
glColor3f( 0, 0, 0.8f) ;
|
||||
glVertex3f( 0, 0, Z_DOWN) ;
|
||||
glVertex3f( 0, 0, fLenZ) ;
|
||||
// se richiesta griglia, assi X- e Y-
|
||||
// asse X+
|
||||
if ( 0 >= dExtMinY && 0 <= dExtMaxY && 0 >= dExtMinY) {
|
||||
glColor3f( 0.8f, 0, 0) ;
|
||||
glVertex3f( max( 0.0f, dExtMinX), 0, Z_DOWN) ;
|
||||
glVertex3f( dExtMaxX, 0, Z_DOWN) ;
|
||||
}
|
||||
// asse Y+
|
||||
if ( 0 >= dExtMinX && 0 <= dExtMaxX && 0 <= dExtMaxY) {
|
||||
glColor3f( 0, 0.8f, 0) ;
|
||||
glVertex3f( 0, max( 0.0f, dExtMinY), Z_DOWN) ;
|
||||
glVertex3f( 0, dExtMaxY, Z_DOWN) ;
|
||||
}
|
||||
// asse Z+
|
||||
if ( 0 >= dExtMinX && 0 <= dExtMaxX && 0 >= dExtMinY && 0 <= dExtMaxY) {
|
||||
glColor3f( 0, 0, 0.8f) ;
|
||||
glVertex3f( 0, 0, Z_DOWN) ;
|
||||
glVertex3f( 0, 0, fLenZ) ;
|
||||
}
|
||||
// se richiesta griglia, assi X- e Y-
|
||||
if ( m_bShowGrid) {
|
||||
glColor3f( m_colMajLine.GetRed(), m_colMajLine.GetGreen(), m_colMajLine.GetBlue()) ;
|
||||
glVertex3f( 0, 0, Z_DOWN) ;
|
||||
glVertex3f( -dExt, 0, Z_DOWN) ;
|
||||
glVertex3f( 0, 0, Z_DOWN) ;
|
||||
glVertex3f( 0, -dExt, Z_DOWN) ;
|
||||
if ( 0 >= dExtMinY && 0 <= dExtMaxY && 0 >= dExtMinX) {
|
||||
glVertex3f( min( 0.0f, dExtMaxX), 0, Z_DOWN) ;
|
||||
glVertex3f( dExtMinX, 0, Z_DOWN) ;
|
||||
}
|
||||
if ( 0 >= dExtMinX && 0 <= dExtMaxX && 0 >= dExtMinY) {
|
||||
glVertex3f( 0, min( 0.0f, dExtMaxY), Z_DOWN) ;
|
||||
glVertex3f( 0, dExtMinY, Z_DOWN) ;
|
||||
}
|
||||
}
|
||||
glEnd() ;
|
||||
}
|
||||
@@ -180,12 +243,16 @@ Scene::DrawGrid( void)
|
||||
else if ( m_bShowGrid) {
|
||||
glBegin( GL_LINES) ;
|
||||
glColor3f( m_colMajLine.GetRed(), m_colMajLine.GetGreen(), m_colMajLine.GetBlue()) ;
|
||||
// asse X
|
||||
glVertex3f( - dExt, 0, Z_DOWN) ;
|
||||
glVertex3f( dExt, 0, Z_DOWN) ;
|
||||
// asse Y
|
||||
glVertex3f( 0, - dExt, Z_DOWN) ;
|
||||
glVertex3f( 0, dExt, Z_DOWN) ;
|
||||
// asse X
|
||||
if ( 0 >= dExtMinY && 0 <= dExtMaxY) {
|
||||
glVertex3f( dExtMinX, 0, Z_DOWN) ;
|
||||
glVertex3f( dExtMaxX, 0, Z_DOWN) ;
|
||||
}
|
||||
// asse Y
|
||||
if ( 0 >= dExtMinX && 0 <= dExtMaxX) {
|
||||
glVertex3f( 0, dExtMinY, Z_DOWN) ;
|
||||
glVertex3f( 0, dExtMaxY, Z_DOWN) ;
|
||||
}
|
||||
glEnd() ;
|
||||
}
|
||||
|
||||
@@ -211,4 +278,4 @@ bool
|
||||
Scene::GetShowGrid()
|
||||
{
|
||||
return m_bShowGrid ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user