Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4OpenInventorXtExaminerViewer Class Reference

#include <G4OpenInventorXtExaminerViewer.hh>

+ Inheritance diagram for G4OpenInventorXtExaminerViewer:

Public Member Functions

 G4OpenInventorXtExaminerViewer (Widget parent=NULL, const char *name=NULL, SbBool embed=TRUE, SoXtFullViewer::BuildFlag flag=BUILD_ALL, SoXtViewer::Type type=BROWSER)
 
 ~G4OpenInventorXtExaminerViewer ()
 
template<class T >
void parseString (T &t, const std::string &s, bool &error)
 
Widget addMenu (std::string name)
 
void addButton (Widget menu, std::string name, XtCallbackProc)
 
Widget getMenuBar ()
 
Widget getMenu ()
 
void warningMsgDialog (std::string, String, XtCallbackProc)
 
Widget createScale (Widget, char *, int, float)
 
void addEscapeCallback (void(*cb)(void *), void *)
 

Public Attributes

bool warningFlag
 
std::string saveScenegraphFileName
 
Widget saveScenegraphWidget
 
std::string saveRefCoordsFileName
 
Widget saveRefCoordsWidget
 
bool abbrOutputFlag
 
bool pickRefPathFlag
 
bool viewingBeforePickRef
 

Protected Member Functions

 G4OpenInventorXtExaminerViewer (Widget parent, const char *name, SbBool embed, SoXtFullViewer::BuildFlag flag, SoXtViewer::Type type, SbBool build)
 
Widget buildWidget (Widget parent)
 
virtual void createViewerButtons (Widget parent, SbPList *buttonlist)
 
virtual SbBool processSoEvent (const SoEvent *const event)
 
void moveCamera (float dist=0, bool lookdown=false)
 
void rotateCamera ()
 
void updateViewParams (SoKeyboardEvent::Key)
 
bool loadViewPts ()
 
virtual void afterRealizeHook ()
 

Protected Attributes

std::string curEltName
 
SbVec3f camUpVec
 
SbVec3f camDir
 

Friends

class G4OpenInventorXtExaminerViewerMessenger
 
class G4OpenInventorXtExtendedViewer
 
class HookEventProcState
 

Detailed Description

Definition at line 65 of file G4OpenInventorXtExaminerViewer.hh.

Constructor & Destructor Documentation

◆ G4OpenInventorXtExaminerViewer() [1/2]

G4OpenInventorXtExaminerViewer::G4OpenInventorXtExaminerViewer ( Widget  parent = NULL,
const char *  name = NULL,
SbBool  embed = TRUE,
SoXtFullViewer::BuildFlag  flag = BUILD_ALL,
SoXtViewer::Type  type = BROWSER 
)

Definition at line 130 of file G4OpenInventorXtExaminerViewer.cc.

132 :
133 SoXtExaminerViewer(parent, name, embed, flag, type, FALSE)
134{
135// Tell GLWidget not to build just yet
136 this->constructor(TRUE);
137}
#define TRUE
Definition: globals.hh:41
#define FALSE
Definition: globals.hh:38

◆ ~G4OpenInventorXtExaminerViewer()

G4OpenInventorXtExaminerViewer::~G4OpenInventorXtExaminerViewer ( )

Definition at line 586 of file G4OpenInventorXtExaminerViewer.cc.

587{
588 if (superimposition != NULL) {
589 removeSuperimposition(superimposition);
590 superimposition->unref();
591 superimposition = NULL;
592 }
593 if (animateSensor->isScheduled())
594 animateSensor->unschedule();
595 delete animateSensor;
596 delete sceneChangeSensor;
597
598 delete[] curViewPtName;
599 delete searcher;
600
601 viewer = 0;
602}

◆ G4OpenInventorXtExaminerViewer() [2/2]

G4OpenInventorXtExaminerViewer::G4OpenInventorXtExaminerViewer ( Widget  parent,
const char *  name,
SbBool  embed,
SoXtFullViewer::BuildFlag  flag,
SoXtViewer::Type  type,
SbBool  build 
)
protected

Definition at line 140 of file G4OpenInventorXtExaminerViewer.cc.

143 :
144 SoXtExaminerViewer(parent, name, embed, flag, type, FALSE)
145{
146 this->constructor(build);
147}

Member Function Documentation

◆ addButton()

void G4OpenInventorXtExaminerViewer::addButton ( Widget  menu,
std::string  name,
XtCallbackProc  cb 
)

Definition at line 677 of file G4OpenInventorXtExaminerViewer.cc.

679{
680 Widget button = XmCreatePushButton(menu, (char *) name.c_str(), NULL, 0);
681 XtManageChild(button);
682 XtAddCallback(button, XmNactivateCallback, cb, this);
683}
const char * name(G4int ptype)

Referenced by buildWidget().

◆ addEscapeCallback()

void G4OpenInventorXtExaminerViewer::addEscapeCallback ( void(*)(void *)  cb,
void *  object 
)

Definition at line 4905 of file G4OpenInventorXtExaminerViewer.cc.

4907{
4908 this->escapeCallback = callback;
4909 this->examinerObject = object;
4910}

Referenced by G4OpenInventorXtExtendedViewer::Initialise().

◆ addMenu()

Widget G4OpenInventorXtExaminerViewer::addMenu ( std::string  name)

Definition at line 663 of file G4OpenInventorXtExaminerViewer.cc.

664{
665 Arg args[1];
666 Widget menu = XmCreatePulldownMenu(menuBar, (char *) name.c_str(), NULL, 0);
667
668 XtSetArg(args[0], XmNsubMenuId, menu);
669 Widget w = XmCreateCascadeButton(menuBar, (char *) name.c_str(), args, 1);
670 XtManageChild(w);
671
672 return menu;
673}

Referenced by buildWidget().

◆ afterRealizeHook()

void G4OpenInventorXtExaminerViewer::afterRealizeHook ( )
protectedvirtual

Definition at line 806 of file G4OpenInventorXtExaminerViewer.cc.

