00001
00002
00003
00004
00005
00006
00007
00008 #ifndef BARRETTFINGER_H
00009 #define BARRETTFINGER_H
00010
00011 #include <GL/gl.h>
00012 #include <GL/glu.h>
00013 #include <iostream>
00014
00015 #include <Wm3CollisionRecord.h>
00016 #include <Wm3TArray.h>
00017 #include <Wm3TriMesh.h>
00018 #include <Wm3Node.h>
00019
00020 #include "glbarrettprimitive.h"
00021 #include "glbarrettj1.h"
00022 #include "glbarrettl1.h"
00023 #include "glbarrettl2.h"
00024 #include "glbarrettl3.h"
00025
00026
00027 #include <robotMath.h>
00028
00029
00030 using namespace Wm3;
00031
00032 extern GLBarrettPrimitive::MaterialColorProperties colPropEmYellow;
00033 extern GLBarrettPrimitive::MaterialColorProperties colPropEmGreen;
00034 extern GLBarrettPrimitive::MaterialColorProperties colPropBarrettAluUnpolished;
00035
00050 class GLBarrettFinger : public GLBarrettPrimitive{
00051
00052 public:
00055 GLBarrettFinger();
00056
00059 virtual ~GLBarrettFinger();
00060
00066 void initModell();
00067
00068 void initTriMesh();
00069 void initGL();
00070
00073 void draw(GLenum mode = GL_RENDER);
00074
00075 void draw(){};
00076
00080 void setJoint0(const float angle);
00081
00085 void setJoint1(const float angle);
00086
00091 void setJoint(const int joint, const float angle);
00092
00098 float getJoint(const int joint)const;
00099
00104 void setJoints(const float j0, const float j1);
00105
00108 void makeParts();
00109
00112 void setForce(const double force);
00113
00114
00115 void generateTriMesh();
00116 void updateTriMesh();
00117
00118 Wm3::TArray<Wm3::TriMesh *> *getTriMeshes();
00119
00120 void setScale(const double scale);
00121 float scale() const;
00122
00123 NodePtr node();
00124
00125 protected:
00126
00128 GLBarrettL1 Part0;
00130 GLBarrettJ1 Part1;
00132 GLBarrettL2 Part2;
00134 GLBarrettL3 Part3;
00135
00137 GLfloat Joint0Angle;
00139 GLfloat Joint1Angle;
00140
00141 GLfloat Force;
00142
00143 GLuint Arrow;
00144 GLuint ForceArrow;
00145 GLuint PartList;
00146
00147 static const float JOINT1STDVALUE;
00148
00149 static const int NumParts;
00150
00151
00152 Wm3::TArray<Wm3::TriMesh *> *TriMeshs;
00153
00154
00155 float ScaleFactor;
00156
00157 NodePtr WmBarrettFingerNode;
00158 NodePtr Part_1Node, Part0Node, Part1Node, Part2Node;
00159 NodePtr Joint1Node, Joint2Node;
00160
00161 bool TriMeshInitialized;
00162 bool GLInitialized;
00163
00164
00165 };
00166
00167
00168
00169
00170
00171
00172 inline void GLBarrettFinger::updateTriMesh()
00173 {
00174 Joint1Node->Local.SetRotate(Matrix3f().FromAxisAngle(Vector3f::UNIT_Z, (float) Joint0Angle*DEGTORAD));
00175
00176 Joint2Node->Local.SetRotate(Matrix3f().FromAxisAngle(Vector3f::UNIT_Z, (float) Joint1Angle*DEGTORAD));
00177 }
00178
00179
00180
00181
00182 inline NodePtr GLBarrettFinger::node()
00183 {
00184 return WmBarrettFingerNode;
00185 }
00186
00187
00188
00189
00190
00191 inline float GLBarrettFinger::scale() const
00192 {
00193 return ScaleFactor;
00194 }
00195
00196
00197
00198
00199 inline void GLBarrettFinger::setJoint(const int joint, const float angle)
00200 {
00201 switch(joint){
00202 case 0:
00203 Joint0Angle = angle;
00204 break;
00205 case 1:
00206 Joint1Angle = angle;
00207 break;
00208 default:
00209 std::cerr << " ** Worng Parameter for joint in BarrettFinger::setJoint" << std::endl;
00210 }
00211
00212 updateTriMesh();
00213 }
00214
00215
00216
00217
00218
00219 inline void GLBarrettFinger::setJoints(const float j0, const float j1)
00220 {
00221 Joint0Angle = j0;
00222 Joint1Angle = j1;
00223 updateTriMesh();
00224 }
00225
00226
00227
00228
00229
00230 inline void GLBarrettFinger::setJoint0(const float angle)
00231 {
00232 Joint0Angle = angle;
00233 updateTriMesh();
00234
00235 }
00236
00237
00238
00239
00240
00241 inline void GLBarrettFinger::setJoint1(const float angle)
00242 {
00243 Joint1Angle = angle;
00244 updateTriMesh();
00245
00246 }
00247
00248
00249
00250
00251
00252 inline float GLBarrettFinger::getJoint(const int joint) const
00253 {
00254 switch(joint){
00255 case 0:
00256 return Joint0Angle;
00257 break;
00258 case 1:
00259 return Joint1Angle;
00260 break;
00261 default:
00262 std::cerr << " ** Worng Parameter for joint in BarrettFinger::getJoint" << std::endl;
00263 return -10000.0f;
00264 }
00265 }
00266
00267
00268
00269
00270
00271 inline void GLBarrettFinger::setForce(const double force)
00272 {
00273 Force = force;
00274 }
00275
00276
00277
00278
00279
00280 inline Wm3::TArray<Wm3::TriMesh *> *GLBarrettFinger::getTriMeshes()
00281 {
00282 return TriMeshs;
00283 }
00284
00285
00286 #endif