Merge commit '49dac32893ce1a6c894eea9057049208579c1206' into Cube
This commit is contained in:
Binary file not shown.
+1
-1
@@ -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>
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user