807{
808 SoXtExaminerViewer::afterRealizeHook();
809
810 // Default height is used when selecting and viewing scene elements
811 // FWJ Added defaultHeight for Ortho camera
812 SoCamera *cam = getCamera();
813 if (cam) {
814 if (cam->isOfType(SoPerspectiveCamera::getClassTypeId())) {
815 defaultHeightAngle =
816 ((SoPerspectiveCamera *) cam)->heightAngle.getValue();
817 toggleCameraType();
818 defaultHeight =
819 ((SoOrthographicCamera *) cam)->height.getValue();
820 toggleCameraType();
821 } else {
822 defaultHeight =
823 ((SoOrthographicCamera *) cam)->height.getValue();
824 toggleCameraType();
825 cam = getCamera();
826 if (cam->isOfType(SoPerspectiveCamera::getClassTypeId()))
827 defaultHeightAngle =
828 ((SoPerspectiveCamera *) cam)->heightAngle.getValue();
829 toggleCameraType();
830 }
831 }
832
833 // Open the default bookmark file
834 fileIn.open(fileName.c_str());
835 if (!fileIn.fail()) {
836 if (!loadViewPts()) {
837 String dialogName = (char *) "Error Loading File";
838 std::string msg = "Wrong or corrupted input file.";
839 warningMsgDialog(msg, dialogName, NULL);
840 } else {
841 // Opens a file without erasing it
842 fileOut.open(fileName.c_str(), std::ios::in);
843 fileOut.seekp(0, std::ios::end); // For appending new data to the end
844 constructListsDialog(getParentWidget(), this, NULL); // Pop up listsDialog
845 if (viewPtList.size()) {
846 // FWJ disabled auto-selection of first viewpoint.
847 // Initial view should be user-controllable & not forced
848 // setViewPt();
849 XtSetSensitive(nextViewPtButton, True);
850 XtSetSensitive(prevViewPtButton, True);
851 }
852 }
853 fileIn.close();
854 } else {
855 // Creates a new default bookmark file
856 fileOut.open(fileName.c_str());
857 constructListsDialog(getParentWidget(), this, NULL); // Pop up listsDialog
858 }
859
860 fileIn.clear();
861
862 SoSeparator *root = (SoSeparator *) (getSceneManager()->getSceneGraph());
863 if (root == NULL)
864 SoDebugError::post("G4OpenInventorXtExaminerViewer::afterRealizeHook", "Root is null.");
865 else {
866 root->addChild(myCam); // For position/orientation calculation during animation
867 }
868
869 sceneChangeSensor = new SoNodeSensor;
870 sceneChangeSensor->setFunction(sceneChangeCB);
871 sceneChangeSensor->attach(root);
872 sceneChangeSensor->setData(this);
873
874 // Monitor mouseover events for displaying the name of scene elements
875 // An SoEventCallback is needed instead of using the default processSoEvent
876 // because that last one does not provide us with an SoPath to the object
877 // that was picked
878 SoEventCallback *moCB = new SoEventCallback;
879 moCB->addEventCallback(
880 SoLocation2Event::getClassTypeId(),
881 mouseoverCB, static_cast<void *>(this));
882 root->addChild(moCB);
883
884 // Override the default picking mechanism present in G4OpenInventorViewer
885 // because we want abbreviated output when picking a trajectory
886 SoEventCallback *pickCB = new SoEventCallback;
887 pickCB->addEventCallback(
888 SoMouseButtonEvent::getClassTypeId(),
889 pickingCB, static_cast<void *>(this));
890 root->addChild(pickCB);
891
892}
void warningMsgDialog(std::string, String, XtCallbackProc)

◆ buildWidget()

Widget G4OpenInventorXtExaminerViewer::buildWidget ( Widget  parent)
protected

Definition at line 606 of file G4OpenInventorXtExaminerViewer.cc.

607{
608 Widget shell;
609 Atom WM_DELETE_WINDOW;
610
611 if (!parent)
612 SoDebugError::post("G4OpenInventorXtExaminerViewer::buildWidget", "Error: Parent is null.");
613
614 Arg args[10];
615 XtSetArg(args[0], XmNtopAttachment, XmATTACH_FORM);
616 XtSetArg(args[1], XmNleftAttachment, XmATTACH_FORM);
617 XtSetArg(args[2], XmNrightAttachment, XmATTACH_FORM);
618 XtSetArg(args[3], XmNbottomAttachment, XmATTACH_FORM);
619 Widget form = XmCreateForm(parent, (char *) "Form", args, 4);
620 XtManageChild(form);
621
622 shell = XtParent(form);
623 WM_DELETE_WINDOW = XInternAtom(XtDisplay(parent), "WM_DELETE_WINDOW",
624 False);
625 XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW,
626 (XtCallbackProc)closeMainWindowCB, this);
627
628 XtSetArg(args[0], XmNtopAttachment, XmATTACH_FORM);
629 XtSetArg(args[1], XmNleftAttachment, XmATTACH_FORM);
630 XtSetArg(args[2], XmNrightAttachment, XmATTACH_FORM);
631 menuBar = XmCreateMenuBar(form, (char *) "MenuBar", args, 3);
632 XtManageChild(menuBar);
633
634 fileMenu = addMenu("File");
635 this->addButton(fileMenu, "Open Viewpoint File...", openViewPtFileCB);
636 addButton(fileMenu, "New Viewpoint File", newViewPtFileCB);
637 addButton(fileMenu, "Load Ref. Coords", loadRefCoordsDialogCB);
638 addButton(fileMenu, "Save Ref. Coords", saveRefCoordsDialogCB);
639 addButton(fileMenu, "Load Scene Graph", loadSceneGraphDialogCB);
640 addButton(fileMenu, "Save Scene Graph", saveSceneGraphDialogCB);
641 XtManageChild(
642 XmCreateSeparatorGadget(fileMenu, (char *) "Separator", NULL, 0));
643
644 Widget menu = addMenu("Tools");
645 addButton(menu, "Animate Ref. Particle", animateRefParticleCB);
646 addButton(menu, "Go to start of Ref path", gotoRefPathStartCB);
647 addButton(menu, "Invert Ref path", invertRefPathCB);
648
649 Widget viewerBase = SoXtFullViewer::buildWidget(form);
650
651 XtSetArg(args[0], XmNtopAttachment, XmATTACH_WIDGET);
652 XtSetArg(args[1], XmNtopWidget, menuBar);
653 XtSetArg(args[2], XmNleftAttachment, XmATTACH_FORM);
654 XtSetArg(args[3], XmNrightAttachment, XmATTACH_FORM);
655 XtSetArg(args[4], XmNbottomAttachment, XmATTACH_FORM);
656 XtSetValues(viewerBase, args, 5);
657
658 return viewerBase;
659}
void addButton(Widget menu, std::string name, XtCallbackProc)

◆ createScale()

Widget G4OpenInventorXtExaminerViewer::createScale ( Widget  ,
char *  ,
int  ,
float   
)

◆ createViewerButtons()

void G4OpenInventorXtExaminerViewer::createViewerButtons ( Widget  parent,
SbPList *  buttonlist 
)
protectedvirtual

