EgtGraphics 2.5l6 :
- aggiunta gestione disegno grid asimmetrica, impostabile con SetGridGeoAdv.
This commit is contained in:
+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