35#include <Inventor/nodes/SoSelection.h>
36#include <Inventor/nodes/SoShape.h>
37#include <Inventor/nodes/SoOrthographicCamera.h>
38#include <Inventor/nodes/SoPerspectiveCamera.h>
39#include <Inventor/actions/SoCallbackAction.h>
40#include <Inventor/actions/SoWriteAction.h>
41#include <Inventor/sensors/SoNodeSensor.h>
61:
G4VViewer(sceneHandler, sceneHandler.IncrementViewCount(), name)
70 fVP.SetAutoRefresh(
true);
82 GetInteractorManager();
91 SoGroup* group =
new SoGroup;
100 SoOrthographicCamera* camera =
new SoOrthographicCamera;
101 camera->viewportMapping.setValue(SoCamera::ADJUST_CAMERA);
103 camera->position.setValue(0,0,10);
104 camera->orientation.setValue(SbRotation(SbVec3f(0,1,0),0));
105 camera->height.setValue(10);
106 camera->nearDistance.setValue(1);
107 camera->farDistance.setValue(100);
108 camera->focalDistance.setValue(10);
109 group->addChild(camera);
112 if(soInput.openFile(
"g4view.iv",
TRUE)) {
113 SoSeparator* separator = SoDB::readAll(&soInput);
153 CompareForKernelVisit(fLastVP)) {
217 fVP.GetCutawayPlanes ().size ())
return true;
254 +
fVP.GetCurrentTargetPoint ();
256 if(radius<=0.) radius = 1.;
257 const G4double cameraDistance =
fVP.GetCameraDistance (radius);
258 const G4Vector3D& direction =
fVP.GetViewpointDirection().unit();
259 const G4Point3D cameraPosition = target + cameraDistance * direction;
281 camera->position.setValue((
float)cameraPosition.
x(),
282 (
float)cameraPosition.
y(),
283 (
float)cameraPosition.
z());
285 SbVec3f sbTarget((
float)target.
x(),
288 SbVec3f sbUp((
float)up.
x(),
294 pointAt(camera,sbTarget,sbUp);
301 if(camera->isOfType(SoOrthographicCamera::getClassTypeId())) {
302 if (
fVP.GetFieldHalfAngle() == 0.) {
311 }
else if(camera->isOfType(SoPerspectiveCamera::getClassTypeId())) {
312 if (
fVP.GetFieldHalfAngle() == 0.) {
324G4OpenInventorViewer::pointAt(SoCamera* camera,
const SbVec3f & targetpoint,
const SbVec3f & upvector)
326 SbVec3f dir = targetpoint - camera->position.getValue();
327 if (dir.normalize() == 0.0f)
return;
328 lookAt(camera,dir, upvector);
335G4OpenInventorViewer::lookAt(SoCamera* camera,
const SbVec3f & dir,
const SbVec3f & up)
339 SbVec3f x = y.cross(z);
349 SbMatrix rot = SbMatrix::identity();
362 camera->orientation.setValue(SbRotation(rot));
366G4OpenInventorViewer::lookedAt(SoCamera* camera,SbVec3f & dir, SbVec3f & up)
368 SbRotation rot = camera->orientation.getValue();
369 SbMatrix mrot; rot.getValue(mrot);
388 up = SbVec3f(0.f,1.f,0.f);
389 if (std::abs(up.dot(z)) > 1.e-6) {
402 if (kernelVisitWasNeeded) {
421void G4OpenInventorViewer::GroupCameraSensorCB(
void* aThis, SoSensor* aSensor)
425 SoNode* node = ((SoNodeSensor*)aSensor)->getTriggerNode();
429 if(node->isOfType(SoCamera::getClassTypeId())) {
430 SoCamera* camera = (SoCamera*)node;
434 SbVec3f direction, up;
435 lookedAt(camera, direction, up);
437 (
G4Vector3D(-direction[0], -direction[1], -direction[2]));
440 SbVec3f pos = camera->position.getValue();
441 SbVec3f target = pos + direction * camera->focalDistance.getValue();
489 SoNode* node = ((SoFullPath*)aPath)->getTail();
491 if(attHolder && attHolder->
GetAttDefs().size()) {
492 for (
size_t i = 0; i < attHolder->
GetAttDefs().size(); ++i) {
497 G4String name((
char*)node->getName().getString());
498 G4String cls((
char*)node->getTypeId().getName().getString());
499 G4cout <<
"SoNode : " << node
500 <<
" SoType : " << cls
501 <<
" name : " << name
527void G4OpenInventorViewer::DrawDetector() {
554 fGL2PSAction->setTitleAndProducer(
"Geant4 output",
"Geant4");
566 fGL2PSAction->setTitleAndProducer(
"Geant4 output",
"Geant4");
594 SbBool genAlternateRep =
TRUE;
596 SbBool binary =
TRUE;
598 if(genAlternateRep==
TRUE) {
603 SoWriteAction writeAction;
604 writeAction.getOutput()->openFile(aFile.c_str());
605 writeAction.getOutput()->setBinary(binary);
607 writeAction.getOutput()->closeFile();
609 if(genAlternateRep==
TRUE) {
624static void CountTrianglesCB(
627,
const SoPrimitiveVertex*
628,
const SoPrimitiveVertex*,
629const SoPrimitiveVertex*)
635static void CountLineSegmentsCB(
638,
const SoPrimitiveVertex*
639,
const SoPrimitiveVertex*)
645static void CountPointsCB(
648,
const SoPrimitiveVertex*)
660 SoCallbackAction callbackAction;
661 callbackAction.addTriangleCallback
662 (SoShape::getClassTypeId(),CountTrianglesCB,(
void*)&
counter);
663 callbackAction.addLineSegmentCallback
664 (SoShape::getClassTypeId(),CountLineSegmentsCB,(
void*)&
counter);
665 callbackAction.addPointCallback
666 (SoShape::getClassTypeId(),CountPointsCB,(
void*)&
counter);
671 int nodes = counterAction.
getCount();
673 counterAction.
setLookFor(SoCounterAction::TYPE);
674 counterAction.
setType(SoShape::getClassTypeId());
676 int shapes = counterAction.
getCount();
714 switch (existingStyle) {
735 switch (existingStyle) {
763 switch (existingStyle) {
796 if(aTopic==
"controls") {
798Controls on an Inventor examiner viewer are :\n\
799- in picking mode (cursor is the upper left arrow)\n\
800 Ctrl + pick a volume : see daughters.\n\
801 Shift + pick a volume : see mother.\n\
802- in viewing mode (cursor is the hand)\n\
803 Left-button + pointer move : rotate.\n\
804 Ctrl+Left-button + pointer move : pan.\n\
805 Ctrl+Shift+Left-button + pointer move : scale.\n\
806 Middle-button + pointer move : pan.\n\
807 Right-button : popup menu.\n");
HepGeom::Normal3D< G4double > G4Normal3D
HepGeom::Point3D< G4double > G4Point3D
HepGeom::Vector3D< G4double > G4Vector3D
G4GLOB_DLL std::ostream G4cout
const std::vector< const std::vector< G4AttValue > * > & GetAttValues() const
const std::vector< const std::map< G4String, G4AttDef > * > & GetAttDefs() const
G4String Help(const G4String &topic="controls")
virtual SoCamera * GetCamera()=0
SoNodeSensor * fGroupCameraSensor
void WriteInventor(const G4String &file="g4out.iv")
virtual void ViewerRender()=0
SoSelection * fSoSelection
void WritePostScript(const G4String &file="g4out.ps")
void Escape()
Menu items callbacks /////////////////////////////////////////////////////.
G4OpenInventorSceneHandler & fG4OpenInventorSceneHandler
void SceneGraphStatistics()
virtual void KernelVisitDecision()
G4OpenInventorViewer(G4OpenInventorSceneHandler &scene, const G4String &name="")
virtual ~G4OpenInventorViewer()
G4VInteractorManager * fInteractorManager
void WritePixmapPostScript(const G4String &file="g4out.ps")
static void SelectionCB(void *, SoPath *)
void WritePDF(const G4String &file="g4out.pdf")
Geant4_SoImageWriter * fSoImageWriter
void SetReducedWireFrame(bool)
Geant4_SoGL2PSAction * fGL2PSAction
const G4ViewParameters & GetViewParameters() const
G4VSceneHandler & fSceneHandler
G4ViewParameters fDefaultVP
G4bool fTransientsNeedRedrawing
virtual void FinishView()
G4VViewer(G4VSceneHandler &, G4int id, const G4String &name="")
void SetViewParameters(const G4ViewParameters &vp)
void SetViewpointDirection(const G4Vector3D &viewpointDirection)
const std::vector< G4ModelingParameters::VisAttributesModifier > & GetVisAttributesModifiers() const
const G4Vector3D & GetScaleFactor() const
G4int GetNoOfSides() const
G4bool IsSpecialMeshRendering() const
CutawayMode GetCutawayMode() const
G4double GetExplodeFactor() const
const G4ModelingParameters::TimeParameters & GetTimeParameters() const
G4int GetNumberOfCloudPoints() const
G4bool IsMarkerNotHidden() const
G4double GetGlobalLineWidthScale() const
void SetCurrentTargetPoint(const G4Point3D ¤tTargetPoint)
void SetDrawingStyle(G4ViewParameters::DrawingStyle style)
const G4Colour & GetBackgroundColour() const
G4bool IsDotsSmooth() const
const G4VisAttributes * GetDefaultTextVisAttributes() const
const std::vector< G4double > & GetCBDParameters() const
G4int GetCBDAlgorithmNumber() const
const std::vector< G4ModelingParameters::PVNameCopyNo > & GetSpecialMeshVolumes() const
G4int GetTransparencyByDepthOption() const
G4double GetGlobalMarkerScale() const
G4bool IsCullingInvisible() const
const G4VisAttributes * GetDefaultVisAttributes() const
void SetUpVector(const G4Vector3D &upVector)
const G4Planes & GetCutawayPlanes() const
G4bool IsDensityCulling() const
G4double GetVisibleDensity() const
SMROption GetSpecialMeshRenderingOption() const
G4double GetDotsSize() const
void SetAuxEdgeVisible(G4bool)
G4bool IsCullingCovered() const
const G4Plane3D & GetSectionPlane() const
DrawingStyle GetDrawingStyle() const
G4double GetTransparencyByDepth() const
G4bool IsAuxEdgeVisible() const
const G4Colour & GetColour() const
void setGenerate(SbBool)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
void setType(const SoType, SbBool=TRUE)