Definition at line 687 of file G4OpenInventorXtExaminerViewer.cc.

689{
690 int n;
691 Arg args[6];
692 Widget saveViewPtButton, abbrOutputButton, pickRefPathButton;
693 Widget switchWireFrameButton;
694
695 // Create original buttons
696 SoXtExaminerViewer::createViewerButtons(parent, buttonlist);
697
698 // Handle disappearing button caused by SoXtExaminerViewer::setCamera
699 Widget emptyButton = XtVaCreateManagedWidget("", xmPushButtonWidgetClass,
700 parent, NULL);
701 buttonlist->append(emptyButton);
702
703 // Left arrow that goes back one view point on click
704 n = 0;
705 XtSetArg(args[n], XmNtopPosition, 1); n++;
706 XtSetArg(args[n], XmNbottomPosition, 2); n++;
707 XtSetArg(args[n], XmNleftPosition, 0); n++;
708 XtSetArg(args[n], XmNrightPosition, 1); n++;
709 XtSetArg(args[n], XmNarrowDirection, XmARROW_LEFT); n++;
710 XtSetArg(args[n], XmNsensitive, False); n++;
711 prevViewPtButton = XmCreateArrowButtonGadget(parent, (char *) "ArrowL",
712 args, n);
713 XtManageChild(prevViewPtButton);
714 XtAddCallback(prevViewPtButton, XmNactivateCallback,
715 G4OpenInventorXtExaminerViewer::prevViewPtCB, this);
716 buttonlist->append(prevViewPtButton);
717
718 // Right arrow that goes forward one view point on click
719 n = 0;
720 XtSetArg(args[n], XmNtopPosition, 1); n++;
721 XtSetArg(args[n], XmNbottomPosition, 2); n++;
722 XtSetArg(args[n], XmNleftPosition, 0); n++;
723 XtSetArg(args[n], XmNrightPosition, 1); n++;
724 XtSetArg(args[n], XmNarrowDirection, XmARROW_RIGHT); n++;
725 XtSetArg(args[n], XmNsensitive, False); n++;
726 nextViewPtButton = XmCreateArrowButtonGadget(parent, (char *) "ArrowR",
727 args, n);
728 XtManageChild(nextViewPtButton);
729 XtAddCallback(nextViewPtButton, XmNactivateCallback,
730 G4OpenInventorXtExaminerViewer::nextViewPtCB, this);
731 buttonlist->append(nextViewPtButton);
732
733 // Save button for storing current camera parameters
734 saveViewPtButton = XtVaCreateManagedWidget("Save", xmPushButtonWidgetClass,
735 parent, NULL);
736 XtAddCallback(saveViewPtButton, XmNactivateCallback,
737 G4OpenInventorXtExaminerViewer::saveViewPtCB, this);
738 Pixmap saveVP, saveVP_ins;
739 saveVP = SoXtInternal::createPixmapFromXpm(saveViewPtButton,
740 saveViewPt_xpm);
741 saveVP_ins = SoXtInternal::createPixmapFromXpm(saveViewPtButton,
742 saveViewPt_xpm, TRUE);
743 XtVaSetValues(saveViewPtButton, XmNlabelType, XmPIXMAP, XmNlabelPixmap,
744 saveVP, XmNselectPixmap, saveVP, XmNlabelInsensitivePixmap,
745 saveVP_ins, XmNselectInsensitivePixmap, saveVP_ins, NULL);
746 buttonlist->append(saveViewPtButton);
747
748 // Toggle button to get abbreviated output
749 abbrOutputButton = XtVaCreateManagedWidget("Abbr",
750 xmToggleButtonWidgetClass, parent, XmNindicatorOn, False, NULL);
751 XtAddCallback(abbrOutputButton, XmNdisarmCallback, G4OpenInventorXtExaminerViewer::abbrOutputCB,
752 this);
753 Pixmap pickextxpm, pickextxpm_ins;
754 pickextxpm = SoXtInternal::createPixmapFromXpm(abbrOutputButton,
755 pickext_xpm);
756 pickextxpm_ins = SoXtInternal::createPixmapFromXpm(abbrOutputButton,
757 pickext_xpm, TRUE);
758 XtVaSetValues(abbrOutputButton, XmNlabelType, XmPIXMAP, XmNlabelPixmap,
759 pickextxpm, XmNselectPixmap, pickextxpm, XmNlabelInsensitivePixmap,
760 pickextxpm_ins, XmNselectInsensitivePixmap, pickextxpm_ins, NULL);
761 // Pixmap consolexpm, consolexpm_ins;
762 // consolexpm = SoXtInternal::createPixmapFromXpm(abbrOutputButton,
763 // console_xpm);
764 // consolexpm_ins = SoXtInternal::createPixmapFromXpm(abbrOutputButton,
765 // console_xpm, TRUE);
766 // XtVaSetValues(abbrOutputButton, XmNlabelType, XmPIXMAP, XmNlabelPixmap,
767 // consolexpm, XmNselectPixmap, consolexpm, XmNlabelInsensitivePixmap,
768 // consolexpm_ins, XmNselectInsensitivePixmap, consolexpm_ins, NULL);
769 buttonlist->append(abbrOutputButton);
770
771 // Button for selecting the beam that will act as reference path
772 pickRefPathButton = XtVaCreateManagedWidget("Refpath", xmPushButtonWidgetClass,
773 parent, NULL);
774 XtAddCallback(pickRefPathButton, XmNactivateCallback,
775 G4OpenInventorXtExaminerViewer::pickRefPathCB, this);
776 Pixmap pickrefxpm, pickrefxpm_ins;
777 pickrefxpm = SoXtInternal::createPixmapFromXpm(pickRefPathButton,
778 pickref_xpm);
779 pickrefxpm_ins = SoXtInternal::createPixmapFromXpm(pickRefPathButton,
780 pickref_xpm, TRUE);
781 XtVaSetValues(pickRefPathButton, XmNlabelType, XmPIXMAP, XmNlabelPixmap,
782 pickrefxpm, XmNselectPixmap, pickrefxpm, XmNlabelInsensitivePixmap,
783 pickrefxpm_ins, XmNselectInsensitivePixmap, pickrefxpm_ins, NULL);
784
785 buttonlist->append(pickRefPathButton);
786
787 // Toggle button for switching in and out of wireframe mode
788 switchWireFrameButton = XtVaCreateManagedWidget("Wireframe",
789 xmToggleButtonWidgetClass, parent, XmNindicatorOn, False, NULL);
790 XtAddCallback(switchWireFrameButton, XmNvalueChangedCallback,
791 G4OpenInventorXtExaminerViewer::switchWireFrameCB, this);
792 Pixmap wireframe, wireframe_ins;
793 wireframe = SoXtInternal::createPixmapFromXpm(switchWireFrameButton,
794 wireframe_xpm);
795 wireframe_ins = SoXtInternal::createPixmapFromXpm(switchWireFrameButton,
796 wireframe_xpm, TRUE);
797 XtVaSetValues(switchWireFrameButton, XmNlabelType, XmPIXMAP, XmNlabelPixmap,
798 wireframe, XmNselectPixmap, wireframe, XmNlabelInsensitivePixmap,
799 wireframe_ins, XmNselectInsensitivePixmap, wireframe_ins, NULL);
800 buttonlist->append(switchWireFrameButton);
801}
static Pixmap createPixmapFromXpm(Widget button, const char **xpm, SbBool ghost=FALSE)

