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