diff --git a/EgtGraphics.rc b/EgtGraphics.rc
index dee72de..c49bb2b 100644
Binary files a/EgtGraphics.rc and b/EgtGraphics.rc differ
diff --git a/EgtGraphics.vcxproj b/EgtGraphics.vcxproj
index ddffdcd..cccf81a 100644
--- a/EgtGraphics.vcxproj
+++ b/EgtGraphics.vcxproj
@@ -205,7 +205,7 @@ copy $(TargetPath) \EgtProg\Dll32
true
- AdvancedVectorExtensions2
+ NotSet
false
true
CompileAsCpp
diff --git a/Scene.h b/Scene.h
index 9db9134..a21e746 100644
--- a/Scene.h
+++ b/Scene.h
@@ -1,12 +1,13 @@
//----------------------------------------------------------------------------
-// EgalTech 2014-2020
+// EgalTech 2014-2024
//----------------------------------------------------------------------------
-// File : Scene.h Data : 02.01.20 Versione : 2.2a1
+// File : Scene.h Data : 16.02.24 Versione : 2.6b4
// Contenuto : Dichiarazione della classe gestione scena.
//
//
//
// Modifiche : 29.01.14 DS Creazione modulo.
+// 16.02.24 DS Aggiunte Set/Get CameraDirOrizzOffset.
//
//
//----------------------------------------------------------------------------
@@ -89,11 +90,15 @@ class Scene : public IEGrScene
void Destroy( void) override ;
// Camera
bool SetCenter( const Point3d& ptCenter) override ;
+ bool SetCameraDirOrizzOffset( int nRightStepOffset = 0) override
+ { m_nOrizzOffsCamera = nRightStepOffset ; return true ; }
bool SetCamera( double dAngVertDeg, double dAngOrizzDeg, double dDist) override ;
bool SetCamera( int nDir, double dDist = 0) override ;
const Point3d& GetCenter( void) const override
{ return m_ptCenter ; }
Point3d GetProjectedCenter( void) const override ;
+ int GetCameraDirOrizzOffset( void) const override
+ { return m_nOrizzOffsCamera ; }
void GetCamera( double* pdAngVertDeg, double* pdAngOrizzDeg, double* pdDist = nullptr) const override ;
int GetCameraDir( void) const override ;
const Vector3d& GetCameraUp( void) const override
@@ -152,6 +157,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 ;
@@ -224,26 +231,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 :
@@ -257,8 +264,8 @@ class Scene : public IEGrScene
bool Background( void) ;
bool Prepare( void) ;
// Camera
- bool VerifyCamera( void) ;
- bool CalcDirUp( void) ;
+ bool VerifyCamera( bool bUseOrizzOffsCamera = false) ;
+ bool CalcDirUp( bool bUseOrizzOffsCamera = false) ;
bool CalcCameraFrame( Frame3d& frView) ;
// Geometry
bool DrawGroup( int nId, int nPass, const MdStMkCol& siParent) ;
@@ -322,6 +329,7 @@ class Scene : public IEGrScene
// Camera
Point3d m_ptCenter ; // centro verso cui è rivolta la camera
Vector3d m_vtDirCamera ; // versore direzione dal centro alla camera
+ int m_nOrizzOffsCamera ; // offset orizzontale viste camera in multipli di 90deg
double m_dDistCamera ; // distanza dal centro alla camera
Vector3d m_vtUp ; // versore direzione Su della camera
bool m_bUpOk ; // flag per stato aggiornamento di Up
@@ -387,9 +395,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_dGridWidth ; // lunghezza della griglia rettangolare
- double m_dGridHeight ; // altezza della griglia rettangolare
- int m_nGridFrame_Flag ; // posizione dell'origine con gli assi sulla griglia
+ 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
// Axis Frame
diff --git a/SceneBasic.cpp b/SceneBasic.cpp
index c656c58..552ee39 100644
--- a/SceneBasic.cpp
+++ b/SceneBasic.cpp
@@ -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)
@@ -63,6 +62,7 @@ Scene::Scene( void)
m_cColCorner = Color( 200, 200, 200, 1) ;
// Camera e viewport
m_ptCenter = ORIG ;
+ m_nOrizzOffsCamera = 0 ;
SetCamera( 0, 0, 0) ;
m_nViewportW = 0 ;
m_nViewportH = 0 ;
@@ -71,7 +71,7 @@ Scene::Scene( void)
// Sfondo
m_colBackTop.Set( 176, 176, 176) ;
m_colBackBottom.Set( 176, 176, 176) ;
- // Modalità di visualizzazione
+ // Modalit� di visualizzazione
m_nShowMode = SM_WIREFRAME ;
m_bShowCurveDirection = false ;
m_bShowTriaAdvanced = true ;
@@ -105,30 +105,20 @@ Scene::Scene( void)
SetExtension( BBox3d( -MIN_EXTENSION, -MIN_EXTENSION, -MIN_EXTENSION,
MIN_EXTENSION, MIN_EXTENSION, MIN_EXTENSION)) ;
// Grid
- m_bShowGrid = false ;
- m_bShowFrame = false ;
- m_dSnapStep = 1 ;
- m_nMinLineSstep = 10 ;
- m_nMajLineSstep = 100 ;
- m_nExtSstep = 500 ;
- m_colMinLine.Set( 160, 160, 160) ;
- m_colMajLine.Set( 160, 160, 160) ;
- m_dGridWidth = 1000 ;
- m_dGridHeight = 1000 ;
- m_nGridFrame_Flag = 1 ;
- // Axis Frame
- m_bShowGlobFrame = true ;
- m_nAxisFrame_Flag = 3 ;
- m_dFrame_DistX = 40.0 ;
- m_dFrame_DistY = 120.0 ;
- m_dFrameLineL = 25.0;
- m_dFrameLineW = 2.0 ;
- // Global Cube
- m_bShowGlobCube = true ;
- m_nCube_Flag = 3 ;
- m_dCubeEdge = 80.0 ;
- m_dCubeX = 70.0 ;
- m_dCubeY = 70.0 ;
+ m_bShowGrid = false ;
+ m_bShowFrame = false ;
+ 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
+ m_bShowGlobFrame = false ;
// Direct
m_colorGL.Set( 255, 0, 0) ;
m_bGeoLine = false ;
@@ -156,7 +146,7 @@ Scene::Init( IGeomDB* pGeomDB)
bool
Scene::CreateContext( HDC hDC, int nDriver, bool b2Buff, int nColorBits, int nDepthBits)
{
- // verifico validità Device Context
+ // verifico validit� Device Context
if ( hDC == nullptr)
return false ;
m_hDC = hDC ;
@@ -233,7 +223,7 @@ Scene::CreateContext( HDC hDC, int nDriver, bool b2Buff, int nColorBits, int nDe
LOG_INFO( GetEGrLogger(), "WGL_ARB_create_context missing !")
}
- // verifico validità Rendering Context
+ // verifico validit� Rendering Context
if ( m_hRC == nullptr)
return false ;
@@ -244,7 +234,7 @@ Scene::CreateContext( HDC hDC, int nDriver, bool b2Buff, int nColorBits, int nDe
if ( GlewInitResult != GLEW_OK)
LOG_INFO( GetEGrLogger(), "GLEW is not initialized !")
- // verifico se posso lavorare in modalità nuova
+ // verifico se posso lavorare in modalit� nuova
m_bNewWay = ( nDriver == OD_NEW && glewIsSupported( "GL_VERSION_3_0") == 1) ;
if ( ! m_bNewWay)
LOG_INFO( GetEGrLogger(), "OpenGL old way rendering !")
@@ -306,11 +296,11 @@ Scene::ChooseGenPixelFormat( int nPfd, bool b2Buff, int nColorBits, int nDepthBi
bool
Scene::MakeCurrent( void) const
{
- // se RC della scena non è definito, errore
+ // se RC della scena non � definito, errore
if ( m_hRC == nullptr)
return false ;
- // se RC della scena è quello corrente, ok
+ // se RC della scena � quello corrente, ok
HGLRC hRC = wglGetCurrentContext() ;
if ( m_hRC == hRC)
return true ;
@@ -437,7 +427,7 @@ Scene::SetExtension( const BBox3d& b3Ext)
bool
Scene::CalcExtView( void)
{
- // verifico se il calcolo è necessario
+ // verifico se il calcolo � necessario
if ( m_bExtViewOk && m_bUpOk)
return true ;
// calcolo direzione camera Up
@@ -750,12 +740,12 @@ Scene::MyDraw( bool bSwapBF)
if ( m_pGeomDB != nullptr)
m_pGeomDB->GetDefaultMaterial( m_colDef) ;
- // impostazioni dipendenti dalla modalità di visualizzazione
+ // impostazioni dipendenti dalla modalit� di visualizzazione
switch ( m_nShowMode) {
case SM_WIREFRAME :
// disabilito illuminazione
glDisable( GL_LIGHTING) ;
- // disegno griglia senza illuminazione (già impostato)
+ // disegno griglia senza illuminazione (gi� impostato)
DrawGrid() ;
// imposto dati standard per punti e linee
glPointSize( (float) GetPointSize()) ;
@@ -768,7 +758,7 @@ Scene::MyDraw( bool bSwapBF)
case SM_HIDDENLINE :
// disabilito illuminazione
glDisable( GL_LIGHTING) ;
- // disegno griglia senza illuminazione (già impostato)
+ // disegno griglia senza illuminazione (gi� impostato)
DrawGrid() ;
// imposto dati standard per punti e linee
glPointSize( (float) GetPointSize()) ;
diff --git a/SceneCamera.cpp b/SceneCamera.cpp
index 0b2b0e8..96b1667 100644
--- a/SceneCamera.cpp
+++ b/SceneCamera.cpp
@@ -88,16 +88,16 @@ Scene::SetCamera( int nDir, double dDist)
m_vtDirCamera.Set( 0, 0, -1) ;
break ;
case CT_ISO_SW :
- m_vtDirCamera.Set( - SQRT1_3, - SQRT1_3, SQRT1_3) ;
+ m_vtDirCamera.Set( -SQRT1_3, -SQRT1_3, SQRT1_3) ;
break ;
case CT_ISO_SE :
- m_vtDirCamera.Set( SQRT1_3, - SQRT1_3, SQRT1_3) ;
+ m_vtDirCamera.Set( SQRT1_3, -SQRT1_3, SQRT1_3) ;
break ;
case CT_ISO_NE :
m_vtDirCamera.Set( SQRT1_3, SQRT1_3, SQRT1_3) ;
break ;
case CT_ISO_NW :
- m_vtDirCamera.Set( - SQRT1_3, SQRT1_3, SQRT1_3) ;
+ m_vtDirCamera.Set( -SQRT1_3, SQRT1_3, SQRT1_3) ;
break ;
case CT_CPLANE :
m_vtDirCamera = GetGridFrame().VersZ() ;
@@ -106,14 +106,15 @@ Scene::SetCamera( int nDir, double dDist)
return false ;
break ;
}
+ if ( nDir != CT_CPLANE)
+ m_vtDirCamera.Rotate( Z_AX, m_nOrizzOffsCamera * ANG_RIGHT) ;
m_dDistCamera = dDist ;
-
- return VerifyCamera() ;
+ return VerifyCamera( nDir != CT_CPLANE) ;
}
//----------------------------------------------------------------------------
bool
-Scene::VerifyCamera( void)
+Scene::VerifyCamera( bool bUseOrizzOffsCamera)
{
// verifico il versore
if ( ! m_vtDirCamera.Normalize())
@@ -123,12 +124,16 @@ Scene::VerifyCamera( void)
m_dDistCamera = STD_DIST_CAMERA ;
else
m_dDistCamera = max( m_dDistCamera, MIN_DIST_CAMERA) ;
- // invalido Up e ExtView
+ // ricalcolo direzione Up
m_bUpOk = false ;
+ if ( ! CalcDirUp( bUseOrizzOffsCamera))
+ return false ;
+ // ricalcolo ExtView
m_bExtViewOk = false ;
+ if ( ! CalcExtView())
+ return false ;
// calcolo nuovi dati di Z clipping
- CalcClippingPlanesFromExtView() ;
- return true ;
+ return CalcClippingPlanesFromExtView() ;
}
//----------------------------------------------------------------------------
@@ -162,25 +167,27 @@ Scene::GetCamera( double* pdAngVertDeg, double* pdAngOrizzDeg, double* pdDist) c
int
Scene::GetCameraDir( void) const
{
- if ( m_vtDirCamera.IsZplus())
+ Vector3d vtDir = m_vtDirCamera ;
+ vtDir.Rotate( Z_AX, - m_nOrizzOffsCamera * ANG_RIGHT) ;
+ if ( vtDir.IsZplus())
return CT_TOP ;
- else if ( m_vtDirCamera.IsYminus())
+ else if ( vtDir.IsYminus())
return CT_FRONT ;
- else if ( m_vtDirCamera.IsXplus())
+ else if ( vtDir.IsXplus())
return CT_RIGHT ;
- else if ( m_vtDirCamera.IsYplus())
+ else if ( vtDir.IsYplus())
return CT_BACK ;
- else if ( m_vtDirCamera.IsXminus())
+ else if ( vtDir.IsXminus())
return CT_LEFT ;
- else if ( m_vtDirCamera.IsZminus())
+ else if ( vtDir.IsZminus())
return CT_BOTTOM ;
- else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( - SQRT1_3, - SQRT1_3, SQRT1_3)))
+ else if ( AreSameVectorApprox( vtDir, Vector3d( - SQRT1_3, - SQRT1_3, SQRT1_3)))
return CT_ISO_SW ;
- else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( SQRT1_3, - SQRT1_3, SQRT1_3)))
+ else if ( AreSameVectorApprox( vtDir, Vector3d( SQRT1_3, - SQRT1_3, SQRT1_3)))
return CT_ISO_SE ;
- else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( SQRT1_3, SQRT1_3, SQRT1_3)))
+ else if ( AreSameVectorApprox( vtDir, Vector3d( SQRT1_3, SQRT1_3, SQRT1_3)))
return CT_ISO_NE ;
- else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( - SQRT1_3, SQRT1_3, SQRT1_3)))
+ else if ( AreSameVectorApprox( vtDir, Vector3d( - SQRT1_3, SQRT1_3, SQRT1_3)))
return CT_ISO_NW ;
else
return CT_NONE ;
@@ -199,7 +206,7 @@ Scene::GetProjectedCenter( void) const
//----------------------------------------------------------------------------
bool
-Scene::CalcDirUp( void)
+Scene::CalcDirUp( bool bUseOrizzOffsCamera)
{
// verifico se il calcolo è necessario
if ( m_bUpOk)
@@ -208,10 +215,9 @@ Scene::CalcDirUp( void)
// ( m_vtDirCamera è opposta alla direzione in cui si guarda)
Vector3d vtPerpXY = m_vtDirCamera ^ Z_AX ;
if ( ! vtPerpXY.Normalize()) {
- if ( m_vtDirCamera.z < 0)
- vtPerpXY = X_AX ;
- else
- vtPerpXY = - X_AX ;
+ vtPerpXY = -X_AX ;
+ if ( bUseOrizzOffsCamera)
+ vtPerpXY.Rotate( Z_AX, m_nOrizzOffsCamera * ANG_RIGHT) ;
}
// direzione Up
m_vtUp = vtPerpXY ^ m_vtDirCamera ;
diff --git a/SceneGeom.cpp b/SceneGeom.cpp
index b5aeb12..634e03c 100644
--- a/SceneGeom.cpp
+++ b/SceneGeom.cpp
@@ -465,6 +465,8 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
int nCount = 0 ;
// numero di colori
const int ZMAP_COL = 2 ;
+ // indicazione se tridexel
+ bool bIsTriDexel = pZmap->IsTriDexel() ;
// se triangoli da disegnare
if ( ( m_nShowZmap & ZSM_SURF) != 0) {
// definizione materiali
@@ -524,7 +526,7 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
for ( const auto& Tria : vTria) {
if ( ( j == 0 && Tria.GetGrade() != 0) || ( j == 1 && Tria.GetGrade() == 0))
continue ;
- if ( m_bShowTriaAdvanced)
+ if ( m_bShowTriaAdvanced && bIsTriDexel)
pGraphics->AddTriangle( Tria, Tria.GetTriFlags(), Tria.GetTriNormals()) ;
else
pGraphics->AddTriangle( Tria, TriFlags3d(), TriNormals3d( Tria.GetN())) ;
@@ -646,7 +648,7 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
POLYLINELIST lstPL ;
if ( pUserObj->GetDrawPolyLines( lstPL)) {
for ( const auto& PL : lstPL)
- pGraphics->AddPolyLine( PL, true) ;
+ pGraphics->AddPolyLine( PL, ( PL.GetTempProp() == 0)) ;
}
}
}
@@ -972,18 +974,18 @@ static bool
CalcCurveConnectingLines( const PolyLine& plCrv, const Vector3d& vtTh, bool bDense, PNTVECTOR& vPnt)
{
// assegno coefficiente
- double dDelta = ( bDense ? 0.25 : 1) ;
+ double dDelta = ( bDense ? 0.25 : 0.5) ;
// ciclo per creare i segmenti di raccordo
double dU, dUprev = - dDelta ;
vPnt.reserve( 5) ;
for ( bool bFound = plCrv.GetFirstU( dU) ; bFound ; bFound = plCrv.GetNextU( dU)) {
- if ( ( dU - dUprev) > dDelta - EPS_PARAM) {
+ if ( ( dU - dUprev) > dDelta - EPS_PARAM || fmod( dU, 1.) < EPS_PARAM) {
Point3d ptP ;
plCrv.GetCurrPoint( ptP) ;
vPnt.push_back( ptP) ;
ptP += vtTh ;
vPnt.push_back( ptP) ;
- dUprev += dDelta ;
+ dUprev = dU ;
}
}
return true ;
diff --git a/SceneGrid.cpp b/SceneGrid.cpp
index 39847b7..7ee0f8a 100644
--- a/SceneGrid.cpp
+++ b/SceneGrid.cpp
@@ -20,10 +20,8 @@
using namespace std ;
-// costanti parametri per la griglia
-const double GRID_MIN_LEN_X = 10 ;
-const double GRID_MIN_LEN_Y = 10 ;
-const double GRID_AXIS_WIDTH = 1 ;
+//--------------------------- Constants --------------------------------------
+const double MIN_SNAP_STEP = 0.1 ;
//----------------------------------------------------------------------------
bool
@@ -38,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 ;
}
@@ -98,6 +126,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) ;
@@ -115,17 +147,25 @@ Scene::DrawGrid( void)
if ( ( i % m_nMajLineSstep) != 0) {
float dPos = float( i * m_dSnapStep) ;
// X +
- glVertex3f( dPos, - dExt, Z_DOWN) ;
- glVertex3f( dPos, dExt, Z_DOWN) ;
+ if ( dPos >= dExtMinX && dPos <= dExtMaxX) {
+ glVertex3f( dPos, dExtMinY, Z_DOWN) ;
+ glVertex3f( dPos, dExtMaxY, Z_DOWN) ;
+ }
// X -
- glVertex3f( - dPos, - dExt, Z_DOWN) ;
- glVertex3f( - dPos, dExt, Z_DOWN) ;
+ if ( -dPos >= dExtMinX && -dPos <= dExtMaxX) {
+ glVertex3f( -dPos, dExtMinY, Z_DOWN) ;
+ glVertex3f( -dPos, dExtMaxY, Z_DOWN) ;
+ }
// Y +
- glVertex3f( - dExt, dPos, Z_DOWN) ;
- glVertex3f( dExt, dPos, Z_DOWN) ;
+ if ( dPos >= dExtMinY && dPos <= dExtMaxY) {
+ glVertex3f( dExtMinX, dPos, Z_DOWN) ;
+ glVertex3f( dExtMaxX, dPos, Z_DOWN) ;
+ }
// Y -
- glVertex3f( - dExt, - dPos, Z_DOWN) ;
- glVertex3f( dExt, - dPos, Z_DOWN) ;
+ if ( -dPos >= dExtMinY && -dPos <= dExtMaxY) {
+ glVertex3f( dExtMinX, -dPos, Z_DOWN) ;
+ glVertex3f( dExtMaxX, -dPos, Z_DOWN) ;
+ }
}
}
glEnd() ;
@@ -139,17 +179,25 @@ Scene::DrawGrid( void)
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) ;
+ if ( dPos >= dExtMinX && dPos <= dExtMaxX) {
+ glVertex3f( dPos, dExtMinY, Z_DOWN) ;
+ glVertex3f( dPos, dExtMaxY, Z_DOWN) ;
+ }
// X -
- glVertex3f( - dPos, - dExt, Z_DOWN) ;
- glVertex3f( - dPos, dExt, Z_DOWN) ;
+ if ( -dPos >= dExtMinX && -dPos <= dExtMaxX) {
+ glVertex3f( -dPos, dExtMinY, Z_DOWN) ;
+ glVertex3f( -dPos, dExtMaxY, Z_DOWN) ;
+ }
// Y +
- glVertex3f( - dExt, dPos, Z_DOWN) ;
- glVertex3f( dExt, dPos, Z_DOWN) ;
+ if ( dPos >= dExtMinY && dPos <= dExtMaxY) {
+ glVertex3f( dExtMinX, dPos, Z_DOWN) ;
+ glVertex3f( dExtMaxX, dPos, Z_DOWN) ;
+ }
// Y -
- glVertex3f( - dExt, - dPos, Z_DOWN) ;
- glVertex3f( dExt, - dPos, Z_DOWN) ;
+ if ( -dPos >= dExtMinY && -dPos <= dExtMaxY) {
+ glVertex3f( dExtMinX, -dPos, Z_DOWN) ;
+ glVertex3f( dExtMaxX, -dPos, Z_DOWN) ;
+ }
}
glEnd() ;
}
@@ -164,24 +212,34 @@ Scene::DrawGrid( void)
float fLenZ = float( min( m_dSnapStep, dLenZ)) ;
glBegin( GL_LINES) ;
// asse X+
- glColor3f( m_cColX.GetRed(), m_cColX.GetGreen(), m_cColX.GetBlue()) ;
- glVertex3f( 0, 0, Z_DOWN) ;
- glVertex3f( dExt, 0, Z_DOWN) ;
+ 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+
- glColor3f( m_cColY.GetRed(), m_cColY.GetGreen(), m_cColY.GetBlue()) ;
- glVertex3f( 0, 0, Z_DOWN) ;
- glVertex3f( 0, dExt, Z_DOWN) ;
+ 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+
- glColor3f( m_cColZ.GetRed(), m_cColZ.GetGreen(), m_cColZ.GetBlue()) ;
- glVertex3f( 0, 0, Z_DOWN) ;
- glVertex3f( 0, 0, fLenZ) ;
+ 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() ;
}
@@ -190,11 +248,15 @@ Scene::DrawGrid( void)
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) ;
+ if ( 0 >= dExtMinY && 0 <= dExtMaxY) {
+ glVertex3f( dExtMinX, 0, Z_DOWN) ;
+ glVertex3f( dExtMaxX, 0, Z_DOWN) ;
+ }
// asse Y
- glVertex3f( 0, - dExt, Z_DOWN) ;
- glVertex3f( 0, dExt, Z_DOWN) ;
+ if ( 0 >= dExtMinX && 0 <= dExtMaxX) {
+ glVertex3f( 0, dExtMinY, Z_DOWN) ;
+ glVertex3f( 0, dExtMaxY, Z_DOWN) ;
+ }
glEnd() ;
}
@@ -366,7 +428,7 @@ Scene::DrawRectangularGrid()
bool
Scene::SetGlobGridParameters( int nPosFlag, double dLenX, double dLenY)
{
- // controllo validità dei parametri...
+ // controllo validit� dei parametri...
if ( dLenX < GRID_MIN_LEN_X || dLenY < GRID_MIN_LEN_Y ||
nPosFlag < 0 || nPosFlag > 3 ) {
m_bShowFrame = false ;
@@ -401,4 +463,4 @@ bool
Scene::GetShowGrid()
{
return m_bShowGrid ;
-}
\ No newline at end of file
+}
diff --git a/SceneSnap.cpp b/SceneSnap.cpp
index 58c0d33..d99b535 100644
--- a/SceneSnap.cpp
+++ b/SceneSnap.cpp
@@ -32,6 +32,7 @@
#include "/EgtDev/Include/EGkIntersCurves.h"
#include "/EgtDev/Include/EGkIntersLinePlane.h"
#include "/EgtDev/Include/EGkIntersLineSurfTm.h"
+#include "/EgtDev/Include/EGkIntersLineVolZmap.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include
@@ -969,7 +970,7 @@ Scene::FindVolZmapSnapPoint( int nSnap, const Point3d& ptWin, int nId, const Fra
// cerco i triangoli intersecati dalla linea di mira
ILZIVECTOR vInfo ;
- if ( ! pVzm->GetLineIntersection( ptMir, vtDir, vInfo))
+ if ( ! IntersLineVolZmap( ptMir, vtDir, *pVzm, vInfo))
return false ;
// se non trovato alcunchè, cerco le linee che partono dagli angoli del rettangolo di mira
Vector3d vtWinD( -1, -1, 0) ;
@@ -984,7 +985,7 @@ Scene::FindVolZmapSnapPoint( int nSnap, const Point3d& ptWin, int nId, const Fra
ptMir2.ToLoc( frEnt) ;
ptMir2 -= vtDir * 2 * dBlRad ;
// interseco con la superficie
- if ( ! pVzm->GetLineIntersection( ptMir2, vtDir, vInfo))
+ if ( ! IntersLineVolZmap( ptMir2, vtDir, *pVzm, vInfo))
return false ;
}
if ( vInfo.size() == 0)