◆ getMenu()

Widget G4OpenInventorXtExaminerViewer::getMenu ( )
inline

Definition at line 99 of file G4OpenInventorXtExaminerViewer.hh.

99{ return fileMenu; }

Referenced by G4OpenInventorXtExtendedViewer::Initialise().

◆ getMenuBar()

Widget G4OpenInventorXtExaminerViewer::getMenuBar ( )
inline

Definition at line 98 of file G4OpenInventorXtExaminerViewer.hh.

98{ return menuBar; }

Referenced by G4OpenInventorXtExtendedViewer::Initialise().

◆ loadViewPts()

bool G4OpenInventorXtExaminerViewer::loadViewPts ( )
protected

Definition at line 3491 of file G4OpenInventorXtExaminerViewer.cc.

3492{
3493 bool error = false;
3494 viewPtData tmp;
3495 std::string token;
3496 SbVec3f axis;
3497 SbRotation orient;
3498 float x(0.), y(0.), z(0.), angle(0.);
3499
3500 // Gets the last view point accessed, stored in the first line of the data file.
3501 fileIn >> token;
3502 parseString<int>(viewPtIdx, token, error);
3503 getline(fileIn, token); // Remove "\n"
3504 // Converts data from string type into necessary types
3505 while (getline(fileIn, token)) {
3506
3507 int end = token.find_last_not_of(' '); // Remove padded spaces
3508 token = token.substr(0, end + 1);
3509
3510 char *vpName = new char[token.size() + 1];
3511 strcpy(vpName, token.c_str());
3512 tmp.viewPtName = vpName;
3513 fileIn >> token;
3514
3515 parseString<float>(x, token, error);
3516 fileIn >> token;
3517 parseString<float>(y, token, error);
3518 fileIn >> token;
3519 parseString<float>(z, token, error);
3520 fileIn >> token;
3521 tmp.position = axis.setValue(x, y, z);
3522
3523 parseString<float>(x, token, error);
3524 fileIn >> token;
3525 parseString<float>(y, token, error);
3526 fileIn >> token;
3527 parseString<float>(z, token, error);
3528 fileIn >> token;
3529 parseString<float>(angle, token, error);
3530 fileIn >> token;
3531 orient.setValue(axis.setValue(x, y, z), angle);
3532 tmp.orientation = orient.getValue();
3533
3534 int camType(0);
3535 parseString<int>(camType, token, error);
3536 fileIn >> token;
3537 tmp.camType = (CameraType) camType;
3538
3539 parseString<float>(tmp.height, token, error);
3540 fileIn >> token;
3541 parseString<float>(tmp.focalDistance, token, error);
3542 fileIn >> token;
3543 parseString<float>(tmp.nearDistance, token, error);
3544 fileIn >> token;
3545 parseString<float>(tmp.farDistance, token, error);
3546 fileIn >> token;
3547 parseString<int>(tmp.viewportMapping, token, error);
3548 fileIn >> token;
3549 parseString<float>(tmp.aspectRatio, token, error);
3550
3551 getline(fileIn, token); // To remove "\n" characters
3552 getline(fileIn, token);
3553
3554 if (error) {
3555 viewPtIdx = 0;
3556 viewPtList.clear();
3557 return false;
3558 }
3559 viewPtList.push_back(tmp);
3560 }
3561
3562 return true;
3563}

Referenced by afterRealizeHook().

◆ moveCamera()

void G4OpenInventorXtExaminerViewer::moveCamera ( float  dist = 0,
bool  lookdown = false 
)
protected

Definition at line 924 of file G4OpenInventorXtExaminerViewer.cc.

925{
926
927 SoCamera *cam = getCamera();
928 SbVec3f p1(0), p2(0); // The particle moves from p1 to p2
929 SbVec3f particleDir; // Direction vector from p1 to p2
930 SbVec3f camPosNew(0); // New position of the camera
931
932 if(refParticleTrajectory.size() == 0) {
933 //refParticleTrajectory hasn't been set yet
934 if(dist)
935 distance = dist;
936 else
937 distance = (cam->position.getValue() - center).length();
938
939 cam->position.setValue(center + offsetFromCenter*distance);
940 cam->focalDistance = (cam->position.getValue() - center).length();
941 cam->pointAt(center, upVector);
942 }
943 else{
944
945 // If we move forward past the last trajectory point,
946 // go back to the beginning
947 if (refParticleIdx >= (int) refParticleTrajectory.size() - 1) {
948 prevPt = refParticleTrajectory[refParticleIdx - step];
949 dist = (prevPt - cam->position.getValue()).length();
950 refParticleIdx = 0;
951 }
952 // If we move backward past the beginning,
953 // go to the last trajectory point
954 if (refParticleIdx < 0) {
955 prevPt = refParticleTrajectory[refParticleIdx + step];
956 dist = (prevPt - cam->position.getValue()).length();
957 refParticleIdx = refParticleTrajectory.size() - 2;
958 }
959
960 // Set start and end points
961 p1 = refParticleTrajectory[refParticleIdx];
962 p2 = refParticleTrajectory[refParticleIdx + step];
963
964 // Get the direction from p1 to p2
965 particleDir = p2 - p1;
966 particleDir.normalize();
967
968 if(prevParticleDir == SbVec3f(0,0,0)){
969 // First time entering BEAMLINE mode, look at
970 // the element from the front, with camera upright
971 if(lookdown)
972 camDir = SbVec3f(0,0,1);
973 else
974 camDir = SbVec3f(1,0,0);
975 camUpVec = SbVec3f(0,1,0);
976
977 // In case the start of the goes in a
978 // direction other than +z, rotate the camera accordingly
979 SbRotation rot(SbVec3f(0,0,1), particleDir);
980 rot.multVec(camDir, camDir);
981 rot.multVec(camUpVec, camUpVec);
982
983 }
984 else if(particleDir != prevParticleDir) {
985 // The beamline has changed direction
986
987 SbRotation rot(prevParticleDir, particleDir);
988 rot.multVec(camDir, camDir);
989 rot.multVec(camUpVec, camUpVec);
990
991 }
992
993 if (cam->isOfType(SoPerspectiveCamera::getClassTypeId())) {
994 if (!dist)
995 distance = (prevPt - cam->position.getValue()).length();
996 else
997 distance = dist;
998 }
999
1000 // FWJ distance not relevant -- use focalDistance
1001 // if (cam->isOfType(SoOrthographicCamera::getClassTypeId())) {
1002 // if (!dist)
1003 // distance = (prevPt - cam->position.getValue()).length();
1004 // else
1005 // distance = dist;
1006 // }
1007
1008
1009 float x(0.),y(0.),z(0.);
1010 prevPt.getValue(x,y,z);
1011
1012
1013 if (cam->isOfType(SoPerspectiveCamera::getClassTypeId())) {
1014 camPosNew = p2 - (camDir*distance);
1015 }
1016 if (cam->isOfType(SoOrthographicCamera::getClassTypeId())) {
1017 // FWJ maintain focal distance
1018 camPosNew = p2 - (camDir*cam->focalDistance.getValue());
1019 // camPosNew = p2 - (camDir);
1020 }
1021
1022 cam->position = camPosNew;
1023 cam->pointAt(p2, camUpVec);
1024 cam->focalDistance = (p2 - camPosNew).length();
1025
1026 p2.getValue(x,y,z);
1027 camPosNew.getValue(x,y,z);
1028
1029 prevParticleDir = particleDir;
1030 prevPt = p1; // For accurate distance calculation
1031
1032 }
1033
1034}

