diff --git a/EgtGraphics.vcxproj b/EgtGraphics.vcxproj
index 3c3b83e..b452fd1 100644
--- a/EgtGraphics.vcxproj
+++ b/EgtGraphics.vcxproj
@@ -261,6 +261,7 @@ copy $(TargetPath) \EgtProg\Dll64
+
diff --git a/EgtGraphics.vcxproj.filters b/EgtGraphics.vcxproj.filters
index 3607348..b9fe3a2 100644
--- a/EgtGraphics.vcxproj.filters
+++ b/EgtGraphics.vcxproj.filters
@@ -140,6 +140,9 @@
File di origine
+
+ File di origine
+
diff --git a/Scene.h b/Scene.h
index c5e2a04..087fb08 100644
--- a/Scene.h
+++ b/Scene.h
@@ -106,6 +106,7 @@ class Scene : public IEGrScene
bool ZoomChange( double dCoeff) override ;
bool ZoomOnPoint( const Point3d& ptWin, double dCoeff) override ;
bool ZoomWin( const Point3d& ptWin1, const Point3d& ptWin2) override ;
+ bool RotateCameraWithCube( void) ;
// ShowMode
bool SetShowMode( int nShowMode) override
{ if ( nShowMode != SM_WIREFRAME &&
@@ -144,6 +145,8 @@ class Scene : public IEGrScene
bool SetGridColor( Color colMinLine, Color colMajLine) override ;
// Glob Frame
bool SetGlobFrameShow( bool bShow) override ;
+ // Glob Cube
+ bool SetGlobCubeShow( bool bShow) override ;
// Direct
bool SetGeoLineAttribs( Color GLcol) override ;
bool SetGeoLine( const Point3d& ptP1, const Point3d& ptP2) override ;
@@ -193,6 +196,8 @@ class Scene : public IEGrScene
// Image
bool GetImage( int nShowMode, Color colBackTop, Color colBackBottom,
int nDestWidth, int nDestHeight, const std::string& sFile) override ;
+ // Cube
+ bool GetAngleByCubeFace( double& dTheta, double& dPhi, int nFaceId) ;
public :
// Basic
@@ -252,6 +257,8 @@ class Scene : public IEGrScene
bool DrawGrid( void) ;
// Glob Frame
bool DrawGlobFrame( void) ;
+ // Glob Cube
+ bool DrawGlobCube( void) ;
// Direct
bool DrawDirect( void) ;
bool DrawGeoLine( void) ;
@@ -356,6 +363,9 @@ class Scene : public IEGrScene
Color m_colMajLine ; // colore delle linee maggiori
// Glob Frame
bool m_bShowGlobFrame ; // flag di visualizzazione del riferimento globale
+ // Glob Cube
+ bool m_bShowGlobCube ; // flag di visualizzazione del cubetto
+ Point3d m_ptOrigCube ; // centro del cubo in cordinate globali
// Direct
Color m_colorGL ; // colore per GeoLine
bool m_bGeoLine ; // flag esistenza linea diretta in finestra
diff --git a/SceneBasic.cpp b/SceneBasic.cpp
index 9aa2634..733df88 100644
--- a/SceneBasic.cpp
+++ b/SceneBasic.cpp
@@ -834,6 +834,8 @@ Scene::MyDraw( bool bSwapBF)
// disegno riferimento globale
DrawGlobFrame() ;
+ DrawGlobCube();
+
// aggiungo disegni diretti (con poligoni riempiti)
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL) ;
diff --git a/SceneGlobCube.cpp b/SceneGlobCube.cpp
new file mode 100644
index 0000000..308e88e
--- /dev/null
+++ b/SceneGlobCube.cpp
@@ -0,0 +1,1071 @@
+//----------------------------------------------------------------------------
+// EgalTech 2022
+//----------------------------------------------------------------------------
+// File : SceneGlobCube.cpp Data : 10.10.22 Versione : 1
+// Contenuto : Implementazione gestione e disegno Cubetto per viste.
+//
+//
+//
+// Modifiche : 11.10.22 DS Creazione modulo.
+//
+//
+//----------------------------------------------------------------------------
+
+//--------------------------- Include ----------------------------------------
+#include "stdafx.h"
+#include "Scene.h"
+#include "EGrUtils.h"
+
+
+using namespace std ;
+
+//----------------------------------------------------------------------------
+bool
+Scene::SetGlobCubeShow( bool bShow)
+{
+ m_bShowGlobCube = bShow ;
+ return true ;
+}
+
+//----------------------------------------------------------------------------
+bool
+Scene::DrawGlobCube(void)
+{
+ // se non devo disegnare, esco subito
+ if ( !m_bShowGlobCube)
+ return true;
+
+ // recupero la matrice viewport
+ GLint Viewport[4];
+ glGetIntegerv(GL_VIEWPORT, Viewport);
+
+ // imposto il riferimento
+ glPushMatrix() ;
+
+ // origine del riferimento globale ( a destra della scena )
+ const double DIST_BORDER = 100 ;
+ const double POS_Z = 0.25 ;
+ Point3d ptOrig ;
+
+ // se sono in selezione il cubo lo lascio nella posizione precedente (cambio di viewport => cambio centro del cubo)
+ if (m_bSelect)
+ ptOrig = m_ptOrigCube ;
+ else {
+ UnProject(Point3d(Viewport[2] - DIST_BORDER, Viewport[3] - DIST_BORDER, POS_Z), ptOrig);
+ m_ptOrigCube = ptOrig ;
+ }
+
+
+ // colori
+ // --- MAIN (1,0,0) | (0,1,0) | (0,0,1)
+ // --- SECOND (0.5, 0.1, 0) | (0.3,0.8,0.5) | (0,0.5,0.7)
+ // --- THIRD (1,0,0) | (0,1,0) | (0,0,1)
+
+
+
+ // dimensioni cubo
+ const double LEN_EDGE = DIST_BORDER*2 - 20 ;
+ const double HALF_LEN_EDGE = float( LEN_EDGE / 2) ;
+ //double dLen = LEN_AX * (2 * m_dHalfWidth) / Viewport[2];
+
+ // dimensioni facce FRONT, BACK, TOP, BOTTON, LEFT, RIGHT
+ const double PRIMARY_LEN_EDGE = LEN_EDGE / 2;
+ const double PRIMAL_HALF_LEN_EDGE = PRIMARY_LEN_EDGE / 2 ;
+ double d_main_HLen = PRIMAL_HALF_LEN_EDGE * ( 2 * m_dHalfWidth) / Viewport[2];
+
+ // dimensioni parti 2-clicks
+ const double SECONDARY_LEN_EDGE = LEN_EDGE / 4 ;
+ const double SECONDARY_HALF_LEN_EDGE = SECONDARY_LEN_EDGE / 2 ;
+ double d_second_Hlen = SECONDARY_HALF_LEN_EDGE * ( 2 * m_dHalfWidth) / Viewport[2] ;
+
+ // Contorni -------------------------------------------------------------------------------------------------------
+ glEnable(GL_DEPTH_TEST) ;
+ glLineWidth(1.5) ;
+ glColor3d( 0, 0, 0) ;
+
+ //glEnable( GL_LINE_SMOOTH) ;
+ //glEnable( GL_BLEND) ;
+ //glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;
+ //glHint( GL_LINE_SMOOTH_HINT, GL_DONT_CARE) ;
+
+ //z
+ glBegin(GL_LINES) ;
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd() ;
+ glBegin( GL_LINES) ;
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd() ;
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd() ;
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd() ;
+
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen + 0.05));
+ glEnd();
+
+
+ //-z
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen - 0.05));
+ glEnd();
+
+ //x
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+
+ //-x
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z - d_main_HLen));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y + d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.y - d_main_HLen), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+
+
+
+ //y
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen + 0.05), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+
+
+
+ //-y
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen - d_second_Hlen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen + d_second_Hlen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z + d_main_HLen + d_second_Hlen));
+ glEnd();
+ glBegin(GL_LINES);
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen));
+ glVertex3f(float(ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen - 0.05), float(ptOrig.z - d_main_HLen - d_second_Hlen));
+ glEnd();
+
+
+ // facce -------------------------------------------------------------------------------------------------
+ glEnable( GL_DEPTH_TEST) ;
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) ;
+
+ // ===================================
+ // ============= 1 CLICK =============
+ // ===================================
+
+ // disegno faccia TOP del cubo --> +Z
+ if ( m_bSelect)
+ glLoadName( 10501) ;
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ // disegno faccia BOTTOM del cubo --> -Z
+ if (m_bSelect)
+ glLoadName( 10502) ;
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ // disegno faccia RIGHT del cubo --> X
+ if ( m_bSelect)
+ glLoadName( 10503) ;
+ glColor3d( 1, 0, 0);
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glEnd();
+ if ( m_bSelect)
+ glLoadName( 10504) ;
+ // disegno faccia LEFT del cubo --> -X
+ glColor3d( 0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glEnd() ;
+ if ( m_bSelect)
+ glLoadName( 10505) ;
+ // disegno faccia BACK del cubo --> +Y
+ glColor3d( 0, 1, 0);
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glEnd();
+ if ( m_bSelect)
+ glLoadName( 10506) ;
+ // disegno faccia FRONT del cubo --> -Y
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin(GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glEnd() ;
+
+
+
+ // ===================================
+ // ============= 2 CLICKS ============
+ // ===================================
+
+ if ( m_bSelect)
+ glLoadName( 10507) ;
+ glColor3d( 1, 0, 0) ;
+ // TOP-RIGHT
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen), float(ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+
+
+ if ( m_bSelect)
+ glLoadName( 10508) ;
+ // TOP-LEFT
+ glColor3d( 0.5, 0.1, 0);
+ glBegin( GL_POLYGON);
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+
+ if ( m_bSelect)
+ glLoadName( 10509) ;
+ // BOTTOM-RIGHT
+ glColor3d( 1, 0, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+
+
+ if ( m_bSelect)
+ glLoadName( 10510) ;
+ // BOTTOM-LEFT
+ glColor3d(0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+
+ if ( m_bSelect)
+ glLoadName( 10511) ;
+ // TOP-BACK
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float(ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float(ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10512) ;
+ // TOP-FRONT
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+
+ if ( m_bSelect)
+ glLoadName( 10513) ;
+ // BOTTOM-BACK
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON);
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10514) ;
+ // BOTTOM-FRONT
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float(ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10515) ;
+ // RIGHT-BACK
+ glColor3d( 1 , 0, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glEnd() ;
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10516) ;
+ // LEFT-BACK
+ glColor3d( 0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glEnd() ;
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON);
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10517) ;
+ // FRONT-RIGHT
+ glColor3d( 1, 0, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glEnd() ;
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10518) ;
+ // FRONT-LEFT
+ glColor3d( 0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glEnd() ;
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glEnd() ;
+
+ // ===================================
+ // ============= 3 CLICKS ============
+ // ===================================
+
+ if ( m_bSelect)
+ glLoadName( 10519);
+ // TOP-RIGHT-BACK
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 1, 0, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10520) ;
+ // TOP-LEFT-BACK
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10521) ;
+ // TOP-RIGHT-FRONT
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 1, 0, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+
+ if ( m_bSelect)
+ glLoadName( 10522) ;
+ // TOP-LEFT-FRONT
+ glColor3d( 0, 0, 1) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z + d_main_HLen + d_second_Hlen)) ;
+ glEnd() ;
+
+
+ if ( m_bSelect)
+ glLoadName( 10523) ;
+ // BOTTOM-RIGHT-BACK
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 1, 0, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd();
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+
+
+ if ( m_bSelect)
+ glLoadName( 10524) ;
+ // BOTTOM-LEFT-BACK
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0, 1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y + d_main_HLen + d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+ if ( m_bSelect)
+ glLoadName( 10525) ;
+ // BOTTOM-RIGHT-BACK
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 1, 0, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen + d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x + d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float(ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+
+ if ( m_bSelect)
+ glLoadName( 10526) ;
+ // BOTTOM-LEFT-FRONT
+ glColor3d( 0, 0.5, 0.7) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd();
+ glColor3d( 0.5, 0.1, 0) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+ glColor3d( 0.3, 0.8, 0.5) ;
+ glBegin( GL_POLYGON) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen - d_second_Hlen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen)) ;
+ glVertex3f( float( ptOrig.x - d_main_HLen), float( ptOrig.y - d_main_HLen - d_second_Hlen), float( ptOrig.z - d_main_HLen - d_second_Hlen)) ;
+ glEnd() ;
+
+ if (m_bSelect)
+ glLoadName( 0) ;
+
+ // ripristino spessore linee
+ //glLineWidth((float)GetLineWidth());
+
+ // ripristino lo stack delle matrici
+ glPopMatrix() ;
+ return true ;
+}
+
+
+//----------------------------------------------------------------------------
+bool
+Scene::RotateCameraWithCube()
+{
+ // controllo se il cubetto è abilitato
+ if (! m_bShowGlobCube)
+ return false ;
+
+ // controllo se ho almeno un Id dalla selezione nel buffer
+ if ( m_nSelNbr == 0)
+ return false ;
+
+ int nId = m_nSelBuff[0].nId ;
+ // controllo che l'Id appartenga ad una superificie del cubetto
+ if ( nId <= 10500 + 0 || nId >= 10500 + 27)
+ return false ;
+
+ // prendo i parametri della telecamera
+ double dTheta, dPhi, dDist ;
+ GetCamera( &dPhi, &dTheta, &dDist) ;
+
+ // imposto i nuovi angoli theta e phi mantenendo la distanza
+ if ( GetAngleByCubeFace( dTheta, dPhi, nId))
+ SetCamera( dPhi, dTheta, dDist) ;
+
+ m_nSelNbr = 0 ;
+ RedrawWindow() ;
+
+ return true ;
+}
+
+//----------------------------------------------------------------------------
+bool
+Scene::GetAngleByCubeFace(double &dTheta, double &dPhi, int nFaceId) {
+ switch (nFaceId)
+ {
+ case 10500 + 1 : // top
+ dPhi = 0 ;
+ dTheta = 270;
+ break ;
+ case 10500 + 2 : // bottom
+ dPhi = 180 ;
+ dTheta = 270;
+ break ;
+ case 10500 + 3 : // front
+ dPhi = 90 ;
+ dTheta = 0 ;
+ break ;
+ case 10500 + 4 : // back
+ dPhi = 90 ;
+ dTheta = 180 ;
+ break ;
+ case 10500 + 5 : // right
+ dPhi = 90 ;
+ dTheta = 90;
+ break ;
+ case 10500 + 6 : // left
+ dPhi = 90;
+ dTheta = 270;
+ break;
+ case 10500 + 7 : //top-front
+ dPhi = 45 ;
+ dTheta = 0 ;
+ break;
+ case 10500 + 8 : // top-back
+ dPhi = 45;
+ dTheta = 180;
+ break;
+ case 10500 + 9 : // front-bottom
+ dPhi = 225;
+ dTheta = 0;
+ break;
+ case 10500 + 10 : // bottom-back
+ dPhi = 225 ;
+ dTheta = 180 ;
+ break ;
+ case 10500 + 11 : // top-right
+ dPhi = 45 ;
+ dTheta = 90 ;
+ break ;
+ case 10500 + 12 : // top-left
+ dPhi = 45 ;
+ dTheta = 270 ;
+ break ;
+ case 10500 + 13 : // bottom-right
+ dPhi = 225 ;
+ dTheta = 90 ;
+ break ;
+ case 10500 + 14 : // bottom-left
+ dPhi = 225 ;
+ dTheta = 270 ;
+ break ;
+ case 10500 + 15 : // front-right
+ dPhi = 90 ;
+ dTheta = 45 ;
+ break ;
+ case 10500 + 16 : // back-right
+ dPhi = 90 ;
+ dTheta = 135 ;
+ break ;
+ case 10500 + 17 : // front-left
+ dPhi = 90 ;
+ dTheta = 315 ;
+ break;
+ case 10500 + 18 : //back-left
+ dPhi = 90;
+ dTheta = 225 ;
+ break ;
+ case 10500 + 19 : // top-front-right
+ dPhi = 45 ;
+ dTheta = 45 ;
+ break ;
+ case 10500 + 20 : // top-back-right
+ dPhi = 45 ;
+ dTheta = 135 ;
+ break ;
+ case 10500 + 21 : // top-front-left
+ dPhi = 45 ;
+ dTheta = 315 ;
+ break;
+ case 10500 + 22 : // top-back-left
+ dPhi = 45 ;
+ dTheta = 225 ;
+ break;
+ case 10500 + 23 : // bottom-front-right
+ dPhi = 135 ;
+ dTheta = 45 ;
+ break;
+ case 10500 + 24 : // bottom-back-right
+ dPhi = 135;
+ dTheta = 135 ;
+ break ;
+ case 10500 + 25 : // bottom-front-left
+ dPhi = 135 ;
+ dTheta = 315 ;
+ break ;
+ case 10500 + 26: // bottom-back-left
+ dPhi = 135;
+ dTheta = 215 ;
+ break ;
+ default :
+ break ;
+ }
+ return true;
+}
diff --git a/SceneSelect.cpp b/SceneSelect.cpp
index 5831b3e..91bed4b 100644
--- a/SceneSelect.cpp
+++ b/SceneSelect.cpp
@@ -95,6 +95,8 @@ Scene::Select( const Point3d& ptSelCenter, int nW, int nH, int& nSel)
// non imposto glPolygonMode secondo il tipo di rendering perchè ignorato in selezione
// disegno le geometrie del DB in una sola passata
DrawGroup( GDB_ID_ROOT, 1, MdStMkCol( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF, m_colDef)) ;
+ // disegno il cubetto
+ DrawGlobCube() ;
// pulisco stack nomi
glPopName() ;
@@ -109,6 +111,10 @@ Scene::Select( const Point3d& ptSelCenter, int nW, int nH, int& nSel)
// riordino il buffer di selezione secondo la Zdepth minima crescente
qsort( m_nSelBuff, m_nSelNbr, sizeof( SelRec), CompareSelRec) ;
+ // controllo se ho selezionato una superficie sul cubetto
+ if ( RotateCameraWithCube())
+ ;
+
nSel = m_nSelNbr ;
return true ;
}