Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/OpenInventor/src/G4OpenInventorXtViewer.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /visualization/OpenInventor/src/G4OpenInventorXtViewer.cc (Version 11.3.0) and /visualization/OpenInventor/src/G4OpenInventorXtViewer.cc (Version 2.0)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 //                                                
 28 /*                                                
 29  * jck 05 Feb 1997 - Initial Implementation       
 30  * jck 21 Apr 1997                                
 31  *  Mods for SoXtHepViewer                        
 32  * gb : on Win32 use an SoXtExaminerViewer.       
 33  * gb 05 April 2004 : revisit to separate Wind    
 34  * gb 09 November 2004 : restore the escape bu    
 35  * gb 09 November 2004 : have a menu bar in th    
 36  * gb 09 November 2004 : have gl2ps file produ    
 37  * gb 14 November 2004 : inherit G4OpenInvento    
 38  */                                               
 39                                                   
 40 // this :                                         
 41 #include "G4OpenInventorXtViewer.hh"              
 42                                                   
 43 #include <Inventor/nodes/SoSelection.h>           
 44                                                   
 45 #include <Inventor/Xt/SoXt.h>                     
 46 #include <Inventor/Xt/viewers/SoXtExaminerView    
 47                                                   
 48 #include <X11/StringDefs.h>                       
 49 #include <X11/Shell.h>                            
 50                                                   
 51 #include <Xm/Xm.h>                                
 52 #include <Xm/PushB.h>                             
 53 #include <Xm/Form.h>                              
 54 #include <Xm/CascadeB.h>                          
 55 #include <Xm/RowColumn.h>                         
 56 #include <Xm/Text.h>                              
 57                                                   
 58 #include "HEPVis/actions/SoGL2PSAction.h"         
 59                                                   
 60 #include "G4OpenInventor.hh"                      
 61 #include "G4OpenInventorSceneHandler.hh"          
 62 #include "G4VInteractorManager.hh"                
 63 #include "G4VisManager.hh"                        
 64                                                   
 65 G4OpenInventorXtViewer::G4OpenInventorXtViewer    
 66  G4OpenInventorSceneHandler& sceneHandler         
 67 ,const G4String& name)                            
 68 :G4OpenInventorViewer (sceneHandler, name)        
 69 ,fShell(0)                                        
 70 ,fViewer(0)                                       
 71 ,fHelpForm(0)                                     
 72 ,fHelpText(0)                                     
 73 {                                                 
 74   if (G4VisManager::GetVerbosity() >= G4VisMan    
 75     G4cout << "Window name: " << fName << G4en    
 76 }                                                 
 77                                                   
 78                                                   
 79 void G4OpenInventorXtViewer::Initialise() {       
 80                                                   
 81   G4String wName = fName;                         
 82                                                   
 83   Widget parent = (Widget)fInteractorManager->    
 84   int width = 600;                                
 85   int height = 600;                               
 86                                                   
 87   if(!parent) {                                   
 88     // Check if user has specified an X-Window    
 89     char str[32];                                 
 90                                                   
 91     G4String sgeometry = fVP.GetXGeometryStrin    
 92     if(sgeometry.empty()) {                       
 93       G4cout << "ERROR: Geometry string \""       
 94              << sgeometry                         
 95              << "\" is empty.  Using \"600x600    
 96              << G4endl;                           
 97       width = 600;                                
 98       height = 600;                               
 99       snprintf(str,sizeof str,"%dx%d",width,he    
100       sgeometry = str;                            
101     } else {                                      
102       width = fVP.GetWindowSizeHintX();           
103       height = fVP.GetWindowSizeHintX();          
104     }                                             
105                                                   
106     //Create a shell window :                     
107     G4String shellName = wName;                   
108     shellName += "_shell";                        
109     Arg args[10];                                 
110     XtSetArg(args[0],XtNgeometry,XtNewString(s    
111     XtSetArg(args[1],XtNborderWidth,0);           
112     XtSetArg(args[2],XtNtitle,XtNewString(wNam    
113     fShell = XtAppCreateShell(shellName.c_str(    
114                topLevelShellWidgetClass,          
115              SoXt::getDisplay(),                  
116              args,3);                             
117                                                   
118     XtSetArg(args[0],XmNtopAttachment   ,XmATT    
119     XtSetArg(args[1],XmNleftAttachment  ,XmATT    
120     XtSetArg(args[2],XmNrightAttachment ,XmATT    
121     XtSetArg(args[3],XmNbottomAttachment,XmATT    
122     Widget form = XmCreateForm (fShell,(char*)    
123     XtManageChild (form);                         
124                                                   
125     XtSetArg(args[0],XmNtopAttachment   ,XmATT    
126     XtSetArg(args[1],XmNleftAttachment  ,XmATT    
127     XtSetArg(args[2],XmNrightAttachment ,XmATT    
128     Widget menuBar = XmCreateMenuBar (form,(ch    
129     XtManageChild(menuBar);                       
130                                                   
131    {Widget menu = AddMenu(menuBar,"File","File    
132     AddButton(menu,"PS (gl2ps)",PostScriptCbk)    
133     AddButton(menu,"PS (pixmap)",PixmapPostScr    
134     AddButton(menu,"IV",WriteInventorCbk);        
135     AddButton(menu,"Escape",EscapeCbk);}          
136                                                   
137    {Widget menu = AddMenu(menuBar,"Etc","Etc")    
138     AddButton(menu,"Erase detector",EraseDetec    
139     AddButton(menu,"Erase event",EraseEventCbk    
140     AddButton(menu,"Set solid",SetSolidCbk);      
141 /*    AddButton(menu,"Set (G4) wire frame",Set    
142     AddButton(menu,"Set (G4) reduced wire fram    
143     AddButton(menu,"Set (G4) full wire frame",    
144     AddButton(menu,"Visible mothers + invisibl    
145     AddButton(menu,"Visible mothers + visible     
146     AddButton(menu,"Update scene",UpdateSceneC    
147     AddButton(menu,"Scene graph stats",SceneGr    
148    }                                              
149                                                   
150    {Widget menu = AddMenu(menuBar,"Help","Help    
151     AddButton(menu,"Controls",HelpCbk);}          
152                                                   
153     fViewer = new SoXtExaminerViewer(form,wNam    
154                                                   
155     XtSetArg(args[0],XmNtopAttachment   ,XmATT    
156     XtSetArg(args[1],XmNtopWidget       ,menuB    
157     XtSetArg(args[2],XmNleftAttachment  ,XmATT    
158     XtSetArg(args[3],XmNrightAttachment ,XmATT    
159     XtSetArg(args[4],XmNbottomAttachment,XmATT    
160     XtSetValues(fViewer->getWidget(),args,5);     
161                                                   
162     fHelpForm = XmCreateFormDialog(fShell,(cha    
163     XtSetArg(args[0],XmNleftAttachment  ,XmATT    
164     XtSetArg(args[1],XmNrightAttachment ,XmATT    
165     XtSetArg(args[2],XmNbottomAttachment,XmATT    
166     Widget cancel = XmCreatePushButton(fHelpFo    
167     XtAddCallback(cancel,XmNactivateCallback,H    
168     XtManageChild(cancel);                        
169     XtSetArg(args[0],XmNtopAttachment   ,XmATT    
170     XtSetArg(args[1],XmNleftAttachment  ,XmATT    
171     XtSetArg(args[2],XmNrightAttachment ,XmATT    
172     XtSetArg(args[3],XmNbottomAttachment,XmATT    
173     XtSetArg(args[4],XmNbottomWidget    ,cance    
174     fHelpText = XmCreateScrolledText(fHelpForm    
175     XtManageChild(fHelpText);                     
176                                                   
177     fInteractorManager->AddShell(fShell);         
178                                                   
179   } else {                                        
180     char* str = fInteractorManager->GetCreatio    
181     if(str!=0) wName = str;                       
182     fViewer = new SoXtExaminerViewer(parent,wN    
183   }                                               
184                                                   
185   fViewer->setSize(SbVec2s(width,height));        
186                                                   
187   // Have a GL2PS render action :                 
188   const SbViewportRegion& vpRegion = fViewer->    
189   fGL2PSAction = new SoGL2PSAction(vpRegion);     
190   fViewer->setGLRenderAction(fGL2PSAction);       
191                                                   
192   // Else :                                       
193   fViewer->setSceneGraph(fSoSelection);           
194   fViewer->viewAll();                             
195   fViewer->saveHomePosition();                    
196   fViewer->setTitle(fName);                       
197   fViewer->show();                                
198   if(fShell) {                                    
199     SoXt::show(fShell);                           
200     fInteractorManager->FlushAndWaitExecution     
201   }                                               
202   fInteractorManager->SetCreatedInteractor (fV    
203   fViewer->setTransparencyType(SoGLRenderActio    
204 }                                                 
205                                                   
206 G4OpenInventorXtViewer::~G4OpenInventorXtViewe    
207   if(fShell) fInteractorManager->RemoveShell(f    
208   if(fViewer) {                                   
209     fViewer->setSceneGraph(0);                    
210     //FIXME : SGI : the below "delete" block t    
211     //FIXME : CoinXt : the below "delete" cras    
212     //FIXME : delete fViewer;                     
213   }                                               
214   if(fShell) XtDestroyWidget(fShell);             
215 }                                                 
216                                                   
217 void G4OpenInventorXtViewer::FinishView () {      
218   if(!fViewer) return;                            
219   fViewer->viewAll();                             
220   fViewer->saveHomePosition();                    
221 }                                                 
222                                                   
223 void G4OpenInventorXtViewer::SetView () {         
224   G4OpenInventorViewer::SetView ();               
225   if(!fViewer) return;                            
226   // Background.                                  
227   G4Colour b = fVP.GetBackgroundColour ();        
228   fViewer->setBackgroundColor                     
229     (SbColor((float)b.GetRed(),(float)b.GetGre    
230 }                                                 
231                                                   
232                                                   
233 void G4OpenInventorXtViewer::ViewerRender () {    
234   if(!fViewer) return;                            
235   fViewer->render();                              
236 }                                                 
237                                                   
238 SoCamera* G4OpenInventorXtViewer::GetCamera ()    
239   if(!fViewer) return 0;                          
240   return fViewer->getCamera();                    
241 }                                                 
242                                                   
243 Widget G4OpenInventorXtViewer::AddMenu(           
244  Widget aMenuBar                                  
245 ,const G4String& aName                            
246 ,const G4String& aLabel                           
247 )                                                 
248 {                                                 
249   // Pulldown menu :                              
250   Widget menu = XmCreatePulldownMenu(aMenuBar,    
251   // Cascade button :                             
252   Arg args[2];                                    
253   XmString cps =                                  
254     XmStringLtoRCreate((char*)aLabel.c_str(),(    
255   XtSetArg (args[0],XmNlabelString,cps);          
256   XtSetArg (args[1],XmNsubMenuId,menu);           
257   Widget widget = XmCreateCascadeButton(aMenuB    
258   XmStringFree (cps);                             
259   XtManageChild(widget);                          
260   return menu;                                    
261 }                                                 
262 void G4OpenInventorXtViewer::AddButton (          
263  Widget aMenu                                     
264 ,const G4String& aLabel                           
265 ,XtCallbackProc aCallback                         
266 )                                                 
267 {                                                 
268   Widget widget = XmCreatePushButton(aMenu,(ch    
269   XtManageChild(widget);                          
270   XtAddCallback(widget,XmNactivateCallback,aCa    
271 }                                                 
272                                                   
273 void G4OpenInventorXtViewer::HelpCancelCbk(       
274   Widget,XtPointer aData,XtPointer) {             
275   G4OpenInventorXtViewer* This = (G4OpenInvent    
276   XtUnmanageChild(This->fHelpForm);               
277 }                                                 
278                                                   
279                                                   
280 //////////////////////////////////////////////    
281 //////////////////////////////////////////////    
282 //////////////////////////////////////////////    
283                                                   
284 void G4OpenInventorXtViewer::EscapeCbk(           
285   Widget,XtPointer aData,XtPointer) {             
286   G4OpenInventorXtViewer* This = (G4OpenInvent    
287   This->Escape();                                 
288 }                                                 
289                                                   
290 void G4OpenInventorXtViewer::PostScriptCbk(       
291   Widget,XtPointer aData,XtPointer) {             
292   G4OpenInventorXtViewer* This = (G4OpenInvent    
293   This->WritePostScript();                        
294 }                                                 
295                                                   
296 void G4OpenInventorXtViewer::PixmapPostScriptC    
297   Widget,XtPointer aData,XtPointer) {             
298   G4OpenInventorXtViewer* This = (G4OpenInvent    
299   This->WritePixmapPostScript();                  
300 }                                                 
301                                                   
302 void G4OpenInventorXtViewer::SceneGraphStatist    
303   Widget,XtPointer aData,XtPointer) {             
304   G4OpenInventorXtViewer* This = (G4OpenInvent    
305   This->SceneGraphStatistics();                   
306 }                                                 
307                                                   
308 void G4OpenInventorXtViewer::WriteInventorCbk(    
309   Widget,XtPointer aData,XtPointer) {             
310   G4OpenInventorXtViewer* This = (G4OpenInvent    
311   This->WriteInventor();                          
312 }                                                 
313                                                   
314 void G4OpenInventorXtViewer::EraseDetectorCbk(    
315   Widget,XtPointer aData,XtPointer) {             
316   G4OpenInventorXtViewer* This = (G4OpenInvent    
317   This->EraseDetector();                          
318 }                                                 
319                                                   
320 void G4OpenInventorXtViewer::EraseEventCbk(       
321   Widget,XtPointer aData,XtPointer) {             
322   G4OpenInventorXtViewer* This = (G4OpenInvent    
323   This->EraseEvent();                             
324 }                                                 
325                                                   
326 void G4OpenInventorXtViewer::SetSolidCbk(         
327   Widget,XtPointer aData,XtPointer) {             
328   G4OpenInventorXtViewer* This = (G4OpenInvent    
329   This->SetSolid();                               
330 }                                                 
331                                                   
332 void G4OpenInventorXtViewer::SetWireFrameCbk(     
333   Widget,XtPointer aData,XtPointer) {             
334   G4OpenInventorXtViewer* This = (G4OpenInvent    
335   This->SetWireFrame();                           
336 }                                                 
337                                                   
338 void G4OpenInventorXtViewer::SetReducedWireFra    
339   Widget,XtPointer aData,XtPointer) {             
340   G4OpenInventorXtViewer* This = (G4OpenInvent    
341   This->SetReducedWireFrame(true);                
342 }                                                 
343                                                   
344 void G4OpenInventorXtViewer::SetFullWireFrameC    
345   Widget,XtPointer aData,XtPointer) {             
346   G4OpenInventorXtViewer* This = (G4OpenInvent    
347   This->SetReducedWireFrame(false);               
348 }                                                 
349                                                   
350 void G4OpenInventorXtViewer::UpdateSceneCbk(      
351   Widget,XtPointer aData,XtPointer) {             
352   G4OpenInventorXtViewer* This = (G4OpenInvent    
353   This->UpdateScene();                            
354 }                                                 
355                                                   
356 void G4OpenInventorXtViewer::SetPreviewCbk(       
357   Widget,XtPointer aData,XtPointer) {             
358   G4OpenInventorXtViewer* This = (G4OpenInvent    
359   This->SetPreview();                             
360 }                                                 
361                                                   
362 void G4OpenInventorXtViewer::SetPreviewAndFull    
363   Widget,XtPointer aData,XtPointer) {             
364   G4OpenInventorXtViewer* This = (G4OpenInvent    
365   This->SetPreviewAndFull();                      
366 }                                                 
367                                                   
368 void G4OpenInventorXtViewer::HelpCbk(             
369   Widget,XtPointer aData,XtPointer) {             
370   G4OpenInventorXtViewer* This = (G4OpenInvent    
371   XtManageChild(This->fHelpForm);                 
372   XmTextSetString(This->fHelpText,(char*)This-    
373 }                                                 
374