Referenced by processSoEvent().

◆ parseString()

template<class T >
void G4OpenInventorXtExaminerViewer::parseString ( T &  t,
const std::string &  s,
bool &  error 
)

Definition at line 3569 of file G4OpenInventorXtExaminerViewer.cc.

3571{
3572 std::istringstream str(s);
3573 if ((str >> t).fail())
3574 error = true;
3575}

◆ processSoEvent()

SbBool G4OpenInventorXtExaminerViewer::processSoEvent ( const SoEvent *const  event)
protectedvirtual

Definition at line 1375 of file G4OpenInventorXtExaminerViewer.cc.

1375 {
1376 SoCamera *cam = getCamera();
1377 const SoType type(ev->getTypeId());
1378
1379 if (type.isDerivedFrom(SoMouseButtonEvent::getClassTypeId())) {
1380 SoMouseButtonEvent * me = (SoMouseButtonEvent *) ev;
1381
1382 if (currentState == ANIMATION || currentState == REVERSED_ANIMATION
1383 || currentState == PAUSED_ANIMATION) {
1384 switch (me->getButton()) {
1385 case SoMouseButtonEvent::BUTTON4: // Scroll wheel up
1386 if (me->getState() == SoButtonEvent::DOWN) {
1387 if (cam->isOfType(SoPerspectiveCamera::getClassTypeId())) {
1388 float hAngle =
1389 ((SoPerspectiveCamera *) cam)->heightAngle.getValue();
1390 ((SoPerspectiveCamera *) cam)->heightAngle = hAngle
1391 + 0.01f;
1392 return TRUE;
1393 } else if (cam->isOfType(
1394 SoOrthographicCamera::getClassTypeId())) {
1395 float height =
1396 ((SoOrthographicCamera *) cam)->height.getValue();
1397 ((SoOrthographicCamera *) cam)->height = height + 5;
1398 return TRUE;
1399 }
1400 }
1401 break;
1402 case SoMouseButtonEvent::BUTTON5: // Scroll wheel down
1403 if (me->getState() == SoButtonEvent::DOWN) {
1404 if (cam->isOfType(SoPerspectiveCamera::getClassTypeId())) {
1405 float hAngle =
1406 ((SoPerspectiveCamera *) cam)->heightAngle.getValue();
1407 if (hAngle > 0.01)
1408 ((SoPerspectiveCamera *) cam)->heightAngle = hAngle
1409 - 0.01f;
1410 return TRUE;
1411 } else if (cam->isOfType(
1412 SoOrthographicCamera::getClassTypeId())) {
1413 float height =
1414 ((SoOrthographicCamera *) cam)->height.getValue();
1415 if (height > 5)
1416 ((SoOrthographicCamera *) cam)->height = height - 5;
1417 return TRUE;
1418 }
1419 }
1420 break;
1421 default:
1422 break;
1423 }
1424 }
1425 if (currentState == GENERAL) {
1426
1427 }
1428 }
1429
1430 if (type.isDerivedFrom(SoKeyboardEvent::getClassTypeId())) {
1431 SoKeyboardEvent * ke = (SoKeyboardEvent *) ev;
1432
1433 if (SoKeyboardEvent::isKeyPressEvent(ev, ke->getKey())) {
1434 switch (ke->getKey()) {
1435 case SoKeyboardEvent::LEFT_SHIFT:
1436 this->lshiftdown = true;
1437 return TRUE;
1438 case SoKeyboardEvent::RIGHT_SHIFT:
1439 this->rshiftdown = true;
1440 return TRUE;
1441 case SoKeyboardEvent::LEFT_CONTROL:
1442 this->lctrldown = true;
1443 return TRUE;
1444 case SoKeyboardEvent::RIGHT_CONTROL:
1445 this->rctrldown = true;
1446 return TRUE;
1447 case SoKeyboardEvent::SPACE:
1448 if (currentState == ANIMATION
1449 || currentState == REVERSED_ANIMATION) {
1450 beforePausing = currentState;
1451 currentState = PAUSED_ANIMATION;
1452 if (animateSensor->isScheduled())
1453 animateSensor->unschedule();
1454 return TRUE;
1455 } else if (currentState == PAUSED_ANIMATION) {
1456 if (maxSpeed) {
1457 if ((beforePausing == ANIMATION
1458 && refParticleIdx
1459 < (int) refParticleTrajectory.size() - 1)
1460 || (beforePausing == REVERSED_ANIMATION
1461 && refParticleIdx > 0)) {
1462 currentState = beforePausing;
1463 animateRefParticle();
1464 }
1465 }
1466 return TRUE;
1467 }
1468 break;
1469 case SoKeyboardEvent::ESCAPE:
1470 if (currentState == ANIMATION
1471 || currentState == REVERSED_ANIMATION
1472 || currentState == PAUSED_ANIMATION) {
1473
1474 if (animateSensor->isScheduled())
1475 animateSensor->unschedule();
1476 currentState = prevState;
1477 refParticleIdx = prevRefIdx;
1478 setSuperimpositionEnabled(superimposition, FALSE);
1479 maxSpeed = 0.0f;
1480 step = 1;
1481
1482 scheduleRedraw();
1483 if (currentState == VIEWPOINT) {
1484 setSuperimpositionEnabled(superimposition, TRUE);
1485 axisSwitch->whichChild.setValue(SO_SWITCH_NONE);
1486 animSpeedOutlineSwitch->whichChild.setValue(
1487 SO_SWITCH_NONE);
1488 animSpeedSwitch->whichChild.setValue(SO_SWITCH_NONE);
1489
1490 scheduleRedraw();
1491 }
1492 restoreCamera();
1493 return TRUE;
1494 }
1495 break;
1496 case SoKeyboardEvent::DELETE:
1497 if (viewPtList.size()
1498 && (currentState != ANIMATION
1499 && currentState != REVERSED_ANIMATION
1500 && currentState != PAUSED_ANIMATION)) {
1501 String dialogName = (char *) "Delete Viewpoint";
1502 std::string msg = "Are you sure you want to delete current viewpoint?";
1503 warningMsgDialog(msg, dialogName, deleteViewPtCB);
1504 return TRUE;
1505 }
1506 break;
1507 case SoKeyboardEvent::LEFT_ARROW:
1508 switch (currentState) {
1509 case BEAMLINE:
1510 if ((this->lshiftdown) || (this->rshiftdown)){
1511 refParticleIdx -= step;
1512 moveCamera();
1513 }
1514 else if ((this->lctrldown) || (this->rctrldown)){
1515 if (SoXtExaminerViewer::isAnimating())
1516 stopAnimating();
1517 prevState = currentState;
1518 currentState = ROTATING;
1519 animateBtwPtsPeriod = 0.08f;
1520
1521 SbVec3f tmp = camDir;
1522 tmp.negate();
1523 rotAxis = tmp;
1524
1525 rotCnt = ROT_CNT;
1526 moveCamera(); // To make sure camera is perpendicular to the beamline
1527
1528 rotateCamera();
1529 }
1530 else{
1531 if (SoXtExaminerViewer::isAnimating())
1532 stopAnimating();
1533 prevState = currentState;
1534 currentState = ROTATING;
1535 animateBtwPtsPeriod = 0.08f;
1536
1537 SbVec3f tmp = camUpVec;
1538 tmp.negate();
1539 rotAxis = tmp;
1540
1541 rotCnt = ROT_CNT;
1542 moveCamera(); // To make sure camera is perpendicular to the beamline
1543
1544 rotateCamera();
1545
1546 }
1547 return TRUE;
1548
1549 case ANIMATION:
1550 case REVERSED_ANIMATION:
1551 left_right -= 1.5f;
1552 return TRUE;
1553 case PAUSED_ANIMATION:
1554 left_right -= 1.5f;
1555 setStartingPtForAnimation();
1556 cam->position = myCam->position;
1557 return TRUE;
1558 case GENERAL:
1559 case VIEWPOINT:
1560 if ((!this->lshiftdown) && (!this->rshiftdown)) {
1561 // Using this allows us to look around without
1562 // changing the camera parameters (camDir, camUpVec)
1563 this->bottomWheelMotion(
1564 this->getBottomWheelValue() + 0.1f);
1565
1566 return TRUE;
1567 }
1568 break;
1569 case ROTATING:
1570 // For this state, let the keyboard event
1571 // be handled by superclass
1572 break;
1573 default:
1574 SoDebugError::post("G4OpenInventorXtExaminerViewer::processSoEvent",
1575 "Unhandled viewer state");
1576 break;
1577 }
1578 break;
1579
1580 case SoKeyboardEvent::RIGHT_ARROW:
1581 switch(currentState){
1582 case BEAMLINE:
1583 if ((this->lshiftdown) || (this->rshiftdown)){
1584 refParticleIdx += step;
1585 moveCamera();
1586 }
1587 else if ((this->lctrldown) || (this->rctrldown)){
1588 if (SoXtExaminerViewer::isAnimating())
1589 stopAnimating();
1590 prevState = currentState;
1591 currentState = ROTATING;
1592 animateBtwPtsPeriod = 0.08f;
1593
1594 rotAxis = camDir;
1595
1596 rotCnt = ROT_CNT;
1597 moveCamera(); // To make sure camera is perpendicular to the beamline
1598
1599 rotateCamera();
1600 }
1601 else{
1602 if (SoXtExaminerViewer::isAnimating())
1603 stopAnimating();
1604 prevState = currentState;
1605 currentState = ROTATING;
1606 animateBtwPtsPeriod = 0.08f;
1607
1608 rotAxis = camUpVec;
1609
1610 rotCnt = ROT_CNT;
1611 moveCamera(); // To make sure camera is perpendicular to the beamline
1612
1613 rotateCamera();
1614 }
1615 return TRUE;
1616
1617 case ANIMATION:
1618 case REVERSED_ANIMATION:
1619 left_right += 1.5f;
1620 return TRUE;
1621 case PAUSED_ANIMATION:
1622 left_right += 1.5f;
1623 setStartingPtForAnimation();
1624 cam->position = myCam->position;
1625 return TRUE;
1626 case GENERAL:
1627 case VIEWPOINT:
1628 if ((!this->lshiftdown) && (!this->rshiftdown)) {
1629 // Using this allows us to look around without
1630 // changing the camera parameters (camDir, camUpVec)
1631 this->bottomWheelMotion(
1632 this->getBottomWheelValue() - 0.1f);
1633 return TRUE;
1634 }
1635 break;
1636 case ROTATING:
1637 // For this state, let the keyboard event
1638 // be handled by superclass
1639 break;
1640 default:
1641 SoDebugError::post("G4OpenInventorXtExaminerViewer::processSoEvent",
1642 "Unhandled viewer state");
1643 break;
1644 }
1645 break;
1646
1647 case SoKeyboardEvent::DOWN_ARROW:
1648 switch(currentState){
1649 case BEAMLINE:
1650
1651 if ((this->lshiftdown) || (this->rshiftdown)){
1652 refParticleIdx -= step;
1653 moveCamera();
1654 }
1655 else{
1656 if (SoXtExaminerViewer::isAnimating())
1657 stopAnimating();
1658 prevState = currentState;
1659 currentState = ROTATING;
1660 animateBtwPtsPeriod = 0.08f;
1661
1662 rotAxis = camDir.cross(camUpVec);
1663
1664 rotCnt = ROT_CNT;
1665 moveCamera(); // To make sure camera is perpendicular to the beamline
1666
1667 rotateCamera();
1668
1669 }
1670 return TRUE;
1671
1672 case ANIMATION:
1673 case REVERSED_ANIMATION:
1674 up_down -= 1.5f;
1675 return TRUE;
1676 case PAUSED_ANIMATION:
1677 up_down -= 1.5f;
1678 setStartingPtForAnimation();
1679 cam->position = myCam->position;
1680 return TRUE;
1681 case GENERAL:
1682 case VIEWPOINT:
1683 // Using this allows us to look around without
1684 // changing the camera parameters (camDir, camUpVec)
1685 if ((!this->lshiftdown) && (!this->rshiftdown)) {
1686 this->leftWheelMotion(this->getLeftWheelValue() - 0.1f);
1687 return TRUE;
1688 }
1689 break;
1690 case ROTATING:
1691 // For this state, let the keyboard event
1692 // be handled by superclass
1693 break;
1694 default:
1695 SoDebugError::post("G4OpenInventorXtExaminerViewer::processSoEvent",
1696 "Unhandled viewer state");
1697 break;
1698 }
1699 break;
1700
1701 case SoKeyboardEvent::UP_ARROW:
1702 switch(currentState){
1703 case BEAMLINE:
1704 if ((this->lshiftdown) || (this->rshiftdown)){
1705 refParticleIdx -= step;
1706 moveCamera();
1707 }
1708 else{
1709 if (SoXtExaminerViewer::isAnimating())
1710 stopAnimating();
1711 prevState = currentState;
1712 currentState = ROTATING;
1713 animateBtwPtsPeriod = 0.08f;
1714
1715 rotAxis = camUpVec.cross(camDir);
1716
1717 rotCnt = ROT_CNT;
1718 moveCamera();
1719
1720 rotateCamera();
1721
1722
1723 }
1724 return TRUE;
1725 case ANIMATION:
1726 case REVERSED_ANIMATION:
1727 up_down += 1.5f;
1728 return TRUE;
1729 case PAUSED_ANIMATION:
1730 up_down += 1.5f;
1731 setStartingPtForAnimation();
1732 cam->position = myCam->position;
1733 return TRUE;
1734 case GENERAL:
1735 case VIEWPOINT:
1736 // Using this allows us to look around without
1737 // changing the camera parameters (camDir, camUpVec)
1738 if ((!this->lshiftdown) && (!this->rshiftdown)) {
1739 this->leftWheelMotion(this->getLeftWheelValue() + 0.1f);
1740 return TRUE;
1741 }
1742 break;
1743 case ROTATING:
1744 // For this state, let the keyboard event
1745 // be handled by superclass
1746 break;
1747 default:
1748 SoDebugError::post("G4OpenInventorXtExaminerViewer::processSoEvent",
1749 "Unhandled viewer state");
1750 break;
1751 }
1752 break;
1753
1754 case SoKeyboardEvent::PAGE_UP:
1755 switch(currentState){
1756 case BEAMLINE:
1757 if (step < (int) refParticleTrajectory.size() / 5) // Magic number
1758 step++;
1759 return TRUE;
1760 case ANIMATION:
1761 incSpeed();
1762 maxSpeed += SPEED_INDICATOR_STEP;
1763 if (maxSpeed > 0.8)
1764 maxSpeed = MAX_SPEED_INDICATOR;
1765 scheduleRedraw();
1766
1767 return TRUE;
1768 case REVERSED_ANIMATION:
1769 if(!animateSensor->isScheduled()){
1770 currentState = ANIMATION;
1771 if (refParticleIdx
1772 < (int) refParticleTrajectory.size() - 1) {
1773 refParticleIdx++;
1774 maxSpeed = SPEED_INDICATOR_STEP;
1775 scheduleRedraw();
1776 animateRefParticle();
1777 }
1778 }
1779 else{
1780 maxSpeed += SPEED_INDICATOR_STEP;
1781 decSpeed();
1782 scheduleRedraw();
1783 }
1784 return TRUE;
1785 case PAUSED_ANIMATION:
1786 maxSpeed += SPEED_INDICATOR_STEP;
1787 if (maxSpeed > 0.8)
1788 maxSpeed = MAX_SPEED_INDICATOR;
1789
1790 if (beforePausing == ANIMATION) {
1791 incSpeed();
1792 } else {
1793 decSpeed();
1794 if (animateBtwPtsPeriod >= MIN_SPEED)
1795 beforePausing = ANIMATION;
1796 }
1797
1798 scheduleRedraw();
1799 return TRUE;
1800 default: //fall through
1801 break;
1802 }
1803 break;
1804
1805 case SoKeyboardEvent::PAGE_DOWN:
1806 switch(currentState){
1807 case BEAMLINE:
1808 if (step > 1)
1809 step--;
1810 return TRUE;
1811 case ANIMATION:
1812 if(!animateSensor->isScheduled()){
1813 currentState = REVERSED_ANIMATION;
1814 if (refParticleIdx > 1) {
1815 refParticleIdx--;
1816 maxSpeed = -SPEED_INDICATOR_STEP;
1817 scheduleRedraw();
1818 animateRefParticle();
1819 }
1820 }
1821 else{
1822 maxSpeed -= SPEED_INDICATOR_STEP;
1823 decSpeed();
1824 scheduleRedraw();
1825 }
1826 return TRUE;
1827 case REVERSED_ANIMATION:
1828 incSpeed();
1829 maxSpeed -= SPEED_INDICATOR_STEP;
1830 if (maxSpeed < -0.8)
1831 maxSpeed = -MAX_SPEED_INDICATOR;
1832 scheduleRedraw();
1833 return TRUE;
1834 case PAUSED_ANIMATION:
1835 maxSpeed -= SPEED_INDICATOR_STEP;
1836 if (maxSpeed < -0.8)
1837 maxSpeed = -MAX_SPEED_INDICATOR;
1838 if (beforePausing == REVERSED_ANIMATION) {
1839 incSpeed();
1840 } else {
1841 decSpeed();
1842 if (animateBtwPtsPeriod >= MIN_SPEED)
1843 beforePausing = REVERSED_ANIMATION;
1844 }
1845 scheduleRedraw();
1846 return TRUE;
1847 default:
1848 //fall through
1849 break;
1850 }
1851 break;
1852
1853 case SoKeyboardEvent::E:
1854 this->escapeCallback(this->examinerObject);
1855 break;
1856
1857 default:
1858 break; // To get rid of compiler warnings
1859 }
1860 }
1861 if (SoKeyboardEvent::isKeyReleaseEvent(ev, ke->getKey())) {
1862 switch (ke->getKey()) {
1863 case SoKeyboardEvent::LEFT_SHIFT:
1864 this->lshiftdown = false;
1865 return TRUE;
1866 case SoKeyboardEvent::RIGHT_SHIFT:
1867 this->rshiftdown = false;
1868 return TRUE;
1869 case SoKeyboardEvent::LEFT_CONTROL:
1870 this->lctrldown = false;
1871 return TRUE;
1872 case SoKeyboardEvent::RIGHT_CONTROL:
1873 this->rctrldown = false;
1874 return TRUE;
1875 default:
1876 break;
1877 }
1878 }
1879 }
1880
1881 if (currentState == ANIMATION || currentState == REVERSED_ANIMATION
1882 || currentState == ROTATING)
1883 return FALSE;
1884 else
1885 return SoXtExaminerViewer::processSoEvent(ev);
1886}
#define MAX_SPEED_INDICATOR
#define SPEED_INDICATOR_STEP
void moveCamera(float dist=0, bool lookdown=false)

