65#define PRECISION float
66#define BASETYPE Qt3DRender::QAttribute::Float
75 G4cout <<
"G4Qt3DSceneHandler::G4Qt3DSceneHandler called" <<
G4endl;
109 std::size_t nWorlds = transportationManager->
GetNoWorlds();
110 std::vector<G4VPhysicalVolume*>::iterator iterWorld
113 for (std::size_t i = 0; i < nWorlds; ++i, ++iterWorld) {
116 entity->setObjectName(
"G4Qt3DPORoot_"+QString(wrld->
GetName()));
131 newNode->setObjectName(name.c_str());
147 typedef std::vector<PVNodeID> PVPath;
162 std::size_t iWorld = 0;
163 for (; iWorld < nWorlds; ++iWorld) {
164 if (fullPVPath[0].GetPhysicalVolume() ==
167 if (iWorld == nWorlds) {
169 "World mis-match - not possible(!?)");
179 const std::size_t depth = fullPVPath.size();
180 std::size_t iDepth = 1;
181 while (iDepth < depth) {
182 const auto& children = node->children();
183 const G4int nChildren = children.size();
186 for (; iChild < nChildren; ++iChild) {
188 if (child->
GetPVNodeID() == fullPVPath[iDepth])
break;
190 if (iChild != nChildren) {
196 std::ostringstream oss;
199 newNode->setObjectName(oss.str().c_str());
228 static G4bool first =
true;
231 G4Exception(
"G4Qt3DSceneHandler::BeginPrimitives2D",
"qt3D-0001",
233 "2D drawing not yet implemented");
262 "G4Qt3DSceneHandler::AddPrimitive(const G4Polyline& polyline) called.\n"
267 if (polyline.size() == 0)
return;
271 static G4bool first =
true;
274 G4Exception(
"G4Qt3DSceneHandler::AddPrimitive(const G4Polyline&)",
276 "No available node!");
284 transform->setObjectName(
"transform");
286 auto polylineEntity =
new Qt3DCore::QEntity(currentNode);
287 polylineEntity->addComponent(transform);
289 const auto vertexByteSize = 3*
sizeof(
PRECISION);
291 const std::size_t nLines = polyline.size() - 1;
292 QByteArray polylineByteArray;
293 const auto polylineBufferByteSize = 2*nLines*vertexByteSize;
294 polylineByteArray.resize((
G4int)polylineBufferByteSize);
295 auto polylineBufferArray =
reinterpret_cast<PRECISION*
>(polylineByteArray.data());
297 for (std::size_t i = 0; i < nLines; ++i) {
298 polylineBufferArray[iLine++] = polyline[i].x();
299 polylineBufferArray[iLine++] = polyline[i].y();
300 polylineBufferArray[iLine++] = polyline[i].z();
301 polylineBufferArray[iLine++] = polyline[i+1].x();
302 polylineBufferArray[iLine++] = polyline[i+1].y();
303 polylineBufferArray[iLine++] = polyline[i+1].z();
305 auto polylineGeometry =
new Qt3DRender::QGeometry();
306 polylineGeometry->setObjectName(
"polylineGeometry");
307 auto polylineBuffer =
new Qt3DRender::QBuffer(polylineGeometry);
308 polylineBuffer->setObjectName(
"Polyline buffer");
309 polylineBuffer->setData(polylineByteArray);
311 auto polylineAtt =
new Qt3DRender::QAttribute;
312 polylineAtt->setObjectName(
"Position attribute");
313 polylineAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
314 polylineAtt->setBuffer(polylineBuffer);
315 polylineAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
316 polylineAtt->setVertexBaseType(
BASETYPE);
317 polylineAtt->setVertexSize(3);
318 polylineAtt->setCount((
G4int)nLines);
319 polylineAtt->setByteOffset(0);
320 polylineAtt->setByteStride(vertexByteSize);
324 polylineGeometry->addAttribute(polylineAtt);
326 auto material =
new Qt3DExtras::QDiffuseSpecularMaterial();
327 material->setObjectName(
"materialForPolyline");
329 material->setShininess(0.);
330 material->setSpecular(0.);
331 polylineEntity->addComponent(material);
333 auto renderer =
new Qt3DRender::QGeometryRenderer;
334 renderer->setObjectName(
"polylineWireframeRenderer");
335 renderer->setGeometry(polylineGeometry);
336 renderer->setVertexCount(2*(
G4int)nLines);
337 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Lines);
338 polylineEntity->addComponent(renderer);
343 if (polymarker.size() == 0)
return;
347 static G4bool first =
true;
350 G4Exception(
"G4Qt3DSceneHandler::AddPrimitive(const G4Polymarker&)",
352 "No available node!");
366 const std::size_t nDots = polymarker.size();
369 transform->setObjectName(
"transform");
371 auto polymarkerEntity =
new Qt3DCore::QEntity(currentNode);
372 polymarkerEntity->addComponent(transform);
374 const auto vertexByteSize = 3*
sizeof(
PRECISION);
376 QByteArray polymarkerByteArray;
377 const auto polymarkerBufferByteSize = nDots*vertexByteSize;
378 polymarkerByteArray.resize((
G4int)polymarkerBufferByteSize);
379 auto polymarkerBufferArray =
reinterpret_cast<PRECISION*
>(polymarkerByteArray.data());
381 for (std::size_t i = 0; i < polymarker.size(); ++i) {
382 polymarkerBufferArray[iMarker++] = polymarker[i].x();
383 polymarkerBufferArray[iMarker++] = polymarker[i].y();
384 polymarkerBufferArray[iMarker++] = polymarker[i].z();
386 auto polymarkerGeometry =
new Qt3DRender::QGeometry();
387 polymarkerGeometry->setObjectName(
"polymarkerGeometry");
388 auto polymarkerBuffer =
new Qt3DRender::QBuffer(polymarkerGeometry);
389 polymarkerBuffer->setObjectName(
"Polymarker buffer");
390 polymarkerBuffer->setData(polymarkerByteArray);
392 auto polymarkerAtt =
new Qt3DRender::QAttribute;
393 polymarkerAtt->setObjectName(
"Position attribute");
394 polymarkerAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
395 polymarkerAtt->setBuffer(polymarkerBuffer);
396 polymarkerAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
397 polymarkerAtt->setVertexBaseType(
BASETYPE);
398 polymarkerAtt->setVertexSize(3);
399 polymarkerAtt->setCount((
G4int)nDots);
400 polymarkerAtt->setByteOffset(0);
401 polymarkerAtt->setByteStride(vertexByteSize);
405 polymarkerGeometry->addAttribute(polymarkerAtt);
407 auto material =
new Qt3DExtras::QDiffuseSpecularMaterial();
408 material->setObjectName(
"materialForPolymarker");
410 material->setShininess(0.);
411 material->setSpecular(0.);
412 polymarkerEntity->addComponent(material);
414 auto renderer =
new Qt3DRender::QGeometryRenderer;
415 renderer->setObjectName(
"polymarkerWireframeRenderer");
416 renderer->setGeometry(polymarkerGeometry);
417 renderer->setVertexCount((
G4int)nDots);
418 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Points);
419 polymarkerEntity->addComponent(renderer);
427 auto material =
new Qt3DExtras::QDiffuseSpecularMaterial();
428 material->setObjectName(
"materialForCircle");
430 if (colour.GetAlpha() < 1.) material->setAlphaBlendingEnabled(
true);
432 auto sphereMesh =
new Qt3DExtras::QSphereMesh;
433 sphereMesh->setObjectName(
"sphereMesh");
440 sphereMesh->setRadius(radius);
444 for (std::size_t iPoint = 0; iPoint < polymarker.size(); ++iPoint) {
447 auto currentEntity =
new Qt3DCore::QEntity(currentNode);
448 currentEntity->addComponent(material);
449 currentEntity->addComponent(transform);
450 currentEntity->addComponent(sphereMesh);
459 auto material =
new Qt3DExtras::QDiffuseSpecularMaterial();
460 material->setObjectName(
"materialForSquare");
462 if (colour.GetAlpha() < 1.) material->setAlphaBlendingEnabled(
true);
464 auto boxMesh =
new Qt3DExtras::QCuboidMesh();
465 boxMesh->setObjectName(
"boxMesh");
472 boxMesh->setXExtent(side);
473 boxMesh->setYExtent(side);
474 boxMesh->setZExtent(side);
476 for (std::size_t iPoint = 0; iPoint < polymarker.size(); ++iPoint) {
479 auto currentEntity =
new Qt3DCore::QEntity(currentNode);
480 currentEntity->addComponent(material);
481 currentEntity->addComponent(transform);
482 currentEntity->addComponent(boxMesh);
492 "G4Qt3DSceneHandler::AddPrimitive(const G4Text& text) called.\n"
499 static G4bool first =
true;
502 G4Exception(
"G4Qt3DSceneHandler::AddPrimitive(const G4Text&)",
504 "Text drawing doesn't work yet");
564 "G4Qt3DSceneHandler::AddPrimitive(const G4Circle& circle) called.\n"
588 static G4bool first =
true;
591 G4Exception(
"G4Qt3DSceneHandler::AddPrimitive(const G4Circle&)",
593 "No available node!");
604 auto material =
new Qt3DExtras::QDiffuseSpecularMaterial();
605 material->setObjectName(
"materialForCircle");
607 if (colour.GetAlpha() < 1.) material->setAlphaBlendingEnabled(
true);
609 auto sphereMesh =
new Qt3DExtras::QSphereMesh;
610 sphereMesh->setObjectName(
"sphereMesh");
619 sphereMesh->setRadius(radius);
621 auto currentEntity =
new Qt3DCore::QEntity(currentNode);
622 currentEntity->addComponent(material);
623 currentEntity->addComponent(transform);
624 currentEntity->addComponent(sphereMesh);
631 "G4Qt3DSceneHandler::AddPrimitive(const G4Square& square) called.\n"
655 static G4bool first =
true;
658 G4Exception(
"G4Qt3DSceneHandler::AddPrimitive(const G4Square&)",
660 "No available node!");
671 auto material =
new Qt3DExtras::QDiffuseSpecularMaterial();
672 material->setObjectName(
"materialForSquare");
674 if (colour.GetAlpha() < 1.) material->setAlphaBlendingEnabled(
true);
676 auto boxMesh =
new Qt3DExtras::QCuboidMesh();
677 boxMesh->setObjectName(
"boxMesh");
686 boxMesh->setXExtent(side);
687 boxMesh->setYExtent(side);
688 boxMesh->setZExtent(side);
690 auto currentEntity =
new Qt3DCore::QEntity(currentNode);
691 currentEntity->addComponent(material);
692 currentEntity->addComponent(transform);
693 currentEntity->addComponent(boxMesh);
700 static G4bool first =
true;
703 G4Exception(
"G4Qt3DSceneHandler::AddPrimitive(const G4Polyhedron&)",
705 "No available node!");
721 std::vector<G4Point3D> vertices;
722 std::vector<G4Normal3D> normals;
726 typedef std::pair<G4Point3D,G4Point3D> Line;
727 std::vector<Line> lines;
728 auto insertIfNew = [&lines](
const Line& newLine) {
737 lines.push_back(newLine);
747 notLastFace = polyhedron.
GetNextFacet(nEdges, vertex, edgeFlag, normal);
748 vertices.push_back(vertex[0]);
749 vertices.push_back(vertex[1]);
750 vertices.push_back(vertex[2]);
751 normals.push_back(normal[0]);
752 normals.push_back(normal[1]);
753 normals.push_back(normal[2]);
754 if(isAuxilaryEdgeVisible||edgeFlag[0]>0)insertIfNew(Line(vertex[0],vertex[1]));
755 if(isAuxilaryEdgeVisible||edgeFlag[1]>0)insertIfNew(Line(vertex[1],vertex[2]));
759 if(isAuxilaryEdgeVisible||edgeFlag[2]>0)insertIfNew(Line(vertex[2],vertex[0]));
760 }
else if (nEdges == 4) {
763 vertices.push_back(vertex[2]);
764 vertices.push_back(vertex[3]);
765 vertices.push_back(vertex[0]);
766 normals.push_back(normal[2]);
767 normals.push_back(normal[3]);
768 normals.push_back(normal[0]);
769 if(isAuxilaryEdgeVisible||edgeFlag[2]>0)insertIfNew(Line(vertex[2],vertex[3]));
770 if(isAuxilaryEdgeVisible||edgeFlag[3]>0)insertIfNew(Line(vertex[3],vertex[0]));
773 <<
"ERROR: polyhedron face with unexpected number of edges (" << nEdges <<
')'
778 }
while (notLastFace);
779 const auto nVerts = vertices.size();
780 const auto nLines = lines.size();
785 transform->setObjectName(
"transform");
787 Qt3DCore::QEntity* wireframeEntity =
nullptr;
788 Qt3DCore::QEntity* surfaceEntity =
nullptr;
789 static G4int errorCount = 0;
791 switch (drawing_style) {
793 wireframeEntity =
new Qt3DCore::QEntity(currentNode);
794 wireframeEntity->addComponent(transform);
797 wireframeEntity =
new Qt3DCore::QEntity(currentNode);
798 wireframeEntity->addComponent(transform);
799 surfaceEntity =
new Qt3DCore::QEntity(currentNode);
800 surfaceEntity->addComponent(transform);
803 surfaceEntity =
new Qt3DCore::QEntity(currentNode);
804 surfaceEntity->addComponent(transform);
807 wireframeEntity =
new Qt3DCore::QEntity(currentNode);
808 wireframeEntity->addComponent(transform);
809 surfaceEntity =
new Qt3DCore::QEntity(currentNode);
810 surfaceEntity->addComponent(transform);
814 if (errorCount == 0) {
816 G4warn <<
"WARNING: Qt3D: cloud drawing not implemented" <<
G4endl;
822 const auto vertexByteSize = 3*
sizeof(
PRECISION);
824 Qt3DRender::QGeometry* vertexGeometry =
nullptr;
825 Qt3DRender::QGeometry* lineGeometry =
nullptr;
827 Qt3DRender::QAttribute* positionAtt =
nullptr;
828 Qt3DRender::QAttribute* normalAtt =
nullptr;
829 Qt3DRender::QAttribute* lineAtt =
nullptr;
831 Qt3DRender::QBuffer* vertexBuffer =
nullptr;
838 QByteArray vertexByteArray;
839 const auto vertexBufferByteSize = 2*nVerts*vertexByteSize;
840 vertexByteArray.resize((
G4int)vertexBufferByteSize);
841 auto vertexBufferArray =
reinterpret_cast<PRECISION*
>(vertexByteArray.data());
843 for (std::size_t i = 0; i < nVerts; ++i) {
844 vertexBufferArray[i1++] = vertices[i].x();
845 vertexBufferArray[i1++] = vertices[i].y();
846 vertexBufferArray[i1++] = vertices[i].z();
847 vertexBufferArray[i1++] = normals[i].x();
848 vertexBufferArray[i1++] = normals[i].y();
849 vertexBufferArray[i1++] = normals[i].z();
852 vertexGeometry =
new Qt3DRender::QGeometry();
853 vertexGeometry->setObjectName(
"vertexGeometry");
854 vertexBuffer =
new Qt3DRender::QBuffer(vertexGeometry);
855 vertexBuffer->setObjectName(
"Vertex buffer");
856 vertexBuffer->setData(vertexByteArray);
859 positionAtt =
new Qt3DRender::QAttribute;
860 positionAtt->setObjectName(
"Position attribute");
861 positionAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
862 positionAtt->setBuffer(vertexBuffer);
863 positionAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
864 positionAtt->setVertexBaseType(
BASETYPE);
865 positionAtt->setVertexSize(3);
866 positionAtt->setCount((
G4int)nVerts);
867 positionAtt->setByteOffset(0);
868 positionAtt->setByteStride(2*vertexByteSize);
871 normalAtt =
new Qt3DRender::QAttribute;
872 normalAtt->setObjectName(
"Normal attribute");
873 normalAtt->setName(Qt3DRender::QAttribute::defaultNormalAttributeName());
874 normalAtt->setBuffer(vertexBuffer);
875 normalAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
876 normalAtt->setVertexBaseType(
BASETYPE);
877 normalAtt->setVertexSize(3);
878 normalAtt->setCount((
G4int)nVerts);
879 normalAtt->setByteOffset(vertexByteSize);
880 normalAtt->setByteStride(2*vertexByteSize);
883 Qt3DRender::QBuffer* lineBuffer =
nullptr;
889 QByteArray lineByteArray;
890 const auto lineBufferByteSize = 2*nLines*vertexByteSize;
891 lineByteArray.resize((
G4int)lineBufferByteSize);
892 auto lineBufferArray =
reinterpret_cast<PRECISION*
>(lineByteArray.data());
894 for (
const auto& line: lines) {
895 lineBufferArray[i2++] = line.first.x();
896 lineBufferArray[i2++] = line.first.y();
897 lineBufferArray[i2++] = line.first.z();
898 lineBufferArray[i2++] = line.second.x();
899 lineBufferArray[i2++] = line.second.y();
900 lineBufferArray[i2++] = line.second.z();
903 lineGeometry =
new Qt3DRender::QGeometry();
904 lineGeometry->setObjectName(
"lineGeometry");
905 lineBuffer =
new Qt3DRender::QBuffer(lineGeometry);
906 lineBuffer->setObjectName(
"Line buffer");
907 lineBuffer->setData(lineByteArray);
910 lineAtt =
new Qt3DRender::QAttribute;
911 lineAtt->setObjectName(
"Position attribute");
912 lineAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
913 lineAtt->setBuffer(lineBuffer);
914 lineAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute);
915 lineAtt->setVertexBaseType(
BASETYPE);
916 lineAtt->setVertexSize(3);
917 lineAtt->setCount((
G4int)nLines);
918 lineAtt->setByteOffset(0);
919 lineAtt->setByteStride(vertexByteSize);
925 Qt3DExtras::QDiffuseSpecularMaterial* material;
926 Qt3DRender::QGeometryRenderer* renderer;
927 switch (drawing_style) {
931 lineGeometry->addAttribute(lineAtt);
933 material =
new Qt3DExtras::QDiffuseSpecularMaterial();
934 material->setObjectName(
"materialForWireframe");
936 material->setShininess(0.);
937 material->setSpecular(0.);
938 wireframeEntity->addComponent(material);
940 renderer =
new Qt3DRender::QGeometryRenderer;
941 renderer->setObjectName(
"polyhedronWireframeRenderer");
942 renderer->setGeometry(lineGeometry);
943 renderer->setVertexCount(2*(
G4int)nLines);
944 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Lines);
945 wireframeEntity->addComponent(renderer);
953 vertexGeometry->addAttribute(positionAtt);
954 vertexGeometry->addAttribute(normalAtt);
956 material =
new Qt3DExtras::QDiffuseSpecularMaterial();
957 material->setObjectName(
"materialForHiddenLines");
958 material->setAmbient(Qt::white);
959 material->setShininess(0.);
960 material->setSpecular(0.);
961 surfaceEntity->addComponent(material);
963 renderer =
new Qt3DRender::QGeometryRenderer;
964 renderer->setObjectName(
"polyhedronSurfaceRenderer");
965 renderer->setGeometry(vertexGeometry);
966 renderer->setVertexCount((
G4int)nVerts);
967 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Triangles);
968 surfaceEntity->addComponent(renderer);
972 lineGeometry->addAttribute(lineAtt);
974 material =
new Qt3DExtras::QDiffuseSpecularMaterial();
975 material->setObjectName(
"materialForWireFrame");
977 material->setShininess(0.);
978 material->setSpecular(0.);
979 wireframeEntity->addComponent(material);
981 renderer =
new Qt3DRender::QGeometryRenderer;
982 renderer->setObjectName(
"polyhedronWireframeRenderer");
983 renderer->setGeometry(lineGeometry);
984 renderer->setVertexCount(2*(
G4int)nLines);
985 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Lines);
986 wireframeEntity->addComponent(renderer);
992 vertexGeometry->addAttribute(positionAtt);
993 vertexGeometry->addAttribute(normalAtt);
995 material =
new Qt3DExtras::QDiffuseSpecularMaterial();
996 material->setObjectName(
"materialForSurface");
998 if (colour.GetAlpha() < 1.) material->setAlphaBlendingEnabled(
true);
999 surfaceEntity->addComponent(material);
1001 renderer =
new Qt3DRender::QGeometryRenderer;
1002 renderer->setObjectName(
"polyhedronSurfaceRenderer");
1003 renderer->setGeometry(vertexGeometry);
1004 renderer->setVertexCount((
G4int)nVerts);
1005 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Triangles);
1006 surfaceEntity->addComponent(renderer);
1014 vertexGeometry->addAttribute(positionAtt);
1015 vertexGeometry->addAttribute(normalAtt);
1017 material =
new Qt3DExtras::QDiffuseSpecularMaterial();
1018 material->setObjectName(
"materialForSurface");
1020 if (colour.GetAlpha() < 1.) material->setAlphaBlendingEnabled(
true);
1021 surfaceEntity->addComponent(material);
1023 renderer =
new Qt3DRender::QGeometryRenderer;
1024 renderer->setObjectName(
"polyhedronSurfaceRenderer");
1025 renderer->setGeometry(vertexGeometry);
1026 renderer->setVertexCount((
G4int)nVerts);
1027 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Triangles);
1028 surfaceEntity->addComponent(renderer);
1032 lineGeometry->addAttribute(lineAtt);
1034 material =
new Qt3DExtras::QDiffuseSpecularMaterial();
1035 material->setObjectName(
"materialForWireframe");
1037 material->setShininess(0.);
1038 material->setSpecular(0.);
1039 wireframeEntity->addComponent(material);
1041 renderer =
new Qt3DRender::QGeometryRenderer;
1042 renderer->setObjectName(
"polyhedronSurfaceRenderer");
1043 renderer->setGeometry(lineGeometry);
1044 renderer->setVertexCount(2*(
G4int)nLines);
1045 renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Lines);
1046 wireframeEntity->addComponent(renderer);
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4GLOB_DLL std::ostream G4cout
G4VPhysicalVolume * GetPhysicalVolume() const
const std::vector< G4PhysicalVolumeNodeID > & GetFullPVPath() const
MarkerType GetMarkerType() const
void SetPVNodeID(const G4PhysicalVolumeModel::G4PhysicalVolumeNodeID &id)
const G4PhysicalVolumeModel::G4PhysicalVolumeNodeID & GetPVNodeID() const
void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &)
void BeginPrimitives2D(const G4Transform3D &objectTransformation)
virtual ~G4Qt3DSceneHandler()
Qt3DCore::QEntity * fpTransientObjects
std::vector< G4Qt3DQEntity * > fpPhysicalVolumeObjects
Qt3DCore::QEntity * fpQt3DScene
void AddCompound(const G4Mesh &)
void AddPrimitive(const G4Polyline &)
Qt3DCore::QEntity * fpPersistentObjects
void BeginPrimitives(const G4Transform3D &objectTransformation)
G4Qt3DSceneHandler(G4VGraphicsSystem &system, const G4String &name)
void ClearTransientStore()
static G4int fSceneIdCount
G4Qt3DQEntity * CreateNewNode()
void EstablishG4Qt3DQEntities()
const G4VisExtent & GetExtent() const
static G4TransportationManager * GetTransportationManager()
std::vector< G4VPhysicalVolume * >::iterator GetWorldsIterator()
std::size_t GetNoWorlds() const
SizeType GetSizeType() const
G4double GetScreenRadius() const
G4double GetWorldDiameter() const
G4Point3D GetPosition() const
G4double GetScreenDiameter() const
G4double GetWorldRadius() const
virtual G4String GetCurrentTag() const
const G4String & GetGlobalTag() const
const G4String & GetName() const
G4Transform3D fObjectTransformation
virtual void EndPrimitives()
G4double GetMarkerSize(const G4VMarker &, MarkerSizeType &)
virtual void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &)
virtual void PostAddSolid()
virtual void EndPrimitives2D()
const G4VisAttributes * fpVisAttribs
virtual void BeginPrimitives2D(const G4Transform3D &objectTransformation=G4Transform3D())
G4bool fReadyForTransients
G4ViewParameters::DrawingStyle GetDrawingStyle(const G4VisAttributes *)
virtual void BeginPrimitives(const G4Transform3D &objectTransformation=G4Transform3D())
void StandardSpecialMeshRendering(const G4Mesh &)
const G4VisAttributes * GetApplicableVisAttributes(const G4VisAttributes *) const
const G4ViewParameters & GetViewParameters() const
G4bool IsAuxEdgeVisible() const
const G4Colour & GetColour() const
G4double GetExtentRadius() const
const G4VisAttributes * GetVisAttributes() const
G4int GetNoFacets() const
G4bool GetNextFacet(G4int &n, G4Point3D *nodes, G4int *edgeFlags=nullptr, G4Normal3D *normals=nullptr) const
Qt3DCore::QTransform * CreateQTransformFrom(const G4Transform3D &)
QColor ConvertToQColor(const G4Colour &c)
void delete_components_and_children_of_entity_recursively(Qt3DCore::QNode *node)