glbarrettfinger.h

Go to the documentation of this file.
00001 // ***************************************************************************
00002 //                           glbarrettfinger.h
00003 //
00004 //    copyright            : (C) 2004 by tbaier
00005 //    email                : tbaier@informatik.uni-hamburg.de
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   //Wm3::TArray<Wm3::CollisionRecord*> *CollisionRecords;
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   //std::cout << " ** Joint 0 set to " << Joint0Angle << std::endl;
00235 }
00236 
00237 
00238 // ********************************
00239 // **                            **
00240 // ********************************
00241 inline void GLBarrettFinger::setJoint1(const float angle)
00242 {
00243   Joint1Angle = angle;
00244   updateTriMesh();
00245   //std::cout << " ** Joint 1 set to " << angle << std::endl;
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


tams Tim Baier bhandlib v0.25
Generated Wed Aug 16 14:57:09 2006 by doxygen 1.4.7