◆ rotateCamera()

void G4OpenInventorXtExaminerViewer::rotateCamera ( )
protected

Definition at line 897 of file G4OpenInventorXtExaminerViewer.cc.

898{
899 SoCamera *cam = getCamera();
900
901 SbRotation rot(rotAxis, M_PI / (2 * ROT_CNT));
902 rot.multVec(camDir, camDir);
903 rot.multVec(camUpVec, camUpVec);
904
905 SbVec3f camPosNew = prevPt - (camDir*distance);
906 cam->position = camPosNew;
907 cam->pointAt(prevPt, camUpVec);
908 cam->focalDistance = (prevPt - camPosNew).length();
909
910 rotCnt--;
911
912 if (animateSensorRotation->isScheduled()) {
913 animateSensorRotation->unschedule();
914 }
915
916 animateSensorRotation->setBaseTime(SbTime::getTimeOfDay());
917 animateSensorRotation->setInterval(SbTime(0.02));
918 animateSensorRotation->schedule();
919
920}
#define M_PI
Definition: SbMath.h:33

Referenced by processSoEvent().

◆ updateViewParams()

void G4OpenInventorXtExaminerViewer::updateViewParams ( SoKeyboardEvent::Key  )
protected

◆ warningMsgDialog()

void G4OpenInventorXtExaminerViewer::warningMsgDialog ( std::string  msg,
String  dialogName,
XtCallbackProc  cb 
)

