101 fSceneHandlerId (id),
105 fMarkForClearingTransientStore (true),
109 fReadyForTransients (true),
110 fProcessingSolid (false),
111 fProcessing2D (false),
117 fpScene = pVMan -> GetCurrentScene ();
119 std::ostringstream ost;
120 ost << fSystem.GetName () <<
'-' << fSceneHandlerId;
145 return defaultExtent;
172 (
"G4VSceneHandler::BeginPrimitives",
174 "Nesting detected. It is illegal to nest Begin/EndPrimitives.");
194 (
"G4VSceneHandler::BeginPrimitives2D",
196 "Nesting detected. It is illegal to nest Begin/EndPrimitives.");
326 if (trajectoriesModel)
330 (
"G4VSceneHandler::AddCompound(const G4VTrajectory&)",
337 const_cast<G4VHit&
>(hit).Draw();
342 const_cast<G4VDigi&
>(digi).Draw();
348 G4bool scoreMapHits =
false;
350 if (scoringManager) {
352 for (std::size_t iMesh = 0; iMesh < nMeshes; ++iMesh) {
357 for(MeshScoreMap::const_iterator i = scoreMap.cbegin();
358 i != scoreMap.cend(); ++i) {
359 const G4String& scoreMapName = i->first;
360 if (scoreMapName == mapNam) {
363 mesh->
DrawMesh(scoreMapName, &colorMap);
370 static G4bool first =
true;
374 "Scoring map drawn with default parameters."
375 "\n To get gMocren file for gMocren browser:"
376 "\n /vis/open gMocrenFile"
377 "\n /vis/viewer/flush"
378 "\n Many other options available with /score/draw... commands."
379 "\n You might want to \"/vis/viewer/set/autoRefresh false\"."
391 G4bool scoreMapHits =
false;
393 if (scoringManager) {
395 for (std::size_t iMesh = 0; iMesh < nMeshes; ++iMesh) {
399 for(MeshScoreMap::const_iterator i = scoreMap.cbegin();
400 i != scoreMap.cend(); ++i) {
401 const G4String& scoreMapName = i->first;
403 if (foundHits == &hits) {
406 mesh->
DrawMesh(scoreMapName, &colorMap);
413 static G4bool first =
true;
417 "Scoring map drawn with default parameters."
418 "\n To get gMocren file for gMocren browser:"
419 "\n /vis/open gMocrenFile"
420 "\n /vis/viewer/flush"
421 "\n Many other options available with /score/draw... commands."
422 "\n You might want to \"/vis/viewer/set/autoRefresh false\"."
434 "There has been an attempt to draw a mesh with option \""
437 <<
"but it is not of a recognised type or is not implemented"
438 "\nby the current graphics driver. Instead we draw its"
447 const auto& saveVisAtts = lv->GetVisAttributes();
449 tmpVisAtts = *saveVisAtts;
451 auto colour = saveVisAtts->GetColour();
457 solid->DescribeYourselfTo(*
this);
460 lv->SetVisAttributes(saveVisAtts);
475 for (std::size_t iPoint = 0; iPoint < polymarker.size (); ++iPoint) {
484 for (std::size_t iPoint = 0; iPoint < polymarker.size (); ++iPoint) {
493 for (std::size_t iPoint = 0; iPoint < polymarker.size (); ++iPoint) {
506 visManager->SetCurrentViewer(
nullptr);
512 G4warn <<
" Open a plotter-aware graphics system or remove plotter with" <<
G4endl;
521 (*i) -> SetNeedKernelVisit (
true);
534 auto pSolid = &solid;
538 pBooleanSolid->BoundingLimits(bmin, bmax);
540 for (
G4int i=0; i<100000; ++i) {
574 static std::set<const G4VSolid*> problematicSolids;
576 problematicSolids.find(&solid) == problematicSolids.end()) {
577 problematicSolids.insert(&solid);
579 "ERROR: G4VSceneHandler::RequestPrimitives"
580 "\n Polyhedron not available for " << solid.
GetName ();
585 static G4bool explanation =
false;
589 "\n This means it cannot be visualized in the usual way on most systems."
590 "\n 1) The solid may not have implemented the CreatePolyhedron method."
591 "\n 2) For Boolean solids, the BooleanProcessor, which attempts to create"
592 "\n the resultant polyhedron, may have failed."
593 "\n Try RayTracer. It uses Geant4's tracking algorithms instead.";
595 G4warn <<
"\n Drawing solid with cloud of points.";
615 for (
G4int i = 0; i < numberOfCloudPoints; ++i) {
657 "The scene has no extent.");
677 const std::vector<G4Scene::Model>& runDurationModelList =
680 if(runDurationModelList.size())
692 for(std::size_t i = 0; i < runDurationModelList.size(); ++i)
694 if(runDurationModelList[i].fActive)
696 fpModel = runDurationModelList[i].fpModel;
732 const std::vector<const G4Event*>* events =
734 std::size_t nKeptEvents = 0;
736 nKeptEvents = events->size();
746 if(events && events->size())
747 event = events->back();
758 for(
const auto& event : *events)
768 G4warn <<
"WARNING: Cannot refresh events accumulated over more"
769 "\n than one runs. Refreshed just the last run."
792 const std::vector<G4Scene::Model>& EOEModelList =
793 fpScene -> GetEndOfEventModelList ();
794 std::size_t nModels = EOEModelList.size();
798 for (std::size_t i = 0; i < nModels; ++i) {
799 if (EOEModelList[i].fActive) {
800 fpModel = EOEModelList[i].fpModel;
801 fpModel -> SetModelingParameters(pMP);
802 fpModel -> DescribeYourselfTo (*
this);
803 fpModel -> SetModelingParameters(0);
813 const std::vector<G4Scene::Model>& EORModelList =
814 fpScene -> GetEndOfRunModelList ();
815 std::size_t nModels = EORModelList.size();
819 for (std::size_t i = 0; i < nModels; ++i) {
820 if (EORModelList[i].fActive) {
821 fpModel = EORModelList[i].fpModel;
822 fpModel -> SetModelingParameters(pMP);
823 fpModel -> DescribeYourselfTo (*
this);
824 fpModel -> SetModelingParameters(0);
862 G4bool reallyCullCovered =
898 return pModelingParams;
911 new G4Box(
"_sectioner", safe, safe, 1.e-5 * radius);
923 if (newNormal != originalNormal) {
924 const G4double& angle = std::acos(newNormal.
dot(originalNormal));
932 (
"_displaced_sectioning_box", sectionBox, requiredTransform);
943 std::vector<G4DisplacedSolid*> cutaway_solids;
948 new G4Box(
"_cutaway_box", safe, safe, safe);
950 for (
int plane_no = 0; plane_no < int(vp.
GetCutawayPlanes().size()); plane_no++){
970 }
else if (newNormal != originalNormal) {
971 const G4double& angle = std::acos(newNormal.
dot(originalNormal));
977 cutaway_solids.push_back
978 (
new G4DisplacedSolid(
"_displaced_cutaway_box", cutawayBox, requiredTransform));
981 if (cutaway_solids.size() == 1){
985 new G4UnionSolid(
"_union_2", cutaway_solids[0], cutaway_solids[1]);
986 if (cutaway_solids.size() == 2)
990 new G4UnionSolid(
"_union_3", union2, cutaway_solids[2]);
994 if (cutaway_solids.size() == 2)
1010 const std::map<G4String,G4AttDef>* vaDefs =
1021 const std::map<G4String,G4AttDef>* pvDefs = pPVModel->
GetAttDefs();
1030 const std::map<G4String,G4AttDef>* trajModelDefs = trajModel->
GetAttDefs();
1031 if (trajModelDefs) {
1037 const std::map<G4String,G4AttDef>* trajDefs = traj->
GetAttDefs();
1042 for (
G4int i = 0; i < nPoints; ++i) {
1045 const std::map<G4String,G4AttDef>* pointDefs = trajPoint->
GetAttDefs();
1058 const std::map<G4String,G4AttDef>* hitsDefs = hit->
GetAttDefs();
1086 if (lineWidth < 1.) lineWidth = 1.;
1087 lineWidth *=
fpViewer -> GetViewParameters().GetGlobalLineWidthScale();
1088 if (lineWidth < 1.) lineWidth = 1.;
1100 if (pVisAttribs -> IsForceDrawingStyle ()) {
1102 pVisAttribs -> GetForcedDrawingStyle ();
1105 switch (forcedStyle) {
1107 switch (viewerStyle) {
1135 return resultantStyle;
1144 if (pVisAttribs -> IsForceDrawingStyle() &&
1146 pVisAttribs -> GetForcedNumberOfCloudPoints() > 0) {
1147 numberOfCloudPoints = pVisAttribs -> GetForcedNumberOfCloudPoints();
1149 return numberOfCloudPoints;
1154 if (pVisAttribs -> IsForceAuxEdgeVisible()) {
1157 return isAuxEdgeVisible;
1166 fpViewer -> GetViewParameters().GetDefaultMarker();
1171 markerSizeType =
world;
1174 size = userSpecified ?
1179 size *=
fpViewer -> GetViewParameters().GetGlobalMarkerScale();
1180 if (markerSizeType ==
screen && size < 1.) size = 1.;
1193 if (lineSegmentsPerCircle < pVisAttribs->GetMinLineSegmentsPerCircle()) {
1196 "G4VSceneHandler::GetNoOfSides: attempt to set the"
1197 "\nnumber of line segments per circle < " << lineSegmentsPerCircle
1201 return lineSegmentsPerCircle;
1206 os <<
"Scene handler " << sh.
fName <<
" has "
1208 for (std::size_t i = 0; i < sh.
fViewerList.size (); ++i) {
1216 os <<
"\n This scene handler currently has no scene.";
1222void G4VSceneHandler::PseudoSceneFor3DRectMeshPositions::AddSolid(
const G4Box&) {
1225 const auto& name = material->GetName();
1231 fPositionByMaterial.insert(std::make_pair(material,
position));
1232 if (fNameAndVisAttsByMaterial.find(material) == fNameAndVisAttsByMaterial.end())
1234 fNameAndVisAttsByMaterial[material] = NameAndVisAtts(name,*pVisAtts);
1238void G4VSceneHandler::PseudoSceneForTetVertices::AddSolid(
const G4VSolid& solid) {
1239 if (fpPVModel->GetCurrentDepth() == fDepth) {
1242 const G4Tet& tet =
dynamic_cast<const G4Tet&
>(solid);
1243 const auto& material = fpPVModel->GetCurrentLV()->GetMaterial();
1244 const auto&
name = material->GetName();
1245 const auto* pVisAtts = fpPVModel->GetCurrentLV()->GetVisAttributes();
1247 if (fpCurrentObjectTransformation->xx() == 1. &&
1248 fpCurrentObjectTransformation->yy() == 1. &&
1249 fpCurrentObjectTransformation->zz() == 1.) {
1251 fVerticesByMaterial.insert(std::make_pair(material,vertices));
1254 for (
auto&& vertex: vertices) {
1255 vertex =
G4Point3D(vertex).transform(*fpCurrentObjectTransformation);
1257 fVerticesByMaterial.insert(std::make_pair(material,vertices));
1259 if (fNameAndVisAttsByMaterial.find(material) == fNameAndVisAttsByMaterial.end())
1261 fNameAndVisAttsByMaterial[material] = NameAndVisAtts(name,*pVisAtts);
1263 catch (
const std::bad_cast&) {
1265 ed <<
"Called for a mesh that is not a tetrahedron mesh: " << solid.
GetName();
1276 G4bool implemented =
false;
1312 if (containerVisAtts ==
nullptr || containerVisAtts->IsVisible()) {
1313 auto solid = containerLogical->GetSolid();
1317 if (containerVisAtts !=
nullptr) tmpVisAtts = *containerVisAtts;
1319 polyhedron->SetVisAttributes(tmpVisAtts);
1339 ed <<
"Called with a mesh that is not rectangular:" << mesh;
1344 static G4bool firstPrint =
true;
1349 <<
"Special case drawing of 3D rectangular G4VNestedParameterisation as dots:"
1357 static std::map<G4String,std::map<const G4Material*,G4Polymarker>> dotsByMaterialAndMesh;
1361 if (dotsByMaterial.empty()) {
1369 const G4bool useFullExtent =
true;
1377 std::multimap<const G4Material*,const G4ThreeVector> positionByMaterial;
1378 std::map<const G4Material*,G4VSceneHandler::NameAndVisAtts> nameAndVisAttsByMaterial;
1381 (&tmpPVModel,mesh.
GetMeshDepth(),positionByMaterial,nameAndVisAttsByMaterial);
1388 const auto& halfX = prms.
fHalfX;
1389 const auto& halfY = prms.fHalfY;
1390 const auto& halfZ = prms.fHalfZ;
1393 G4int nDotsTotal = 0;
1394 for (
const auto& entry: nameAndVisAttsByMaterial) {
1396 const auto& material = entry.first;
1397 const auto& nameAndVisAtts = nameAndVisAttsByMaterial[material];
1398 const auto& name = nameAndVisAtts.fName;
1399 const auto& visAtts = nameAndVisAtts.fVisAtts;
1406 dotsByMaterial[material] = dots;
1408 auto& dotsInMap = dotsByMaterial[material];
1409 const auto& range = positionByMaterial.equal_range(material);
1410 for (
auto posByMat = range.first; posByMat != range.second; ++posByMat) {
1411 dotsInMap.push_back(
GetPointInBox(posByMat->second, halfX, halfY, halfZ));
1417 << std::setw(30) << std::left << name.substr(0,30) << std::right
1418 <<
": " << std::setw(7) << nDots <<
" dots"
1419 <<
": colour " << std::fixed << std::setprecision(2)
1420 << visAtts.GetColour() << std::defaultfloat
1424 nDotsTotal += nDots;
1428 G4cout <<
"Total number of dots: " << nDotsTotal <<
G4endl;
1437 parameterisationName = pPVModel->GetFullPVPath().back().GetPhysicalVolume()->GetName();
1448 for (
const auto& entry: dotsByMaterial) {
1449 const auto& dots = entry.second;
1456 const auto& fullPVPath = pPVModel->GetFullPVPath();
1457 auto leafPV = fullPVPath.back().GetPhysicalVolume();
1458 leafPV->SetName(dots.GetInfo());
1468 pPVModel->GetFullPVPath().back().GetPhysicalVolume()->SetName(parameterisationName);
1483 ed <<
"Called with a mesh that is not rectangular:" << mesh;
1488 static G4bool firstPrint =
true;
1493 <<
"Special case drawing of 3D rectangular G4VNestedParameterisation as surfaces:"
1501 static std::map<G4String,std::map<const G4Material*,G4Polyhedron>> boxesByMaterialAndMesh;
1505 if (boxesByMaterial.empty()) {
1513 const G4bool useFullExtent =
true;
1521 std::multimap<const G4Material*,const G4ThreeVector> positionByMaterial;
1522 std::map<const G4Material*,G4VSceneHandler::NameAndVisAtts> nameAndVisAttsByMaterial;
1525 (&tmpPVModel,mesh.
GetMeshDepth(),positionByMaterial,nameAndVisAttsByMaterial);
1532 const auto& sizeX = 2.*prms.
fHalfX;
1533 const auto& sizeY = 2.*prms.fHalfY;
1534 const auto& sizeZ = 2.*prms.fHalfZ;
1537 G4int nBoxesTotal = 0, nFacetsTotal = 0;
1538 for (
const auto& entry: nameAndVisAttsByMaterial) {
1540 const auto& material = entry.first;
1541 const auto& nameAndVisAtts = nameAndVisAttsByMaterial[material];
1542 const auto& name = nameAndVisAtts.fName;
1543 const auto& visAtts = nameAndVisAtts.fVisAtts;
1545 std::vector<G4ThreeVector> positionsForPolyhedron;
1546 const auto& range = positionByMaterial.equal_range(material);
1547 for (
auto posByMat = range.first; posByMat != range.second; ++posByMat) {
1548 const auto&
position = posByMat->second;
1549 positionsForPolyhedron.push_back(
position);
1554 auto& polyhedron = boxesByMaterial[material];
1557 polyhedron.SetVisAttributes(visAtts);
1558 polyhedron.SetInfo(name);
1562 << std::setw(30) << std::left << name.substr(0,30) << std::right
1563 <<
": " << std::setw(7) << nBoxes <<
" boxes"
1564 <<
" (" << std::setw(7) << 6*nBoxes <<
" faces)"
1565 <<
": reduced to " << std::setw(7) << polyhedron.GetNoFacets() <<
" facets ("
1566 << std::setw(2) << std::fixed << std::setprecision(2) << 100*polyhedron.GetNoFacets()/(6*nBoxes)
1567 <<
"%): colour " << std::fixed << std::setprecision(2)
1568 << visAtts.GetColour() << std::defaultfloat
1572 nBoxesTotal += nBoxes;
1573 nFacetsTotal += polyhedron.GetNoFacets();
1577 G4cout <<
"Total number of boxes: " << nBoxesTotal <<
" (" << 6*nBoxesTotal <<
" faces)"
1578 <<
": reduced to " << nFacetsTotal <<
" facets ("
1579 << std::setw(2) << std::fixed << std::setprecision(2) << 100*nFacetsTotal/(6*nBoxesTotal) <<
"%)"
1589 parameterisationName = pPVModel->GetFullPVPath().back().GetPhysicalVolume()->GetName();
1595 for (
const auto& entry: boxesByMaterial) {
1596 const auto& poly = entry.second;
1603 const auto& fullPVPath = pPVModel->GetFullPVPath();
1604 auto leafPV = fullPVPath.back().GetPhysicalVolume();
1605 leafPV->SetName(poly.GetInfo());
1612 pPVModel->GetFullPVPath().back().GetPhysicalVolume()->SetName(parameterisationName);
1626 ed <<
"Called with mesh that is not a tetrahedron mesh:" << mesh;
1631 static G4bool firstPrint =
true;
1637 <<
"Special case drawing of tetrahedron mesh as dots"
1645 static std::map<G4String,std::map<const G4Material*,G4Polymarker>> dotsByMaterialAndMesh;
1649 if (dotsByMaterial.empty()) {
1657 const G4bool useFullExtent =
true;
1665 std::multimap<const G4Material*,std::vector<G4ThreeVector>> verticesByMaterial;
1666 std::map<const G4Material*,G4VSceneHandler::NameAndVisAtts> nameAndVisAttsByMaterial;
1669 (&tmpPVModel,mesh.
GetMeshDepth(),verticesByMaterial,nameAndVisAttsByMaterial);
1676 G4int nDotsTotal = 0;
1677 for (
const auto& entry: nameAndVisAttsByMaterial) {
1679 const auto& material = entry.first;
1680 const auto& nameAndVisAtts = nameAndVisAttsByMaterial[material];
1681 const auto& name = nameAndVisAtts.fName;
1682 const auto& visAtts = nameAndVisAtts.fVisAtts;
1689 dotsByMaterial[material] = dots;
1691 auto& dotsInMap = dotsByMaterial[material];
1692 const auto& range = verticesByMaterial.equal_range(material);
1693 for (
auto vByMat = range.first; vByMat != range.second; ++vByMat) {
1700 << std::setw(30) << std::left << name.substr(0,30) << std::right
1701 <<
": " << std::setw(7) << nDots <<
" dots"
1702 <<
": colour " << std::fixed << std::setprecision(2)
1703 << visAtts.GetColour() << std::defaultfloat
1707 nDotsTotal += nDots;
1711 G4cout <<
"Total number of dots: " << nDotsTotal <<
G4endl;
1720 parameterisationName = pPVModel->GetFullPVPath().back().GetPhysicalVolume()->GetName();
1732 for (
const auto& entry: dotsByMaterial) {
1733 const auto& dots = entry.second;
1740 const auto& fullPVPath = pPVModel->GetFullPVPath();
1741 auto leafPV = fullPVPath.back().GetPhysicalVolume();
1742 leafPV->SetName(dots.GetInfo());
1752 pPVModel->GetFullPVPath().back().GetPhysicalVolume()->SetName(parameterisationName);
1766 ed <<
"Called with mesh that is not a tetrahedron mesh:" << mesh;
1771 static G4bool firstPrint =
true;
1777 <<
"Special case drawing of tetrahedron mesh as surfaces"
1783 static std::map<G4String,std::map<const G4Material*,G4Polyhedron>> surfacesByMaterialAndMesh;
1787 if (surfacesByMaterial.empty()) {
1795 const G4bool useFullExtent =
true;
1803 std::multimap<const G4Material*,std::vector<G4ThreeVector>> verticesByMaterial;
1804 std::map<const G4Material*,G4VSceneHandler::NameAndVisAtts> nameAndVisAttsByMaterial;
1807 (&tmpPVModel,mesh.
GetMeshDepth(),verticesByMaterial,nameAndVisAttsByMaterial);
1814 G4int nTetsTotal = 0, nFacetsTotal = 0;
1815 for (
const auto& entry: nameAndVisAttsByMaterial) {
1817 const auto& material = entry.first;
1818 const auto& nameAndVisAtts = nameAndVisAttsByMaterial[material];
1819 const auto& name = nameAndVisAtts.fName;
1820 const auto& visAtts = nameAndVisAtts.fVisAtts;
1822 std::vector<G4ThreeVector> verticesForPolyhedron;
1823 const auto& range = verticesByMaterial.equal_range(material);
1824 for (
auto vByMat = range.first; vByMat != range.second; ++vByMat) {
1825 const std::vector<G4ThreeVector>& vertices = vByMat->second;
1826 for (
const auto& vertex: vertices)
1827 verticesForPolyhedron.push_back(vertex);
1832 auto& polyhedron = surfacesByMaterial[material];
1835 polyhedron.SetVisAttributes(visAtts);
1836 polyhedron.SetInfo(name);
1840 << std::setw(30) << std::left << name.substr(0,30) << std::right
1841 <<
": " << std::setw(7) << nTets <<
" tetrahedra"
1842 <<
" (" << std::setw(7) << 4*nTets <<
" faces)"
1843 <<
": reduced to " << std::setw(7) << polyhedron.GetNoFacets() <<
" facets ("
1844 << std::setw(2) << std::fixed << std::setprecision(2) << 100*polyhedron.GetNoFacets()/(4*nTets)
1845 <<
"%): colour " << std::fixed << std::setprecision(2)
1846 << visAtts.GetColour() << std::defaultfloat
1850 nTetsTotal += nTets;
1851 nFacetsTotal += polyhedron.GetNoFacets();
1855 G4cout <<
"Total number of tetrahedra: " << nTetsTotal <<
" (" << 4*nTetsTotal <<
" faces)"
1856 <<
": reduced to " << nFacetsTotal <<
" facets ("
1857 << std::setw(2) << std::fixed << std::setprecision(2) << 100*nFacetsTotal/(4*nTetsTotal) <<
"%)"
1867 parameterisationName = pPVModel->GetFullPVPath().back().GetPhysicalVolume()->GetName();
1873 for (
const auto& entry: surfacesByMaterial) {
1874 const auto& poly = entry.second;
1881 const auto& fullPVPath = pPVModel->GetFullPVPath();
1882 auto leafPV = fullPVPath.back().GetPhysicalVolume();
1883 leafPV->SetName(poly.GetInfo());
1891 pPVModel->GetFullPVPath().back().GetPhysicalVolume()->SetName(parameterisationName);
1927 else if (p + q + r > 1.)
1934 return vertices[0]*a + vertices[1]*p + vertices[2]*q + vertices[3]*r;
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
HepGeom::Normal3D< G4double > G4Normal3D
HepGeom::Point3D< G4double > G4Point3D
CLHEP::Hep3Vector G4ThreeVector
std::ostream & operator<<(std::ostream &os, const G4VSceneHandler &sh)
HepGeom::Vector3D< G4double > G4Vector3D
std::vector< G4VViewer * >::iterator G4ViewerListIterator
void print(G4double elem)
G4GLOB_DLL std::ostream G4cout
void AddAtts(const std::vector< G4AttValue > *values, const std::map< G4String, G4AttDef > *defs)
const G4VHit * GetCurrentHit() const
G4VSolid * GetSolid() const
const G4VisAttributes * GetVisAttributes() const
G4Material * GetMaterial() const
MeshType GetMeshType() const
G4VPhysicalVolume * GetContainerVolume() const
const G4Transform3D & GetTransform() const
const ThreeDRectangleParameters & GetThreeDRectParameters() const
G4int GetMeshDepth() const
void SetCBDParameters(const std::vector< G4double > &)
void SetNumberOfCloudPoints(G4int)
void SetCBDAlgorithmNumber(G4int)
void SetExplodeFactor(G4double explodeFactor)
void SetVisAttributesModifiers(const std::vector< VisAttributesModifier > &)
void SetExplodeCentre(const G4Point3D &explodeCentre)
void SetCutawaySolid(G4DisplacedSolid *pCutawaySolid)
void SetSectionSolid(G4DisplacedSolid *pSectionSolid)
void SetEvent(const G4Event *pEvent)
void SetCullingInvisible(G4bool)
void SetSpecialMeshVolumes(const std::vector< PVNameCopyNo > &)
void SetSpecialMeshRendering(G4bool)
std::vector< G4AttValue > * CreateCurrentAttValues() const
void DescribeYourselfTo(G4VGraphicsScene &)
G4LogicalVolume * GetCurrentLV() const
const std::vector< G4PhysicalVolumeNodeID > & GetFullPVPath() const
const std::map< G4String, G4AttDef > * GetAttDefs() const
G4int GetCurrentDepth() const
void SetMarkerType(MarkerType)
MarkerType GetMarkerType() const
const G4Transform3D * fpCurrentObjectTransformation
static G4RunManager * GetMasterRunManager()
const G4Run * GetCurrentRun() const
const std::vector< const G4Event * > * GetEventVector() const
const std::vector< Model > & GetRunDurationModelList() const
G4bool GetRefreshAtEndOfEvent() const
const G4VisExtent & GetExtent() const
G4bool GetRefreshAtEndOfRun() const
G4VScoringMesh * GetMesh(G4int i) const
size_t GetNumberOfMesh() const
static G4ScoringManager * GetScoringManagerIfExist()
const G4ApplicationState & GetCurrentState() const
static G4StateManager * GetStateManager()
void GetVertices(G4ThreeVector &anchor, G4ThreeVector &p1, G4ThreeVector &p2, G4ThreeVector &p3) const
const G4VTrajectory * GetCurrentTrajectory() const
std::vector< G4AttValue > * CreateCurrentAttValues() const
const std::map< G4String, G4AttDef > * GetAttDefs() const
const G4String & GetName() const
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const
G4double GetScreenSize() const
void SetSize(SizeType, G4double)
void SetScreenSize(G4double)
void SetWorldSize(G4double)
void SetPosition(const G4Point3D &)
G4double GetWorldSize() const
void SetModelingParameters(const G4ModelingParameters *)
virtual void DescribeYourselfTo(G4VGraphicsScene &)=0
G4LogicalVolume * GetLogicalVolume() const
const G4String & GetName() const
virtual void BeginModeling()
G4int GetNumberOfCloudPoints(const G4VisAttributes *) const
G4int GetNoOfSides(const G4VisAttributes *)
void DrawTetMeshAsSurfaces(const G4Mesh &)
virtual void ClearTransientStore()
void LoadAtts(const G4Visible &, G4AttHolder *)
void DrawEvent(const G4Event *)
G4ModelingParameters * CreateModelingParameters()
const G4Colour & GetTextColour(const G4Text &)
const G4Colour & GetColour()
void Draw3DRectMeshAsDots(const G4Mesh &)
void AddSolidT(const T &solid)
G4Transform3D fObjectTransformation
virtual void EndPrimitives()
G4bool fTransientsDrawnThisEvent
void AddSolidWithAuxiliaryEdges(const T &solid)
virtual G4DisplacedSolid * CreateSectionSolid()
virtual void EndModeling()
virtual const G4VisExtent & GetExtent() const
virtual void ProcessScene()
G4double GetMarkerSize(const G4VMarker &, MarkerSizeType &)
virtual void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &)
G4VSceneHandler(G4VGraphicsSystem &system, G4int id, const G4String &name="")
G4bool fTransientsDrawnThisRun
virtual void PostAddSolid()
const G4String & GetName() const
void AddViewerToList(G4VViewer *pView)
virtual void EndPrimitives2D()
virtual void SetScene(G4Scene *)
void DrawEndOfRunModels()
G4bool fMarkForClearingTransientStore
const G4VisAttributes * fpVisAttribs
virtual void BeginPrimitives2D(const G4Transform3D &objectTransformation=G4Transform3D())
G4ThreeVector GetPointInBox(const G4ThreeVector &pos, G4double halfX, G4double halfY, G4double halfZ) const
virtual void RequestPrimitives(const G4VSolid &solid)
G4bool fReadyForTransients
G4ViewParameters::DrawingStyle GetDrawingStyle(const G4VisAttributes *)
void RemoveViewerFromList(G4VViewer *pView)
virtual G4DisplacedSolid * CreateCutawaySolid()
void DrawTetMeshAsDots(const G4Mesh &)
virtual void BeginPrimitives(const G4Transform3D &objectTransformation=G4Transform3D())
G4double GetLineWidth(const G4VisAttributes *)
G4ThreeVector GetPointInTet(const std::vector< G4ThreeVector > &vertices) const
G4VGraphicsSystem & fSystem
virtual void AddSolid(const G4Box &)
virtual void ClearStore()
void Draw3DRectMeshAsSurfaces(const G4Mesh &)
virtual void AddCompound(const G4VTrajectory &)
virtual ~G4VSceneHandler()
virtual void AddPrimitive(const G4Polyline &)=0
G4bool GetAuxEdgeVisible(const G4VisAttributes *)
void StandardSpecialMeshRendering(const G4Mesh &)
std::map< G4String, RunScore * > MeshScoreMap
void DrawMesh(const G4String &psName, G4VScoreColorMap *colorMap, G4int axflg=111)
MeshScoreMap GetScoreMap() const
virtual G4ThreeVector GetPointOnSurface() const
virtual G4Polyhedron * GetPolyhedron() const
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const
virtual G4VTrajectoryPoint * GetPoint(G4int i) const =0
virtual G4int GetPointEntries() const =0
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual void DrawTrajectory() const
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const
const G4VisAttributes * GetApplicableVisAttributes(const G4VisAttributes *) const
const G4ViewParameters & GetViewParameters() const
void SetViewParameters(const G4ViewParameters &vp)
static G4VVisManager * GetConcreteInstance()
const std::vector< G4ModelingParameters::VisAttributesModifier > & GetVisAttributesModifiers() const
G4int GetNoOfSides() const
G4bool IsSpecialMeshRendering() const
CutawayMode GetCutawayMode() const
G4double GetExplodeFactor() const
G4int GetNumberOfCloudPoints() const
const G4VisAttributes * GetDefaultTextVisAttributes() const
const std::vector< G4double > & GetCBDParameters() const
G4int GetCBDAlgorithmNumber() const
const std::vector< G4ModelingParameters::PVNameCopyNo > & GetSpecialMeshVolumes() const
G4bool IsCullingInvisible() const
const G4VisAttributes * GetDefaultVisAttributes() const
const G4Planes & GetCutawayPlanes() const
G4bool IsDensityCulling() const
G4double GetVisibleDensity() const
SMROption GetSpecialMeshRenderingOption() const
const G4Point3D & GetExplodeCentre() const
G4bool IsCullingCovered() const
const G4Plane3D & GetSectionPlane() const
DrawingStyle GetDrawingStyle() const
G4bool IsAuxEdgeVisible() const
const std::map< G4String, G4AttDef > * GetAttDefs() const
G4bool IsForceLineSegmentsPerCircle() const
G4double GetLineWidth() const
void SetColour(const G4Colour &)
void SetVisibility(G4bool=true)
void SetForceAuxEdgeVisible(G4bool=true)
G4int GetForcedLineSegmentsPerCircle() const
void SetForceWireframe(G4bool=true)
const std::vector< G4AttValue > * CreateAttValues() const
const G4Colour & GetColour() const
G4bool IsForceAuxEdgeVisible() const
G4bool IsForcedAuxEdgeVisible() const
static G4int GetMinLineSegmentsPerCircle()
static const G4VisExtent & GetNullExtent()
G4double GetExtentRadius() const
const G4Point3D & GetExtentCentre() const
void SetEventRefreshing(G4bool)
G4bool GetTransientsDrawnThisEvent() const
G4bool GetTransientsDrawnThisRun() const
static Verbosity GetVerbosity()
const G4Event * GetRequestedEvent() const
static G4VisManager * GetInstance()
void SetVisAttributes(const G4VisAttributes *)
const G4VisAttributes * GetVisAttributes() const
virtual void SetInfo(const G4String &info)
BasicVector3D< T > cross(const BasicVector3D< T > &v) const
T dot(const BasicVector3D< T > &v) const
static void SetNumberOfRotationSteps(G4int n)
static void ResetNumberOfRotationSteps()
const char * name(G4int ptype)