proj home

Files   Classes   Functions   Hierarchy  

trianglevisualize.h

Go to the documentation of this file.
00001 #ifndef TRIANGLEVISUALIZE_H
00002 #define TRIANGLEVISUALIZE_H
00003 
00004 #include <gobj.h>
00005 #include <mathlib.h>
00006 #include <triangle.h>
00007 
00015 template< typename T >
00016 class trianglevisualize
00017 {
00020   gobjContainer & gX;
00022   triangle<T> const & tr;
00023 public:
00024 
00026   bool mesh_on;
00028   bool midpoints_on;
00030   bool midpoint_center_on;
00033   bool altitude_to_point_on;
00035   bool altitude_on;
00037   bool innercircle_on;
00038 
00040   trianglevisualize
00041   (
00042     gobjContainer & _gX,
00043     triangle<T> const & _tr
00044   );
00045 
00047   void eval() const;
00048 
00049 };
00050 
00051 
00052 // -------------------------------------------------------- 
00053 // Implementation
00054 
00055 
00056 template< typename T >
00057 trianglevisualize<T>::trianglevisualize
00058 (
00059   gobjContainer & _gX,
00060   triangle<T> const & _tr
00061 )
00062   : gX(_gX), tr(_tr), mesh_on(true), midpoints_on(false),
00063     midpoint_center_on(false), altitude_to_point_on(false),
00064     altitude_on(false), innercircle_on(false)
00065 {
00066 }
00067 
00068 
00069 template< typename T >
00070 void trianglevisualize<T>::eval() const 
00071 {
00072   gX.push_back( new gobjglDisable(GL_LIGHTING) );
00073 
00074   if (mesh_on)
00075   {
00076 
00077   gX.push_back( new gobjglColor3ub(0,0,255) );
00078 
00079   gX.push_back( new gobjglBegin(GL_LINES) );
00080 
00081   gX.push_back( new gobjglVertex3f(tr.pi[0]) );
00082   gX.push_back( new gobjglVertex3f(tr.pi[1]) );
00083   gX.push_back( new gobjglVertex3f(tr.pi[0]) );
00084   gX.push_back( new gobjglVertex3f(tr.pi[2]) );
00085   gX.push_back( new gobjglVertex3f(tr.pi[1]) );
00086   gX.push_back( new gobjglVertex3f(tr.pi[2]) );
00087 
00088   gX.push_back( new gobjglEnd() );
00089 
00090   }
00091 
00092   gX.push_back( new gobjglColor3ub(255,0,255) );
00093 
00094   T m0 = tr.midpoint(0);
00095   T m1 = tr.midpoint(1);
00096   T m2 = tr.midpoint(2);
00097 
00098   gobjQuadric * gd = new gobjQuadric();
00099   gd->radius=.02;
00100   gX.push_back( gd );
00101 
00102   if (midpoints_on)
00103   {
00104   gX.push_back( new gobjglColor3ub(255,0,255) );
00105   gX.push_back( new gobjMySphereDraw(m0,gd) );
00106   gX.push_back( new gobjMySphereDraw(m1,gd) );
00107   gX.push_back( new gobjMySphereDraw(m2,gd) );
00108   }
00109   
00110   if (midpoint_center_on)
00111   {
00112   gX.push_back( new gobjglColor3ub(0,255,0) );
00113   gX.push_back( new gobjglBegin(GL_LINES) );
00114   gX.push_back( new gobjglVertex3f(tr.pi[0]) );
00115   gX.push_back( new gobjglVertex3f(m0) );
00116   gX.push_back( new gobjglVertex3f(tr.pi[1]) );
00117   gX.push_back( new gobjglVertex3f(m1) );
00118   gX.push_back( new gobjglVertex3f(tr.pi[2]) );
00119   gX.push_back( new gobjglVertex3f(m2) );
00120   gX.push_back( new gobjglEnd() );
00121 
00122   T mc = tr.centroid();
00123   gX.push_back( new gobjMySphereDraw(mc,gd) );
00124   }
00125 
00126   T vc = tr.orthocenter();
00127 
00128   if (altitude_to_point_on)
00129   {
00130   gX.push_back( new gobjglColor3ub(184,134,11) );
00131   T v0 = tr.orthocenteri(0);
00132   gX.push_back( new gobjMySphereDraw(v0,gd) );
00133   T v1 = tr.orthocenteri(1);
00134   gX.push_back( new gobjMySphereDraw(v1,gd) );
00135   T v2 = tr.orthocenteri(2);
00136   gX.push_back( new gobjMySphereDraw(v2,gd) );
00137 
00138 
00139   gX.push_back( new gobjglColor3ub(255,215,0) );
00140   gX.push_back( new gobjglBegin(GL_LINES) );
00141   gX.push_back( new gobjglVertex3f(tr.pi[0]) );
00142   gX.push_back( new gobjglVertex3f(v0) );
00143   gX.push_back( new gobjglVertex3f(tr.pi[1]) );
00144   gX.push_back( new gobjglVertex3f(v1) );
00145   gX.push_back( new gobjglVertex3f(tr.pi[2]) );
00146   gX.push_back( new gobjglVertex3f(v2) );
00147   gX.push_back( new gobjglEnd() );
00148 
00149   gX.push_back( new gobjMySphereDraw(vc,gd) );
00150   }
00151   
00152   T cc = tr.circumcenter();
00153 
00154   gobjMyCircle * gc = new gobjMyCircle();
00155 
00156   if(altitude_on)
00157   {
00158   gX.push_back( new gobjglColor3ub(255,0,0) );
00159   gX.push_back( new gobjMySphereDraw(cc,gd) );
00160   
00161   gX.push_back( new gobjglBegin(GL_LINES) );
00162   gX.push_back( new gobjglVertex3f(cc) );
00163   gX.push_back( new gobjglVertex3f(m0) );
00164   gX.push_back( new gobjglVertex3f(cc) );
00165   gX.push_back( new gobjglVertex3f(m1) );
00166   gX.push_back( new gobjglVertex3f(cc) );
00167   gX.push_back( new gobjglVertex3f(m2) );
00168   gX.push_back( new gobjglEnd() );
00169 
00170   
00171   gX.push_back( gc );
00172   point3<double> cc2(cc);
00173   point3<double> radius(cc2);
00174   radius.x -= tr.pi[0].x;
00175   radius.y -= tr.pi[0].y;
00176   gX.push_back( new gobjMyCircleDraw(sqrt(radius.dot()),cc2,*gc) );
00177 
00178   }
00179 
00180   gX.push_back( new gobjglBegin(GL_LINES) );
00181   gX.push_back( new gobjglVertex3f(cc) );
00182   gX.push_back( new gobjglColor3ub(255,215,0) );
00183   gX.push_back( new gobjglVertex3f(vc) );
00184   gX.push_back( new gobjglEnd() );
00185 
00186   if (innercircle_on)
00187   {
00188   T b0(tr.bisectangle(0));
00189   T b1 = tr.bisectangle(1);
00190   T b2 = tr.bisectangle(2);
00191   gX.push_back( new gobjglColor3ub(127,255,212) );
00192   gX.push_back( new gobjMySphereDraw(b0,gd) );
00193   gX.push_back( new gobjMySphereDraw(b1,gd) );
00194   gX.push_back( new gobjMySphereDraw(b2,gd) );
00195 
00196 
00197   T x;
00198   double r;
00199   tr.innercircle(x,r);
00200   gX.push_back( new gobjMySphereDraw(x,gd) );
00201   gX.push_back( new gobjMyCircleDraw(r,point3<double>(x),*gc) );
00202 
00203   gX.push_back( new gobjglBegin(GL_LINES) );
00204   gX.push_back( new gobjglVertex3f(tr.pi[0]) );
00205   gX.push_back( new gobjglVertex3f(b0) );
00206   gX.push_back( new gobjglVertex3f(tr.pi[1]) );
00207   gX.push_back( new gobjglVertex3f(b1) );
00208   gX.push_back( new gobjglVertex3f(tr.pi[2]) );
00209   gX.push_back( new gobjglVertex3f(b2) );
00210   gX.push_back( new gobjglEnd() );
00211   }
00212 
00213 }
00214 
00215 
00216 #endif
00217 
00218 

Generated on Fri Mar 4 00:49:30 2011 for Chelton Evans Source by  doxygen 1.5.8