From 14ffb16d795cc1d204b032ddb1d6138d7939ed65 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 23 Aug 2023 16:47:39 +0200 Subject: [PATCH 01/14] EgtGraphics 2.5h1 : - migliorata distribuzione connessioni tra sopra e sotto di curve per spessore. --- EgtGraphics.rc | Bin 11606 -> 11606 bytes SceneGeom.cpp | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index dee72decbd940bd48988d1aab8877c80b9c437b8..f23ca22bbecc89da1965068ea39e308556b1a420 100644 GIT binary patch delta 86 zcmcZ>buDVcH#SC#&5d%x%#0bE&r4P_Zf@f?V+IQyW}4g}m;)BBW!#)4Y=R-Ykp)e! IfU+AG08H*3WB>pF delta 86 zcmcZ>buDVcH#SD|&5d%x%#7)q&r4P_Zf@f?V+IQyW}4g}m;)BBW!#)4Y=R-Ykp)e! IfU+AG085k|TmS$7 diff --git a/SceneGeom.cpp b/SceneGeom.cpp index b5aeb12..f5df0ba 100644 --- a/SceneGeom.cpp +++ b/SceneGeom.cpp @@ -972,18 +972,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 ; From 000db07d851eb3c94a4b1dda9953a9fbc2ea1641 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 11 Sep 2023 10:40:26 +0200 Subject: [PATCH 02/14] EgtGraphics 2.5i1 : - ricompilazione con cambio versione. --- EgtGraphics.rc | Bin 11606 -> 11606 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index f23ca22bbecc89da1965068ea39e308556b1a420..6fc6bfcd05de549b30b8709f68f61fa4027e6bf0 100644 GIT binary patch delta 86 zcmcZ>buDVcH#SDg&5d%x%#4|v&r4P_Zf@f?V+IQyW}4g}m;)BBW!#)4Y=R-Ykp)e! IfU+AG08U69YybcN delta 86 zcmcZ>buDVcH#SC#&5d%x%#0bE&r4P_Zf@f?V+IQyW}4g}m;)BBW!#)4Y=R-Ykp)e! IfU+AG08H*3WB>pF From eaa964eca25904fbaea8ab85b8ae5c1e1fb008bd Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 12 Sep 2023 16:02:03 +0200 Subject: [PATCH 03/14] EgtGraphics : - in visualizzazione Zmap si verifica se single-dexel o tri-dexel per normale singola o tripla ai triangoli. --- SceneGeom.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SceneGeom.cpp b/SceneGeom.cpp index f5df0ba..623e217 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())) ; From e51b4d575091f60f88e7f524a6cabdf39eed289a Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 21 Sep 2023 15:25:25 +0200 Subject: [PATCH 04/14] EgtGraphics 2.5i5 : - ricompilazione a 64bit con Enable Enhanced Instruction Set = Not Set. --- EgtGraphics.rc | Bin 11606 -> 11606 bytes EgtGraphics.vcxproj | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 6fc6bfcd05de549b30b8709f68f61fa4027e6bf0..2ff129f835bdfe2ecd6e1636239de3db3184b298 100644 GIT binary patch delta 92 zcmcZ>buDVcFE&Qg%?J7RGfm>rnOvZ#2IO6otYqBW#%;w6meB=K7bUA1H)jc3pa^Yd L!LC(6*^LVT@FpIR delta 92 zcmcZ>buDVcFE&QQ%?J7RGfm>rnOvZ#2IO6otYqBW#%;w6meB=K7bUA1H)jc3pa^Yd L!LC(6*^LVT>Rujj diff --git a/EgtGraphics.vcxproj b/EgtGraphics.vcxproj index 3ddf4be..b3c847f 100644 --- a/EgtGraphics.vcxproj +++ b/EgtGraphics.vcxproj @@ -205,7 +205,7 @@ copy $(TargetPath) \EgtProg\Dll32 true - AdvancedVectorExtensions2 + NotSet false true CompileAsCpp From 43daacac9a3f6c6bdb034e3a11c7da3406ac6034 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 9 Oct 2023 13:03:37 +0200 Subject: [PATCH 05/14] EgtGraphics 2.5j1 : - ricompilazione con cambio versione. --- EgtGraphics.rc | Bin 11606 -> 11614 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 2ff129f835bdfe2ecd6e1636239de3db3184b298..15b66a0affa74e1b4cef23c9166fdeaf3d81c3a8 100644 GIT binary patch delta 124 zcmcZ>buVheH#T-d1_K5i2E)w<`SvqS;?bF0ps2!}1>|3ptYqBW#%;!oq(Yk+Dpk$6 VIZN0CtJHcHBn?=M6i{~K0szH*B3u9f delta 126 zcmcZ?buDVcH#SyF1|0^|&41bWnVB;gOeZt)=x$aJ@?qTE!EMG2m)y@ZIYTlBNkJ0} VZaF{3%|X&82+imwODMZ>0RYAFAl?7~ From 69e7dab720013ea373dc90419d652d8da9adaae8 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 3 Nov 2023 17:23:28 +0100 Subject: [PATCH 06/14] EgtGraphics 2.5k1 : - ricompilazione con cambio versione. --- EgtGraphics.rc | Bin 11614 -> 11614 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 15b66a0affa74e1b4cef23c9166fdeaf3d81c3a8..480e1a289a9bcb09fee8d3bee721dc167eacb005 100644 GIT binary patch delta 86 zcmcZ?buVhe4>m@_%?J4oGfm#Z8Nism`J-Sp8MJ Ksy+#2H!c95&mQ&w delta 86 zcmcZ?buVhe4>m@F%?J4oGfm#Z8Nise`J-Sp8MJ Ksy+#2H!c94YaZ?Z From 8611f15893d8dd049567a300ac6f94b779283b0c Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 22 Nov 2023 20:22:10 +0100 Subject: [PATCH 07/14] =?UTF-8?q?EgtGraphics=20:=20-=20aggiunta=20possibil?= =?UTF-8?q?it=C3=A0=20di=20forzare=20in=20ogni=20caso=20la=20visualizzazio?= =?UTF-8?q?ne=20di=20parti=20custom=20di=20un=20oggetto.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SceneGeom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SceneGeom.cpp b/SceneGeom.cpp index 623e217..634e03c 100644 --- a/SceneGeom.cpp +++ b/SceneGeom.cpp @@ -648,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)) ; } } } From 199fbf25d808d1f1c686dd967a6ab95706b53884 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 1 Dec 2023 16:44:48 +0100 Subject: [PATCH 08/14] EgtGraphics 2.5l1 : - ricompilazione con cambio versione. --- EgtGraphics.rc | Bin 11614 -> 11614 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 480e1a289a9bcb09fee8d3bee721dc167eacb005..679cdcb0ece9f57be0109bf726ea798fe7137acd 100644 GIT binary patch delta 86 zcmcZ?buVhe4>m@l%?J4oGfm#Z8Nisc`J-Sp8MJ Ksy+#2H!c97Gami` delta 86 zcmcZ?buVhe4>m@_%?J4oGfm#Z8Nism`J-Sp8MJ Ksy+#2H!c95&mQ&w From fec352f37b3bf18ef3ddc92d0f2bfb9a65c2a74f Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 29 Dec 2023 13:03:10 +0100 Subject: [PATCH 09/14] =?UTF-8?q?EgtGraphics=202.5l2=20:=20-=20tolta=20una?= =?UTF-8?q?=20inutile=20rotazione=20di=20180=C2=B0=20attorno=20a=20Z=20nel?= =?UTF-8?q?la=20vista=20da=20sotto.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtGraphics.rc | Bin 11614 -> 11614 bytes SceneCamera.cpp | 8 ++------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 679cdcb0ece9f57be0109bf726ea798fe7137acd..e658069ada10cb66ffb790c9af09a92ff5565e68 100644 GIT binary patch delta 102 zcmcZ?buVheA2vp#&41YhnHh~HGxF$eRuJ-G+}y!!1LOmR_cKk-kj#Tib+BL)^<&%| PBy9!JfNG9}vKtowj!GS# delta 102 zcmcZ?buVheA2vqA&41YhnHdcyGxF$eRuJ-G+}y!!1LOmR_cKk-kj#Tib+BL)^<&%| PBy9!JfNG9}vKtowjFugi diff --git a/SceneCamera.cpp b/SceneCamera.cpp index f61df93..fc0fead 100644 --- a/SceneCamera.cpp +++ b/SceneCamera.cpp @@ -202,12 +202,8 @@ Scene::CalcDirUp( void) // direzione perpendicolare giacente nel piano XY // ( 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 ; - } + if ( ! vtPerpXY.Normalize()) + vtPerpXY = -X_AX ; // direzione Up m_vtUp = vtPerpXY ^ m_vtDirCamera ; m_bUpOk = m_vtUp.Normalize() ; From 4081ff783061fbae401f2a44918fa375b7e715f5 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 9 Jan 2024 18:30:04 +0100 Subject: [PATCH 10/14] EgtGraphics 2.5l6 : - aggiunta gestione disegno grid asimmetrica, impostabile con SetGridGeoAdv. --- EgtGraphics.rc | Bin 11614 -> 11614 bytes Scene.h | 30 +++++---- SceneBasic.cpp | 13 ++-- SceneGrid.cpp | 173 ++++++++++++++++++++++++++++++++++--------------- 4 files changed, 146 insertions(+), 70 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index e658069ada10cb66ffb790c9af09a92ff5565e68..8caf8429fa0f5599509ba326891c6b535a43dd83 100644 GIT binary patch delta 102 zcmcZ?buVheA2vp_&41YhnHkL{GxF$eRuJ-G+}y!!1LOmR_cKk-kj#Tib+BL)^<&%| PBy9!JfNG9}vKtowl^Pws delta 102 zcmcZ?buVheA2vp#&41YhnHh~HGxF$eRuJ-G+}y!!1LOmR_cKk-kj#Tib+BL)^<&%| PBy9!JfNG9}vKtowj!GS# diff --git a/Scene.h b/Scene.h index b3a22c7..0c8a02e 100644 --- a/Scene.h +++ b/Scene.h @@ -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 diff --git a/SceneBasic.cpp b/SceneBasic.cpp index 10c498b..68f7ccd 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) @@ -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 diff --git a/SceneGrid.cpp b/SceneGrid.cpp index afa901f..bb5a42b 100644 --- a/SceneGrid.cpp +++ b/SceneGrid.cpp @@ -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 ; -} \ No newline at end of file +} From d61656fdd4fbb287e5e66856dd2dd672b7c1893f Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 16 Jan 2024 15:12:52 +0100 Subject: [PATCH 11/14] EgtGraphics 2.6a1 : - ricompilazione con cambio versione. --- EgtGraphics.rc | Bin 11614 -> 11606 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 8caf8429fa0f5599509ba326891c6b535a43dd83..4acc954e3ab10e3b2bd3a2e07059e1608aa8c422 100644 GIT binary patch delta 241 zcmcZ?buDVcCpJzq1|0@N5T5*(O_R}V^LxIjOq2I;`mvfZBmxB)d2}Z$2<>7tnY>?W z;^YqQbCW*_N^H*K@nOQE^FI?7U6Uv037>)La$=lZA)7V%pXdUjbZ_1-70(FOYQ?y@ VKvswmi#|N=l~9Jb_n&eCCjbyMN(le} delta 242 zcmcZ>buVheCpKUAySWOvnfC3jKpEDXyu2-5oxr6%* zqv_;}9O9b|WULrBFXI(r#Hw{F)8q!hEHv#CCuazsL)P9QN}6^rX@qtkCae~tx_NWG TQamHX#>oaUuQoqWDdPYD_tHnz From 1c37299baffaaf9bf71fe16d10951f0a4bace6d2 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 16 Feb 2024 08:44:23 +0100 Subject: [PATCH 12/14] EgtGraphics 2.6b3 : - ricompilazione con cambio versione. --- EgtGraphics.rc | Bin 11606 -> 11606 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 4acc954e3ab10e3b2bd3a2e07059e1608aa8c422..19aa6010eabdcdf48e21de3e90333fd8afa63352 100644 GIT binary patch delta 116 zcmcZ>buDVcH#Sxy1|0_D%?J7RGfm>rnOvZ#!kh%;UzDt5+}y@(#tfI&W`;^sGj7fj SHo+pXo&~NLi(vxFZd?Eiy&-@A delta 116 zcmcZ>buDVcH#Sy71|0^&%?J7RGfm>rnOvZ#!kh@?UzDt5+}y@(#tfI&W`;^sGj7fj SHo+pXo&~NLi(vxFZd?EdUm<7! From e8b10ef4e812cf7ee3123478e50e02116c501701 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 19 Feb 2024 14:50:00 +0100 Subject: [PATCH 13/14] =?UTF-8?q?EgtGraphics=202.6b4=20:=20-=20aggiunta=20?= =?UTF-8?q?possibilit=C3=A0=20di=20un=20offset=20angolare=20in=20viste=20s?= =?UTF-8?q?tandard.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtGraphics.rc | Bin 11606 -> 11606 bytes Scene.h | 12 ++++++++--- SceneBasic.cpp | 1 + SceneCamera.cpp | 52 +++++++++++++++++++++++++++++------------------- 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 19aa6010eabdcdf48e21de3e90333fd8afa63352..c49bb2be37082f80b82619260f2b2421ac9baa85 100644 GIT binary patch delta 92 zcmcZ>buDVcFE&P#%?J7RGfm>rnOvZ#2IO6otYqBW#%;w6meB=K7bUA1H)jc3pa^Yd L!LC(6*^LVT?zA3= delta 92 zcmcZ>buDVcFE&Qw%?J7RGfm>rnOvZ#2IO6otYqBW#%;w6meB=K7bUA1H)jc3pa^Yd L!LC(6*^LVT?Lr=a diff --git a/Scene.h b/Scene.h index 0c8a02e..bb55d4f 100644 --- a/Scene.h +++ b/Scene.h @@ -1,12 +1,13 @@ //---------------------------------------------------------------------------- // EgalTech 2014-2024 //---------------------------------------------------------------------------- -// File : Scene.h Data : 09.01.24 Versione : 2.5l7 +// 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 @@ -239,8 +244,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) ; @@ -292,6 +297,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 diff --git a/SceneBasic.cpp b/SceneBasic.cpp index 68f7ccd..989c5fe 100644 --- a/SceneBasic.cpp +++ b/SceneBasic.cpp @@ -53,6 +53,7 @@ Scene::Scene( void) m_bNewWay = false ; // Camera e viewport m_ptCenter = ORIG ; + m_nOrizzOffsCamera = 0 ; SetCamera( 0, 0, 0) ; m_nViewportW = 0 ; m_nViewportH = 0 ; diff --git a/SceneCamera.cpp b/SceneCamera.cpp index fc0fead..de14c00 100644 --- a/SceneCamera.cpp +++ b/SceneCamera.cpp @@ -83,16 +83,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() ; @@ -101,14 +101,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()) @@ -118,12 +119,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() ; } //---------------------------------------------------------------------------- @@ -157,25 +162,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 ; @@ -194,7 +201,7 @@ Scene::GetProjectedCenter( void) const //---------------------------------------------------------------------------- bool -Scene::CalcDirUp( void) +Scene::CalcDirUp( bool bUseOrizzOffsCamera) { // verifico se il calcolo è necessario if ( m_bUpOk) @@ -202,8 +209,11 @@ Scene::CalcDirUp( void) // direzione perpendicolare giacente nel piano XY // ( m_vtDirCamera è opposta alla direzione in cui si guarda) Vector3d vtPerpXY = m_vtDirCamera ^ Z_AX ; - if ( ! vtPerpXY.Normalize()) + if ( ! vtPerpXY.Normalize()) { vtPerpXY = -X_AX ; + if ( bUseOrizzOffsCamera) + vtPerpXY.Rotate( Z_AX, m_nOrizzOffsCamera * ANG_RIGHT) ; + } // direzione Up m_vtUp = vtPerpXY ^ m_vtDirCamera ; m_bUpOk = m_vtUp.Normalize() ; From 49dac32893ce1a6c894eea9057049208579c1206 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 26 Feb 2024 15:15:58 +0100 Subject: [PATCH 14/14] EgtGraphics : - adattamenti a modifche GeomKernel. --- SceneSnap.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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)