58 template <
typename T,
typename... Rest>
59 inline void hash_combine(std::size_t &seed,
const T &v, Rest... rest) {
61 seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
98 notLastFace = ph.
GetNextFacet(nEdges, vertex, edgeFlag, normals);
100 for (
int i = 0; i < nEdges; i++) {
101 std::size_t hx = std::hash<double>()(vertex[i].
x());
102 std::size_t hy = std::hash<double>()(vertex[i].
y());
103 std::size_t hz = std::hash<double>()(vertex[i].
z());
108 }
while (notLastFace);
124void G4VtkSceneHandler::PrintThings() {
132 G4cout <<
"(not from a model)";
138 <<
"\n current depth of geometry tree: " << pPVModel->
GetCurrentDepth();
149 else {sizeType =
world;}
158 G4cout <<
"=================================" <<
G4endl;
159 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> vis hash: " << sizeType <<
" " << std::hash<G4VisAttributes>{}(*pVA) <<
G4endl;
160 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> sizeType: " << sizeType <<
G4endl;
161 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> isVisible: " << pVA->
IsVisible() <<
G4endl;
163 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> colour: " << colour.
GetRed() <<
" " << colour.
GetGreen() <<
" " << colour.
GetBlue() <<
G4endl;
164 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> alpha: " << colour.
GetAlpha() <<
G4endl;
165 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> lineWidth: " << lineWidth <<
G4endl;
168 if(sizeType ==
world) {
169 std::size_t hash = std::hash<G4VisAttributes>{}(*pVA);
173 vtkSmartPointer <vtkPoints> data = vtkSmartPointer<vtkPoints>::New();
174 vtkSmartPointer <vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
175 vtkSmartPointer <vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
176 vtkSmartPointer <vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
177 vtkSmartPointer <vtkActor> actor = vtkSmartPointer<vtkActor>::New();
179 polyData->SetPoints(data);
180 polyData->SetLines(lines);
181 mapper->SetInputData(polyData);
182 actor->SetMapper(mapper);
185 actor->GetProperty()->SetLineWidth(lineWidth);
186 actor->GetProperty()->SetColor(colour.
GetRed(), colour.
GetGreen(),
188 actor->GetProperty()->SetOpacity(opacity);
189 actor->SetVisibility(1);
194 pVtkViewer->
renderer->AddActor(actor);
197 std::pair<std::size_t, vtkSmartPointer<vtkPoints>>(hash, data));
199 std::pair<std::size_t, vtkSmartPointer<vtkCellArray>>(hash, lines));
201 std::pair<std::size_t, vtkSmartPointer<vtkPolyData>>(hash, polyData));
203 std::pair<std::size_t, vtkSmartPointer<vtkPolyDataMapper>>(hash,
206 std::pair<std::size_t, vtkSmartPointer<vtkActor>>(hash, actor));
210 const size_t nLines = polyline.size();
212 for (
size_t i = 0; i < nLines; ++i) {
216 if (i < nLines - 1) {
217 vtkSmartPointer <vtkLine> line = vtkSmartPointer<vtkLine>::New();
218 line->GetPointIds()->SetId(0,
id);
219 line->GetPointIds()->SetId(1,
id + 1);
224 else if (sizeType ==
screen ) {
233 else {sizeType =
world;}
247 G4cout <<
"=================================" <<
G4endl;
248 G4cout <<
"G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> text: " << text.
GetText() <<
" sizeType:" << sizeType <<
" " <<
fProcessing2D <<
G4endl;
249 G4cout <<
"G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> colour: " << colour.
GetRed() <<
" " << colour.
GetBlue() <<
" " << colour.
GetGreen() <<
G4endl;
250 G4cout <<
"G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> alpha: " << colour.
GetAlpha() <<
G4endl;
251 G4cout <<
"G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> position: " << x <<
" " << y <<
" " << z <<
G4endl;
257 vtkSmartPointer <vtkTextActor> actor = vtkSmartPointer<vtkTextActor>::New();
258 actor->SetInput(text.
GetText().c_str());
259 actor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();
261 actor->SetPosition((x+1.)/2.0, (y+1.)/2.);
264 actor->GetTextProperty()->SetOpacity(opacity);
267 pVtkViewer->
renderer->AddActor(actor);
271 vtkSmartPointer <vtkBillboardTextActor3D> actor = vtkSmartPointer<vtkBillboardTextActor3D>::New();
272 actor->SetInput(text.
GetText().c_str());
273 actor->SetPosition(x, y, z);
276 actor->GetTextProperty()->SetOpacity(opacity);
279 pVtkViewer->
renderer->AddActor(actor);
290 else {sizeType =
world;}
299 G4cout <<
"=================================" <<
G4endl;
300 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) called> " <<
" radius:" << size <<
" sizeType:" << sizeType <<
G4endl;
301 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) called> colour: " << colour.
GetRed() <<
" " << colour.
GetBlue() <<
" " << colour.
GetGreen() <<
G4endl;
302 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) called> alpha: " << colour.
GetAlpha() <<
G4endl;
305 if (sizeType ==
world) {
306 std::size_t hash = std::hash<G4VisAttributes>{}(*pVA);
310 vtkSmartPointer<vtkPoints> data = vtkSmartPointer<vtkPoints>::New();
311 vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
312 vtkSmartPointer<vtkVertexGlyphFilter> filter = vtkSmartPointer<vtkVertexGlyphFilter>::New();
313 vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
314 vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
316 polyData->SetPoints(data);
317 filter->SetInputData(polyData);
318 mapper->SetInputConnection(filter->GetOutputPort());
319 actor->SetMapper(mapper);
323 actor->GetProperty()->SetOpacity(opacity);
324 actor->SetVisibility(1);
325 actor->GetProperty()->SetRenderPointsAsSpheres(
true);
326 actor->GetProperty()->SetPointSize(size*5);
329 pVtkViewer->
renderer->AddActor(actor);
331 circleDataMap.insert(std::pair<std::size_t,vtkSmartPointer<vtkPoints>>(hash, data));
332 circlePolyDataMap.insert(std::pair<std::size_t, vtkSmartPointer < vtkPolyData>>(hash, polyData));
333 circleFilterMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkVertexGlyphFilter>>(hash, filter));
345 else if (sizeType ==
screen) {
362 vtkSmartPointer<vtkRegularPolygonSource> polygonSource = vtkSmartPointer<vtkRegularPolygonSource>::New();
363 polygonSource->SetNumberOfSides(4);
364 polygonSource->SetRadius(size);
368 G4cout <<
"=================================" <<
G4endl;
369 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Square& square) called" <<
G4endl;
374 if (sizeType ==
world) {
375 std::size_t hash = std::hash<G4VisAttributes>{}(*pVA);
379 vtkSmartPointer<vtkPoints> data = vtkSmartPointer<vtkPoints>::New();
380 vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
381 vtkSmartPointer<vtkVertexGlyphFilter> filter = vtkSmartPointer<vtkVertexGlyphFilter>::New();
382 vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
383 vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
385 polyData->SetPoints(data);
386 filter->SetInputData(polyData);
387 mapper->SetInputConnection(filter->GetOutputPort());
388 actor->SetMapper(mapper);
392 actor->GetProperty()->SetOpacity(opacity);
393 actor->SetVisibility(1);
394 actor->GetProperty()->SetPointSize(size*5);
397 pVtkViewer->
renderer->AddActor(actor);
399 squareDataMap.insert(std::pair<std::size_t,vtkSmartPointer<vtkPoints>>(hash, data));
400 squarePolyDataMap.insert(std::pair<std::size_t, vtkSmartPointer < vtkPolyData>>(hash, polyData));
401 squareFilterMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkVertexGlyphFilter>>(hash, filter));
413 else if (sizeType ==
screen) {
442 G4cout <<
"=================================" <<
G4endl;
443 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> " <<
G4endl;
444 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> colour:" << colour.
GetRed() <<
" " << colour.
GetBlue() <<
" " << colour.
GetGreen() <<
G4endl;
445 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> alpha:" << colour.
GetAlpha() <<
G4endl;
446 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> lineWidth:" << lineWidth <<
G4endl;
447 G4cout <<
"G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> lineStyle:" << lineStyle <<
G4endl;
452 std::size_t vhash = 0;
455 std::size_t phash = std::hash<G4Polyhedron>{}(polyhedron);
457 std::size_t hash = 0;
463 vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
464 vtkSmartPointer<vtkCellArray> polys = vtkSmartPointer<vtkCellArray>::New();
465 vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
474 notLastFace = polyhedron.
GetNextFacet(nEdges, vertex, edgeFlag, normals);
476 vtkSmartPointer<vtkIdList> poly = vtkSmartPointer<vtkIdList>::New();
478 for (
int i = 0; i < nEdges; i++) {
479 points->InsertNextPoint(vertex[i].x(), vertex[i].y(), vertex[i].z());
480 poly->InsertNextId(iVert);
483 polys->InsertNextCell(poly);
485 }
while (notLastFace);
487 polydata->SetPoints(points);
488 polydata->SetPolys(polys);
490 polyhedronDataMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkPoints>>(hash, points));
491 polyhedronPolyMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkCellArray>>(hash, polys));
495 vtkSmartPointer<vtkPoints> instancePosition = vtkSmartPointer<vtkPoints>::New();
496 vtkSmartPointer<vtkDoubleArray> instanceRotation = vtkSmartPointer<vtkDoubleArray>::New();
497 vtkSmartPointer<vtkDoubleArray> instanceColors = vtkSmartPointer<vtkDoubleArray>::New();
498 vtkSmartPointer<vtkPolyDataMapper> instanceMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
499 vtkSmartPointer<vtkActor> instanceActor = vtkSmartPointer<vtkActor>::New();
500 instanceColors->SetName(
"colors");
502 instanceColors->SetNumberOfComponents(4);
503 instanceRotation->SetNumberOfComponents(9);
505 vtkSmartPointer<vtkPolyData> instancePolyData = vtkSmartPointer<vtkPolyData>::New();
506 instancePolyData->SetPoints(instancePosition);
507 instancePolyData->GetPointData()->SetTensors(instanceRotation);
508 instancePolyData->GetPointData()->SetVectors(instanceColors);
509 instancePolyData->GetPointData()->SetScalars(instanceColors);
511 vtkSmartPointer<vtkCleanPolyData> filterClean = vtkSmartPointer<vtkCleanPolyData>::New();
512 filterClean->PointMergingOn();
513 filterClean->AddInputData(polydata);
515 vtkSmartPointer<vtkTriangleFilter> filterTriangle = vtkSmartPointer<vtkTriangleFilter>::New();
516 filterTriangle->SetInputConnection(filterClean->GetOutputPort());
518 vtkSmartPointer<vtkPolyDataNormals> filterNormals = vtkSmartPointer<vtkPolyDataNormals>::New();
519 filterNormals->SetFeatureAngle(45);
520 filterNormals->SetInputConnection(filterTriangle->GetOutputPort());
522 vtkSmartPointer<vtkFeatureEdges> filterEdge = vtkSmartPointer<vtkFeatureEdges>::New();
523 filterEdge->SetFeatureEdges(1);
524 filterEdge->SetManifoldEdges(0);
525 filterEdge->SetBoundaryEdges(0);
526 filterEdge->SetFeatureAngle(45);
527 filterEdge->SetInputConnection(filterTriangle->GetOutputPort());
529 vtkSmartPointer<vtkTensorGlyphColor> tensorGlyph = vtkSmartPointer<vtkTensorGlyphColor>::New();
530 tensorGlyph->SetInputData(instancePolyData);
531 tensorGlyph->SetSourceConnection(filterNormals->GetOutputPort());
532 tensorGlyph->ColorGlyphsOn();
533 tensorGlyph->ScalingOff();
534 tensorGlyph->ThreeGlyphsOff();
535 tensorGlyph->ExtractEigenvaluesOff();
536 tensorGlyph->SetColorModeToScalars();
537 tensorGlyph->Update();
539 instanceMapper->SetInputData(tensorGlyph->GetOutput());
540 instanceMapper->SetColorModeToDirectScalars();
542 instanceActor->SetMapper(instanceMapper);
544 instanceActor->SetVisibility(1);
554 instanceActor->GetProperty()->SetRepresentationToWireframe();
558 pVtkViewer->
renderer->AddActor(instanceActor);
560 instancePositionMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkPoints>>(hash, instancePosition));
561 instanceRotationMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkDoubleArray>>(hash, instanceRotation));
562 instanceColoursMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkDoubleArray>>(hash, instanceColors));
563 instancePolyDataMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkPolyData>>(hash,instancePolyData));
564 instanceActorMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkActor>>(hash, instanceActor));
565 instanceTensorGlyphMap.insert(std::pair<std::size_t, vtkSmartPointer<vtkTensorGlyphColor>>(hash, tensorGlyph));
570 double red = colour.
GetRed();
572 double blue = colour.
GetBlue();
584 fInvObjTrans.
yx(), fInvObjTrans.
yy(),fInvObjTrans.
yz(),
585 fInvObjTrans.
zx(), fInvObjTrans.
zy(),fInvObjTrans.
zz());
598 it->second->Modified();
603 it->second->Modified();
607 it->second->Modified();
612 it->second->Modified();
617 it->second->Modified();
622 it->second->Modified();
627 it->second->Modified();
632 it->second->Modified();
637 it->second->Modified();
642 it->second->Update();
649 G4cout <<
"G4VtkSceneHandler::Modified() polyline segments: "
650 << it->second->GetNumberOfCells() <<
G4endl;
655 G4cout <<
"G4VtkSceneHandler::Modified() circles: "
656 << it->second->GetNumberOfPoints() <<
G4endl;
662 G4cout <<
"G4VtkSceneHanler::Modified() squares: "
663 << it->second->GetNumberOfPoints() <<
G4endl;
671 G4cout <<
"G4VtkSceneHandler::Modified() polyhedronPolyData: " << it->second->GetPoints()->GetNumberOfPoints() <<
" " << it->second->GetPolys()->GetNumberOfCells() <<
" " <<
polyhedronPolyDataCountMap[it->first] <<
G4endl;
675 G4cout <<
"G4VtkSceneHandler::Modified() polyhedronPolyData: " << nPlacements <<
" " << nCells <<
G4endl;
732 if (!pv_model) { return ; }
735 if (!pPVModel) { return ; }
753 G4cout <<
" density : " << dens <<
" [g/cm3]" <<
G4endl;
779 EAxis rep1_axis, rep2_axis, rep3_axis;
780 G4int rep1_nReplicas, rep2_nReplicas, rep3_nReplicas;
781 G4double rep1_width, rep2_width, rep3_width;
782 G4double rep1_offset, rep2_offset, rep3_offset;
783 G4bool rep1_consuming, rep2_consuming, rep3_consuming;
785 rep1->
GetReplicationData(rep1_axis,rep1_nReplicas, rep1_width, rep1_offset, rep1_consuming);
786 rep2->GetReplicationData(rep2_axis,rep2_nReplicas, rep2_width, rep2_offset, rep2_consuming);
787 rep3->GetReplicationData(rep3_axis,rep3_nReplicas, rep3_width, rep3_offset, rep3_consuming);
793 const G4bool useFullExtent =
false;
799 vtkSmartPointer<vtkImageData> imagedata = vtkSmartPointer<vtkImageData>::New();
800 imagedata->SetDimensions(rep1_nReplicas+1,rep2_nReplicas+1,rep3_nReplicas+1);
801 imagedata->SetSpacing(rep1_width,rep2_width,rep2_width);
802 imagedata->SetOrigin(0,0,0);
803 imagedata->AllocateScalars(VTK_DOUBLE, 1);
805 G4double halfX = 0., halfY = 0., halfZ = 0.;
822 void AddSolid(
const G4Box& box)
824 const G4Colour& colour = fpPVModel->GetCurrentLV()->GetVisAttributes()->
GetColour();
830 fVtkId->SetScalarComponentFromDouble(
int(
position.x()/(2*fHalfX))+fNx,
837 vtkImageData *fVtkId;
842 pseudoScene(&tmpPVModel, imagedata, rep1_nReplicas, rep2_nReplicas, rep3_nReplicas, halfX, halfY, halfZ);
847 vtkSmartPointer<vtkOpenGLGPUVolumeRayCastMapper> volumeMapper = vtkSmartPointer<vtkOpenGLGPUVolumeRayCastMapper>::New();
848 volumeMapper->SetInputData(imagedata);
850 vtkNew<vtkVolume> volume;
851 volume->SetMapper(volumeMapper);
853 vtkSmartPointer<vtkMatrix4x4> vtkMatrix = vtkSmartPointer<vtkMatrix4x4>::New();
870 vtkMatrix->SetElement(3,3, 1);
872 volume->SetUserMatrix(vtkMatrix);
875 pVtkViewer->
renderer->AddVolume(volume);
G4GLOB_DLL std::ostream G4cout
G4double GetYHalfLength() const
G4double GetZHalfLength() const
G4double GetXHalfLength() const
static G4bool GetColour(const G4String &key, G4Colour &result)
G4double GetAlpha() const
G4double GetGreen() const
G4VPhysicalVolume * GetDaughter(const std::size_t i) const
const G4String & GetName() const
G4double GetDensity() const
const G4String & GetName() const
MeshType GetMeshType() const
G4VPhysicalVolume * GetContainerVolume() const
G4int GetMeshDepth() const
void SetCullingInvisible(G4bool)
G4VPhysicalVolume * GetCurrentPV() const
void DescribeYourselfTo(G4VGraphicsScene &)
G4LogicalVolume * GetCurrentLV() const
G4VPhysicalVolume * GetTopPhysicalVolume() const
G4Material * GetCurrentMaterial() const
G4int GetCurrentDepth() const
void AddSolid(const G4Box &solid)
G4double GetScreenSize() const
G4Point3D GetPosition() const
virtual G4String GetCurrentDescription() const
virtual G4String GetCurrentTag() const
virtual G4bool IsReplicated() const =0
virtual EVolume VolumeType() const =0
G4LogicalVolume * GetLogicalVolume() const
virtual G4int GetMultiplicity() const
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const =0
virtual G4int GetCopyNo() const =0
const G4String & GetName() const
virtual G4VPVParameterisation * GetParameterisation() const =0
G4ThreeVector GetObjectTranslation() const
virtual G4bool IsParameterised() const =0
G4VModel * GetModel() const
G4Transform3D fObjectTransformation
G4double GetMarkerSize(const G4VMarker &, MarkerSizeType &)
G4ViewParameters::DrawingStyle GetDrawingStyle(const G4VisAttributes *)
virtual void AddSolid(const G4Box &)
virtual void AddCompound(const G4VTrajectory &)
const G4VisAttributes * GetApplicableVisAttributes(const G4VisAttributes *) const
G4double GetLineWidth() const
G4bool IsDaughtersInvisible() const
LineStyle GetLineStyle() const
const G4Colour & GetColour() const
const G4VisAttributes * GetVisAttributes() const
std::map< std::size_t, vtkSmartPointer< vtkPolyDataMapper > > polylinePolyDataMapperMap
std::map< std::size_t, vtkSmartPointer< vtkCellArray > > polylineLineMap
std::map< std::size_t, vtkSmartPointer< vtkVertexGlyphFilter > > circleFilterMap
std::map< std::size_t, vtkSmartPointer< vtkVertexGlyphFilter > > squareFilterMap
std::map< std::size_t, vtkSmartPointer< vtkPolyData > > instancePolyDataMap
std::map< std::size_t, vtkSmartPointer< vtkPolyData > > circlePolyDataMap
std::map< std::size_t, const G4VisAttributes * > polylineVisAttributesMap
std::map< std::size_t, vtkSmartPointer< vtkDoubleArray > > instanceColoursMap
std::map< std::size_t, vtkSmartPointer< vtkDoubleArray > > instanceRotationMap
std::map< std::size_t, vtkSmartPointer< vtkPoints > > instancePositionMap
std::map< std::size_t, vtkSmartPointer< vtkPoints > > circleDataMap
void AddPrimitiveBakedTransform(const G4Polyhedron &)
std::map< std::size_t, vtkSmartPointer< vtkPolyData > > polylinePolyDataMap
static G4int fSceneIdCount
std::map< std::size_t, vtkSmartPointer< vtkPoints > > squareDataMap
std::map< std::size_t, vtkSmartPointer< vtkPolyData > > polyhedronPolyDataMap
void AddPrimitive(const G4Polyline &)
std::map< std::size_t, std::size_t > polyhedronPolyDataCountMap
std::map< std::size_t, const G4VisAttributes * > squareVisAttributesMap
std::map< std::size_t, vtkSmartPointer< vtkPolyDataMapper > > circlePolyDataMapperMap
G4VtkSceneHandler(G4VGraphicsSystem &system, const G4String &name)
std::map< std::size_t, vtkSmartPointer< vtkActor > > instanceActorMap
std::map< std::size_t, vtkSmartPointer< vtkCellArray > > polyhedronPolyMap
std::map< std::size_t, const G4VisAttributes * > polyhedronVisAttributesMap
std::map< std::size_t, vtkSmartPointer< vtkActor > > squarePolyDataActorMap
std::map< std::size_t, vtkSmartPointer< vtkPolyDataMapper > > squarePolyDataMapperMap
void AddSolid(const G4Box &box)
std::map< std::size_t, vtkSmartPointer< vtkPolyData > > squarePolyDataMap
void AddPrimitiveTensorGlyph(const G4Polyhedron &)
std::map< std::size_t, vtkSmartPointer< vtkTensorGlyphColor > > instanceTensorGlyphMap
std::map< std::size_t, vtkSmartPointer< vtkActor > > polylinePolyDataActorMap
std::map< std::size_t, const G4VisAttributes * > circleVisAttributesMap
std::map< std::size_t, vtkSmartPointer< vtkActor > > circlePolyDataActorMap
std::map< std::size_t, vtkSmartPointer< vtkPoints > > polylineDataMap
void AddCompound(const G4Mesh &mesh)
std::map< std::size_t, vtkSmartPointer< vtkPoints > > polyhedronDataMap
vtkNew< vtkRenderer > renderer
G4int GetNoFacets() const
G4bool GetNextFacet(G4int &n, G4Point3D *nodes, G4int *edgeFlags=nullptr, G4Normal3D *normals=nullptr) const
void hash_combine(std::size_t)
std::size_t operator()(const G4Polyhedron &ph) const
std::size_t operator()(const G4VisAttributes &va) const