Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4OpenGLXmViewer.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29//
30// Andrew Walkden 10th February 1997
31// G4OpenGLXmViewer : Class derived from G4OpenGLXViewer, to provide
32// (Motif) widget OpenGL functionality for GEANT4.
33
34#ifdef G4VIS_BUILD_OPENGLXM_DRIVER
35
36#ifndef G4OPENGLXMVIEWER_HH
37#define G4OPENGLXMVIEWER_HH
38
39#include "G4OpenGLXViewer.hh"
40#include "globals.hh"
41
42#include <Xm/Xm.h>
43
44class G4OpenGLXmTopLevelShell;
45class G4OpenGLXmRadioButton;
46class G4OpenGLXmPushButton;
47class G4OpenGLXmSliderBar;
48class G4OpenGLXmBox;
49class G4OpenGLXmTextField;
50class G4OpenGLXmFramedBox;
51class G4OpenGLXmFourArrowButtons;
52class G4OpenGLXmSeparator;
53
54class G4OpenGLXmViewer: public G4OpenGLXViewer {
55
56public:
57 G4OpenGLXmViewer (G4OpenGLSceneHandler& scene);
58 virtual ~G4OpenGLXmViewer ();
59
60protected:
61 virtual void ShowView ();
62 void ResetView ();
63 void GetXmConnection ();
64 virtual void CreateMainWindow ();
65
66 XtAppContext app;
67 XtWorkProcId workId;
68 Widget toplevel,
69 shell,
70 main_win,
71 menubar,
72 style_cascade,
73 actions_cascade,
74 misc_cascade,
75 spec_cascade,
76 rep_style_pullright,
77 drawing_style_pullright,
78 background_color_pullright,
79 transparency_pullright,
80 antialias_pullright,
81 haloing_pullright,
82 aux_edge_pullright,
83 frame,
84 glxarea;
85
86 XmString style_str,
87 actions_str,
88 misc_str,
89 spec_str,
90 rep_str,
91 draw_str,
92 polyhedron_str,
93 nurbs_str,
94 wireframe_str,
95 hlr_str,
96 hsr_str,
97 hlhsr_str,
98 set_str,
99 rot_str,
100 pan_str,
101 exit_str,
102 quit_str,
103 print_str,
104 white_str,
105 black_str,
106 anti_str,
107 trans_str,
108 halo_str,
109 aux_edge_str,
110 bgnd_str,
111 off_str,
112 on_str;
113
114 G4double zoom_high,
115 zoom_low,
116 pan_low,
117 pan_high,
118 dolly_low,
119 dolly_high,
120 fov,
121 rot_sens_limit,
122 pan_sens_limit,
123 wob_high,
124 wob_low,
125 wob_sens;
126
127 Pixel bgnd,
128 borcol;
129
130 G4bool pan_right,
131 rotate_right,
132 pan_up,
133 rotate_up;
134
135 XtIntervalId rotation_timer,
136 pan_timer,
137 wobble_timer;
138
139 G4Vector3D original_vp;
140
141 G4int frameNo;
142
143 G4OpenGLXmTopLevelShell* fprotation_top;
144 G4OpenGLXmBox* fprotation_button_box;
145 G4OpenGLXmRadioButton* fprotation_button1;
146 G4OpenGLXmRadioButton* fprotation_button2;
147 G4OpenGLXmBox* fprotation_slider_box;
148 G4OpenGLXmSliderBar* fprotation_slider;
149 G4OpenGLXmBox* fprotation_arrow_box;
150 G4OpenGLXmFourArrowButtons* fprotation_arrow;
151
152 G4OpenGLXmTopLevelShell* fppanning_top;
153 G4OpenGLXmFramedBox* fppanning_box;
154 G4OpenGLXmFourArrowButtons* fppanning_arrows;
155 G4OpenGLXmSliderBar* fppanning_slider;
156 G4OpenGLXmFramedBox* fpzoom_box;
157 G4OpenGLXmSliderBar* fpzoom_slider;
158 G4OpenGLXmFramedBox* fpdolly_box;
159 G4OpenGLXmSliderBar* fpdolly_slider;
160
161 G4OpenGLXmTopLevelShell* fpsetting_top;
162 G4OpenGLXmFramedBox* fpsetting_box;
163 G4OpenGLXmTextField* fppan_set;
164 G4OpenGLXmTextField* fprot_set;
165 G4OpenGLXmTextField* fpzoom_upper;
166 G4OpenGLXmTextField* fpzoom_lower;
167 G4OpenGLXmTextField* fpdolly_upper;
168 G4OpenGLXmTextField* fpdolly_lower;
169 G4OpenGLXmPushButton* fpok_button;
170
171 G4OpenGLXmTopLevelShell* fpmiscellany_top;
172 G4OpenGLXmFramedBox* fpwobble_box;
173 G4OpenGLXmPushButton* fpwobble_button;
174 G4OpenGLXmSliderBar* fpwobble_slider;
175 G4OpenGLXmFramedBox* fpreset_box;
176 G4OpenGLXmPushButton* fpreset_button;
177 G4OpenGLXmFramedBox* fpproj_style_box;
178 G4OpenGLXmRadioButton* fporthogonal_button;
179 G4OpenGLXmRadioButton* fpperspective_button;
180 G4OpenGLXmTextField* fpfov_text;
181
182 G4OpenGLXmTopLevelShell* fpprint_top;
183 G4OpenGLXmFramedBox* fpprint_box;
184 G4OpenGLXmFramedBox* fpprint_col_box;
185 G4OpenGLXmFramedBox* fpprint_style_box;
186 G4OpenGLXmTextField* fpprint_text;
187 G4OpenGLXmPushButton* fpprint_button;
188 G4OpenGLXmSeparator* fpprint_line;
189 G4OpenGLXmRadioButton* fpprint_col_radio1;
190 G4OpenGLXmRadioButton* fpprint_col_radio2;
191 G4OpenGLXmRadioButton* fpprint_style_radio1;
192 G4OpenGLXmRadioButton* fpprint_style_radio2;
193
194public:
195
196 static void expose_callback (Widget w,
197 XtPointer clientData,
198 XtPointer callData);
199
200 static void resize_callback (Widget w,
201 XtPointer clientData,
202 XtPointer callData);
203
204 static void actions_callback (Widget w,
205 XtPointer clientData,
206 XtPointer callData);
207
208 static void misc_callback (Widget w,
209 XtPointer clientData,
210 XtPointer callData);
211
212 static void Add_set_field (char* widget,
213 char* widget_text,
214 Widget* row_col_box,
215 Widget* wid,
216 G4double* val,
217 G4OpenGLXmViewer* pView);
218
219 static void zoom_callback (Widget w,
220 XtPointer clientData,
221 XtPointer callData);
222
223 static void dolly_callback (Widget w,
224 XtPointer clientData,
225 XtPointer callData);
226
227 static void pan_left_right_callback (Widget w,
228 XtPointer clientData,
229 XtPointer callData);
230
231 static void left_right_pan_callback (XtPointer clientData,
232 XtIntervalId* timer_id);
233
234 static void theta_rotation_callback (Widget w,
235 XtPointer clientData,
236 XtPointer callData);
237
238 static void phi_rotation_callback (Widget w,
239 XtPointer clientData,
240 XtPointer callData);
241
242 static void pan_up_down_callback (Widget w,
243 XtPointer clientData,
244 XtPointer callData);
245
246 static void up_down_pan_callback (XtPointer clientData,
247 XtIntervalId* timer_id);
248
249 static void drawing_style_callback (Widget w,
250 XtPointer clientData,
251 XtPointer callData);
252
253 static void rep_style_callback (Widget w,
254 XtPointer clientData,
255 XtPointer callData);
256
257 static void background_color_callback (Widget w,
258 XtPointer clientData,
259 XtPointer callData);
260
261 static void set_rot_subject_callback (Widget w,
262 XtPointer clientData,
263 XtPointer callData);
264
265 static void set_rot_sens_callback (Widget w,
266 XtPointer clientData,
267 XtPointer callData);
268
269 static void set_pan_sens_callback (Widget w,
270 XtPointer clientData,
271 XtPointer callData);
272
273 static void set_wob_sens_callback (Widget w,
274 XtPointer clientData,
275 XtPointer callData);
276
277 static void projection_callback (Widget w,
278 XtPointer clientData,
279 XtPointer callData);
280
281 static void wobble_callback (Widget w,
282 XtPointer clientData,
283 XtPointer callData);
284
285 static void reset_callback (Widget w,
286 XtPointer clientData,
287 XtPointer callData);
288
289 static void update_panels_callback (Widget w,
290 XtPointer clientData,
291 XtPointer callData);
292
293 static void wobble_timer_callback (XtPointer clientData,
294 XtIntervalId* timerid);
295
296 static void Add_radio_box (char* label_string,
297 Widget* parent_frame_widget,
298 XtCallbackRec* radio_box_cb,
299 G4int num_buttons,
300 G4int default_button,
301 char* radio_box_name,
302 char** button_names,
303 G4OpenGLXmViewer* pView);
304
305 static void Add_four_arrow_buttons (G4OpenGLXmViewer* pView,
306 XtCallbackRec** arrow_callbacks,
307 Widget* parent_widget);
308
309 static void Add_slider_box (char* label_string,
310 G4int num_sliders,
311 char** slider_name,
312 G4OpenGLXmViewer* pView,
313 G4double* min_array,
314 G4double* max_array,
315 G4double* value_array,
316 G4bool* show,
317 short* decimals,
318 unsigned char* orientation,
319 unsigned char* direction,
320 XtCallbackRec** slider_box_cb,
321 Widget* parent_frame_widget);
322
323 static void rotate_in_theta (XtPointer clientData,
324 XtIntervalId* timer_id);
325
326 static void rotate_in_phi (XtPointer clientData,
327 XtIntervalId* timer_id);
328
329 static void get_double_value_callback (Widget w,
330 XtPointer clientData,
331 XtPointer callData);
332
333 static void get_text_callback (Widget w,
334 XtPointer clientData,
335 XtPointer callData);
336
337 static void transparency_callback (Widget w,
338 XtPointer clientData,
339 XtPointer callData);
340
341 static void antialias_callback (Widget w,
342 XtPointer clientData,
343 XtPointer callData);
344
345 static void haloing_callback (Widget w,
346 XtPointer clientData,
347 XtPointer callData);
348
349 static void aux_edge_callback (Widget w,
350 XtPointer clientData,
351 XtPointer callData);
352
353 static void set_print_colour_callback (Widget w,
354 XtPointer clientData,
355 XtPointer callData);
356
357 static void set_print_style_callback (Widget w,
358 XtPointer clientData,
359 XtPointer callData);
360
361 static void print_callback (Widget w,
362 XtPointer clientData,
363 XtPointer callData);
364
365 static G4bool get_boolean_userData (Widget w);
366
367 static G4int get_int_userData (Widget w);
368
369 friend class G4OpenGLXmVWidgetObject;
370 friend class G4OpenGLXmViewerMessenger;
371
372private:
373 G4OpenGLXmViewer (const G4OpenGLXmViewer&);
374 G4OpenGLXmViewer& operator = (const G4OpenGLXmViewer&);
375 void UpdateControlPanel();
376 // Update the content of the control panel
377};
378
379#endif
380
381#endif
382
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67