quadric.cpp

00001 #include "quadric.h"
00002 
00003 #include <geometry/quaternion.h>
00004 
00005 #include <util/glu.h>
00006 
00007 #include <iostream>
00008 
00009 using geometry::Matrix4d;
00010 using geometry::Point4d;
00011 using geometry::Quaternion;
00012 
00013 namespace shape
00014 {
00015   void sphere(const Point3d& center, double radius, int slices, int stacks)
00016   {
00017     glMatrixMode(GL_MODELVIEW);
00018     glPushMatrix();
00019     glTranslated(center.x(), center.y(), center.z());
00020     GLUquadric *q = gluNewQuadric();
00021     gluSphere(q, radius, slices, stacks);
00022     gluDeleteQuadric(q);
00023     glPopMatrix();
00024   }
00025 
00026   void cylinder(const Point3d& base_center, const Point3d& axis,
00027                 double radius_base, double radius_top, double length,
00028                 int slices, int stacks, bool closed)
00029   {
00030     Quaternion rot(Point3d(0,0,1), axis);
00031 
00032     glMatrixMode(GL_MODELVIEW);
00033     glPushMatrix();
00034     Matrix4d m;
00035     rot.setMatrix(m);
00036     m(0,3) = base_center.x();
00037     m(1,3) = base_center.y();
00038     m(2,3) = base_center.z();
00039     GLdouble mm[16];
00040     m.fillArray(mm, false);
00041     glMultMatrixd(mm);
00042     GLUquadric *q = gluNewQuadric();
00043     gluCylinder(q, radius_base, radius_top, length, slices, stacks);
00044     if(closed)
00045     {
00046       gluQuadricOrientation(q, GLU_INSIDE);
00047       gluDisk(q, 0, radius_base, slices, 1);
00048       glTranslated(0,0,length);
00049       gluQuadricOrientation(q, GLU_OUTSIDE);
00050       gluDisk(q, 0, radius_top, slices, 1);
00051     }
00052     gluDeleteQuadric(q);
00053     glPopMatrix();
00054   }
00055 
00056   void disk(const Point3d& center, const Point3d& normal,
00057             double inner_radius, double outer_radius,
00058             int slices, int loops)
00059   {
00060     Quaternion rot(Point3d(0,0,1), normal);
00061 
00062     glMatrixMode(GL_MODELVIEW);
00063     glPushMatrix();
00064     Matrix4d m;
00065     rot.setMatrix(m);
00066     m(0,3) = center.x();
00067     m(1,3) = center.y();
00068     m(2,3) = center.z();
00069     GLdouble mm[16];
00070     m.fillArray(mm, false);
00071 
00072     glMultMatrixd(mm);
00073     GLUquadric *q = gluNewQuadric();
00074     gluDisk(q, inner_radius, outer_radius, slices, loops);
00075     gluDeleteQuadric(q);
00076     glPopMatrix();
00077   }
00078 
00079 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Fri May 31 15:37:51 2013 for VVE by  doxygen 1.6.3