#include <GL/gl.h>
#include "tool.h"
void FlatTool::draw(const Vector3 &pos, const Vector3 &dir) const {
const int segments = 16;
const Real len = 10*radius;
glPushMatrix();
glEnable(GL_LIGHTING);
glColor4d(1, 1, 0, 0.25);
glTranslated(pos.x, pos.y, pos.z);
Vector3 vx = dir.cross(Vector3(dir.y, dir.z, dir.x));
vx = vx*(1/vx.len());
Vector3 vy = vx.cross(dir);
Real matrix[16] = {
vx.x, vx.y, vx.z, 0,
vy.x, vy.y, vy.z, 0,
dir.x, dir.y, dir.z, 0,
0, 0, 0, 1 };
glMultMatrixd(matrix);
glBegin(GL_TRIANGLE_STRIP);
for(int i = 0; i <= segments; ++i) {
Real a = 2*M_PI*i/segments;
Real c = cos(a);
Real s = sin(a);
glNormal3b(c, s, 0);
glVertex3d(c*radius, s*radius, 0);
glVertex3d(c*radius, s*radius, -len);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glNormal3b(0, 0, 1);
for(int i = 0; i < segments; ++i) {
Real a = 2*M_PI*i/segments;
glVertex3d(cos(a)*radius, sin(a)*radius, 0);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glNormal3b(0, 0, -1);
for(int i = 0; i < segments; ++i) {
Real a = 2*M_PI*i/segments;
glVertex3d(cos(a)*radius, sin(a)*radius, -len);
}
glEnd();
glDisable(GL_LIGHTING);
glPopMatrix();
}