Merge commit '49dac32893ce1a6c894eea9057049208579c1206' into Cube

This commit is contained in:
Riccardo Elitropi
2024-03-04 13:39:01 +01:00
8 changed files with 197 additions and 127 deletions
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -205,7 +205,7 @@ copy $(TargetPath) \EgtProg\Dll32</Command>
<DisableSpecificWarnings>
</DisableSpecificWarnings>
<OmitFramePointers>true</OmitFramePointers>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
<EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
<EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
<CompileAs>CompileAsCpp</CompileAs>
+26 -17
View File
@@ -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
+25 -35
View File
@@ -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()) ;
+30 -24
View File
@@ -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 ;
+7 -5
View File
@@ -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 ;
+105 -43
View File
@@ -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 ;
}
}
+3 -2
View File
@@ -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 <array>
@@ -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)