Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VtkImagePipeline.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25
26#include "G4VtkImagePipeline.hh"
27
28#include "G4String.hh"
29#include "G4ViewParameters.hh"
30#include "G4VisAttributes.hh"
31#include "G4VtkViewer.hh"
32#include "G4VtkVisContext.hh"
33
34#include <vtkImageActor.h>
35#include <vtkImageAlgorithm.h>
36#include <vtkImageMapper3D.h>
37#include <vtkImageProperty.h>
38#include <vtkImageReader2.h>
39#include <vtkImageReader2Factory.h>
40#include <vtkMatrix4x4.h>
41#include <vtkSmartPointer.h>
42#include <vtkImageFlip.h>
43
45 : G4VVtkPipeline(nameIn, "G4VtkImagePipeline", vcIn, false, vcIn.fViewer->renderer)
46{
48
49 actor->GetProperty()->SetOpacity(vc.alpha);
50
51 auto transform = vtkSmartPointer<vtkMatrix4x4>::New();
52 double transformArray[16] = {vc.fTransform.xx(),
64 0.,
65 0.,
66 0.,
67 1.};
68 transform->DeepCopy(transformArray);
69 actor->SetUserMatrix(transform);
70 actor->GetProperty()->SetOpacity(vc.alpha);
71
72 vc.fViewer->renderer->AddActor(GetActor());
73}
74
76{
77 vtkNew<vtkImageReader2Factory> readerFactory;
79 imageReader.TakeReference(readerFactory->CreateImageReader2(fileName.c_str()));
80 imageReader->SetFileName(fileName.c_str());
81 imageReader->Update();
82
83 vtkNew<vtkImageFlip> flip;
84 flip->SetInputConnection(imageReader->GetOutputPort());
85 flip->SetFilteredAxis(1);
86
87 actor->GetMapper()->SetInputConnection(flip->GetOutputPort());
88 AddFilter(imageReader);
89}
90
92{
94 t->SetElement(0, 0, transformation.xx());
95 t->SetElement(0, 1, transformation.xy());
96 t->SetElement(0, 2, transformation.xz());
97 t->SetElement(0, 3, transformation.dx());
98
99 t->SetElement(1, 0, transformation.yx());
100 t->SetElement(1, 1, transformation.yy());
101 t->SetElement(1, 2, transformation.yz());
102 t->SetElement(1, 3, transformation.dy());
103
104 t->SetElement(2, 0, transformation.zx());
105 t->SetElement(2, 1, transformation.zy());
106 t->SetElement(2, 2, transformation.zz());
107 t->SetElement(2, 3, transformation.dz());
108
109 t->SetElement(3, 0, 0);
110 t->SetElement(3, 1, 0);
111 t->SetElement(3, 2, 0);
112 t->SetElement(3, 3, 1);
113 actor->SetUserMatrix(t);
114}
115
117{
118 for (auto c : childPipelines)
119 c->Print();
120}
121
123{
124 actor->Update();
125
126 for (auto c : childPipelines)
127 c->Modified();
128}
129
131{
132 if (actor != nullptr) renderer->RemoveActor(actor);
133
134 for (auto c : childPipelines)
135 c->Clear();
136}
137
139{
140 GetActor()->SetVisibility(0);
141}
142
144{
145 GetActor()->SetVisibility(1);
146}
vtkSmartPointer< vtkRenderer > renderer
G4VtkVisContext vc
G4VtkImagePipeline(const G4String &name, const G4VtkVisContext &vc)
virtual void SetTransformation(const G4Transform3D &transformation)
virtual vtkSmartPointer< vtkImageActor > GetActor()
void AddFilter(vtkSmartPointer< vtkImageAlgorithm > f)
virtual void SetImage(const G4String &fileName)
vtkNew< vtkRenderer > renderer
const G4Transform3D & fTransform
const G4VtkViewer * fViewer
double dy() const
double zz() const
double yz() const
double dz() const
double dx() const
double xy() const
double zx() const
double yx() const
double zy() const
double xx() const
double yy() const
double xz() const