Files
EgtGraphics/SceneGlobCube.cpp
T
Riccardo Elitropi e5a7ec2ff6 EgtExchange :
- impostazione parametri del cubo
- Visualizzazione del cubo
2022-10-17 08:40:53 +02:00

727 lines
44 KiB
C++

//----------------------------------------------------------------------------
// 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"
#include "/EgtDev/Include/EGkGeomDB.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 il primo Id libero e aggiungo 1000
m_nStartFaceId = m_pGeomDB->GetNewId() + 1000 ;
// recupero la matrice viewport
GLint Viewport[4] ;
glGetIntegerv( GL_VIEWPORT, Viewport) ;
// imposto il centro del cubo e la lunghezza del lato (m_dCubeX, m_dCubeY, m_dCubeEdge) <------------------
if ( ! SetGlobCubeParameters( Viewport[2] - 50, 50, 50))
return false ;
// imposto il riferimento
glPushMatrix() ;
// se sono in selezione il cubo lo lascio nella posizione precedente (cambio di viewport => cambio centro del cubo)
Point3d ptOrig ;
if ( m_bSelect)
ptOrig = m_ptOrigCube ;
else {
UnProject( Point3d( m_dCubeX, m_dCubeY, 0.25), ptOrig) ; // posizione Z del cubo sempre 0.25 dallo schermo
m_ptOrigCube = ptOrig ;
}
const double HALF_LEN_EDGE = float( m_dCubeEdge / 2) ;
// dimensioni facce FRONT, BACK, TOP, BOTTON, LEFT, RIGHT
const double PRIMARY_LEN_EDGE = float( m_dCubeEdge / 2) ; // dimensione lunghezza surf da 2 touches
const double PRIMAL_HALF_LEN_EDGE = PRIMARY_LEN_EDGE / 2 ; // dimensione altezza surf da 2 touches
// imposto la lunghezza/2 del lato a seconda dello zoom
double d_main_HLen = PRIMAL_HALF_LEN_EDGE * ( 2 * m_dHalfWidth) / Viewport[2];
// dimensioni parti 2-clicks
const double SECONDARY_LEN_EDGE = float( m_dCubeEdge / 4) ; // dimensione lato degli otto cubetti sugli spigoli
const double SECONDARY_HALF_LEN_EDGE = SECONDARY_LEN_EDGE / 2 ;
// imposto la lunghezza/2 del lato più lungo della superficie e 2 touches a seconda dello zoom
double d_second_Hlen = SECONDARY_HALF_LEN_EDGE * ( 2 * m_dHalfWidth) / Viewport[2] ;
// facce -------------------------------------------------------------------------------------------------
glEnable( GL_DEPTH_TEST) ;
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL) ;
// disegno faccia TOP del cubo --> +Z
if ( m_bSelect)
glLoadName( m_nStartFaceId + 1) ;
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( m_nStartFaceId + 2) ;
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( m_nStartFaceId + 3) ;
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( m_nStartFaceId + 4) ;
// 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( m_nStartFaceId + 5) ;
// 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( m_nStartFaceId + 6) ;
// 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() ;
// disegno faccia TOP-RIGHT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 7) ;
glColor3d( 0.8, 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, 0.8) ;
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() ;
// disegno faccia TOP-LEFT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 8) ;
glColor3d( 0.3, 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, 0.8) ;
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() ;
// disegno faccia BOTTOM-RIGHT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 9) ;
glColor3d( 0.8, 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.3, 0.5) ;
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() ;
// disegno faccia BOTTOM-LEFT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 10) ;
glColor3d(0.3, 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.3, 0.5) ;
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() ;
// disegno faccia TOP-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 11) ;
glColor3d( 0, 0.8, 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, 0.8) ;
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() ;
// disegno faccia TOP-FRONT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 12) ;
glColor3d( 0.1, 0.6, 0.3) ;
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, 0.8) ;
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() ;
// disegno faccia BOTTOM-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 13) ;
glColor3d( 0, 0.8, 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.3, 0.5) ;
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() ;
// disegno faccia BOTTOM-FRONT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 14) ;
glColor3d( 0.1, 0.6, 0.3) ;
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.3, 0.5) ;
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() ;
// disegno faccia RIGHT-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 15) ;
glColor3d( 0.8 , 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, 0.8, 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() ;
// disegno faccia LEFT-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 16) ;
glColor3d( 0.3, 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, 0.8, 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() ;
// disegno faccia FRONT-RIGHT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 17) ;
glColor3d( 0.8, 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.1, 0.6, 0.3) ;
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() ;
// disegno faccia FRONT-LEFT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 18) ;
glColor3d( 0.3, 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.1, 0.6, 0.3) ;
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() ;
// disegno faccia TOP-RIGHT-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 19);
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() ;
// disegno faccia TOP-LEFT-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 20) ;
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() ;
// disegno faccia TOP-RIGHT-FRONT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 21) ;
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() ;
// disegno faccia TOP-LEFT-FRONT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 22) ;
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() ;
// disegno faccia BOTTOM-RIGHT-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 23) ;
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() ;
// disegno faccia BOTTOM-LEFT-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 24) ;
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() ;
// disegno faccia BOTTOM-RIGHT-BACK del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 25) ;
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() ;
// disegno faccia BOTTOM-LEFT-FRONT del cubo
if ( m_bSelect)
glLoadName( m_nStartFaceId + 26) ;
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 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 <= m_nStartFaceId || nId >= m_nStartFaceId + 27)
return false ;
// prendo i parametri della telecamera
double dTheta, dPhi, dDist ;
GetCamera( &dPhi, &dTheta, &dDist) ;
// ottengo la faccia del cubo selezionato (valore tra 1 e 26)
int nCubeface = nId - m_nStartFaceId ;
// imposto i nuovi angoli theta e phi mantenendo la distanza
if ( GetAngleByCubeFace( nCubeface, dTheta, dPhi))
SetCamera( dPhi, dTheta, dDist) ;
m_nSelNbr = 0 ;
RedrawWindow() ;
return true ;
}
//----------------------------------------------------------------------------
bool
Scene::GetAngleByCubeFace( int nFaceId, double &dTheta, double &dPhi)
{
switch ( nFaceId)
{
case 1 : //TOP
dPhi = 0 ;
dTheta = 270;
break ;
case 2 : // BOTTOM
dPhi = 180 ;
dTheta = 270;
break ;
case 3 : // RIGHT
dPhi = 90 ;
dTheta = 0 ;
break ;
case 4 : // LEFT
dPhi = 90 ;
dTheta = 180 ;
break ;
case 5 : // BACK
dPhi = 90 ;
dTheta = 90;
break ;
case 6 : // FRONT
dPhi = 90;
dTheta = 270;
break;
case 7 : // TOP-RIGHT
dPhi = 45 ;
dTheta = 0 ;
break;
case 8 : // TOP-LEFT
dPhi = 45;
dTheta = 180;
break;
case 9 : // BOTTOM-RIGHT
dPhi = 225;
dTheta = 180;
break;
case 10 : // BOTTOM-LEFT
dPhi = 225 ;
dTheta = 0 ;
break ;
case 11 : // TOP-BACK
dPhi = 45 ;
dTheta = 90 ;
break ;
case 12 : // TOP-FRONT
dPhi = 45 ;
dTheta = 270 ;
break ;
case 13 : // BOTTOM-BACK
dPhi = 225 ;
dTheta = 270 ;
break ;
case 14 : // BOTTOM-FRONT
dPhi = 225 ;
dTheta = 90 ;
break ;
case 15 : // RIGHT-BACK
dPhi = 90 ;
dTheta = 45 ;
break ;
case 16 : // LEFT-BACK
dPhi = 90 ;
dTheta = 135 ;
break ;
case 17 : // FRONT-RIGHT
dPhi = 90 ;
dTheta = 315 ;
break;
case 18 : // FRONT-LEFT
dPhi = 90;
dTheta = 225 ;
break ;
case 19 : // TOP-RIGHT-BACK
dPhi = 45 ;
dTheta = 45 ;
break ;
case 20 : // TOP-LEFT-BACK
dPhi = 45 ;
dTheta = 135 ;
break ;
case 21 : // TOP-RIGHT-FRONT
dPhi = 45 ;
dTheta = 315 ;
break;
case 22 : // TOP-LEFT-FRONT
dPhi = 45 ;
dTheta = 225 ;
break;
case 23 : // BOTTOM-RIGHT-BACK
dPhi = 135 ;
dTheta = 45 ;
break;
case 24 : // BOTTOM-LEFT-FRONT
dPhi = 135;
dTheta = 135 ;
break ;
case 25 : // BOTTOM-RIGHT-BACK
dPhi = 135 ;
dTheta = 315 ;
break ;
case 26: // BOTTOM-LEFT-FRONT
dPhi = 135;
dTheta = 215 ;
break ;
default :
break ;
}
return true;
}
//----------------------------------------------------------------------------
bool
Scene::SetGlobCubeParameters( double dposX, double dPosY, double dEdge)
{
// recupero la matrice viewport
GLint Viewport[4] ;
glGetIntegerv( GL_VIEWPORT, Viewport) ;
// controllo che il cubo stia nella Viewport verticale
if (dposX <= sqrt(3) * m_dCubeEdge / 2 * sqrt(2) / 2 + 3 || dposX >= Viewport[2] - sqrt(3) * m_dCubeEdge / 2 * sqrt(2) / 2 - 3)
return false ;
// controllo che il cubo stia nella Viewport orizzontale
if ( dPosY <= Viewport[1] + sqrt(3) * m_dCubeEdge / 2 * sqrt(2) / 2 + 3 || dPosY >= Viewport[3] - sqrt(3) * m_dCubeEdge / 2 * sqrt(2) / 2 - 3)
return false ;
// controllo il raggio del cubo
if ( dEdge < 20)
return false ;
// imposto le variabili membro
m_dCubeX = dposX ;
m_dCubeY = dPosY ;
m_dCubeEdge = dEdge ;
return true ;
}