Files Classes Functions Hierarchy
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
1.5.8