38#ifdef G4VIS_BUILD_OPENGLXM_DRIVER
42#include <Xm/ToggleB.h>
46void G4OpenGLXmViewer::zoom_callback (Widget w,
50 XmScaleCallbackStruct *cbs = (XmScaleCallbackStruct*) callData;
51 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
56 XmNdecimalPoints, &dp,
76 pView->fVP.SetZoomFactor (zoomBy);
82void G4OpenGLXmViewer::dolly_callback (Widget w,
86 XmScaleCallbackStruct *cbs = (XmScaleCallbackStruct*) callData;
87 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
92 XmNdecimalPoints, &dp,
108 pView->fVP.SetDolly (dolly);
115void G4OpenGLXmViewer::pan_left_right_callback (Widget w,
116 XtPointer clientData,
119 XmArrowButtonCallbackStruct *cbs = (XmArrowButtonCallbackStruct*) callData;
120 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
122 pView->pan_right = get_boolean_userData (w);
124 if (cbs->reason == XmCR_ARM) {
125 left_right_pan_callback (pView,NULL);
126 }
else if (cbs->reason == XmCR_DISARM) {
127 XtRemoveTimeOut (pView->pan_timer);
131void G4OpenGLXmViewer::left_right_pan_callback (XtPointer clientData,
132 XtIntervalId* timer_id)
135 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
138 if (pView->pan_right) {
139 delta = pView->fPan_sens;
141 delta = -pView->fPan_sens;
145 = pView -> GetSceneHandler()->GetScene()->GetStandardTargetPoint();
147 G4Point3D tp = stp + pView -> fVP.GetCurrentTargetPoint ();
149 const G4Vector3D& upVector = pView->fVP.GetUpVector ();
150 const G4Vector3D& vpVector = pView->fVP.GetViewpointDirection ();
155 tp += delta * unitRight;
156 pView->fVP.SetCurrentTargetPoint (tp - stp);
162 pView->pan_timer = XtAppAddTimeOut
164 timer_id == NULL ? 500 : 1,
165 left_right_pan_callback,
169void G4OpenGLXmViewer::pan_up_down_callback (Widget w,
170 XtPointer clientData,
173 XmArrowButtonCallbackStruct *cbs = (XmArrowButtonCallbackStruct*) callData;
174 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
176 pView->pan_up = get_boolean_userData (w);
178 if (cbs->reason == XmCR_ARM) {
179 up_down_pan_callback (pView,NULL);
180 }
else if (cbs->reason == XmCR_DISARM) {
181 XtRemoveTimeOut (pView->pan_timer);
185void G4OpenGLXmViewer::up_down_pan_callback (XtPointer clientData,
186 XtIntervalId* timer_id)
188 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
192 delta = pView->fPan_sens;
194 delta = -(pView->fPan_sens);
198 = pView -> GetSceneHandler()->GetScene()->GetStandardTargetPoint();
199 G4Point3D tp = stp + pView -> fVP.GetCurrentTargetPoint ();
200 const G4Vector3D& upVector = pView->fVP.GetUpVector ();
201 const G4Vector3D& vpVector = pView->fVP.GetViewpointDirection ();
205 tp += delta * unitUp;
206 pView->fVP.SetCurrentTargetPoint (tp - stp);
212 pView->pan_timer = XtAppAddTimeOut
214 timer_id == NULL ? 500 : 1,
215 up_down_pan_callback,
219void G4OpenGLXmViewer::set_pan_sens_callback (Widget w,
220 XtPointer clientData,
223 XmScaleCallbackStruct *cbs = (XmScaleCallbackStruct*) callData;
224 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
229 XmNdecimalPoints, &dp,
234 }
else if ( dp > 0) {
236 ten_to_the_dp *= 10.;
243 pView->fPan_sens = (
G4double)((cbs->value) / ten_to_the_dp);
G4DLLIMPORT std::ostream G4cout
BasicVector3D< T > cross(const BasicVector3D< T > &v) const