From 7294508074b1e37b19c36737c37125ccaaa0b0fa Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Wed, 12 Oct 2022 10:13:47 +0200 Subject: [PATCH] EgtGraphics : - visualizzazione e controllo del cubetto. --- EgtGraphics.vcxproj | 1 + EgtGraphics.vcxproj.filters | 3 + Scene.h | 10 + SceneBasic.cpp | 2 + SceneGlobCube.cpp | 1071 +++++++++++++++++++++++++++++++++++ SceneSelect.cpp | 6 + 6 files changed, 1093 insertions(+) create mode 100644 SceneGlobCube.cpp 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 ; }