Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 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 44 G4VtkImagePipeline::G4VtkImagePipeline(const G 45 : G4VVtkPipeline(nameIn, "G4VtkImagePipeline 46 { 47 actor = vtkSmartPointer<vtkImageActor>::New( 48 49 actor->GetProperty()->SetOpacity(vc.alpha); 50 51 auto transform = vtkSmartPointer<vtkMatrix4x 52 double transformArray[16] = {vc.fTransform.x 53 vc.fTransform.x 54 vc.fTransform.x 55 vc.fTransform.d 56 vc.fTransform.y 57 vc.fTransform.y 58 vc.fTransform.y 59 vc.fTransform.d 60 vc.fTransform.z 61 vc.fTransform.z 62 vc.fTransform.z 63 vc.fTransform.d 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 75 void G4VtkImagePipeline::SetImage(const G4Stri 76 { 77 vtkNew<vtkImageReader2Factory> readerFactory 78 vtkSmartPointer<vtkImageReader2> imageReader 79 imageReader.TakeReference(readerFactory->Cre 80 imageReader->SetFileName(fileName.c_str()); 81 imageReader->Update(); 82 83 vtkNew<vtkImageFlip> flip; 84 flip->SetInputConnection(imageReader->GetOut 85 flip->SetFilteredAxis(1); 86 87 actor->GetMapper()->SetInputConnection(flip- 88 AddFilter(imageReader); 89 } 90 91 void G4VtkImagePipeline::SetTransformation(con 92 { 93 vtkSmartPointer<vtkMatrix4x4> t = vtkSmartPo 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 116 void G4VtkImagePipeline::Print() 117 { 118 for (auto c : childPipelines) 119 c->Print(); 120 } 121 122 void G4VtkImagePipeline::Modified() 123 { 124 actor->Update(); 125 126 for (auto c : childPipelines) 127 c->Modified(); 128 } 129 130 void G4VtkImagePipeline::Clear() 131 { 132 if (actor != nullptr) renderer->RemoveActor( 133 134 for (auto c : childPipelines) 135 c->Clear(); 136 } 137 138 void G4VtkImagePipeline::Disable() 139 { 140 GetActor()->SetVisibility(0); 141 } 142 143 void G4VtkImagePipeline::Enable() 144 { 145 GetActor()->SetVisibility(1); 146 }