source: nanovis/branches/1.2/OrientationIndicator.cpp @ 5498

Last change on this file since 5498 was 5498, checked in by ldelgass, 4 years ago

Officially merge r3605 -- picks up OrientationIndicator?, but is disabled for
now.

  • Property svn:eol-style set to native
File size: 2.5 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * Copyright (c) 2004-2013  HUBzero Foundation, LLC
4 *
5 * Author: Leif Delgass <ldelgass@purdue.edu>
6 */
7
8#include <GL/glew.h>
9#include <GL/gl.h>
10#include <GL/glu.h>
11
12#include "OrientationIndicator.h"
13
14using namespace nv;
15
16OrientationIndicator::OrientationIndicator() :
17    _rep(ARROWS),
18    _visible(true),
19    _lineWidth(1.f),
20    _quadric(gluNewQuadric())
21{
22}
23
24OrientationIndicator::~OrientationIndicator()
25{
26    gluDeleteQuadric((GLUquadric *)_quadric);
27}
28
29void OrientationIndicator::setRepresentation(Representation rep)
30{
31    _rep = rep;
32}
33
34void OrientationIndicator::render()
35{
36    if (!_visible)
37        return;
38
39    glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT);
40
41    glDisable(GL_TEXTURE_2D);
42    glEnable(GL_DEPTH_TEST);
43    glEnable(GL_COLOR_MATERIAL);
44    glDisable(GL_BLEND);
45
46    switch (_rep) {
47    case LINES: {
48        glLineWidth(_lineWidth);
49        glDisable(GL_LIGHTING);
50        glColor3f(1, 0, 0);
51        glBegin(GL_LINES);
52        glVertex3f(0, 0, 0);
53        glVertex3f(0.5f, 0, 0);
54        glEnd();
55        glColor3f(0, 1, 0);
56        glBegin(GL_LINES);
57        glVertex3f(0, 0, 0);
58        glVertex3f(0, 0.5f, 0);
59        glEnd();
60        glColor3f(0, 0, 1);
61        glBegin(GL_LINES);
62        glVertex3f(0, 0, 0);
63        glVertex3f(0, 0, 0.5f);
64        glEnd();
65    }
66        break;
67    case ARROWS: {
68        GLUquadric *qobj = (GLUquadric *)_quadric;
69
70        int segments = 50;
71
72        glEnable(GL_LIGHTING);
73        glEnable(GL_LIGHT0);
74
75        // X
76        glColor3f(1, 0, 0);
77        glPushMatrix();
78        glRotatef(90, 0, 1, 0);
79        gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
80        glPopMatrix();
81
82        glPushMatrix();
83        glTranslatef(0.3, 0., 0.);
84        glRotatef(90, 0, 1, 0);
85        gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
86        glPopMatrix();
87
88        // Y
89        glColor3f(0, 1, 0);
90        glPushMatrix();
91        glRotatef(-90, 1, 0, 0);
92        gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
93        glPopMatrix();
94
95        glPushMatrix();
96        glTranslatef(0., 0.3, 0.);
97        glRotatef(-90, 1, 0, 0);
98        gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
99        glPopMatrix();
100
101        // Z
102        glColor3f(0, 0, 1);
103        glPushMatrix();
104        gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
105        glPopMatrix();
106
107        glPushMatrix();
108        glTranslatef(0., 0., 0.3);
109        gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
110        glPopMatrix();
111    }
112        break;
113    default:
114        ;
115    }
116   
117    glPopAttrib();
118}
Note: See TracBrowser for help on using the repository browser.