Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // >> 27 // $Id: G4OpenGLXmViewer.cc 87695 2014-12-17 09:35:24Z gcosmo $ 27 // 28 // 28 // 29 // 29 // Andrew Walkden 10th February 1997 30 // Andrew Walkden 10th February 1997 30 // G4OpenGLXmViewer : Class derived from G4Ope 31 // G4OpenGLXmViewer : Class derived from G4OpenGLXViewer, to provide 31 // (Motif) widget OpenGL func 32 // (Motif) widget OpenGL functionality for GEANT4. 32 33 >> 34 #ifdef G4VIS_BUILD_OPENGLXM_DRIVER >> 35 33 #include "globals.hh" 36 #include "globals.hh" 34 37 35 #include "G4OpenGLXmViewer.hh" 38 #include "G4OpenGLXmViewer.hh" 36 #include "G4OpenGLSceneHandler.hh" 39 #include "G4OpenGLSceneHandler.hh" 37 40 38 #include "G4VisExtent.hh" 41 #include "G4VisExtent.hh" 39 #include "G4LogicalVolume.hh" 42 #include "G4LogicalVolume.hh" 40 #include "G4VSolid.hh" 43 #include "G4VSolid.hh" 41 #include "G4Point3D.hh" 44 #include "G4Point3D.hh" 42 #include "G4Normal3D.hh" 45 #include "G4Normal3D.hh" 43 46 44 #include "G4Scene.hh" 47 #include "G4Scene.hh" 45 48 46 #include "G4OpenGLXmSliderBar.hh" 49 #include "G4OpenGLXmSliderBar.hh" 47 #include "G4OpenGLXmTextField.hh" 50 #include "G4OpenGLXmTextField.hh" 48 51 49 #include "G4Xt.hh" 52 #include "G4Xt.hh" 50 #include <X11/Shell.h> 53 #include <X11/Shell.h> 51 #include <Xm/MainW.h> 54 #include <Xm/MainW.h> 52 #include <Xm/Frame.h> 55 #include <Xm/Frame.h> 53 #include <Xm/DrawingA.h> 56 #include <Xm/DrawingA.h> 54 57 55 #include <sstream> 58 #include <sstream> 56 59 57 void G4OpenGLXmViewer::ShowView () { 60 void G4OpenGLXmViewer::ShowView () { 58 61 59 // glXWaitGL (); //Wait for effects of all pr << 60 //be propagated before progres << 61 // JA: Commented out July 2021 - slows renderi << 62 // don't see any adverse effects. << 63 << 64 glFlush (); << 65 << 66 G4Xt::getInstance () -> SecondaryLoop (); 62 G4Xt::getInstance () -> SecondaryLoop (); 67 63 68 } 64 } 69 65 70 void G4OpenGLXmViewer::ResetView () { 66 void G4OpenGLXmViewer::ResetView () { 71 // reset global parameters 67 // reset global parameters 72 G4OpenGLViewer::ResetView(); 68 G4OpenGLViewer::ResetView(); 73 69 74 //reset Xm parameteres 70 //reset Xm parameteres 75 zoom_high = fVP.GetZoomFactor() * 10.0; 71 zoom_high = fVP.GetZoomFactor() * 10.0; 76 zoom_low = fVP.GetZoomFactor() / 10.0; 72 zoom_low = fVP.GetZoomFactor() / 10.0; 77 rot_sens_limit = 90.; 73 rot_sens_limit = 90.; 78 wob_low = 0.; 74 wob_low = 0.; 79 wob_high = 50.; 75 wob_high = 50.; 80 wob_sens = 20.; 76 wob_sens = 20.; 81 77 82 bool firstInit = true; 78 bool firstInit = true; 83 if (GetSceneHandler() != NULL) { 79 if (GetSceneHandler() != NULL) { 84 if (GetSceneHandler()->GetScene() != NULL) 80 if (GetSceneHandler()->GetScene() != NULL) { 85 firstInit = false; 81 firstInit = false; 86 } 82 } 87 } 83 } 88 if (firstInit) { 84 if (firstInit) { 89 pan_sens_limit = 100.; 85 pan_sens_limit = 100.; 90 fPan_sens = pan_sens_limit / 10.0; 86 fPan_sens = pan_sens_limit / 10.0; 91 dolly_low = fVP.GetDolly() - 1000.0; 87 dolly_low = fVP.GetDolly() - 1000.0; 92 dolly_high = fVP.GetDolly() + 1000.0; 88 dolly_high = fVP.GetDolly() + 1000.0; 93 } else { 89 } else { 94 fPan_sens = GetSceneHandler()->GetScene()- 90 fPan_sens = GetSceneHandler()->GetScene()->GetExtent().GetExtentRadius() / 10.0; 95 pan_sens_limit = GetSceneHandler()->GetSce 91 pan_sens_limit = GetSceneHandler()->GetScene()->GetExtent().GetExtentRadius(); 96 92 97 dolly_high = GetSceneHandler()->GetScene() 93 dolly_high = GetSceneHandler()->GetScene()->GetExtent().GetExtentRadius(); 98 dolly_low = -(GetSceneHandler()->GetScene( 94 dolly_low = -(GetSceneHandler()->GetScene()->GetExtent().GetExtentRadius()); 99 } 95 } 100 96 101 UpdateControlPanel (); 97 UpdateControlPanel (); 102 98 103 99 104 // FIXME : L.Garnier 12 Oct 2011 100 // FIXME : L.Garnier 12 Oct 2011 105 // Has also to change the Camera/Object, but 101 // Has also to change the Camera/Object, but tricky to do... 106 102 107 } 103 } 108 104 109 105 110 void G4OpenGLXmViewer::GetXmConnection () { 106 void G4OpenGLXmViewer::GetXmConnection () { 111 107 112 G4Xt* interactorManager = G4Xt::getInstance 108 G4Xt* interactorManager = G4Xt::getInstance (); 113 toplevel = (Widget)interactorManager->GetMai 109 toplevel = (Widget)interactorManager->GetMainInteractor(); 114 app = XtWidgetToApplicationContext(topl 110 app = XtWidgetToApplicationContext(toplevel); 115 111 116 if (!toplevel) { 112 if (!toplevel) { 117 fViewId = -1; // This flags an error. 113 fViewId = -1; // This flags an error. 118 G4cerr << "G4OpenGLXmViewer::GetXmConnecti 114 G4cerr << "G4OpenGLXmViewer::GetXmConnection unable to Initialize" 119 " application context." << G4endl; 115 " application context." << G4endl; 120 return; 116 return; 121 } 117 } 122 118 123 // Better to put this in an X11 resource fil 119 // Better to put this in an X11 resource file !!! 124 std::ostringstream oss; 120 std::ostringstream oss; 125 oss << 121 oss << 126 "*glxarea*width: " << fVP.GetWindowSizeHin 122 "*glxarea*width: " << fVP.GetWindowSizeHintX() << "\n" 127 "*glxarea*height: " << fVP.GetWindowSizeHi 123 "*glxarea*height: " << fVP.GetWindowSizeHintY() << "\n" 128 /* 124 /* 129 // Tried this as a replacement for the abo 125 // Tried this as a replacement for the above two lines, but 130 // sub-windows (rotation, etc.) came same 126 // sub-windows (rotation, etc.) came same size!! 131 "*geometry: " << fVP.GetXGeometryString() 127 "*geometry: " << fVP.GetXGeometryString() << "\n" 132 */ 128 */ 133 "*frame*x: 10\n" 129 "*frame*x: 10\n" 134 "*frame*y: 10\n" 130 "*frame*y: 10\n" 135 "*frame*topOffset: 10\n" 131 "*frame*topOffset: 10\n" 136 "*frame*bottomOffset: 10\n" 132 "*frame*bottomOffset: 10\n" 137 "*frame*rightOffset: 10\n" 133 "*frame*rightOffset: 10\n" 138 "*frame*leftOffset: 10\n" 134 "*frame*leftOffset: 10\n" 139 "*frame*shadowType: SHADOW_IN\n" 135 "*frame*shadowType: SHADOW_IN\n" 140 "*frame*useColorObj: False\n" 136 "*frame*useColorObj: False\n" 141 "*frame*primaryColorSetId: 3\n" 137 "*frame*primaryColorSetId: 3\n" 142 "*frame*secondaryColorSetId: 3\n" 138 "*frame*secondaryColorSetId: 3\n" 143 "*menubar*useColorObj: False\n" 139 "*menubar*useColorObj: False\n" 144 "*menubar*primaryColorSetId: 3\n" 140 "*menubar*primaryColorSetId: 3\n" 145 "*menubar*secondaryColorSetId: 3\n" 141 "*menubar*secondaryColorSetId: 3\n" 146 "*toplevel*useColorObj: False\n" 142 "*toplevel*useColorObj: False\n" 147 "*toplevel*primaryColorSetId: 3\n" 143 "*toplevel*primaryColorSetId: 3\n" 148 "*toplevel*secondaryColorSetId: 3\n"; 144 "*toplevel*secondaryColorSetId: 3\n"; 149 interactorManager->PutStringInResourceDataba 145 interactorManager->PutStringInResourceDatabase ((char*)oss.str().c_str()); 150 146 151 // interactorManager->AddSecondaryLoopPostA 147 // interactorManager->AddSecondaryLoopPostAction ((G4SecondaryLoopAction)G4OpenGLXmViewerSecondaryLoopPostAction); 152 148 153 shell = XtAppCreateShell ((String)fName.data 149 shell = XtAppCreateShell ((String)fName.data(),(String)fName.data(),topLevelShellWidgetClass,XtDisplay(toplevel),NULL,0); 154 interactorManager->AddShell (shell); 150 interactorManager->AddShell (shell); 155 151 156 dpy = XtDisplay (shell); 152 dpy = XtDisplay (shell); 157 153 158 if (!dpy) { 154 if (!dpy) { 159 fViewId = -1; // This flags an error. 155 fViewId = -1; // This flags an error. 160 G4cerr << "G4OpenGLXmViewer::GetXmConnecti 156 G4cerr << "G4OpenGLXmViewer::GetXmConnection unable to connect to display." 161 << G4endl; 157 << G4endl; 162 return; 158 return; 163 } 159 } 164 160 165 if (!glXQueryExtension (dpy, &errorBase, &ev 161 if (!glXQueryExtension (dpy, &errorBase, &eventBase)) { 166 fViewId = -1; // This flags an error. 162 fViewId = -1; // This flags an error. 167 G4cerr << "G4OpenGLXmViewer::GetXmConnecti 163 G4cerr << "G4OpenGLXmViewer::GetXmConnection. X Server has no GLX extension." 168 << G4endl;; 164 << G4endl;; 169 return; 165 return; 170 } 166 } 171 } 167 } 172 168 173 void G4OpenGLXmViewer::CreateMainWindow () { 169 void G4OpenGLXmViewer::CreateMainWindow () { 174 170 175 bgnd = XWhitePixelOfScreen (XtScreen(shell)) 171 bgnd = XWhitePixelOfScreen (XtScreen(shell)); 176 borcol = XBlackPixelOfScreen (XtScreen(shell 172 borcol = XBlackPixelOfScreen (XtScreen(shell)); 177 173 178 ResizeWindow(fVP.GetWindowSizeHintX(),fVP.Ge 174 ResizeWindow(fVP.GetWindowSizeHintX(),fVP.GetWindowSizeHintY()); 179 175 180 G4int x_origin = fVP.GetWindowAbsoluteLocati 176 G4int x_origin = fVP.GetWindowAbsoluteLocationHintX(DisplayWidth(dpy, vi -> screen)); 181 177 182 // FIXME, screen size != window size on MAC 178 // FIXME, screen size != window size on MAC, but I don't know have to get the menuBar 183 // size on MAC. L.Garnier 01/2009 179 // size on MAC. L.Garnier 01/2009 184 G4int y_origin = fVP.GetWindowAbsoluteLocati 180 G4int y_origin = fVP.GetWindowAbsoluteLocationHintY(DisplayHeight(dpy, vi -> screen)); 185 181 186 if (fVP.IsWindowSizeHintX () && fVP.IsWindow 182 if (fVP.IsWindowSizeHintX () && fVP.IsWindowLocationHintX () && fVP.IsWindowLocationHintY ()) { 187 XtVaSetValues (shell, 183 XtVaSetValues (shell, 188 XtNvisual, vi -> visual, 184 XtNvisual, vi -> visual, 189 XtNdepth, vi -> depth, 185 XtNdepth, vi -> depth, 190 XtNcolormap, cmap, 186 XtNcolormap, cmap, 191 XtNwidth, getWinWidth(), 187 XtNwidth, getWinWidth(), 192 XtNheight, getWinHeight(), 188 XtNheight, getWinHeight(), 193 XtNx, x_origin, 189 XtNx, x_origin, 194 XtNy, y_origin, 190 XtNy, y_origin, 195 XtNborderColor, &borcol, 191 XtNborderColor, &borcol, 196 XtNbackground, &bgnd, 192 XtNbackground, &bgnd, 197 XmNtitle, fName.data(), 193 XmNtitle, fName.data(), 198 NULL); 194 NULL); 199 } else if (fVP.IsWindowSizeHintX () && !(fVP 195 } else if (fVP.IsWindowSizeHintX () && !(fVP.IsWindowLocationHintX () || fVP.IsWindowLocationHintY ())) { 200 XtVaSetValues (shell, 196 XtVaSetValues (shell, 201 XtNvisual, vi -> visual, 197 XtNvisual, vi -> visual, 202 XtNdepth, vi -> depth, 198 XtNdepth, vi -> depth, 203 XtNcolormap, cmap, 199 XtNcolormap, cmap, 204 XtNwidth, getWinWidth(), 200 XtNwidth, getWinWidth(), 205 XtNheight, getWinHeight(), 201 XtNheight, getWinHeight(), 206 XtNborderColor, &borcol, 202 XtNborderColor, &borcol, 207 XtNbackground, &bgnd, 203 XtNbackground, &bgnd, 208 XmNtitle, fName.data(), 204 XmNtitle, fName.data(), 209 NULL); 205 NULL); 210 } else if ((!fVP.IsWindowSizeHintX ()) && fV 206 } else if ((!fVP.IsWindowSizeHintX ()) && fVP.IsWindowLocationHintX () && fVP.IsWindowLocationHintY ()) { 211 XtVaSetValues (shell, 207 XtVaSetValues (shell, 212 XtNvisual, vi -> visual, 208 XtNvisual, vi -> visual, 213 XtNdepth, vi -> depth, 209 XtNdepth, vi -> depth, 214 XtNcolormap, cmap, 210 XtNcolormap, cmap, 215 XtNx, x_origin, 211 XtNx, x_origin, 216 XtNy, y_origin, 212 XtNy, y_origin, 217 XtNborderColor, &borcol, 213 XtNborderColor, &borcol, 218 XtNbackground, &bgnd, 214 XtNbackground, &bgnd, 219 XmNtitle, fName.data(), 215 XmNtitle, fName.data(), 220 NULL); 216 NULL); 221 } else { 217 } else { 222 XtVaSetValues (shell, 218 XtVaSetValues (shell, 223 XtNvisual, vi -> visual, 219 XtNvisual, vi -> visual, 224 XtNdepth, vi -> depth, 220 XtNdepth, vi -> depth, 225 XtNcolormap, cmap, 221 XtNcolormap, cmap, 226 XtNborderColor, &borcol, 222 XtNborderColor, &borcol, 227 XtNbackground, &bgnd, 223 XtNbackground, &bgnd, 228 XmNtitle, fName.data(), 224 XmNtitle, fName.data(), 229 NULL); 225 NULL); 230 } 226 } 231 227 232 228 233 main_win = XtVaCreateManagedWidget ("main_wi 229 main_win = XtVaCreateManagedWidget ("main_win", 234 xmMainWindowWidgetClass, 230 xmMainWindowWidgetClass, 235 shell, 231 shell, 236 XtNvisual, vi -> visual, 232 XtNvisual, vi -> visual, 237 XtNdepth, vi -> depth, 233 XtNdepth, vi -> depth, 238 XtNcolormap, cmap, 234 XtNcolormap, cmap, 239 XtNborderColor, borcol, 235 XtNborderColor, borcol, 240 XtNbackground, bgnd, 236 XtNbackground, bgnd, 241 NULL); 237 NULL); 242 238 243 //*********Create a menu bar for the window* 239 //*********Create a menu bar for the window******** 244 style_str = XmStringCreateLocalized ((char*) << 240 style_str = XmStringCreateLocalized ((char*)"Style"); 245 actions_str = XmStringCreateLocalized ((char << 241 actions_str = XmStringCreateLocalized ((char*)"Actions"); 246 misc_str = XmStringCreateLocalized ((char*)m << 242 misc_str = XmStringCreateLocalized ((char*)"Miscellany"); 247 spec_str = XmStringCreateLocalized ((char*)m << 243 spec_str = XmStringCreateLocalized ((char*)"Special"); 248 244 249 menubar = XmVaCreateSimpleMenuBar (main_win, 245 menubar = XmVaCreateSimpleMenuBar (main_win, 250 (char*)menu_str[8].c_str(), << 246 (char*)"menubar", 251 XmVaCASCADEBUTTON, style_str, ( << 247 XmVaCASCADEBUTTON, style_str, 'S', 252 XmVaCASCADEBUTTON, actions_str, ( << 248 XmVaCASCADEBUTTON, actions_str, 'A', 253 XmVaCASCADEBUTTON, misc_str, ( << 249 XmVaCASCADEBUTTON, misc_str, 'M', 254 XmVaCASCADEBUTTON, spec_str, ( << 250 XmVaCASCADEBUTTON, spec_str, 'p', 255 XtNvisual, vi -> visual, 251 XtNvisual, vi -> visual, 256 XtNdepth, vi -> depth, 252 XtNdepth, vi -> depth, 257 XtNcolormap, cmap, 253 XtNcolormap, cmap, 258 XtNborderColor, borcol, 254 XtNborderColor, borcol, 259 XtNbackground, bgnd, 255 XtNbackground, bgnd, 260 NULL); 256 NULL); 261 257 262 XmStringFree (style_str); 258 XmStringFree (style_str); 263 XmStringFree (actions_str); 259 XmStringFree (actions_str); 264 XmStringFree (misc_str); 260 XmStringFree (misc_str); 265 XmStringFree (spec_str); 261 XmStringFree (spec_str); 266 262 267 G4cout << "Created menubar" << G4endl; 263 G4cout << "Created menubar" << G4endl; 268 264 269 265 270 //*********Create style pulldown menu on men 266 //*********Create style pulldown menu on menubar********* 271 draw_str = XmStringCreateLocalized ((char*)m << 267 draw_str = XmStringCreateLocalized ((char*)"Drawing"); 272 bgnd_str = XmStringCreateLocalized ((char*)m << 268 bgnd_str = XmStringCreateLocalized ((char*)"Background color"); 273 269 274 style_cascade = XmVaCreateSimplePulldownMenu 270 style_cascade = XmVaCreateSimplePulldownMenu 275 (menubar, 271 (menubar, 276 (char*)menu_str[1].c_str(), << 272 (char*)"style", 277 0, 273 0, 278 NULL, 274 NULL, 279 XmVaCASCADEBUTTON, draw_str, (KeySym)XK_D << 275 XmVaCASCADEBUTTON, draw_str, 'D', 280 XmVaCASCADEBUTTON, bgnd_str, (KeySym)XK_B << 276 XmVaCASCADEBUTTON, bgnd_str, 'B', 281 XtNvisual, vi -> visual, 277 XtNvisual, vi -> visual, 282 XtNdepth, vi -> depth, 278 XtNdepth, vi -> depth, 283 XtNcolormap, cmap, 279 XtNcolormap, cmap, 284 XtNborderColor, borcol, 280 XtNborderColor, borcol, 285 XtNbackground, bgnd, 281 XtNbackground, bgnd, 286 NULL); 282 NULL); 287 283 288 XmStringFree (draw_str); 284 XmStringFree (draw_str); 289 XmStringFree (bgnd_str); 285 XmStringFree (bgnd_str); 290 286 291 // G4cout << "Created Style pulldown menu" 287 // G4cout << "Created Style pulldown menu" << G4endl; 292 288 293 //Add Drawing pullright menu to style cascad 289 //Add Drawing pullright menu to style cascade... 294 wireframe_str = XmStringCreateLocalized ((ch << 290 wireframe_str = XmStringCreateLocalized ((char*)"Wireframe"); 295 hlr_str = XmStringCreateLocalized ((char*)me << 291 hlr_str = XmStringCreateLocalized ((char*)"Hidden line removal"); 296 hsr_str = XmStringCreateLocalized ((char*)me << 292 hsr_str = XmStringCreateLocalized ((char*)"Hidden surface removal"); 297 hlhsr_str = XmStringCreateLocalized ((char*) << 293 hlhsr_str = XmStringCreateLocalized ((char*)"Hidden line and surface removal"); 298 294 299 drawing_style_pullright = XmVaCreateSimplePu 295 drawing_style_pullright = XmVaCreateSimplePulldownMenu 300 (style_cascade, 296 (style_cascade, 301 (char*)menu_str[15].c_str(), << 297 (char*)"drawing_style", 302 1, 298 1, 303 drawing_style_callback, 299 drawing_style_callback, 304 XmVaRADIOBUTTON, wireframe_str, (KeySym)X << 300 XmVaRADIOBUTTON, wireframe_str, 'W', NULL, NULL, 305 XmVaRADIOBUTTON, hlr_str, (KeySym)X << 301 XmVaRADIOBUTTON, hlr_str, 'L', NULL, NULL, 306 XmVaRADIOBUTTON, hsr_str, (KeySym)X << 302 XmVaRADIOBUTTON, hsr_str, 'S', NULL, NULL, 307 XmVaRADIOBUTTON, hlhsr_str, (KeySym)X << 303 XmVaRADIOBUTTON, hlhsr_str, 'H', NULL, NULL, 308 XmNradioBehavior, True, 304 XmNradioBehavior, True, 309 XmNradioAlwaysOne, True, 305 XmNradioAlwaysOne, True, 310 XmNuserData, this, 306 XmNuserData, this, 311 XtNvisual, vi -> visual, 307 XtNvisual, vi -> visual, 312 XtNdepth, vi -> depth, 308 XtNdepth, vi -> depth, 313 XtNcolormap, cmap, 309 XtNcolormap, cmap, 314 XtNborderColor, borcol, 310 XtNborderColor, borcol, 315 XtNbackground, bgnd, 311 XtNbackground, bgnd, 316 NULL); 312 NULL); 317 313 318 Widget special_widget; 314 Widget special_widget; 319 315 320 G4ViewParameters::DrawingStyle d_style; 316 G4ViewParameters::DrawingStyle d_style; 321 d_style = fVP.GetDrawingStyle(); 317 d_style = fVP.GetDrawingStyle(); 322 318 323 if (d_style == G4ViewParameters::wireframe) 319 if (d_style == G4ViewParameters::wireframe) { 324 special_widget = XtNameToWidget(drawing_st 320 special_widget = XtNameToWidget(drawing_style_pullright, "button_0"); 325 if(special_widget) { 321 if(special_widget) { 326 XtVaSetValues (special_widget, XmNset, T 322 XtVaSetValues (special_widget, XmNset, True, NULL); 327 } 323 } 328 } else if (d_style == G4ViewParameters::hlr) 324 } else if (d_style == G4ViewParameters::hlr) { 329 special_widget = XtNameToWidget(drawing_st 325 special_widget = XtNameToWidget(drawing_style_pullright, "button_1"); 330 if(special_widget) { 326 if(special_widget) { 331 XtVaSetValues (special_widget, XmNset, T 327 XtVaSetValues (special_widget, XmNset, True, NULL); 332 } 328 } 333 } else if (d_style == G4ViewParameters::hsr) 329 } else if (d_style == G4ViewParameters::hsr) { 334 special_widget = XtNameToWidget(drawing_st 330 special_widget = XtNameToWidget(drawing_style_pullright, "button_2"); 335 if(special_widget) { 331 if(special_widget) { 336 XtVaSetValues (special_widget, XmNset, T 332 XtVaSetValues (special_widget, XmNset, True, NULL); 337 } 333 } 338 } else if (d_style == G4ViewParameters::hlhs 334 } else if (d_style == G4ViewParameters::hlhsr) { 339 special_widget = XtNameToWidget(drawing_st 335 special_widget = XtNameToWidget(drawing_style_pullright, "button_3"); 340 if(special_widget) { 336 if(special_widget) { 341 XtVaSetValues (special_widget, XmNset, T 337 XtVaSetValues (special_widget, XmNset, True, NULL); 342 } 338 } 343 } else { 339 } else { 344 G4Exception 340 G4Exception 345 ("G4OpenGLXmViewer::CreateMainWindow", 341 ("G4OpenGLXmViewer::CreateMainWindow", 346 "opengl2015", FatalException, 342 "opengl2015", FatalException, 347 "Invalid Drawing style in G4OpenGLXmVie 343 "Invalid Drawing style in G4OpenGLXmViewer::CreateContext"); 348 } 344 } 349 345 350 XmStringFree (wireframe_str); 346 XmStringFree (wireframe_str); 351 XmStringFree (hlr_str); 347 XmStringFree (hlr_str); 352 XmStringFree (hsr_str); 348 XmStringFree (hsr_str); 353 XmStringFree (hlhsr_str); 349 XmStringFree (hlhsr_str); 354 350 355 // G4cout << "Created Drawing pullright men 351 // G4cout << "Created Drawing pullright menu" << G4endl; 356 352 357 //Add Drawing pullright menu to style cascad 353 //Add Drawing pullright menu to style cascade... 358 white_str = XmStringCreateLocalized ((char*) << 354 white_str = XmStringCreateLocalized ((char*)"White"); 359 black_str = XmStringCreateLocalized ((char*) << 355 black_str = XmStringCreateLocalized ((char*)"Black"); 360 356 361 background_color_pullright = XmVaCreateSimpl 357 background_color_pullright = XmVaCreateSimplePulldownMenu 362 (style_cascade, 358 (style_cascade, 363 (char*)menu_str[18].c_str(), << 359 (char*)"background_color", 364 2, 360 2, 365 background_color_callback, 361 background_color_callback, 366 XmVaRADIOBUTTON, white_str, (KeySym)XK_W, << 362 XmVaRADIOBUTTON, white_str, 'W', NULL, NULL, 367 XmVaRADIOBUTTON, black_str, (KeySym)XK_B, << 363 XmVaRADIOBUTTON, black_str, 'B', NULL, NULL, 368 XmNradioBehavior, True, 364 XmNradioBehavior, True, 369 XmNradioAlwaysOne, True, 365 XmNradioAlwaysOne, True, 370 XmNuserData, this, 366 XmNuserData, this, 371 XtNvisual, vi -> visual, 367 XtNvisual, vi -> visual, 372 XtNdepth, vi -> depth, 368 XtNdepth, vi -> depth, 373 XtNcolormap, cmap, 369 XtNcolormap, cmap, 374 XtNborderColor, borcol, 370 XtNborderColor, borcol, 375 XtNbackground, bgnd, 371 XtNbackground, bgnd, 376 NULL); 372 NULL); 377 373 378 if (background.GetRed() == 1. && 374 if (background.GetRed() == 1. && 379 background.GetGreen() == 1. && 375 background.GetGreen() == 1. && 380 background.GetBlue() == 1.) { 376 background.GetBlue() == 1.) { 381 special_widget = XtNameToWidget(background 377 special_widget = XtNameToWidget(background_color_pullright, "button_0"); 382 if(special_widget) { 378 if(special_widget) { 383 XtVaSetValues (special_widget, XmNset, T 379 XtVaSetValues (special_widget, XmNset, True, NULL); 384 } 380 } 385 } else { 381 } else { 386 special_widget = XtNameToWidget(background 382 special_widget = XtNameToWidget(background_color_pullright, "button_1"); 387 if(special_widget) { 383 if(special_widget) { 388 XtVaSetValues (special_widget, XmNset, T 384 XtVaSetValues (special_widget, XmNset, True, NULL); 389 } 385 } 390 } 386 } 391 387 392 XmStringFree (white_str); 388 XmStringFree (white_str); 393 XmStringFree (black_str); 389 XmStringFree (black_str); 394 390 395 // G4cout << "Created Background color pull 391 // G4cout << "Created Background color pullright menu" << G4endl; 396 392 397 //*********Create actions pulldown menu on m 393 //*********Create actions pulldown menu on menubar********* 398 rot_str = XmStringCreateLocalized ((char*)me << 394 rot_str = XmStringCreateLocalized ((char*)"Rotation control panel"); 399 pan_str = XmStringCreateLocalized ((char*)me << 395 pan_str = XmStringCreateLocalized ((char*)"Panning control panel"); 400 set_str = XmStringCreateLocalized ((char*)me << 396 set_str = XmStringCreateLocalized ((char*)"Set control panel limits"); 401 397 402 actions_cascade = XmVaCreateSimplePulldownMe 398 actions_cascade = XmVaCreateSimplePulldownMenu 403 (menubar, 399 (menubar, 404 (char*)menu_str[3].c_str(), << 400 (char*)"actions", 405 1, 401 1, 406 actions_callback, 402 actions_callback, 407 XmVaPUSHBUTTON, rot_str, (KeySym)XK_R, NU << 403 XmVaPUSHBUTTON, rot_str, 'R', NULL, NULL, 408 XmVaPUSHBUTTON, pan_str, (KeySym)XK_P, NU << 404 XmVaPUSHBUTTON, pan_str, 'P', NULL, NULL, 409 XmVaPUSHBUTTON, set_str, (KeySym)XK_S, NU << 405 XmVaPUSHBUTTON, set_str, 'S', NULL, NULL, 410 XmNuserData, this, 406 XmNuserData, this, 411 XtNvisual, vi -> visual, 407 XtNvisual, vi -> visual, 412 XtNdepth, vi -> depth, 408 XtNdepth, vi -> depth, 413 XtNcolormap, cmap, 409 XtNcolormap, cmap, 414 XtNborderColor, borcol, 410 XtNborderColor, borcol, 415 XtNbackground, bgnd, 411 XtNbackground, bgnd, 416 NULL); 412 NULL); 417 413 418 XmStringFree (rot_str); 414 XmStringFree (rot_str); 419 XmStringFree (pan_str); 415 XmStringFree (pan_str); 420 XmStringFree (set_str); 416 XmStringFree (set_str); 421 G4cout << "Created Actions pulldown menu" << 417 G4cout << "Created Actions pulldown menu" << G4endl; 422 418 423 misc_str = XmStringCreateLocalized ((char*)m << 419 misc_str = XmStringCreateLocalized ((char*)"Miscellany control panel"); 424 exit_str = XmStringCreateLocalized ((char*)m << 420 exit_str = XmStringCreateLocalized ((char*)"Exit to G4Vis>"); 425 print_str = XmStringCreateLocalized ((char*) << 421 print_str = XmStringCreateLocalized ((char*)"Create .eps file"); 426 422 427 //*********Create miscellany pulldown menu o 423 //*********Create miscellany pulldown menu on menubar********* 428 misc_cascade = XmVaCreateSimplePulldownMenu 424 misc_cascade = XmVaCreateSimplePulldownMenu 429 (menubar, 425 (menubar, 430 (char*)menu_str[5].c_str(), << 426 (char*)"miscellany", 431 2, 427 2, 432 misc_callback, 428 misc_callback, 433 XmVaPUSHBUTTON, misc_str, (KeySym)XK_M, << 429 XmVaPUSHBUTTON, misc_str, 'M', NULL, NULL, 434 XmVaPUSHBUTTON, exit_str, (KeySym)XK_E, << 430 XmVaPUSHBUTTON, exit_str, 'E', NULL, NULL, 435 XmVaPUSHBUTTON, print_str, (KeySym)XK_P, << 431 XmVaPUSHBUTTON, print_str, 'P', NULL, NULL, 436 XmNuserData, this, 432 XmNuserData, this, 437 XtNvisual, vi -> visual, 433 XtNvisual, vi -> visual, 438 XtNdepth, vi -> depth, 434 XtNdepth, vi -> depth, 439 XtNcolormap, cmap, 435 XtNcolormap, cmap, 440 XtNborderColor, borcol, 436 XtNborderColor, borcol, 441 XtNbackground, bgnd, 437 XtNbackground, bgnd, 442 NULL); 438 NULL); 443 439 444 XmStringFree (misc_str); 440 XmStringFree (misc_str); 445 XmStringFree (exit_str); 441 XmStringFree (exit_str); 446 XmStringFree (print_str); 442 XmStringFree (print_str); 447 G4cout << "Created Miscellany pulldown menu" 443 G4cout << "Created Miscellany pulldown menu" << G4endl; 448 444 449 trans_str = XmStringCreateLocalized ((char*) << 445 trans_str = XmStringCreateLocalized ((char*)"Transparency"); 450 anti_str = XmStringCreateLocalized ((char*)m << 446 anti_str = XmStringCreateLocalized ((char*)"Antialiasing"); 451 halo_str = XmStringCreateLocalized ((char*)m << 447 halo_str = XmStringCreateLocalized ((char*)"Haloing"); 452 aux_edge_str = XmStringCreateLocalized ((cha << 448 aux_edge_str = XmStringCreateLocalized ((char*)"Auxiliary edges"); 453 449 454 //*********Create special pulldown menu on m 450 //*********Create special pulldown menu on menubar********* 455 spec_cascade = XmVaCreateSimplePulldownMenu 451 spec_cascade = XmVaCreateSimplePulldownMenu 456 (menubar, 452 (menubar, 457 (char*)menu_str[7].c_str(), << 453 (char*)"special", 458 3, 454 3, 459 NULL, 455 NULL, 460 XmVaCASCADEBUTTON, trans_str, (KeySym) << 456 XmVaCASCADEBUTTON, trans_str, 'T', 461 XmVaCASCADEBUTTON, anti_str, (KeySym) << 457 XmVaCASCADEBUTTON, anti_str, 'A', 462 XmVaCASCADEBUTTON, halo_str, (KeySym) << 458 XmVaCASCADEBUTTON, halo_str, 'H', 463 XmVaCASCADEBUTTON, aux_edge_str, (KeySym) << 459 XmVaCASCADEBUTTON, aux_edge_str, 'E', 464 XtNvisual, vi -> visual, 460 XtNvisual, vi -> visual, 465 XtNdepth, vi -> depth, 461 XtNdepth, vi -> depth, 466 XtNcolormap, cmap, 462 XtNcolormap, cmap, 467 XtNborderColor, borcol, 463 XtNborderColor, borcol, 468 XtNbackground, bgnd, 464 XtNbackground, bgnd, 469 NULL); 465 NULL); 470 466 471 XmStringFree (trans_str); 467 XmStringFree (trans_str); 472 XmStringFree (anti_str); 468 XmStringFree (anti_str); 473 XmStringFree (halo_str); 469 XmStringFree (halo_str); 474 XmStringFree (aux_edge_str); 470 XmStringFree (aux_edge_str); 475 471 476 // G4cout << "Created Special pulldown menu 472 // G4cout << "Created Special pulldown menu" << G4endl; 477 473 478 //Add Transparency pullright menu to special 474 //Add Transparency pullright menu to special cascade... 479 off_str = XmStringCreateLocalized ((char*)me << 475 off_str = XmStringCreateLocalized ((char*)"Off"); 480 on_str = XmStringCreateLocalized ((char*)men << 476 on_str = XmStringCreateLocalized ((char*)"On"); 481 477 482 transparency_pullright = XmVaCreateSimplePul 478 transparency_pullright = XmVaCreateSimplePulldownMenu 483 (spec_cascade, 479 (spec_cascade, 484 (char*)menu_str[26].c_str(), << 480 (char*)"transparency", 485 0, 481 0, 486 transparency_callback, 482 transparency_callback, 487 XmVaRADIOBUTTON, off_str, (KeySym)XK_f, N << 483 XmVaRADIOBUTTON, off_str, 'f', NULL, NULL, 488 XmVaRADIOBUTTON, on_str, (KeySym)XK_n, N << 484 XmVaRADIOBUTTON, on_str, 'n', NULL, NULL, 489 XmNradioBehavior, True, 485 XmNradioBehavior, True, 490 XmNradioAlwaysOne, True, 486 XmNradioAlwaysOne, True, 491 XmNuserData, this, 487 XmNuserData, this, 492 XtNvisual, vi -> visual, 488 XtNvisual, vi -> visual, 493 XtNdepth, vi -> depth, 489 XtNdepth, vi -> depth, 494 XtNcolormap, cmap, 490 XtNcolormap, cmap, 495 XtNborderColor, borcol, 491 XtNborderColor, borcol, 496 XtNbackground, bgnd, 492 XtNbackground, bgnd, 497 NULL); 493 NULL); 498 494 499 if (transparency_enabled == false) { 495 if (transparency_enabled == false) { 500 special_widget = XtNameToWidget(transparen 496 special_widget = XtNameToWidget(transparency_pullright, "button_0"); 501 if(special_widget) { 497 if(special_widget) { 502 XtVaSetValues (special_widget, XmNset, T 498 XtVaSetValues (special_widget, XmNset, True, NULL); 503 } 499 } 504 } else if (transparency_enabled == true) { 500 } else if (transparency_enabled == true) { 505 special_widget = XtNameToWidget(transparen 501 special_widget = XtNameToWidget(transparency_pullright, "button_1"); 506 if(special_widget) { 502 if(special_widget) { 507 XtVaSetValues (special_widget, XmNset, T 503 XtVaSetValues (special_widget, XmNset, True, NULL); 508 } 504 } 509 } else { 505 } else { 510 G4Exception 506 G4Exception 511 ("G4OpenGLXmViewer::CreateMainWindow", 507 ("G4OpenGLXmViewer::CreateMainWindow", 512 "opengl2016", FatalException, 508 "opengl2016", FatalException, 513 "transparency_enabled in G4OpenGLXmView 509 "transparency_enabled in G4OpenGLXmViewer is neither true nor false!!"); 514 } 510 } 515 511 516 //Add antialias pullright menu to special ca 512 //Add antialias pullright menu to special cascade... 517 antialias_pullright = XmVaCreateSimplePulldo 513 antialias_pullright = XmVaCreateSimplePulldownMenu 518 (spec_cascade, 514 (spec_cascade, 519 (char*)menu_str[28].c_str(), << 515 (char*)"antialias", 520 1, 516 1, 521 antialias_callback, 517 antialias_callback, 522 XmVaRADIOBUTTON, off_str, (KeySym)XK_f, N << 518 XmVaRADIOBUTTON, off_str, 'f', NULL, NULL, 523 XmVaRADIOBUTTON, on_str, (KeySym)XK_n, N << 519 XmVaRADIOBUTTON, on_str, 'n', NULL, NULL, 524 XmNradioBehavior, True, 520 XmNradioBehavior, True, 525 XmNradioAlwaysOne, True, 521 XmNradioAlwaysOne, True, 526 XmNuserData, this, 522 XmNuserData, this, 527 XtNvisual, vi -> visual, 523 XtNvisual, vi -> visual, 528 XtNdepth, vi -> depth, 524 XtNdepth, vi -> depth, 529 XtNcolormap, cmap, 525 XtNcolormap, cmap, 530 XtNborderColor, borcol, 526 XtNborderColor, borcol, 531 XtNbackground, bgnd, 527 XtNbackground, bgnd, 532 NULL); 528 NULL); 533 529 534 if (antialiasing_enabled == false) { 530 if (antialiasing_enabled == false) { 535 special_widget = XtNameToWidget(antialias_ 531 special_widget = XtNameToWidget(antialias_pullright, "button_0"); 536 if(special_widget) { 532 if(special_widget) { 537 XtVaSetValues (special_widget, XmNset, T 533 XtVaSetValues (special_widget, XmNset, True, NULL); 538 } 534 } 539 } else if (antialiasing_enabled == true) { 535 } else if (antialiasing_enabled == true) { 540 special_widget = XtNameToWidget(antialias_ 536 special_widget = XtNameToWidget(antialias_pullright, "button_1"); 541 if(special_widget) { 537 if(special_widget) { 542 XtVaSetValues (special_widget, XmNset, T 538 XtVaSetValues (special_widget, XmNset, True, NULL); 543 } 539 } 544 } else { 540 } else { 545 G4Exception 541 G4Exception 546 ("G4OpenGLXmViewer::CreateMainWindow", 542 ("G4OpenGLXmViewer::CreateMainWindow", 547 "opengl2017", FatalException, 543 "opengl2017", FatalException, 548 "antialiasing_enabled in G4OpenGLXmView 544 "antialiasing_enabled in G4OpenGLXmViewer is neither true nor false!!"); 549 } 545 } 550 546 551 //Add Haloing pullright menu to special casc 547 //Add Haloing pullright menu to special cascade... 552 haloing_pullright = XmVaCreateSimplePulldown 548 haloing_pullright = XmVaCreateSimplePulldownMenu 553 (spec_cascade, 549 (spec_cascade, 554 (char*)menu_str[30].c_str(), << 550 (char*)"haloing", 555 2, 551 2, 556 haloing_callback, 552 haloing_callback, 557 XmVaRADIOBUTTON, off_str, (KeySym)XK_f, N << 553 XmVaRADIOBUTTON, off_str, 'f', NULL, NULL, 558 XmVaRADIOBUTTON, on_str, (KeySym)XK_n, N << 554 XmVaRADIOBUTTON, on_str, 'n', NULL, NULL, 559 XmNradioBehavior, True, 555 XmNradioBehavior, True, 560 XmNradioAlwaysOne, True, 556 XmNradioAlwaysOne, True, 561 XmNuserData, this, 557 XmNuserData, this, 562 XtNvisual, vi -> visual, 558 XtNvisual, vi -> visual, 563 XtNdepth, vi -> depth, 559 XtNdepth, vi -> depth, 564 XtNcolormap, cmap, 560 XtNcolormap, cmap, 565 XtNborderColor, borcol, 561 XtNborderColor, borcol, 566 XtNbackground, bgnd, 562 XtNbackground, bgnd, 567 NULL); 563 NULL); 568 564 569 if (haloing_enabled == false) { 565 if (haloing_enabled == false) { 570 special_widget = XtNameToWidget(haloing_pu 566 special_widget = XtNameToWidget(haloing_pullright, "button_0"); 571 if(special_widget) { 567 if(special_widget) { 572 XtVaSetValues (special_widget, XmNset, T 568 XtVaSetValues (special_widget, XmNset, True, NULL); 573 } 569 } 574 } else if (haloing_enabled == true) { 570 } else if (haloing_enabled == true) { 575 special_widget = XtNameToWidget(haloing_pu 571 special_widget = XtNameToWidget(haloing_pullright, "button_1"); 576 if(special_widget) { 572 if(special_widget) { 577 XtVaSetValues (special_widget, XmNset, T 573 XtVaSetValues (special_widget, XmNset, True, NULL); 578 } 574 } 579 } else { 575 } else { 580 G4Exception 576 G4Exception 581 ("G4OpenGLXmViewer::CreateMainWindow", 577 ("G4OpenGLXmViewer::CreateMainWindow", 582 "opengl2018", FatalException, 578 "opengl2018", FatalException, 583 "haloing_enabled in G4OpenGLXmViewer is 579 "haloing_enabled in G4OpenGLXmViewer is neither true nor false!!"); 584 } 580 } 585 581 586 //Add Aux_Edge pullright menu to special cas 582 //Add Aux_Edge pullright menu to special cascade... 587 aux_edge_pullright = XmVaCreateSimplePulldow 583 aux_edge_pullright = XmVaCreateSimplePulldownMenu 588 (spec_cascade, 584 (spec_cascade, 589 (char*)menu_str[32].c_str(), << 585 (char*)"aux_edge", 590 3, 586 3, 591 aux_edge_callback, 587 aux_edge_callback, 592 XmVaRADIOBUTTON, off_str, (KeySym)XK_f, N << 588 XmVaRADIOBUTTON, off_str, 'f', NULL, NULL, 593 XmVaRADIOBUTTON, on_str, (KeySym)XK_n, N << 589 XmVaRADIOBUTTON, on_str, 'n', NULL, NULL, 594 XmNradioBehavior, True, 590 XmNradioBehavior, True, 595 XmNradioAlwaysOne, True, 591 XmNradioAlwaysOne, True, 596 XmNuserData, this, 592 XmNuserData, this, 597 XtNvisual, vi -> visual, 593 XtNvisual, vi -> visual, 598 XtNdepth, vi -> depth, 594 XtNdepth, vi -> depth, 599 XtNcolormap, cmap, 595 XtNcolormap, cmap, 600 XtNborderColor, borcol, 596 XtNborderColor, borcol, 601 XtNbackground, bgnd, 597 XtNbackground, bgnd, 602 NULL); 598 NULL); 603 599 604 if (!fVP.IsAuxEdgeVisible()) { 600 if (!fVP.IsAuxEdgeVisible()) { 605 special_widget = XtNameToWidget(aux_edge_p 601 special_widget = XtNameToWidget(aux_edge_pullright, "button_0"); 606 if(special_widget) { 602 if(special_widget) { 607 XtVaSetValues (special_widget, XmNset, T 603 XtVaSetValues (special_widget, XmNset, True, NULL); 608 } 604 } 609 } else { 605 } else { 610 special_widget = XtNameToWidget(aux_edge_p 606 special_widget = XtNameToWidget(aux_edge_pullright, "button_1"); 611 if(special_widget) { 607 if(special_widget) { 612 XtVaSetValues (special_widget, XmNset, T 608 XtVaSetValues (special_widget, XmNset, True, NULL); 613 } 609 } 614 } 610 } 615 611 616 XtManageChild (menubar); 612 XtManageChild (menubar); 617 frame = XtVaCreateManagedWidget ((char*)menu << 613 frame = XtVaCreateManagedWidget ((char*)"frame", 618 xmFrameWidgetClass, main_win, 614 xmFrameWidgetClass, main_win, 619 XtNvisual, vi -> visual, 615 XtNvisual, vi -> visual, 620 XtNdepth, vi -> depth, 616 XtNdepth, vi -> depth, 621 XtNcolormap, cmap, 617 XtNcolormap, cmap, 622 XtNborderColor, borcol, 618 XtNborderColor, borcol, 623 XtNbackground, bgnd, 619 XtNbackground, bgnd, 624 NULL); 620 NULL); 625 621 626 glxarea = XtVaCreateManagedWidget ((char*)me << 622 glxarea = XtVaCreateManagedWidget ((char*)"glxarea", 627 xmDrawingAreaWidgetClass, 623 xmDrawingAreaWidgetClass, 628 frame, 624 frame, 629 XtNvisual, vi -> visual, 625 XtNvisual, vi -> visual, 630 XtNdepth, vi -> depth, 626 XtNdepth, vi -> depth, 631 XtNcolormap, cmap, 627 XtNcolormap, cmap, 632 XtNborderColor, borcol, 628 XtNborderColor, borcol, 633 XtNbackground, bgnd, 629 XtNbackground, bgnd, 634 NULL); 630 NULL); 635 631 636 632 637 XmMainWindowSetAreas (main_win, // main wid 633 XmMainWindowSetAreas (main_win, // main widget, children are specified 638 menubar, // widget to use as menu bar 634 menubar, // widget to use as menu bar 639 NULL, // widget to use as command w 635 NULL, // widget to use as command window 640 NULL, // widget for horizontal scro 636 NULL, // widget for horizontal scroll bar 641 NULL, // widget for vertical scroll 637 NULL, // widget for vertical scroll bar 642 frame // widget to be used for work 638 frame // widget to be used for work window 643 ); 639 ); 644 640 645 XtRealizeWidget(shell); 641 XtRealizeWidget(shell); 646 642 647 // Once widget is realized (ie, associated w 643 // Once widget is realized (ie, associated with a created X window), we 648 // can bind the OpenGL rendering context to 644 // can bind the OpenGL rendering context to the window. 649 645 650 win = XtWindow (glxarea); 646 win = XtWindow (glxarea); 651 647 652 glXMakeCurrent (dpy, win, cxMaster); 648 glXMakeCurrent (dpy, win, cxMaster); 653 649 654 // This should be add AFTER glXMakeCurrent d 650 // This should be add AFTER glXMakeCurrent done because it will fire a resizeCallback 655 XtAddCallback (glxarea, 651 XtAddCallback (glxarea, 656 XmNresizeCallback, 652 XmNresizeCallback, 657 resize_callback, 653 resize_callback, 658 this); 654 this); 659 655 660 XtAddCallback (glxarea, 656 XtAddCallback (glxarea, 661 XmNexposeCallback, 657 XmNexposeCallback, 662 expose_callback, 658 expose_callback, 663 this); 659 this); 664 660 665 } 661 } 666 662 667 G4OpenGLXmViewer::G4OpenGLXmViewer (G4OpenGLSc 663 G4OpenGLXmViewer::G4OpenGLXmViewer (G4OpenGLSceneHandler& scene): 668 G4VViewer (scene, -1), 664 G4VViewer (scene, -1), 669 G4OpenGLViewer (scene), 665 G4OpenGLViewer (scene), 670 G4OpenGLXViewer (scene), 666 G4OpenGLXViewer (scene), 671 toplevel (0), 667 toplevel (0), 672 shell (0), 668 shell (0), 673 main_win (0), 669 main_win (0), 674 menubar (0), 670 menubar (0), 675 style_cascade (0), 671 style_cascade (0), 676 actions_cascade (0), 672 actions_cascade (0), 677 misc_cascade (0), 673 misc_cascade (0), 678 spec_cascade (0), 674 spec_cascade (0), 679 drawing_style_pullright (0), 675 drawing_style_pullright (0), 680 background_color_pullright (0), 676 background_color_pullright (0), 681 transparency_pullright (0), 677 transparency_pullright (0), 682 antialias_pullright (0), 678 antialias_pullright (0), 683 haloing_pullright (0), 679 haloing_pullright (0), 684 aux_edge_pullright (0), 680 aux_edge_pullright (0), 685 frame (0), 681 frame (0), 686 glxarea (0), 682 glxarea (0), 687 style_str (0), 683 style_str (0), 688 actions_str (0), 684 actions_str (0), 689 misc_str (0), 685 misc_str (0), 690 spec_str (0), 686 spec_str (0), 691 draw_str (0), 687 draw_str (0), 692 polyhedron_str (0), 688 polyhedron_str (0), 693 wireframe_str (0), 689 wireframe_str (0), 694 hlr_str (0), 690 hlr_str (0), 695 hsr_str (0), 691 hsr_str (0), 696 hlhsr_str (0), 692 hlhsr_str (0), 697 set_str (0), 693 set_str (0), 698 rot_str (0), 694 rot_str (0), 699 pan_str (0), 695 pan_str (0), 700 exit_str (0), 696 exit_str (0), 701 quit_str (0), 697 quit_str (0), 702 print_str (0), 698 print_str (0), 703 white_str (0), 699 white_str (0), 704 black_str (0), 700 black_str (0), 705 anti_str (0), 701 anti_str (0), 706 trans_str (0), 702 trans_str (0), 707 halo_str (0), 703 halo_str (0), 708 aux_edge_str (0), 704 aux_edge_str (0), 709 bgnd_str (0), 705 bgnd_str (0), 710 off_str (0), 706 off_str (0), 711 on_str (0), 707 on_str (0), 712 zoom_high (0.0), 708 zoom_high (0.0), 713 zoom_low (0.0), 709 zoom_low (0.0), 714 pan_low (0.0), 710 pan_low (0.0), 715 pan_high (0.0), 711 pan_high (0.0), 716 dolly_low (0.0), 712 dolly_low (0.0), 717 dolly_high (0.0), 713 dolly_high (0.0), 718 fov (0.0), 714 fov (0.0), 719 rot_sens_limit (0.0), 715 rot_sens_limit (0.0), 720 pan_sens_limit (0.0), 716 pan_sens_limit (0.0), 721 wob_high (0.0), 717 wob_high (0.0), 722 wob_low (0.0), 718 wob_low (0.0), 723 wob_sens (0.0), 719 wob_sens (0.0), 724 pan_right (false), 720 pan_right (false), 725 rotate_right (false), 721 rotate_right (false), 726 pan_up (false), 722 pan_up (false), 727 rotate_up (false), 723 rotate_up (false), 728 original_vp(fVP.GetViewpointDirection()), 724 original_vp(fVP.GetViewpointDirection()), 729 frameNo (0), 725 frameNo (0), 730 fprotation_top (0), 726 fprotation_top (0), 731 fprotation_button_box (0), 727 fprotation_button_box (0), 732 fprotation_button1 (0), 728 fprotation_button1 (0), 733 fprotation_button2 (0), 729 fprotation_button2 (0), 734 fprotation_slider_box (0), 730 fprotation_slider_box (0), 735 fprotation_slider (0), 731 fprotation_slider (0), 736 fprotation_arrow_box (0), 732 fprotation_arrow_box (0), 737 fprotation_arrow (0), 733 fprotation_arrow (0), 738 fppanning_top (0), 734 fppanning_top (0), 739 fppanning_box (0), 735 fppanning_box (0), 740 fppanning_arrows (0), 736 fppanning_arrows (0), 741 fppanning_slider (0), 737 fppanning_slider (0), 742 fpzoom_box (0), 738 fpzoom_box (0), 743 fpzoom_slider (0), 739 fpzoom_slider (0), 744 fpdolly_box (0), 740 fpdolly_box (0), 745 fpdolly_slider (0), 741 fpdolly_slider (0), 746 fpsetting_top (0), 742 fpsetting_top (0), 747 fpsetting_box (0), 743 fpsetting_box (0), 748 fppan_set (0), 744 fppan_set (0), 749 fprot_set (0), 745 fprot_set (0), 750 fpzoom_upper (0), 746 fpzoom_upper (0), 751 fpzoom_lower (0), 747 fpzoom_lower (0), 752 fpdolly_upper (0), 748 fpdolly_upper (0), 753 fpdolly_lower (0), 749 fpdolly_lower (0), 754 fpok_button (0), 750 fpok_button (0), 755 fpmiscellany_top (0), 751 fpmiscellany_top (0), 756 fpwobble_box (0), 752 fpwobble_box (0), 757 fpwobble_button (0), 753 fpwobble_button (0), 758 fpwobble_slider (0), 754 fpwobble_slider (0), 759 fpreset_box (0), 755 fpreset_box (0), 760 fpreset_button (0), 756 fpreset_button (0), 761 fpproj_style_box (0), 757 fpproj_style_box (0), 762 fporthogonal_button (0), 758 fporthogonal_button (0), 763 fpperspective_button (0), 759 fpperspective_button (0), 764 fpfov_text (0), 760 fpfov_text (0), 765 fpprint_top (0), 761 fpprint_top (0), 766 fpprint_box (0), 762 fpprint_box (0), 767 fpprint_col_box (0), 763 fpprint_col_box (0), 768 fpprint_style_box (0), 764 fpprint_style_box (0), 769 fpprint_text (0), 765 fpprint_text (0), 770 fpprint_button (0), 766 fpprint_button (0), 771 fpprint_line (0), 767 fpprint_line (0), 772 fpprint_col_radio1 (0), 768 fpprint_col_radio1 (0), 773 fpprint_col_radio2 (0), 769 fpprint_col_radio2 (0), 774 fpprint_style_radio1 (0), 770 fpprint_style_radio1 (0), 775 fpprint_style_radio2 (0) 771 fpprint_style_radio2 (0) 776 { 772 { 777 GetXmConnection (); 773 GetXmConnection (); 778 ResetView(); 774 ResetView(); 779 if (fViewId < 0) return; 775 if (fViewId < 0) return; 780 } 776 } 781 777 782 778 783 void G4OpenGLXmViewer::UpdateControlPanel () { 779 void G4OpenGLXmViewer::UpdateControlPanel () { 784 780 785 // set new values 781 // set new values 786 782 787 if (fprotation_slider) { 783 if (fprotation_slider) { 788 fprotation_slider->SetInitialValue(fRot_se 784 fprotation_slider->SetInitialValue(fRot_sens); 789 fprotation_slider->SetMaxValue(rot_sens_li 785 fprotation_slider->SetMaxValue(rot_sens_limit); 790 fprotation_slider->SetMinValue(0); 786 fprotation_slider->SetMinValue(0); 791 } 787 } 792 if (fppanning_slider) { 788 if (fppanning_slider) { 793 fppanning_slider->SetInitialValue(fPan_sen 789 fppanning_slider->SetInitialValue(fPan_sens); 794 fppanning_slider->SetMaxValue(pan_sens_lim 790 fppanning_slider->SetMaxValue(pan_sens_limit); 795 fppanning_slider->SetMinValue(0); 791 fppanning_slider->SetMinValue(0); 796 } 792 } 797 if (fpzoom_slider) { 793 if (fpzoom_slider) { 798 fpzoom_slider->SetInitialValue(fVP.GetZoom 794 fpzoom_slider->SetInitialValue(fVP.GetZoomFactor()); 799 fpzoom_slider->SetMinValue(zoom_low); 795 fpzoom_slider->SetMinValue(zoom_low); 800 fpzoom_slider->SetMaxValue(zoom_high); 796 fpzoom_slider->SetMaxValue(zoom_high); 801 } 797 } 802 if (fpdolly_slider) { 798 if (fpdolly_slider) { 803 fpdolly_slider->SetInitialValue(fVP.GetDol 799 fpdolly_slider->SetInitialValue(fVP.GetDolly()); 804 fpdolly_slider->SetMinValue(dolly_low); 800 fpdolly_slider->SetMinValue(dolly_low); 805 fpdolly_slider->SetMaxValue(dolly_high); 801 fpdolly_slider->SetMaxValue(dolly_high); 806 } 802 } 807 803 808 if (fpwobble_slider) { 804 if (fpwobble_slider) { 809 fpwobble_slider->SetInitialValue(fVP.GetDo 805 fpwobble_slider->SetInitialValue(fVP.GetDolly()); 810 } 806 } 811 807 812 if (fppan_set) { 808 if (fppan_set) { 813 fppan_set->SetValue(pan_sens_limit); 809 fppan_set->SetValue(pan_sens_limit); 814 } 810 } 815 811 816 if (fprot_set) { 812 if (fprot_set) { 817 fprot_set->SetValue(rot_sens_limit); 813 fprot_set->SetValue(rot_sens_limit); 818 } 814 } 819 815 820 if (fpzoom_upper) { 816 if (fpzoom_upper) { 821 fpzoom_upper->SetValue(zoom_high); 817 fpzoom_upper->SetValue(zoom_high); 822 } 818 } 823 819 824 if (fpzoom_lower) { 820 if (fpzoom_lower) { 825 fpzoom_lower->SetValue(zoom_low); 821 fpzoom_lower->SetValue(zoom_low); 826 } 822 } 827 if (fpdolly_upper) { 823 if (fpdolly_upper) { 828 fpdolly_upper->SetValue(dolly_high); 824 fpdolly_upper->SetValue(dolly_high); 829 } 825 } 830 826 831 if (fpdolly_lower) { 827 if (fpdolly_lower) { 832 fpdolly_lower->SetValue(dolly_low); 828 fpdolly_lower->SetValue(dolly_low); 833 } 829 } 834 830 835 831 836 } 832 } 837 833 838 834 839 G4OpenGLXmViewer::~G4OpenGLXmViewer () 835 G4OpenGLXmViewer::~G4OpenGLXmViewer () 840 { 836 { 841 XtDestroyWidget (shell); 837 XtDestroyWidget (shell); 842 win = 0; // ...to avoid XDestroyWindow in G4 838 win = 0; // ...to avoid XDestroyWindow in G4OpenGLXViewer base class 843 // because XtDestroyWidget has already destr 839 // because XtDestroyWidget has already destroyed it. 844 G4Xt::getInstance () ->RemoveShell (shell); 840 G4Xt::getInstance () ->RemoveShell (shell); 845 841 846 /****************************** 842 /****************************** 847 if (fprotation_top) { 843 if (fprotation_top) { 848 delete fprotation_top; 844 delete fprotation_top; 849 } 845 } 850 846 851 if (fppanning_top) { 847 if (fppanning_top) { 852 delete fppanning_top; 848 delete fppanning_top; 853 } 849 } 854 850 855 if (fpsetting_top) { 851 if (fpsetting_top) { 856 delete fpsetting_top; 852 delete fpsetting_top; 857 } 853 } 858 854 859 if (fpmiscellany_top) { 855 if (fpmiscellany_top) { 860 delete fpmiscellany_top; 856 delete fpmiscellany_top; 861 } 857 } 862 ******************************/ 858 ******************************/ 863 859 864 } 860 } >> 861 >> 862 #endif 865 863