Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VViewer Class Referenceabstract

#include <G4VViewer.hh>

Inheritance diagram for G4VViewer:

Classes

class  SceneTreeScene

Public Member Functions

 G4VViewer (G4VSceneHandler &, G4int id, const G4String &name="")
virtual ~G4VViewer ()
virtual void Initialise ()
virtual void ResetView ()
virtual void SetView ()=0
virtual void ClearView ()=0
virtual void DrawView ()=0
void RefreshView ()
virtual void ShowView ()
virtual void FinishView ()
virtual G4bool ReadyToDraw ()
std::vector< G4ThreeVectorComputeFlyThrough (G4Vector3D *)
virtual void DoneWithMasterThread ()
virtual void MovingToVisSubThread ()
virtual void SwitchToVisSubThread ()
virtual void DoneWithVisSubThread ()
virtual void MovingToMasterThread ()
virtual void SwitchToMasterThread ()
void InsertModelInSceneTree (G4VModel *)
const G4SceneTreeItemGetSceneTree ()
G4SceneTreeItemAccessSceneTree ()
void UpdateGUISceneTree ()
void UpdateGUIControlWidgets ()
void UpdateGUIDrawingStyle ()
void UpdateGUIProjectionStyle ()
void UpdateGUITransparencySlider ()
const G4StringGetName () const
const G4StringGetShortName () const
void SetName (const G4String &)
G4int GetViewId () const
G4VSceneHandlerGetSceneHandler () const
const G4ViewParametersGetViewParameters () const
const G4ViewParametersGetDefaultViewParameters () const
G4double GetKernelVisitElapsedTimeSeconds () const
virtual const std::vector< G4ModelingParameters::VisAttributesModifier > * GetPrivateVisAttributesModifiers () const
void SetViewParameters (const G4ViewParameters &vp)
void SetDefaultViewParameters (const G4ViewParameters &vp)
const G4VisAttributesGetApplicableVisAttributes (const G4VisAttributes *) const
void SetNeedKernelVisit (G4bool need)
void NeedKernelVisit ()
void ProcessView ()
void ProcessTransients ()
void ZoomFromMouseWheel (G4double delta, G4bool shift=false, G4double xPos=0, G4double yPos=0)
virtual G4bool GetWindowSize (unsigned int &a_w, unsigned int &a_h)
virtual G4double GetSceneNearWidth ()

Public Attributes

const G4int fMaxAllTouchables = 10000
G4bool fCurtailDescent = false

Protected Member Functions

void SetTouchable (const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > &fullPath)
void TouchableSetVisibility (const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > &fullPath, G4bool visibility)
void TouchableSetColour (const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > &fullPath, const G4Colour &)

Protected Attributes

G4VSceneHandlerfSceneHandler
G4int fViewId
G4String fName
G4String fShortName
G4ViewParameters fVP
G4ViewParameters fDefaultVP
G4double fKernelVisitElapsedTimeSeconds = 999.
G4SceneTreeItem fSceneTree
G4bool fNeedKernelVisit
G4bool fTransientsNeedRedrawing

Friends

std::ostream & operator<< (std::ostream &os, const G4VViewer &v)

Detailed Description

Definition at line 52 of file G4VViewer.hh.

Constructor & Destructor Documentation

◆ G4VViewer()

G4VViewer::G4VViewer ( G4VSceneHandler & sceneHandler,
G4int id,
const G4String & name = "" )

Definition at line 49 of file G4VViewer.cc.

50: fSceneHandler(sceneHandler)
51, fViewId(id)
52, fNeedKernelVisit(true)
54{
55 if (name == "") {
56 std::ostringstream ost;
57 ost << fSceneHandler.GetName() << '-' << fViewId;
58 fName = ost.str();
59 }
60 else {
61 fName = name;
62 }
63 fShortName = fName.substr(0, fName.find(' '));
65
68
70 fSceneTree.SetDescription(fName);
71}
G4bool fNeedKernelVisit
Definition G4VViewer.hh:280
G4VSceneHandler & fSceneHandler
Definition G4VViewer.hh:268
G4String fShortName
Definition G4VViewer.hh:271
G4String fName
Definition G4VViewer.hh:270
G4ViewParameters fDefaultVP
Definition G4VViewer.hh:273
G4int fViewId
Definition G4VViewer.hh:269
G4bool fTransientsNeedRedrawing
Definition G4VViewer.hh:281
G4ViewParameters fVP
Definition G4VViewer.hh:272
G4SceneTreeItem fSceneTree
Definition G4VViewer.hh:276
const G4ViewParameters & GetDefaultViewParameters() const
static G4VisManager * GetInstance()
const char * name(G4int ptype)
void strip(G4String &str, char ch=' ')
Remove leading and trailing characters from string.