Definition at line 3754 of file G4OpenInventorXtExaminerViewer.cc.

3757{
3758 Arg args[5];
3759 unsigned int n;
3760 XmString warningMsg;
3761
3762 warningMsg = XmStringCreateLocalized((char *)msg.c_str());
3763
3764 n = 0;
3765 XtSetArg(args[n], XmNmessageString, warningMsg); n++;
3766 Widget warningDialog = XmCreateWarningDialog(getParentWidget(), dialogName, args, n);
3767 if (cb)
3768 XtAddCallback(warningDialog, XmNokCallback, cb, this);
3769
3770 XmStringFree(warningMsg);
3771
3772 XtVaSetValues (warningDialog, XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL, NULL);
3773 XtUnmanageChild(XtNameToWidget(warningDialog, "Help"));
3774 XtUnmanageChild(XtNameToWidget(warningDialog, "Cancel"));
3775
3776 XtManageChild(warningDialog);
3777}

Referenced by afterRealizeHook(), and processSoEvent().

Friends And Related Function Documentation

◆ G4OpenInventorXtExaminerViewerMessenger

Definition at line 67 of file G4OpenInventorXtExaminerViewer.hh.

◆ G4OpenInventorXtExtendedViewer

friend class G4OpenInventorXtExtendedViewer
friend

