Files Classes Functions Hierarchy
00001 #include <cassert> 00002 #include <cmath> 00003 using namespace std; 00004 00005 #include <gobj.h> 00006 #include <graphmisc.h> 00007 #include <point.h> 00008 #include <print.h> 00009 #include <protractor.h> 00010 #include <ruler.h> 00011 00012 //#define PI 3.14159265359 00013 00014 void protractor::addAngleRuler 00015 ( 00016 doublec ticklenmajor, 00017 doublec ticklenmiddle, 00018 doublec ticklenminor 00019 ) 00020 { 00021 ruler * r = new ruler(); 00022 r->addAngleRuler 00023 ( 00024 radius, 00025 0.0, 00026 360.0, 00027 ticklenmajor, 00028 ticklenmiddle, 00029 ticklenminor 00030 ); 00031 00032 push(r); 00033 } 00034 00035 00036 void protractor::addRadiusRuler 00037 ( 00038 doublec ticklenmajor, 00039 doublec ticklenmiddle, 00040 doublec ticklenminor 00041 ) 00042 { 00043 ruler * r = new ruler(); 00044 00045 r->addStraightRuler 00046 ( 00047 radius, 00048 point2<double>(0.0,0.0), 00049 point2<double>(radius,0.0), 00050 ticklenmajor, 00051 ticklenmiddle, 00052 ticklenminor 00053 ); 00054 00055 push(r); 00056 } 00057 00058 00059 void protractor::converttocartesian 00060 ( 00061 point2<double> & p, 00062 point2<double> const & p2 00063 ) 00064 { 00065 p.x = p2.x*cos(p2.y); 00066 p.y = p2.x*sin(p2.y); 00067 } 00068 00069 protractor::protractor(doublec _radius) 00070 : gobjContainer(true), radius(_radius) 00071 { 00072 } 00073 00074 void protractor::addCirclesText 00075 ( 00076 vector<string> const & v 00077 ) 00078 { 00079 uintc n = v.size(); 00080 00081 gobjContainer * c = new gobjContainer(); 00082 00083 double dt = PI * 2.0 / n; 00084 00085 point2<double> x0; 00086 00087 c->push( new gobjglPushAttrib(GL_CURRENT_BIT) ); 00088 c->push( new gobjglPushAttrib(GL_LIGHTING_BIT) ); 00089 c->push( new gobjglDisable(GL_LIGHTING) ); 00090 00091 c->push( new gobjglColor3ub(0,192,130) ); 00092 00093 for (uint i=0; i<n; ++i) 00094 { 00095 point2<double> x1(radius,dt*i); 00096 converttocartesian(x0,x1); 00097 00098 c->push( new gobjMyBitmapCharacter(v[i], point3<float>(x0.x,x0.y,0.0)) ); 00099 } 00100 00101 c->push( new gobjglPopAttrib() ); 00102 c->push( new gobjglPopAttrib() ); 00103 00104 push(c); 00105 } 00106 00107 00108 00109 void protractor::addCircles(uintc n) 00110 { 00111 gobjContainer * c = new gobjContainer(); 00112 00113 gobjMyCircle * cir = new gobjMyCircle(); 00114 c->push(cir); 00115 00116 c->push( new gobjglPushAttrib(GL_CURRENT_BIT) ); 00117 c->push( new gobjglPushAttrib(GL_LIGHTING_BIT) ); 00118 c->push( new gobjglDisable(GL_LIGHTING) ); 00119 00120 c->push( new gobjglColor3ub(192,192,192) ); 00121 00122 00123 double dr = radius / n; 00124 00125 gobjMyCircleDraw * cird; 00126 00127 for (uint i=0; i<n; ++i) 00128 { 00129 cird = new gobjMyCircleDraw( dr * (i+1), point3<float>(), *cir ); 00130 c->push(cird); 00131 } 00132 00133 c->push( new gobjglPopAttrib() ); 00134 c->push( new gobjglPopAttrib() ); 00135 00136 push(c); 00137 } 00138 00139 void protractor::addAxes(uintc n) 00140 { 00141 double dt = PI * 2.0 / n; 00142 00143 gobjContainer * c = new gobjContainer(); 00144 00145 point2<double> x0; 00146 00147 c->push( new gobjglPushAttrib(GL_CURRENT_BIT) ); 00148 c->push( new gobjglPushAttrib(GL_LIGHTING_BIT) ); 00149 c->push( new gobjglDisable(GL_LIGHTING) ); 00150 00151 c->push( new gobjglColor3ub(155,0,0) ); 00152 00153 c->push( new gobjglBegin(GL_LINES) ); 00154 for (uint i=0; i<n; ++i) 00155 { 00156 point2<double> x1(radius,dt*i); 00157 converttocartesian(x0,x1); 00158 c->push( new gobjglVertex2f(x0) ); 00159 c->push( new gobjglVertex2f(0.0,0.0) ); 00160 } 00161 c->push(new gobjglEnd()); 00162 00163 c->push( new gobjglPopAttrib() ); 00164 c->push( new gobjglPopAttrib() ); 00165 00166 push(c); 00167 } 00168 00169 00170 00171 00172 00173 00174 00175
1.5.8