Klamp't  0.8.1
SimTestGUI.h
1 #ifndef INTERFACE_SIM_TEST_GUI_H
2 #define INTERFACE_SIM_TEST_GUI_H
3 
4 #include "SimulationGUI.h"
5 #include "View/ViewPlot.h"
6 #include "View/WorldDragWidget.h"
7 #include "View/RobotPoseWidget.h"
8 #include "View/ObjectPoseWidget.h"
9 #include <KrisLibrary/utils/stringutils.h>
10 #include <KrisLibrary/utils/apputils.h>
11 #include <fstream>
12 using namespace Math3D;
13 using namespace GLDraw;
14 
15 #define GLUT_LEFT_BUTTON 0
16 #define GLUT_MIDDLE_BUTTON 1
17 #define GLUT_RIGHT_BUTTON 2
18 
19 
20 struct SensorPlot
21 {
22  ViewPlot view;
23  int sensorIndex;
24  vector<bool> drawMeasurement;
25 };
26 
77 {
78 public:
79  typedef SimGUIBackend BaseT;
80  AppUtils::ProgramSettings settings;
81 
82  int cur_link,cur_driver;
83  int pose_objects;
84  int output_ros;
85  enum {ModeNormal, ModeForceApplication};
86  int click_mode;
87  vector<RobotPoseWidget> robotWidgets;
88  vector<RigidObjectPoseWidget> objectWidgets;
89  WidgetSet allRobotWidgets,allObjectWidgets;
90  WorldDragWidget dragWidget;
91  WidgetSet allWidgets;
92 
93  int forceSpringActive;
94  Vector3 forceSpringAnchor;
95  int drawBBs,drawPoser,drawDesired,drawEstimated,drawContacts,drawWrenches,drawExpanded,drawTime,doLogging;
96  string simLogFile;
97  string contactStateLogFile, contactWrenchLogFile;
98  map<int,string> robotCommandLogFiles, robotSensedLogFiles, robotTorqueLogFiles;
99 
100  vector<SensorPlot> sensorPlots;
101  vector<vector<bool> > drawSensors;
102  vector<GeometryAppearance> originalAppearance,expandedAppearance;
103 
104  SimTestBackend(RobotWorld* world);
105  //message handlers
106  virtual void Start();
107  virtual bool OnCommand(const string& cmd,const string& args);
108  virtual bool OnIdle();
109  void ToggleSensorPlot(int sensorIndex,int enabled);
110  void ToggleSensorMeasurement(int sensorIndex,int measurement,int enabled);
111  void ToggleDrawExpandedCheckbox(int checked);
112  void SimStep(Real dt);
113  void SensorPlotUpdate();
114 
115  bool LoadFile(const char* fn);
116 
117  //overrides of GLNavigationBackend
118  virtual void RenderWorld();
119  virtual void RenderScreen();
120  virtual void DoPassiveMouseMove(int x, int y);
121  virtual void BeginDrag(int x,int y,int button,int modifiers);
122  virtual void EndDrag(int x,int y,int button,int modifiers);
123  virtual void DoFreeDrag(int dx,int dy,int button);
124  virtual void DoCtrlDrag(int dx,int dy,int button)
125  {
126  if(button == GLUT_LEFT_BUTTON) DragPan(dx,dy);
127  }
128 
129  virtual void DoAltDrag(int dx,int dy,int button)
130  {
131  if(button == GLUT_LEFT_BUTTON) DragZoom(dx,dy);
132  }
133 
134  virtual void DoShiftDrag(int dx,int dy,int button)
135  {
136  if(button == GLUT_LEFT_BUTTON) { camera.dist *= (1 + 0.01*Real(dy)); SendRefresh(); }
137  }
138 };
139 
140 
141 
142 #if HAVE_GLUI
143 
144 #include <KrisLibrary/GLdraw/GLScreenshotProgram.h>
145 #include "GLUIGUI.h"
146 #if defined (__APPLE__) || defined (MACOSX)
147 #include <GL/glui.h>
148 #else
149 #include <GL/glui.h>
150 #endif //__APPLE__ || MACOSX
151 
152 class GLUISimTestGUI : public GLScreenshotProgram<GLUIGUI>
153 {
154 public:
155  typedef GLScreenshotProgram<GLUIGUI> BaseT;
156 
157  RobotWorld* world;
158  WorldSimulation* sim;
159  AppUtils::ProgramSettings settings;
160 
161  //GUI state
162  GLUI* glui;
163  GLUI_Button* save_movie_button;
164  GLUI_Listbox* driver_listbox;
165  GLUI_Spinner* driver_value_spinner;
166  GLUI_String file_name;
167 
168  vector<string> controllerSettings;
169  int controllerSettingIndex;
170  GLUI_Listbox* settingsBox;
171  GLUI_EditText* settingEdit;
172  vector<string> controllerCommands;
173  int controllerCommandIndex;
174  GLUI_EditText* commandEdit;
175 
176  int cur_driver;
177 
178  vector<bool> sensorDrawn;
179  vector<vector<bool> > sensorMeasurementDrawn;
180  GLUI_Listbox* sensorBox;
181  int sensorSelectIndex;
182  int sensorMeasurementSelectIndex;
183  GLUI_Checkbox* toggleSensorDrawCheckbox;
184  GLUI_Checkbox* toggleMeasurementDrawCheckbox;
185  GLUI_Button* isolateMeasurementButton;
186  GLUI_Listbox* measurementListbox;
187 
188  GLUISimTestGUI(GenericBackendBase* backend,RobotWorld* _world,int w=800,int h=600);
189  virtual bool Initialize();
190  void UpdateGUI();
191  void UpdateControllerSettingGUI();
192  void UpdateSensorGUI();
193  void UpdateSensorMeasurementGUI();
194  virtual void Handle_Control(int id);
195  virtual void Handle_Keypress(unsigned char c,int x,int y);
196  virtual bool OnCommand(const string& cmd,const string& args);
197 };
198 
199 #endif //HAVE_GLUI
200 
201 #endif
The main world class containing multiple robots, objects, and static geometries (terrains). Lights and other viewport information may also be stored here.
Definition: World.h:20
virtual void DoAltDrag(int dx, int dy, int button)
Overload this for alt-dragging.
Definition: SimTestGUI.h:129
An OpenGL x-y auto-scrolling plot. Used in SimTest (Interface/SimTestGUI.h) to draw sensor data...
Definition: ViewPlot.h:14
Generic simulation program.
Definition: SimulationGUI.h:36
Common robot posing routines.
SimTest program.
Definition: SimTestGUI.h:76
Definition: WorldDragWidget.h:7
A backend that processes mouse motion calls into dragging callbacks. Makes it a bit easier to determi...
Definition: NavigationGUI.h:13
virtual void DoShiftDrag(int dx, int dy, int button)
Overload this for shift-dragging.
Definition: SimTestGUI.h:134
Definition: GenericGUI.h:84
Definition: SimTestGUI.h:20
A physical simulator for a RobotWorld.
Definition: WorldSimulation.h:67
virtual void DoCtrlDrag(int dx, int dy, int button)
Overload this for control-dragging.
Definition: SimTestGUI.h:124