00001 #ifndef SIGEL_ROBOTIO_SIG_ROBOTCOMPILER_H
00002 #define SIGEL_ROBOTIO_SIG_ROBOTCOMPILER_H
00003
00004 namespace SIGEL_RobotIO { class SIG_RobotCompiler; }
00005
00006 #include "SIGEL_Robot/SIG_Body.h"
00007 #include "SIGEL_Robot/SIG_Robot.h"
00008 #include "SIGEL_Robot/SIG_Material.h"
00009 #include "SIGEL_Robot/SIG_Link.h"
00010 #include "SIGEL_Robot/SIG_Joint.h"
00011 #include "SIGEL_Robot/SIG_RotationalJoint.h"
00012 #include "SIGEL_Robot/SIG_TranslationalJoint.h"
00013 #include "SIGEL_Robot/SIG_CylindricalJoint.h"
00014 #include "SIGEL_Robot/SIG_GlueJoint.h"
00015 #include "SIGEL_Robot/SIG_Drive.h"
00016 #include "SIGEL_Robot/SIG_Sensor.h"
00017 #include "SIGEL_Robot/SIG_JointSensor.h"
00018 #include "SIGEL_Robot/SIG_Geometry.h"
00019 #include "SIGEL_RobotIO/SIG_RobotScanner.h"
00020 #include <pointvector.h>
00021
00022 using SIGEL_Robot::SIG_Body;
00023 using SIGEL_Robot::SIG_Robot;
00024 using SIGEL_Robot::SIG_Material;
00025 using SIGEL_Robot::SIG_Link;
00026 using SIGEL_Robot::SIG_Joint;
00027 using SIGEL_Robot::SIG_RotationalJoint;
00028 using SIGEL_Robot::SIG_TranslationalJoint;
00029 using SIGEL_Robot::SIG_CylindricalJoint;
00030 using SIGEL_Robot::SIG_GlueJoint;
00031 using SIGEL_Robot::SIG_Geometry;
00032 using SIGEL_Robot::SIG_Polygon;
00033 using SIGEL_Robot::SIG_Drive;
00034 using SIGEL_Robot::SIG_Sensor;
00035 using SIGEL_Robot::SIG_JointSensor;
00036
00037 namespace SIGEL_RobotIO {
00038 class SIG_RobotCompiler {
00039 protected:
00040 SIG_Scanner &myScanner;
00041 SIG_Robot *target;
00042 QString dirprefix;
00043 public:
00044 SIG_RobotCompiler (SIG_RobotScanner &sc,
00045 SIG_Robot *tg,
00046 QString homepath);
00047 virtual ~SIG_RobotCompiler (void);
00048
00049
00050
00051 void expect (int symboltype);
00052 QString expectWord (void);
00053 DL_Scalar expectNumber (void);
00054 QString expectString (void);
00055
00056 virtual SIG_Material *materialFind (QString name) = 0;
00057 virtual void materialDensity (SIG_Material *material,
00058 DL_Scalar density) = 0;
00059 virtual void materialFriction (SIG_Material *material,
00060 QString otherSide,
00061 DL_Scalar frictionconst) = 0;
00062 virtual void materialElasticity (SIG_Material *material,
00063 DL_Scalar elasconst) = 0;
00064 virtual void materialColour (SIG_Material *material,
00065 DL_Scalar red,
00066 DL_Scalar green,
00067 DL_Scalar blue) = 0;
00068 virtual void materialFinish (SIG_Material *material) = 0;
00069
00070 virtual SIG_Link *linkFind (QString name) = 0;
00071 virtual void linkIsTorso (SIG_Link *link) = 0;
00072 virtual void linkGeometryFile (SIG_Link *link,
00073 QString geometryfile) = 0;
00074 virtual void linkMaterial (SIG_Link *link,
00075 QString material) = 0;
00076 virtual void linkPoint (SIG_Link *link,
00077 QString pointname,
00078 DL_Scalar x,
00079 DL_Scalar y,
00080 DL_Scalar z) = 0;
00081 virtual void linkNoCollide (SIG_Link *link,
00082 QString nocollide) = 0;
00083 virtual void linkFinish (SIG_Link *link) = 0;
00084
00085 virtual SIG_RotationalJoint *rjointFind (QString name) = 0;
00086 virtual void rjointLinking (SIG_RotationalJoint *rj,
00087 QString Alink, QString AB, QString AD, QString AH,
00088 QString Blink, QString BB, QString BD, QString BH) = 0;
00089 virtual void rjointExtents (SIG_RotationalJoint *rj,
00090 DL_Scalar mn, DL_Scalar mx, DL_Scalar ii) = 0;
00091 virtual void rjointFinish (SIG_RotationalJoint *rj) = 0;
00092
00093 virtual SIG_TranslationalJoint *tjointFind (QString name) = 0;
00094 virtual void tjointLinking (SIG_TranslationalJoint *tj,
00095 QString Alink, QString AB, QString AD, QString AF,
00096 QString Blink, QString BB, QString BD, QString BF) = 0;
00097 virtual void tjointExtents (SIG_TranslationalJoint *tj,
00098 DL_Scalar mn, DL_Scalar mx, DL_Scalar ii) = 0;
00099 virtual void tjointFinish (SIG_TranslationalJoint *tj) = 0;
00100
00101 virtual SIG_CylindricalJoint *cjointFind (QString name) = 0;
00102 virtual void cjointLinking (SIG_CylindricalJoint *cj,
00103 QString Alink, QString AB, QString AD, QString AH,
00104 QString Blink, QString BB, QString BD, QString BH) = 0;
00105 virtual void cjointRotExtents (SIG_CylindricalJoint *cj,
00106 DL_Scalar mn, DL_Scalar mx, DL_Scalar ii) = 0;
00107 virtual void cjointTraExtents (SIG_CylindricalJoint *cj,
00108 DL_Scalar mn, DL_Scalar mx, DL_Scalar ii) = 0;
00109 virtual void cjointFinish (SIG_CylindricalJoint *cj) = 0;
00110
00111 virtual SIG_GlueJoint *glueFind (QString name) = 0;
00112 virtual void glueLinking (SIG_GlueJoint *glue,
00113 QString Alink, QString AA, QString AB, QString AC,
00114 QString Blink, QString BP, QString BQ, QString BR) =0;
00115 virtual void glueFinish (SIG_GlueJoint *glue) = 0;
00116
00117 virtual SIG_Drive *driveFind (QString name) = 0;
00118 virtual void driveMode (SIG_Drive *d, QString mode) = 0;
00119 virtual void driveJoint (SIG_Drive *d, QString jointname) = 0;
00120 virtual void driveMinMaxForce (SIG_Drive *d,
00121 DL_Scalar minf, DL_Scalar maxf) = 0;
00122 virtual void driveFinish (SIG_Drive *d) = 0;
00123
00124 virtual SIG_JointSensor *jointSensorFind (QString name) = 0;
00125 virtual void jointSensorJoint (SIG_JointSensor *js, QString jointname) = 0;
00126 virtual void jointSensorFinish (SIG_JointSensor *js) = 0;
00127
00128 virtual SIG_Geometry *surfaceFind (QString name) = 0;
00129 virtual SIG_Polygon *surfaceNewPoly (SIG_Geometry *g) = 0;
00130 virtual void surfaceNewPoint (SIG_Polygon *p,
00131 DL_Scalar x,
00132 DL_Scalar y,
00133 DL_Scalar z) = 0;
00134 virtual void surfaceFinish (SIG_Geometry *g, QString name) = 0;
00135
00136 virtual void modifierScaleall (DL_Scalar scalingFactor) { }
00137
00138 virtual void nextIsMaterial (void);
00139 virtual void nextIsLink (void);
00140 virtual void nextIsJoint (void);
00141 virtual void nextIsGlue (void);
00142 virtual void nextIsDrive (void);
00143 virtual void nextIsSensor (void);
00144 virtual void nextIsSurface (void);
00145
00146 virtual void nextModScaleall (void);
00147
00148 bool compileNextEntity (void);
00149 void runPass (void);
00150 };
00151 }
00152
00153 #endif