Referenced by G4DAWNFILEViewer::G4DAWNFILEViewer(), G4GMocrenFileViewer::G4GMocrenFileViewer(), G4OpenGLImmediateQtViewer::G4OpenGLImmediateQtViewer(), G4OpenGLImmediateViewer::G4OpenGLImmediateViewer(), G4OpenGLImmediateWin32Viewer::G4OpenGLImmediateWin32Viewer(), G4OpenGLImmediateXmViewer::G4OpenGLImmediateXmViewer(), G4OpenGLImmediateXViewer::G4OpenGLImmediateXViewer(), G4OpenGLQtViewer::G4OpenGLQtViewer(), G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer(), G4OpenGLStoredViewer::G4OpenGLStoredViewer(), G4OpenGLStoredWin32Viewer::G4OpenGLStoredWin32Viewer(), G4OpenGLStoredXmViewer::G4OpenGLStoredXmViewer(), G4OpenGLStoredXViewer::G4OpenGLStoredXViewer(), G4OpenGLViewer::G4OpenGLViewer(), G4OpenGLWin32Viewer::G4OpenGLWin32Viewer(), G4OpenGLXmViewer::G4OpenGLXmViewer(), G4OpenGLXViewer::G4OpenGLXViewer(), G4OpenInventorViewer::G4OpenInventorViewer(), G4RayTracerViewer::G4RayTracerViewer(), G4VRML2FileViewer::G4VRML2FileViewer(), G4VtkViewer::G4VtkViewer(), G4VTreeViewer::G4VTreeViewer(), operator<<, G4VViewer::SceneTreeScene::SceneTreeScene(), G4ToolsSGOffscreenViewer::Messenger::SetNewValue(), G4ToolsSGViewer< SG_SESSION, SG_VIEWER >::Messenger::SetNewValue(), and G4VViewer::SceneTreeScene::~SceneTreeScene().

◆ ~G4VViewer()

G4VViewer::~G4VViewer ( )
virtual

Definition at line 73 of file G4VViewer.cc.

74{
75 fSceneHandler.RemoveViewerFromList(this);
76}

Member Function Documentation

◆ AccessSceneTree()

G4SceneTreeItem & G4VViewer::AccessSceneTree ( )
inline

Definition at line 189 of file G4VViewer.hh.

189{return fSceneTree;}

Referenced by G4VisCommandViewerCreate::SetNewValue().

◆ ClearView()

◆ ComputeFlyThrough()

std::vector< G4ThreeVector > G4VViewer::ComputeFlyThrough ( G4Vector3D * )

◆ DoneWithMasterThread()

virtual void G4VViewer::DoneWithMasterThread ( )
inlinevirtual

Definition at line 124 of file G4VViewer.hh.

124{}

◆ DoneWithVisSubThread()

virtual void G4VViewer::DoneWithVisSubThread ( )
inlinevirtual

Definition at line 133 of file G4VViewer.hh.

133{}

Referenced by G4VisManager::G4VisSubThread().

◆ DrawView()

◆ FinishView()

◆ GetApplicableVisAttributes()

◆ GetDefaultViewParameters()

const G4ViewParameters & G4VViewer::GetDefaultViewParameters ( ) const

◆ GetKernelVisitElapsedTimeSeconds()

G4double G4VViewer::GetKernelVisitElapsedTimeSeconds ( ) const

◆ GetName()

◆ GetPrivateVisAttributesModifiers()

virtual const std::vector< G4ModelingParameters::VisAttributesModifier > * G4VViewer::GetPrivateVisAttributesModifiers ( ) const
virtual

◆ GetSceneHandler()

◆ GetSceneNearWidth()

◆ GetSceneTree()

const G4SceneTreeItem & G4VViewer::GetSceneTree ( )
inline

Definition at line 188 of file G4VViewer.hh.

188{return fSceneTree;}

◆ GetShortName()

const G4String & G4VViewer::GetShortName ( ) const

◆ GetViewId()

◆ GetViewParameters()

const G4ViewParameters & G4VViewer::GetViewParameters ( ) const

Referenced by G4OpenGLXmViewer::actions_callback(), G4OpenGLXmViewer::background_color_callback(), G4OpenGLImmediateWin32Viewer::DrawView(), G4OpenGLImmediateXmViewer::DrawView(), G4OpenGLImmediateXViewer::DrawView(), G4OpenGLStoredWin32Viewer::DrawView(), G4OpenGLStoredXmViewer::DrawView(), G4OpenGLStoredXViewer::DrawView(), G4VisCommandsViewerSet::GetCurrentValue(), G4VVisCommand::RefreshIfRequired(), G4VisCommandDrawLogicalVolume::SetNewValue(), G4VisCommandDrawView::SetNewValue(), G4VisCommandGeometrySetDaughtersInvisible::SetNewValue(), G4VisCommandGeometrySetVisibility::SetNewValue(), G4VisCommandSceneAddLogo::SetNewValue(), G4VisCommandSceneAddScale::SetNewValue(), G4VisCommandSceneNotifyHandlers::SetNewValue(), G4VisCommandsTouchable::SetNewValue(), G4VisCommandsTouchableSet::SetNewValue(), G4VisCommandsViewerSet::SetNewValue(), G4VisCommandViewerAddCutawayPlane::SetNewValue(), G4VisCommandViewerCentreOn::SetNewValue(), G4VisCommandViewerChangeCutawayPlane::SetNewValue(), G4VisCommandViewerClearCutawayPlanes::SetNewValue(), G4VisCommandViewerClearVisAttributesModifiers::SetNewValue(), G4VisCommandViewerClone::SetNewValue(), G4VisCommandViewerColourByDensity::SetNewValue(), G4VisCommandViewerCopyViewFrom::SetNewValue(), G4VisCommandViewerCreate::SetNewValue(), G4VisCommandViewerDolly::SetNewValue(), G4VisCommandViewerInterpolate::SetNewValue(), G4VisCommandViewerPan::SetNewValue(), G4VisCommandViewerResetCameraParameters::SetNewValue(), G4VisCommandViewerSave::SetNewValue(), G4VisCommandViewerScale::SetNewValue(), G4VisCommandViewerZoom::SetNewValue(), G4VisCommandGeometrySetVisibility::SetNewValueOnLV(), G4OpenInventorViewer::SetReducedWireFrame(), G4OpenInventorViewer::SetSolid(), and G4OpenInventorViewer::SetWireFrame().

◆ GetWindowSize()

virtual G4bool G4VViewer::GetWindowSize ( unsigned int & a_w,
unsigned int & a_h )
inlinevirtual

◆ Initialise()

◆ InsertModelInSceneTree()

void G4VViewer::InsertModelInSceneTree ( G4VModel * model)

Definition at line 346 of file G4VViewer.cc.

347{
348 const auto& modelType = model->GetType();
349 const auto& modelDescription = model->GetGlobalDescription();
350
351 auto type = G4SceneTreeItem::model;
352 auto pvModel = dynamic_cast<G4PhysicalVolumeModel*>(model);
353 if (pvModel) type = G4SceneTreeItem::pvmodel;
354
355 fCurtailDescent = false; // This is used later in SceneTreeScene::ProcessVolume
356 G4String furtherInfo;
357 static G4bool firstWarning = true;
358 G4bool warned = false;
359 if (pvModel) {
360 const auto& nAllTouchables = pvModel->GetTotalAllTouchables();
361 if (nAllTouchables > fMaxAllTouchables) {
362 std::ostringstream oss;
363 oss << nAllTouchables << " touchables - too many for scene tree";
364 furtherInfo = oss.str();
365 if (firstWarning) {
366 warned = true;
367 if (G4VisManager::GetInstance()->GetVerbosity() >= G4VisManager::warnings) {
369 ed << pvModel->GetGlobalDescription() <<
370 ":\n Too many touchables (" << nAllTouchables
371 << ") for scene tree. Scene tree for this model will be empty.";
372 G4Exception("G4VViewer::InsertModelInSceneTree", "visman0404", JustWarning, ed);
373 }
374 }
375 fCurtailDescent = true; // This is used later in SceneTreeScene::ProcessVolume
376 }
377 }
378 if (warned) firstWarning = false;
379
380 // Find appropriate model
381 auto& modelItems = fSceneTree.AccessChildren();
382 auto modelIter = modelItems.begin();
383 auto pvModelIter = modelItems.end();
384 for (; modelIter != modelItems.end(); ++modelIter) {
385 if (modelIter->GetType() == G4SceneTreeItem::pvmodel) {
386 pvModelIter = modelIter; // Last pre-existing PV model (if any)
387 }
388 if (modelIter->GetModelDescription() == modelDescription) break;
389 }
390
391 if (modelIter == modelItems.end()) { // Model not seen before
392 G4SceneTreeItem modelItem(type);
393 modelItem.SetDescription("model");
394 modelItem.SetModelType(modelType);
395 modelItem.SetModelDescription(modelDescription);
396 modelItem.SetFurtherInfo(furtherInfo);
397 if (pvModelIter != modelItems.end() && // There was pre-existing PV Model...
398 type == G4SceneTreeItem::pvmodel) { // ...and the new model is also PV...
399 fSceneTree.InsertChild(++pvModelIter, modelItem); // ...insert after, else...
400 } else {
401 fSceneTree.InsertChild(modelIter, modelItem); // ...insert at end
402 }
403 } else { // Existing model - mark visible == active
404 modelIter->AccessVisAttributes().SetVisibility(true);
405 }
406}
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
bool G4bool
Definition G4Types.hh:86
const G4String & GetGlobalDescription() const
const G4String & GetType() const
const G4int fMaxAllTouchables
Definition G4VViewer.hh:198
G4bool fCurtailDescent
Definition G4VViewer.hh:199

◆ MovingToMasterThread()

virtual void G4VViewer::MovingToMasterThread ( )
inlinevirtual

Definition at line 136 of file G4VViewer.hh.

136{}

Referenced by G4VisManager::G4VisSubThread().

◆ MovingToVisSubThread()

virtual void G4VViewer::MovingToVisSubThread ( )
inlinevirtual

Definition at line 127 of file G4VViewer.hh.

127{}

◆ NeedKernelVisit()

void G4VViewer::NeedKernelVisit ( )

Definition at line 85 of file G4VViewer.cc.

86{
87 fNeedKernelVisit = true;
88
89 // At one time I thought we'd better notify all viewers. But I guess
90 // each viewer can take care of itself, so the following code is
91 // redundant (but keep it commented out for now). (John Allison)
92 // Notify all viewers that a kernel visit is required.
93 // const G4ViewerList& viewerList = fSceneHandler.GetViewerList ();
94 // G4ViewerListConstIterator i;
95 // for (i = viewerList.begin(); i != viewerList.end(); i++) {
96 // (*i) -> SetNeedKernelVisit ();
97 // }
98 // ??...but, there's a problem in OpenGL Stored which seems to
99 // require *all* viewers to revisit the kernel, so...
100 // const G4ViewerList& viewerList = fSceneHandler.GetViewerList ();
101 // G4ViewerListConstIterator i;
102 // for (i = viewerList.begin(); i != viewerList.end(); i++) {
103 // (*i) -> SetNeedKernelVisit (true);
104 // }
105 // Feb 2005 - commented out. Let's fix OpenGL if necessary.
106}

Referenced by G4DAWNFILEViewer::DrawView(), G4GMocrenFileViewer::DrawView(), G4OpenGLImmediateWin32Viewer::DrawView(), G4OpenGLImmediateXmViewer::DrawView(), G4OpenGLImmediateXViewer::DrawView(), G4VRML2FileViewer::DrawView(), G4VtkViewer::DrawView(), G4VTreeViewer::DrawView(), G4OpenGLStoredViewer::KernelVisitDecision(), G4OpenInventorViewer::KernelVisitDecision(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::KernelVisitDecision(), G4OpenGLImmediateViewer::ProcessView(), G4VisCommandViewerRebuild::SetNewValue(), G4OpenInventorViewer::SetPreview(), G4OpenInventorViewer::SetPreviewAndFull(), G4OpenInventorViewer::SetReducedWireFrame(), and G4OpenInventorViewer::UpdateScene().

◆ ProcessTransients()

void G4VViewer::ProcessTransients ( )

Definition at line 133 of file G4VViewer.cc.

134{
135 // If transients change, e.g., a time window change...
137 // First, reset the flag - see comment above about recursive calls.
139 fSceneHandler.ClearTransientStore();
140 fSceneHandler.ProcessTransients();
141 }
142}

Referenced by G4OpenInventorViewer::DrawView(), and G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::DrawView().

◆ ProcessView()

void G4VViewer::ProcessView ( )

Definition at line 112 of file G4VViewer.cc.

113{
114 // If the scene has changed, or if the concrete viewer has decided
115 // that it necessary to visit the kernel, perhaps because the view
116 // parameters have changed significantly (this should be done in the
117 // concrete viewer's DrawView)...
118 if (fNeedKernelVisit) {
119 // Reset flag. This must be done before ProcessScene to prevent
120 // recursive calls when recomputing transients...
121 G4Timer timer;
122 timer.Start();
123 fNeedKernelVisit = false;
124 fSceneHandler.ClearStore();
125 fSceneHandler.ProcessScene();
128 timer.Stop();
130 }
131}
void Stop()
void Start()
G4double GetRealElapsed() const
Definition G4Timer.cc:113
G4double fKernelVisitElapsedTimeSeconds
Definition G4VViewer.hh:274
void UpdateGUIControlWidgets()
Definition G4VViewer.cc:322
void UpdateGUISceneTree()
Definition G4VViewer.cc:315

