#include <G4XXXSGViewer.hh>
Inheritance diagram for G4XXXSGViewer:
Public Member Functions | |
G4XXXSGViewer (G4VSceneHandler &, const G4String &name) | |
virtual | ~G4XXXSGViewer () |
void | SetView () |
void | ClearView () |
void | DrawView () |
void | ShowView () |
Protected Member Functions | |
void | KernelVisitDecision () |
G4bool | CompareForKernelVisit (G4ViewParameters &) |
void | DrawFromStore (const G4String &source) |
Protected Attributes | |
G4ViewParameters | fLastVP |
Definition at line 39 of file G4XXXSGViewer.hh.
G4XXXSGViewer::G4XXXSGViewer | ( | G4VSceneHandler & | , | |
const G4String & | name | |||
) |
Definition at line 42 of file G4XXXSGViewer.cc.
00042 : 00043 G4VViewer(sceneHandler, sceneHandler.IncrementViewCount(), name) 00044 {}
G4XXXSGViewer::~G4XXXSGViewer | ( | ) | [virtual] |
void G4XXXSGViewer::ClearView | ( | ) | [virtual] |
G4bool G4XXXSGViewer::CompareForKernelVisit | ( | G4ViewParameters & | ) | [protected] |
Definition at line 115 of file G4XXXSGViewer.cc.
References G4VViewer::fVP, G4ViewParameters::GetBackgroundColour(), G4VisAttributes::GetColour(), G4ViewParameters::GetDefaultTextVisAttributes(), G4ViewParameters::GetDefaultVisAttributes(), G4ViewParameters::GetDrawingStyle(), G4ViewParameters::GetExplodeFactor(), G4ViewParameters::GetNoOfSides(), G4ViewParameters::GetRepStyle(), G4ViewParameters::GetVisAttributesModifiers(), G4ViewParameters::GetVisibleDensity(), G4ViewParameters::IsAuxEdgeVisible(), G4ViewParameters::IsCulling(), G4ViewParameters::IsCullingCovered(), G4ViewParameters::IsCullingInvisible(), G4ViewParameters::IsDensityCulling(), G4ViewParameters::IsExplode(), and G4ViewParameters::IsMarkerNotHidden().
Referenced by KernelVisitDecision().
00116 { 00117 // Typical comparison. Taken from OpenGL. 00118 if ( 00119 (lastVP.GetDrawingStyle () != fVP.GetDrawingStyle ()) || 00120 (lastVP.IsAuxEdgeVisible () != fVP.IsAuxEdgeVisible ()) || 00121 (lastVP.GetRepStyle () != fVP.GetRepStyle ()) || 00122 (lastVP.IsCulling () != fVP.IsCulling ()) || 00123 (lastVP.IsCullingInvisible () != fVP.IsCullingInvisible ()) || 00124 (lastVP.IsDensityCulling () != fVP.IsDensityCulling ()) || 00125 (lastVP.IsCullingCovered () != fVP.IsCullingCovered ()) || 00126 // No need to visit kernel if section plane changes. 00127 // No need to visit kernel if cutaway planes change. 00128 (lastVP.IsExplode () != fVP.IsExplode ()) || 00129 (lastVP.GetNoOfSides () != fVP.GetNoOfSides ()) || 00130 (lastVP.IsMarkerNotHidden () != fVP.IsMarkerNotHidden ()) || 00131 (lastVP.GetDefaultVisAttributes()->GetColour() != 00132 fVP.GetDefaultVisAttributes()->GetColour()) || 00133 (lastVP.GetDefaultTextVisAttributes()->GetColour() != 00134 fVP.GetDefaultTextVisAttributes()->GetColour()) || 00135 (lastVP.GetBackgroundColour ()!= fVP.GetBackgroundColour ())|| 00136 (lastVP.GetVisAttributesModifiers().size() != 00137 fVP.GetVisAttributesModifiers().size()) 00138 ) { 00139 return true; 00140 } 00141 00142 if (lastVP.IsDensityCulling () && 00143 (lastVP.GetVisibleDensity () != fVP.GetVisibleDensity ())) 00144 return true; 00145 00146 if (lastVP.IsExplode () && 00147 (lastVP.GetExplodeFactor () != fVP.GetExplodeFactor ())) 00148 return true; 00149 00150 return false; 00151 }
void G4XXXSGViewer::DrawFromStore | ( | const G4String & | source | ) | [protected] |
Definition at line 153 of file G4XXXSGViewer.cc.
References G4VViewer::fName, G4VViewer::fSceneHandler, G4cout, G4endl, and JA::PrintTree().
Referenced by DrawView(), and ShowView().
00153 { 00154 SceneGraph& sceneGraph = 00155 static_cast<G4XXXSGSceneHandler&>(fSceneHandler).fSceneGraph; 00156 // Write to a file for testing... 00157 static G4int iCount = 0; 00158 std::ostringstream oss; 00159 oss << source << '.' << fName << '.' << iCount++ << ".out"; 00160 G4cout << "Writing " << oss.str() << G4endl; 00161 std::ofstream ofs(oss.str().c_str()); 00162 JA::PrintTree(ofs,&sceneGraph); 00163 ofs.close(); 00164 }
void G4XXXSGViewer::DrawView | ( | ) | [virtual] |
Implements G4VViewer.
Definition at line 60 of file G4XXXSGViewer.cc.
References DrawFromStore(), G4VViewer::FinishView(), G4VViewer::fNeedKernelVisit, G4cout, G4endl, KernelVisitDecision(), and G4VViewer::ProcessView().
00060 { 00061 //#ifdef G4XXXSGDEBUG 00062 G4cout << "G4XXXSGViewer::DrawView() called." << G4endl; 00063 //#endif 00064 00065 // First, a view should decide when to re-visit the G4 kernel. 00066 // Sometimes it might not be necessary, e.g., if the scene is stored 00067 // in a graphical database (e.g., OpenGL's display lists) and only 00068 // the viewing angle has changed. But graphics systems without a 00069 // graphical database will always need to visit the G4 kernel. 00070 00071 // The fNeedKernelVisit flag might have been set by the user in 00072 // /vis/viewer/rebuild, but if not, make decision and set flag only 00073 // if necessary... 00074 if (!fNeedKernelVisit) KernelVisitDecision(); 00075 G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets). 00076 00077 ProcessView (); // Clears store and processes scene only if necessary. 00078 00079 if (kernelVisitWasNeeded) { 00080 // Some systems, notably OpenGL, can draw while re-building, so 00081 // there might not be a need to draw from store again here. But 00082 // in this case... 00083 DrawFromStore("G4XXXSGViewer::DrawView"); 00084 } else { 00085 DrawFromStore("G4XXXSGViewer::DrawView"); 00086 } 00087 00088 // ...before finally... 00089 FinishView (); // Flush streams and/or swap buffers. 00090 }
void G4XXXSGViewer::KernelVisitDecision | ( | ) | [protected] |
Definition at line 100 of file G4XXXSGViewer.cc.
References CompareForKernelVisit(), JA::Node::fDaughters, fLastVP, G4VViewer::fSceneHandler, G4VViewer::fVP, and G4VViewer::NeedKernelVisit().
Referenced by DrawView().
00100 { 00101 00102 // If there's a significant difference with the last view parameters 00103 // of either the scene handler or this viewer, trigger a rebuild. 00104 00105 SceneGraph& sceneGraph = 00106 static_cast<G4XXXSGSceneHandler&>(fSceneHandler).fSceneGraph; 00107 if (sceneGraph.fDaughters.size() == 3 // I.e., only the root nodes. 00108 // (The above needs re-thinking.) 00109 || CompareForKernelVisit(fLastVP)) { 00110 NeedKernelVisit (); // Sets fNeedKernelVisit. 00111 } 00112 fLastVP = fVP; 00113 }
void G4XXXSGViewer::SetView | ( | ) | [virtual] |
void G4XXXSGViewer::ShowView | ( | ) | [virtual] |
Reimplemented from G4VViewer.
Definition at line 92 of file G4XXXSGViewer.cc.
References DrawFromStore(), G4cout, and G4endl.
00092 { 00093 //#ifdef G4XXXSGDEBUG 00094 G4cout << "G4XXXSGViewer::ShowView() called." << G4endl; 00095 //#endif 00096 // This is what you should see... 00097 DrawFromStore("G4XXXSGViewer::ShowView"); 00098 }
G4ViewParameters G4XXXSGViewer::fLastVP [protected] |