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 "G4VtkPolydataInstanceBakePipeline.hh 27 28 #include "G4VtkViewer.hh" 29 #include "G4VtkVisContext.hh" 30 31 #include <vtkActor.h> 32 #include <vtkDataArray.h> 33 #include <vtkDoubleArray.h> 34 #include <vtkPointData.h> 35 #include <vtkPolyData.h> 36 #include <vtkPolyDataMapper.h> 37 #include <vtkProperty.h> 38 39 std::size_t G4VtkPolydataInstanceBakePipeline: 40 41 { 42 // Get view parameters that the user can for 43 // current view parameter. 44 const G4VisAttributes* pVA = 45 vc.fViewer->GetApplicableVisAttributes(pol 46 G4Colour colour = pVA->GetColour(); 47 48 // Hash the vis attributes 49 std::size_t hash = std::hash<G4double>{}(col 50 std::size_t shash = std::hash<G4double>{}(vc 51 52 std::hash_combine(hash, shash); 53 54 return hash; 55 } 56 57 G4VtkPolydataInstanceBakePipeline::G4VtkPolyda 58 59 : G4VtkPolydataInstancePipeline(nameIn, vcIn 60 { 61 iVert = 0; 62 iFace = 0; 63 polydataPointData = vtkSmartPointer<vtkDoubl 64 polydataPointData->SetNumberOfComponents(3); 65 polydataPointData->SetName("Colors"); 66 polydata->GetPointData()->SetScalars(polydat 67 68 mapper->SetColorModeToDirectScalars(); 69 70 actor->GetProperty()->SetOpacity(vc.alpha); 71 } 72 73 void G4VtkPolydataInstanceBakePipeline::SetPol 74 { 75 polyhedronPrototype = &polyhedron; 76 } 77 78 void G4VtkPolydataInstanceBakePipeline::Print( 79 { 80 G4cout << "G4VtkPolydataInstanceBakePipeline 81 G4VtkPolydataPipeline::Print(); 82 } 83 84 void G4VtkPolydataInstanceBakePipeline::addIns 85 86 87 88 89 90 { 91 G4VtkPolydataInstancePipeline::addInstance(d 92 r 93 94 vtkIdType vStart; 95 vtkIdType vEnd; 96 vtkIdType fStart; 97 vtkIdType fEnd; 98 99 vStart = iVert; 100 fStart = iFace; 101 102 G4bool notLastFace; 103 do { 104 G4Point3D vertex[4]; 105 G4int edgeFlag[4]; 106 G4Normal3D normals[4]; 107 G4int nEdges; 108 notLastFace = polyhedronPrototype->GetNext 109 110 vtkSmartPointer<vtkIdList> poly = vtkSmart 111 // loop over vertices 112 for (int i = 0; i < nEdges; i++) { 113 // note : G4Transform3D does not have a 114 G4Point3D bakedVertex = 115 G4Point3D(vertex[i].x() * r00 + vertex 116 vertex[i].x() * r10 + vertex 117 vertex[i].x() * r20 + vertex 118 polydataPoints->InsertNextPoint(bakedVer 119 poly->InsertNextId(iVert); 120 iVert++; 121 double cols[] = {r, g, b, 0.5}; 122 polydataPointData->InsertNextTuple(cols) 123 } 124 125 polydataCells->InsertNextCell(poly); 126 iFace++; 127 128 } while (notLastFace); 129 130 vEnd = iVert; 131 fEnd = iFace; 132 133 // Add vertex and face to maps to allow for 134 instanceVertexMap[name] = std::pair<vtkIdTyp 135 instanceFaceMap[name] = std::pair<vtkIdType, 136 } 137 138 void G4VtkPolydataInstanceBakePipeline::remove 139