Referenced by G4DAWNFILEViewer::DrawView(), G4GMocrenFileViewer::DrawView(), G4OpenGLStoredWin32Viewer::DrawView(), G4OpenGLStoredXmViewer::DrawView(), G4OpenGLStoredXViewer::DrawView(), G4OpenInventorViewer::DrawView(), G4RayTracerViewer::DrawView(), G4ToolsSGOffscreenViewer::DrawView(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::DrawView(), G4VRML2FileViewer::DrawView(), G4VtkViewer::DrawView(), G4VTreeViewer::DrawView(), and G4OpenGLImmediateViewer::ProcessView().

◆ ReadyToDraw()

virtual G4bool G4VViewer::ReadyToDraw ( )
inlinevirtual

Reimplemented in G4OpenGLQtViewer.

Definition at line 108 of file G4VViewer.hh.

108{return true;}

◆ RefreshView()

void G4VViewer::RefreshView ( )

◆ ResetView()

virtual void G4VViewer::ResetView ( )
virtual

◆ SetDefaultViewParameters()

void G4VViewer::SetDefaultViewParameters ( const G4ViewParameters & vp)

◆ SetName()

void G4VViewer::SetName ( const G4String & name)

Definition at line 78 of file G4VViewer.cc.

79{
80 fName = name;
81 fShortName = fName.substr(0, fName.find(' '));
83}

◆ SetNeedKernelVisit()

void G4VViewer::SetNeedKernelVisit ( G4bool need)

◆ SetTouchable()

void G4VViewer::SetTouchable ( const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > & fullPath)
protected

Definition at line 221 of file G4VViewer.cc.

223{
224 // Set the touchable for /vis/touchable/set/... commands.
225 std::ostringstream oss;
226 const auto& pvStore = G4PhysicalVolumeStore::GetInstance();
227 for (const auto& pvNodeId : fullPath) {
228 const auto& pv = pvNodeId.GetPhysicalVolume();
229 auto iterator = find(pvStore->cbegin(), pvStore->cend(), pv);
230 if (iterator == pvStore->cend()) {
232 ed << "Volume no longer in physical volume store.";
233 G4Exception("G4VViewer::SetTouchable", "visman0401", JustWarning, ed);
234 }
235 else {
236 oss << ' ' << pvNodeId.GetPhysicalVolume()->GetName() << ' ' << pvNodeId.GetCopyNo();
237 }
238 }
239 G4UImanager::GetUIpointer()->ApplyCommand("/vis/set/touchable" + oss.str());
240}
static G4PhysicalVolumeStore * GetInstance()
G4int ApplyCommand(const char *aCommand)
static G4UImanager * GetUIpointer()

◆ SetView()

◆ SetViewParameters()

◆ ShowView()

◆ SwitchToMasterThread()

virtual void G4VViewer::SwitchToMasterThread ( )
inlinevirtual

Reimplemented in G4OpenGLWin32Viewer, and G4OpenGLXViewer.

Definition at line 139 of file G4VViewer.hh.

139{}

◆ SwitchToVisSubThread()

virtual void G4VViewer::SwitchToVisSubThread ( )
inlinevirtual

Reimplemented in G4OpenGLXViewer.

Definition at line 130 of file G4VViewer.hh.

130{}

Referenced by G4VisManager::G4VisSubThread().

◆ TouchableSetColour()

void G4VViewer::TouchableSetColour ( const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > & fullPath,
const G4Colour & colour )
protected

Definition at line 278 of file G4VViewer.cc.

281{
282 // Changes the Vis Attribute Modifiers and scene tree WITHOUT triggering a rebuild.
283
284 // The following is equivalent to
285 // G4UImanager::GetUIpointer()->ApplyCommand("/vis/touchable/set/colour ...");
286 // (assuming the touchable has already been set), but avoids view rebuild.
287
288 // Instantiate a working copy of a G4VisAttributes object...
289 G4VisAttributes workingVisAtts;
290 // and set the colour.
291 workingVisAtts.SetColour(colour);
292
293 fVP.AddVisAttributesModifier(G4ModelingParameters::VisAttributesModifier(
294 workingVisAtts, G4ModelingParameters::VASColour,
296 // G4ModelingParameters::VASColour (VAS = Vis Attribute Signifier)
297 // signifies that it is the colour that should be picked out
298 // and merged with the touchable's normal vis attributes.
299
300 // Find scene tree item and set colour
301 // The scene tree works with strings
302 G4String fullPathString = G4PhysicalVolumeModel::GetPVNamePathString(fullPath);
303 std::list<G4SceneTreeItem>::iterator foundIter;
304 if (fSceneTree.FindTouchableFromRoot(fullPathString, foundIter)) {
305 foundIter->AccessVisAttributes().SetColour(colour);
307 }
308 else {
310 ed << "Touchable \"" << fullPath << "\" not found";
311 G4Exception("G4VViewer::TouchableSetColour", "visman0403", JustWarning, ed);
312 }
313}
static G4String GetPVNamePathString(const std::vector< G4PhysicalVolumeNodeID > &)
static G4ModelingParameters::PVNameCopyNoPath GetPVNameCopyNoPath(const std::vector< G4PhysicalVolumeNodeID > &)
void SetColour(const G4Colour &)

◆ TouchableSetVisibility()

void G4VViewer::TouchableSetVisibility ( const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > & fullPath,
G4bool visibility )
protected

Definition at line 242 of file G4VViewer.cc.

244{
245 // Changes the Vis Attribute Modifiers and scene tree WITHOUT triggering a rebuild.
246
247 // The following is equivalent to
248 // G4UImanager::GetUIpointer()->ApplyCommand("/vis/touchable/set/visibility ...");
249 // (assuming the touchable has already been set), but avoids view rebuild.
250
251 // Instantiate a working copy of a G4VisAttributes object...
252 G4VisAttributes workingVisAtts;
253 // and set the visibility.
254 workingVisAtts.SetVisibility(visibiity);
255
256 fVP.AddVisAttributesModifier(G4ModelingParameters::VisAttributesModifier(
259 // G4ModelingParameters::VASVisibility (VAS = Vis Attribute Signifier)
260 // signifies that it is the visibility that should be picked out
261 // and merged with the touchable's normal vis attributes.
262
263 // Find scene tree item and set visibility
264 // The scene tree works with strings
265 G4String fullPathString = G4PhysicalVolumeModel::GetPVNamePathString(fullPath);
266 std::list<G4SceneTreeItem>::iterator foundIter;
267 if (fSceneTree.FindTouchableFromRoot(fullPathString, foundIter)) {
268 foundIter->AccessVisAttributes().SetVisibility(visibiity);
270 }
271 else {
273 ed << "Touchable \"" << fullPath << "\" not found";
274 G4Exception("G4VViewer::TouchableSetVisibility", "visman0402", JustWarning, ed);
275 }
276}
void SetVisibility(G4bool=true)

◆ UpdateGUIControlWidgets()

void G4VViewer::UpdateGUIControlWidgets ( )

Definition at line 322 of file G4VViewer.cc.

322 {
323 this->UpdateGUIDrawingStyle();
326}
void UpdateGUITransparencySlider()
Definition G4VViewer.cc:339
void UpdateGUIDrawingStyle()
Definition G4VViewer.cc:328
void UpdateGUIProjectionStyle()
Definition G4VViewer.cc:334

Referenced by ProcessView(), and G4VisCommandViewerSelect::SetNewValue().

◆ UpdateGUIDrawingStyle()

void G4VViewer::UpdateGUIDrawingStyle ( )

Definition at line 328 of file G4VViewer.cc.

329{
330 G4UImanager* UI = G4UImanager::GetUIpointer();
331 auto uiWindow = dynamic_cast<G4VInteractiveSession*>(UI->GetG4UIWindow());
332 if (uiWindow) uiWindow->UpdateDrawingStyle(fVP.GetDrawingStyle());
333}
G4UIsession * GetG4UIWindow() const

Referenced by UpdateGUIControlWidgets().

◆ UpdateGUIProjectionStyle()

void G4VViewer::UpdateGUIProjectionStyle ( )

Definition at line 334 of file G4VViewer.cc.

334 {
335 G4UImanager* UI = G4UImanager::GetUIpointer();
336 auto uiWindow = dynamic_cast<G4VInteractiveSession*>(UI->GetG4UIWindow());
337 if (uiWindow) uiWindow->UpdateProjectionStyle(fVP.GetFieldHalfAngle() == 0 ? 0 : 1);
338}

Referenced by UpdateGUIControlWidgets().

◆ UpdateGUISceneTree()

void G4VViewer::UpdateGUISceneTree ( )

Definition at line 315 of file G4VViewer.cc.

316{
317 G4UImanager* UI = G4UImanager::GetUIpointer();
318 auto uiWindow = dynamic_cast<G4VInteractiveSession*>(UI->GetG4UIWindow());
319 if (uiWindow) uiWindow->UpdateSceneTree(fSceneTree);
320}

Referenced by ProcessView(), G4VisCommandViewerSelect::SetNewValue(), TouchableSetColour(), and TouchableSetVisibility().

◆ UpdateGUITransparencySlider()

void G4VViewer::UpdateGUITransparencySlider ( )

Definition at line 339 of file G4VViewer.cc.

339 {
340 G4UImanager* UI = G4UImanager::GetUIpointer();
341 auto uiWindow = dynamic_cast<G4VInteractiveSession*>(UI->GetG4UIWindow());
342 if (uiWindow)
343 uiWindow->UpdateTransparencySlider(fVP.GetTransparencyByDepth(), fVP.GetTransparencyByDepthOption());
344}

Referenced by UpdateGUIControlWidgets().

◆ ZoomFromMouseWheel()

void G4VViewer::ZoomFromMouseWheel ( G4double delta,
G4bool shift = false,
G4double xPos = 0,
G4double yPos = 0 )

Definition at line 144 of file G4VViewer.cc.

144 {
145
146 G4double sceneWidth = GetSceneNearWidth();
147 unsigned int winWidth = 0, winHeight = 0;
148 G4bool winSizeOk = GetWindowSize(winWidth, winHeight);
149
150 if ((fVP.IsZoomToCursor() || shift) && sceneWidth > 0 && winSizeOk) {
151
152 // Compute mouse position in scene coordinates
153 G4double minWidth = winWidth > winHeight ? winHeight : winWidth;
154 G4double px = xPos - G4double(winWidth) / 2;
155 G4double py = -(yPos - G4double(winHeight) / 2);
156 G4double xi = px * sceneWidth / minWidth;
157 G4double yi = py * sceneWidth / minWidth;
158
159 // ZoomToCursor enabled
160 if (fVP.GetFieldHalfAngle() == 0.) {
161 // Orthographic projection
162 G4double zoomFactor = 1. + std::abs(double(delta)) / 1200;
163 if (delta < 0) zoomFactor = 1. / zoomFactor;
164
165 G4double xf = xi / zoomFactor;
166 G4double yf = yi / zoomFactor;
167
168 G4double deltaX = xf - xi;
169 G4double deltaY = yf - yi;
170
171 fVP.MultiplyZoomFactor(zoomFactor);
172 fVP.IncrementPan(-deltaX, -deltaY, 0);
173 }
174 else {
175 // Perspective projection
176 G4double radius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
177 if (radius <= 0.) radius = 1.;
178 const G4double cameraDistance = fVP.GetCameraDistance(radius);
179 const G4double pnear = fVP.GetNearDistance(cameraDistance, radius);
180
181 G4double deltaDolly = 0.1 * cameraDistance * std::abs(delta) / 120;
182 if (delta < 0) deltaDolly = -deltaDolly;
183
184 G4double deltaX = -xi * deltaDolly / pnear;
185 G4double deltaY = -yi * deltaDolly / pnear;
186
187 // This condition prevents going too deeply into the scene, but what if there are volumes with very different sizes?
188 // if(deltaDolly<0 || cameraDistance > radius / std::sin(fVP.GetFieldHalfAngle()) * 1e-2)
189 fVP.IncrementDolly(deltaDolly);
190 fVP.IncrementPan(-deltaX, -deltaY, 0);
191 }
192 }
193 else {
194 // ZoomToCursor disabled
195 if (fVP.GetFieldHalfAngle() == 0.) {
196 // Orthographic projection
197 G4double zoomFactor = 1. + std::abs(double(delta)) / 1200;
198 if (delta < 0) zoomFactor = 1. / zoomFactor;
199 fVP.MultiplyZoomFactor(zoomFactor);
200 }
201 else {
202 // Perspective projection
203 G4double radius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
204 if (radius <= 0.) radius = 1.;
205 const G4double cameraDistance = fVP.GetCameraDistance(radius);
206
207 G4double deltaDolly = 0.1 * cameraDistance * std::abs(delta) / 120;
208 if (delta < 0) deltaDolly = -deltaDolly;
209 // This condition prevents going too deeply into the scene, but what if there are volumes with very different sizes?
210 //if (deltaDolly < 0 || cameraDistance > radius / std::sin(fVP.GetFieldHalfAngle()) * 1e-2)
211 fVP.IncrementDolly(deltaDolly);
212 }
213 }
214}
double G4double
Definition G4Types.hh:83
virtual G4double GetSceneNearWidth()
Definition G4VViewer.hh:243
virtual G4bool GetWindowSize(unsigned int &a_w, unsigned int &a_h)
Definition G4VViewer.hh:242

Referenced by G4OpenGLQtViewer::G4wheelEvent(), and G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::wheel_rotate().

◆ operator<<

std::ostream & operator<< ( std::ostream & os,
const G4VViewer & v )
friend

Definition at line 553 of file G4VViewer.cc.

554{
555 os << "View " << v.fName << ":\n";
556 os << v.fVP;
557 return os;
558}

Member Data Documentation

◆ fCurtailDescent

G4bool G4VViewer::fCurtailDescent = false

Definition at line 199 of file G4VViewer.hh.

Referenced by InsertModelInSceneTree().

◆ fDefaultVP

◆ fKernelVisitElapsedTimeSeconds

G4double G4VViewer::fKernelVisitElapsedTimeSeconds = 999.
protected

Definition at line 274 of file G4VViewer.hh.

Referenced by G4RayTracerViewer::DrawView(), and ProcessView().

◆ fMaxAllTouchables

const G4int G4VViewer::fMaxAllTouchables = 10000

Definition at line 198 of file G4VViewer.hh.

Referenced by InsertModelInSceneTree().

◆ fName

◆ fNeedKernelVisit

◆ fSceneHandler

◆ fSceneTree

◆ fShortName

G4String G4VViewer::fShortName
protected

Definition at line 271 of file G4VViewer.hh.

Referenced by G4RayTracerViewer::DrawView(), G4VViewer(), and SetName().

◆ fTransientsNeedRedrawing

◆ fViewId

◆ fVP

G4ViewParameters G4VViewer::fVP
protected

Definition at line 272 of file G4VViewer.hh.

Referenced by G4OpenGLXmViewer::actions_callback(), G4OpenGLSceneHandler::AddPrimitive(), G4VtkViewer::AddViewHUD(), G4OpenGLXmViewer::aux_edge_callback(), G4OpenGLStoredQtViewer::CompareForKernelVisit(), G4OpenGLStoredViewer::CompareForKernelVisit(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::CompareForKernelVisit(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::CompareForTransientsRedraw(), G4OpenGLQtViewer::CreateMainWindow(), G4OpenGLWin32Viewer::CreateMainWindow(), G4OpenGLXmViewer::CreateMainWindow(), G4OpenGLXViewer::CreateMainWindow(), G4OpenGLXmViewer::dolly_callback(), G4OpenGLStoredViewer::DrawDisplayLists(), G4OpenGLXmViewer::drawing_style_callback(), G4OpenGLStoredWin32Viewer::DrawView(), G4OpenGLStoredXmViewer::DrawView(), G4OpenGLStoredXViewer::DrawView(), G4OpenInventorViewer::DrawView(), G4RayTracerViewer::DrawView(), G4ToolsSGOffscreenViewer::DrawView(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::DrawView(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::Export(), G4ASCIITreeViewer::G4ASCIITreeViewer(), G4OpenGLQtViewer::G4keyPressEvent(), G4OpenGLQtViewer::G4MouseMoveEvent(), G4OpenGLQtViewer::G4MousePressEvent(), G4OpenGLQtViewer::G4MouseReleaseEvent(), G4OpenGLViewer::G4OpenGLViewer(), G4OpenGLXmViewer::G4OpenGLXmViewer(), G4OpenInventorViewer::G4OpenInventorViewer(), G4VtkViewer::G4VtkViewer(), G4VViewer(), G4OpenGLViewer::getSceneDepth(), G4OpenGLViewer::getSceneFarWidth(), G4OpenGLViewer::GetSceneNearWidth(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::GetSceneNearWidth(), G4OpenGLXmViewer::GetXmConnection(), G4OpenInventorQtViewer::Initialise(), G4OpenInventorWinViewer::Initialise(), G4OpenInventorXtExtendedViewer::Initialise(), G4OpenInventorXtViewer::Initialise(), G4RayTracerQtViewer::Initialise(), G4RayTracerViewer::Initialise(), G4RayTracerXViewer::Initialise(), G4ToolsSGOffscreenViewer::Initialise(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::Initialise(), G4VtkQtViewer::Initialise(), G4VtkViewer::Initialise(), G4OpenGLViewer::InitializeGLView(), G4OpenGLXmViewer::left_right_pan_callback(), G4OpenGLXmViewer::misc_callback(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::mouse_move(), G4OpenGLQtViewer::moveScene(), operator<<, G4OpenGLImmediateViewer::ProcessView(), G4OpenGLXmViewer::projection_callback(), G4OpenGLXmViewer::reset_callback(), G4OpenGLXmViewer::ResetView(), G4OpenGLViewer::rotateScene(), G4OpenGLViewer::rotateSceneToggle(), G4DAWNFILEViewer::SendDrawingStyleToDAWNGUI(), G4DAWNFILEViewer::SendViewParameters(), G4OpenGLXmViewer::set_rot_subject_callback(), G4OpenGLViewerMessenger::SetNewValue(), G4OpenGLXmViewerMessenger::SetNewValue(), G4ToolsSGOffscreenViewer::SetSize(), G4OpenGLViewer::SetView(), G4OpenInventorQtViewer::SetView(), G4OpenInventorViewer::SetView(), G4OpenInventorWinViewer::SetView(), G4OpenInventorXtExtendedViewer::SetView(), G4OpenInventorXtViewer::SetView(), G4RayTracerViewer::SetView(), G4ToolsSGViewer< tools::offscreen::session, tools::offscreen::sg_viewer >::SetView(), G4VtkViewer::SetView(), SetViewParameters(), G4OpenGLXViewer::ShowView(), G4VtkViewer::ShowView(), TouchableSetColour(), TouchableSetVisibility(), G4OpenGLXmViewer::up_down_pan_callback(), G4OpenGLXmViewer::update_panels_callback(), UpdateGUIDrawingStyle(), UpdateGUIProjectionStyle(), UpdateGUITransparencySlider(), G4OpenGLQtViewer::updateToolbarAndMouseContextMenu(), G4OpenGLQtViewer::updateViewerPropertiesTableWidget(), G4OpenGLXmViewer::wobble_callback(), G4OpenGLXmViewer::wobble_timer_callback(), G4OpenGLXmViewer::zoom_callback(), and ZoomFromMouseWheel().


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