Definition at line 69 of file G4OpenInventorXtExaminerViewer.hh.

◆ HookEventProcState

friend class HookEventProcState
friend

Definition at line 148 of file G4OpenInventorXtExaminerViewer.hh.

Member Data Documentation

◆ abbrOutputFlag

bool G4OpenInventorXtExaminerViewer::abbrOutputFlag

Definition at line 110 of file G4OpenInventorXtExaminerViewer.hh.

◆ camDir

SbVec3f G4OpenInventorXtExaminerViewer::camDir
protected

Definition at line 134 of file G4OpenInventorXtExaminerViewer.hh.

Referenced by moveCamera(), processSoEvent(), and rotateCamera().

◆ camUpVec

SbVec3f G4OpenInventorXtExaminerViewer::camUpVec
protected

Definition at line 133 of file G4OpenInventorXtExaminerViewer.hh.

Referenced by moveCamera(), processSoEvent(), and rotateCamera().

◆ curEltName

std::string G4OpenInventorXtExaminerViewer::curEltName
protected

Definition at line 132 of file G4OpenInventorXtExaminerViewer.hh.

◆ pickRefPathFlag

bool G4OpenInventorXtExaminerViewer::pickRefPathFlag

Definition at line 111 of file G4OpenInventorXtExaminerViewer.hh.

◆ saveRefCoordsFileName

std::string G4OpenInventorXtExaminerViewer::saveRefCoordsFileName

Definition at line 105 of file G4OpenInventorXtExaminerViewer.hh.

◆ saveRefCoordsWidget

Widget G4OpenInventorXtExaminerViewer::saveRefCoordsWidget

Definition at line 106 of file G4OpenInventorXtExaminerViewer.hh.

◆ saveScenegraphFileName

std::string G4OpenInventorXtExaminerViewer::saveScenegraphFileName

Definition at line 103 of file G4OpenInventorXtExaminerViewer.hh.

◆ saveScenegraphWidget

Widget G4OpenInventorXtExaminerViewer::saveScenegraphWidget

Definition at line 104 of file G4OpenInventorXtExaminerViewer.hh.

◆ viewingBeforePickRef

bool G4OpenInventorXtExaminerViewer::viewingBeforePickRef

Definition at line 112 of file G4OpenInventorXtExaminerViewer.hh.

◆ warningFlag

bool G4OpenInventorXtExaminerViewer::warningFlag

Definition at line 101 of file G4OpenInventorXtExaminerViewer.hh.


The documentation for this class was generated from the following files: