38#include "vtkRendererCollection.h"
39#include "vtkLightCollection.h"
41#include "vtkWindowToImageFilter.h"
42#include "vtkImageWriter.h"
43#include "vtkBMPWriter.h"
44#include "vtkJPEGWriter.h"
45#include "vtkPNGWriter.h"
46#include "vtkPNMWriter.h"
47#include "vtkTIFFWriter.h"
48#include "vtkPostScriptWriter.h"
49#include "vtkOBJExporter.h"
50#include "vtkVRMLExporter.h"
51#include "vtkSingleVTPExporter.h"
53#include "vtkShadowMapPass.h"
54#include "vtkShadowMapBakerPass.h"
55#include "vtkSequencePass.h"
56#include "vtkCameraPass.h"
57#include "vtkRenderPass.h"
58#include "vtkRenderPassCollection.h"
60#include "vtkOpenGLRenderer.h"
63 :
G4VViewer(sceneHandler, sceneHandler.IncrementViewCount(),
name)
93 camera->SetPosition(0, 0, 1000);
94 camera->SetFocalPoint(0, 0, 0);
104 vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =
105 vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
127 targetPoint + viewpointDirection.
unit() * cameraDistance;
128 renderer->GetActiveCamera()->SetFocalPoint(targetPoint.
x(),
131 renderer->GetActiveCamera()->SetPosition(cameraPosition.
x(),
134 renderer->GetActiveCamera()->SetParallelScale(cameraDistance);
139 geant4Callback->SetVtkInitialValues(cameraDistance, cameraDistance);
146 vtkCamera* activeCamera =
renderer->GetActiveCamera();
147 if(fieldHalfAngle == 0) {
148 activeCamera->SetParallelProjection(1);
149 activeCamera->SetParallelScale(activeCamera->GetParallelScale()/zoomFactor);
152 activeCamera->SetParallelProjection(0);
153 activeCamera->SetViewAngle(2*fieldHalfAngle/
M_PI*180);
154 activeCamera->SetPosition(cameraPosition.
x()/zoomFactor,
155 cameraPosition.
y()/zoomFactor,
156 cameraPosition.
z()/zoomFactor);
164 renderer->GetActiveCamera()->SetViewUp(upVector.
x(),
172 targetPoint + lightDirection.
unit() * cameraDistance;
174 vtkLightCollection* currentLights =
renderer->GetLights();
175 if (currentLights->GetNumberOfItems() != 0)
177 auto currentLight =
dynamic_cast<vtkLight*
>(currentLights->GetItemAsObject(0));
180 currentLight->SetPosition(lightPosition.
x(),
183 if (lightsMoveWithCamera)
184 {currentLight->SetLightTypeToCameraLight();}
186 {currentLight->SetLightTypeToSceneLight();}
192 if (rotationStyle == G4ViewParameters::RotationStyle::freeRotation) {
193 vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =
194 vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
197 else if(rotationStyle == G4ViewParameters::RotationStyle::constrainUpDirection) {
199 vtkSmartPointer<vtkInteractorStyleTerrain> style =
200 vtkSmartPointer<vtkInteractorStyleTerrain>::New();
206 vtkActorCollection *actors =
renderer->GetActors();
207 vtkActor *actor = actors->GetLastActor();
211 G4cout <<
"G4VtkViewer::ClearView() remove actor " << actor <<
G4endl;
214 actor = actors->GetLastActor();
217 vtkPropCollection *props =
renderer->GetViewProps();
218 vtkProp *prop = props->GetLastProp();
222 G4cout <<
"G4VtkViewer::ClearView() remove prop " << prop <<
G4endl;
225 prop = props->GetLastProp();
230 fVtkSceneHandler.
Clear();
258 std::fmod(colour.
GetGreen() + 0.5, 1.0),
259 std::fmod(colour.
GetBlue() + 0.5, 1.0));
270 vtkNew<vtkShadowMapPass> shadows;
271 vtkNew<vtkSequencePass> seq;
273 vtkNew<vtkRenderPassCollection> passes;
274 passes->AddItem(shadows->GetShadowMapBakerPass());
275 passes->AddItem(shadows);
276 seq->SetPasses(passes);
278 vtkNew<vtkCameraPass> cameraP;
279 cameraP->SetDelegatePass(seq);
282 vtkOpenGLRenderer* glrenderer =
dynamic_cast<vtkOpenGLRenderer*
>(
renderer.GetPointer());
283 glrenderer->SetPass(cameraP);
302 std::fmod(colour.
GetGreen() + 0.5, 1.0),
303 std::fmod(colour.
GetBlue() + 0.5, 1.0));
328 vtkImageWriter *imWriter =
nullptr;
330 if(format ==
"bmp") {
331 imWriter = vtkBMPWriter::New();
333 else if (format ==
"jpg") {
334 imWriter = vtkJPEGWriter::New();
336 else if (format ==
"pnm") {
337 imWriter = vtkPNMWriter::New();
339 else if (format ==
"png") {
340 imWriter = vtkPNGWriter::New();
342 else if (format ==
"tiff") {
343 imWriter = vtkTIFFWriter::New();
345 else if (format ==
"ps") {
346 imWriter = vtkPostScriptWriter::New();
349 imWriter = vtkPNGWriter::New();
354 vtkSmartPointer<vtkWindowToImageFilter> winToImage = vtkSmartPointer<vtkWindowToImageFilter>::New();
356 winToImage->SetScale(1);
359 winToImage->SetInputBufferTypeToRGB();
360 winToImage->ReadFrontBufferOff();
361 winToImage->Update();
364 {winToImage->SetInputBufferTypeToRGBA();}
366 imWriter->SetFileName((path+
"."+format).c_str());
367 imWriter->SetInputConnection(winToImage->GetOutputPort());
373 vtkSmartPointer<vtkRenderWindow> _rw1 = vtkSmartPointer<vtkRenderWindow>::New();
374 _rw1->AddRenderer(
_renderWindow->GetRenderers()->GetFirstRenderer());
375 vtkSmartPointer<vtkOBJExporter> exporter = vtkSmartPointer<vtkOBJExporter>::New();
376 exporter->SetRenderWindow(_rw1);
377 exporter->SetFilePrefix(path.c_str());
383 vtkSmartPointer<vtkRenderWindow> _rw1 = vtkSmartPointer<vtkRenderWindow>::New();
384 _rw1->AddRenderer(
_renderWindow->GetRenderers()->GetFirstRenderer());
385 vtkSmartPointer<vtkVRMLExporter> exporter = vtkSmartPointer<vtkVRMLExporter>::New();
386 exporter->SetRenderWindow(_rw1);
387 exporter->SetFileName((path+
".vrml").c_str());
393 vtkSmartPointer<vtkRenderWindow> _rw1 = vtkSmartPointer<vtkRenderWindow>::New();
394 _rw1->AddRenderer(
_renderWindow->GetRenderers()->GetFirstRenderer());
395 vtkSmartPointer<vtkSingleVTPExporter> exporter = vtkSmartPointer<vtkSingleVTPExporter>::New();
396 exporter->SetRenderWindow(_rw1);
397 exporter->SetFileName((path+
".vtp").c_str());
G4GLOB_DLL std::ostream G4cout
G4double GetGreen() const
virtual const G4VisExtent & GetExtent() const
G4VSceneHandler & fSceneHandler
G4ViewParameters fDefaultVP
G4int GetWindowLocationHintX() const
void SetAutoRefresh(G4bool)
G4double GetCameraDistance(G4double radius) const
unsigned int GetWindowSizeHintX() const
const G4Colour & GetBackgroundColour() const
const G4Vector3D & GetLightpointDirection() const
const G4Vector3D & GetViewpointDirection() const
const G4Point3D & GetCurrentTargetPoint() const
G4double GetFieldHalfAngle() const
G4double GetZoomFactor() const
const G4Vector3D & GetUpVector() const
RotationStyle GetRotationStyle() const
G4int GetWindowLocationHintY() const
unsigned int GetWindowSizeHintY() const
G4bool GetLightsMoveWithCamera() const
G4double GetExtentRadius() const
vtkNew< vtkCamera > camera
void ExportVRMLScene(G4String)
vtkNew< vtkGeant4Callback > geant4Callback
void ExportScreenShot(G4String, G4String)
vtkNew< vtkTextActor > infoTextActor
vtkRenderWindowInteractor * renderWindowInteractor
G4VtkViewer(G4VSceneHandler &, const G4String &name)
vtkNew< vtkInfoCallback > infoCallback
vtkNew< vtkRenderer > renderer
void ExportVTPScene(G4String)
void ExportOBJScene(G4String)
vtkRenderWindow * _renderWindow
BasicVector3D< T > unit() const
const char * name(G4int ptype)