65 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
66 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
67 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
68 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
69 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
70 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
71 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
72 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
73 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
74 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
75 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
76 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
77 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
78 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
79 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
80 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55
87#ifdef G4OPENGL_VERSION_2
88fEmulate_GL_QUADS(false),
91fThreePassCapable(false),
92fSecondPassForTransparencyRequested(false),
93fSecondPassForTransparency(false),
94fThirdPassForNonHiddenMarkersRequested(false),
95fThirdPassForNonHiddenMarkers(false),
107 std::map<GLuint, G4AttHolder*>::iterator i;
135 if (!modelingParameters) {
174 static G4int lastEventID = 0;
175 if (thisEventID != lastEventID) {
177 lastEventID = thisEventID;
188 static G4int lastRunID = 0;
189 if (thisRunID != lastRunID) {
191 lastRunID = thisRunID;
201 static G4int primitivesWaitingToBeFlushed = 0;
202 primitivesWaitingToBeFlushed++;
205 primitivesWaitingToBeFlushed = 0;
213 static G4int lastEventID = 0;
214 if (thisEventID != lastEventID) {
215 static G4int eventsWaitingToBeFlushed = 0;
216 eventsWaitingToBeFlushed++;
219 eventsWaitingToBeFlushed = 0;
220 lastEventID = thisEventID;
255 static G4int primitivesWaitingToBeFlushed = 0;
256 primitivesWaitingToBeFlushed++;
259 primitivesWaitingToBeFlushed = 0;
347 std::size_t nPoints = line.size ();
348 if (nPoints <= 0)
return;
352#ifndef G4OPENGL_VERSION_2
353 glDisable (GL_LIGHTING);
365#ifndef G4OPENGL_VERSION_2
366 glBegin (GL_LINE_STRIP);
371 for (std::size_t iPoint = 0; iPoint < nPoints; ++iPoint) {
373 x = line[iPoint].x();
374 y = line[iPoint].y();
375 z = line[iPoint].z();
376 glVertex3d (x, y, z);
380 glBeginVBO(GL_LINE_STRIP);
382 for (std::size_t iPoint = 0; iPoint < nPoints; ++iPoint) {
383 fOglVertex.push_back(line[iPoint].x());
384 fOglVertex.push_back(line[iPoint].y());
385 fOglVertex.push_back(line[iPoint].z());
387 fOglVertex.push_back(0);
388 fOglVertex.push_back(0);
389 fOglVertex.push_back(1);
398 if (polymarker.size() == 0) {
404#ifndef G4OPENGL_VERSION_2
405 glDisable (GL_LIGHTING);
416 if (!pGLViewer)
return;
418 if (sizeType ==
world) {
425 static G4bool hashedWarned =
false;
429 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
430 glEdgeFlag (GL_TRUE);
435 G4cout <<
"Hashed fill style in G4OpenGLSceneHandler."
436 <<
"\n Not implemented. Using G4VMarker::filled."
444 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
451 if (sizeType ==
world) {
471 fpViewer -> GetViewParameters().GetViewpointDirection();
473 const G4double dPhi = twopi / nSides;
478 for (
size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) {
480#ifndef G4OPENGL_VERSION_2
481 glBegin (GL_POLYGON);
482 for (i = 0, phi = startPhi; i < nSides; i++, phi += dPhi) {
485 glVertex3d (p.
x(), p.
y(), p.
z());
489 glBeginVBO (GL_TRIANGLE_STRIP);
490 for (i = 0, phi = startPhi; i < nSides; i++, phi += dPhi) {
494 fOglVertex.push_back(p.
x());
495 fOglVertex.push_back(p.
y());
496 fOglVertex.push_back(p.
z());
498 fOglVertex.push_back(0);
499 fOglVertex.push_back(0);
500 fOglVertex.push_back(1);
511#ifndef G4OPENGL_VERSION_2
516 glEnable (GL_POINT_SMOOTH);
break;
518 glDisable (GL_POINT_SMOOTH);
break;
521#ifndef G4OPENGL_VERSION_2
523 for (
size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) {
525 glVertex3d(centre.
x(),centre.
y(),centre.
z());
529 glBeginVBO(GL_POINTS);
531 for (
size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) {
532 fOglVertex.push_back(polymarker[iPoint].x());
533 fOglVertex.push_back(polymarker[iPoint].y());
534 fOglVertex.push_back(polymarker[iPoint].z());
535 fOglVertex.push_back(0);
536 fOglVertex.push_back(0);
537 fOglVertex.push_back(1);
547#ifdef G4OPENGL_VERSION_2
551 if (pGLViewer) pGLViewer->
DrawText(text);
581 if (!pGLViewer)
return;
591 GLfloat* painting_colour;
592 GLfloat clear_colour[4];
593 GLfloat current_colour[4];
594 glGetFloatv (GL_CURRENT_COLOR, current_colour);
596 G4bool isTransparent =
false;
597 if (current_colour[3] < 1.) {
598 isTransparent =
true;
603 glGetFloatv (GL_COLOR_CLEAR_VALUE, clear_colour);
604 painting_colour = clear_colour;
606 painting_colour = current_colour;
617#ifndef G4OPENGL_VERSION_2
618 glDisable (GL_LIGHTING);
621 switch (drawing_style) {
625 glEnable (GL_STENCIL_TEST);
628 glStencilFunc (GL_ALWAYS, 0, 1);
629 glStencilOp (GL_INVERT, GL_INVERT, GL_INVERT);
630 glEnable (GL_DEPTH_TEST);
631 glDepthFunc (GL_LEQUAL);
634 glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
635 glEnable(GL_COLOR_MATERIAL);
637 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
641 glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
642 glEnable(GL_COLOR_MATERIAL);
644 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
646 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
647 glEnable(GL_COLOR_MATERIAL);
650 glPolygonMode (GL_FRONT, GL_LINE);
655 glEnable (GL_DEPTH_TEST);
656 glDepthFunc (GL_LEQUAL);
659 glDepthMask (GL_FALSE);
660 glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
661#ifndef G4OPENGL_VERSION_2
662 glEnable(GL_COLOR_MATERIAL);
665 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
668 glDepthMask (GL_TRUE);
670 glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
671 glEnable(GL_COLOR_MATERIAL);
673 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
675 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
676#ifndef G4OPENGL_VERSION_2
677 glEnable(GL_COLOR_MATERIAL);
681 glPolygonMode (GL_FRONT, GL_FILL);
684#ifndef G4OPENGL_VERSION_2
690 glEnable (GL_DEPTH_TEST);
691 glDepthFunc (GL_LEQUAL);
693 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
699#ifndef G4OPENGL_VERSION_2
701 glEdgeFlag (GL_TRUE);
703 fEmulate_GL_QUADS =
true;
704 glBeginVBO(GL_TRIANGLE_STRIP);
714 notLastFace = polyhedron.
GetNextFacet(nEdges, vertex, edgeFlag, normals);
717 for(
G4int edgeCount = 0; edgeCount < nEdges; ++edgeCount) {
719 if (isAuxEdgeVisible) {
720 edgeFlag[edgeCount] = 1;
722#ifndef G4OPENGL_VERSION_2
723 if (edgeFlag[edgeCount] > 0) {
725 glEdgeFlag (GL_TRUE);
730 glEdgeFlag (GL_FALSE);
734 glNormal3d (normals[edgeCount].x(),
735 normals[edgeCount].y(),
736 normals[edgeCount].z());
737 glVertex3d (vertex[edgeCount].x(),
738 vertex[edgeCount].y(),
739 vertex[edgeCount].z());
742 fOglVertex.push_back(vertex[edgeCount].x());
743 fOglVertex.push_back(vertex[edgeCount].y());
744 fOglVertex.push_back(vertex[edgeCount].z());
746 fOglVertex.push_back(normals[edgeCount].x());
747 fOglVertex.push_back(normals[edgeCount].y());
748 fOglVertex.push_back(normals[edgeCount].z());
758 normals[edgeCount] = normals[0];
759 vertex[edgeCount] = vertex[0];
760#ifndef G4OPENGL_VERSION_2
761 edgeFlag[edgeCount] = -1;
763 glEdgeFlag (GL_FALSE);
767 glNormal3d (normals[edgeCount].x(),
768 normals[edgeCount].y(),
769 normals[edgeCount].z());
770 glVertex3d (vertex[edgeCount].x(),
771 vertex[edgeCount].y(),
772 vertex[edgeCount].z());
774 fOglVertex.push_back(vertex[edgeCount].x());
775 fOglVertex.push_back(vertex[edgeCount].y());
776 fOglVertex.push_back(vertex[edgeCount].z());
778 fOglVertex.push_back(normals[edgeCount].x());
779 fOglVertex.push_back(normals[edgeCount].y());
780 fOglVertex.push_back(normals[edgeCount].z());
787 "G4OpenGLSceneHandler::AddPrimitive(G4Polyhedron): WARNING"
788 "\n G4Polyhedron facet with " << nEdges <<
" edges" <<
G4endl;
796#ifndef G4OPENGL_VERSION_2
797 glDisable(GL_COLOR_MATERIAL);
800#ifndef G4OPENGL_VERSION_2
810 glDisable (GL_LIGHTING);
813 glStencilFunc (GL_EQUAL, 0, 1);
814 glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
818 glEnable (GL_DEPTH_TEST);
819 glDepthFunc (GL_LEQUAL);
822 glDepthMask (GL_FALSE);
824 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
827 glDepthMask (GL_TRUE);
830 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
834 glPolygonMode (GL_FRONT, GL_FILL);
840 goto end_of_drawing_through_stencil;
845 glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, painting_colour);
848 glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, painting_colour);
850 glColor4fv (painting_colour);
851#ifndef G4OPENGL_VERSION_2
853 glEdgeFlag (GL_TRUE);
856 fEmulate_GL_QUADS =
true;
857 glBeginVBO(GL_TRIANGLE_STRIP);
860 for (
int edgeCount = 0; edgeCount < 4; ++edgeCount) {
861#ifndef G4OPENGL_VERSION_2
862 if (edgeFlag[edgeCount] > 0) {
864 glEdgeFlag (GL_TRUE);
869 glEdgeFlag (GL_FALSE);
873 glNormal3d (normals[edgeCount].x(),
874 normals[edgeCount].y(),
875 normals[edgeCount].z());
876 glVertex3d (vertex[edgeCount].x(),
877 vertex[edgeCount].y(),
878 vertex[edgeCount].z());
880 fOglVertex.push_back(vertex[edgeCount].x());
881 fOglVertex.push_back(vertex[edgeCount].y());
882 fOglVertex.push_back(vertex[edgeCount].z());
884 fOglVertex.push_back(normals[edgeCount].x());
885 fOglVertex.push_back(normals[edgeCount].y());
886 fOglVertex.push_back(normals[edgeCount].z());
890#ifndef G4OPENGL_VERSION_2
895 end_of_drawing_through_stencil:
898 glStencilFunc (GL_ALWAYS, 0, 1);
899 glStencilOp (GL_INVERT, GL_INVERT, GL_INVERT);
900 glDepthFunc (GL_LEQUAL);
904 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
909 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
913 glPolygonMode (GL_FRONT, GL_LINE);
916 glDisable (GL_LIGHTING);
917 glColor4fv (current_colour);
919#ifndef G4OPENGL_VERSION_2
921 glEdgeFlag (GL_TRUE);
924 fEmulate_GL_QUADS =
true;
925 glBeginVBO(GL_TRIANGLE_STRIP);
927 for (
int edgeCount = 0; edgeCount < 4; ++edgeCount) {
928#ifndef G4OPENGL_VERSION_2
929 if (edgeFlag[edgeCount] > 0) {
931 glEdgeFlag (GL_TRUE);
936 glEdgeFlag (GL_FALSE);
940 glNormal3d (normals[edgeCount].x(),
941 normals[edgeCount].y(),
942 normals[edgeCount].z());
943 glVertex3d (vertex[edgeCount].x(),
944 vertex[edgeCount].y(),
945 vertex[edgeCount].z());
947 fOglVertex.push_back(vertex[edgeCount].x());
948 fOglVertex.push_back(vertex[edgeCount].y());
949 fOglVertex.push_back(vertex[edgeCount].z());
951 fOglVertex.push_back(normals[edgeCount].x());
952 fOglVertex.push_back(normals[edgeCount].y());
953 fOglVertex.push_back(normals[edgeCount].z());
957#ifndef G4OPENGL_VERSION_2
963 glDepthFunc (GL_LEQUAL);
965#ifndef G4OPENGL_VERSION_2
967 glEdgeFlag (GL_TRUE);
973 fEmulate_GL_QUADS =
true;
974 glBeginVBO(GL_TRIANGLE_STRIP);
977 }
while (notLastFace);
979#ifndef G4OPENGL_VERSION_2
987 GLenum oldDrawArrayType = fDrawArrayType;
996 fDrawArrayType = oldDrawArrayType;
999 glDisable (GL_STENCIL_TEST);
1000 glDepthMask (GL_TRUE);
1001#ifndef G4OPENGL_VERSION_2
1002 glDisable (GL_LIGHTING);
1030#ifdef G4OPENGL_VERSION_2
1033void G4OpenGLSceneHandler::OptimizeVBOForTrd(){
1038 std::vector<double> vertices;
1039 vertices.insert (vertices.end(),fOglVertex.begin(),fOglVertex.begin()+6*6);
1040 vertices.insert (vertices.end(),fOglVertex.begin()+9*6,fOglVertex.begin()+9*6+6);
1041 vertices.insert (vertices.end(),fOglVertex.begin()+13*6,fOglVertex.begin()+13*6+6);
1042 fOglVertex = vertices;
1045 3,2,0,1,4,5,7,6, 6,0,4,3,7,2,6,1,5
1047 fOglIndices.insert(fOglIndices.begin(), myarray, myarray+17);
1049 fDrawArrayType = GL_TRIANGLE_STRIP;
1053void G4OpenGLSceneHandler::OptimizeVBOForCons(
G4int aNoFaces){
1077 std::vector<double> vertices;
1081 vertices.insert (vertices.end(),fOglVertex.begin()+ (aNoFaces*4)*6,fOglVertex.begin()+(aNoFaces*4)*6+6);
1082 vertices.insert (vertices.end(),fOglVertex.begin()+ (aNoFaces*8+1)*6,fOglVertex.begin()+(aNoFaces*8+1)*6+6);
1086 for (
G4int a = 0; a<aNoFaces; a++) {
1087 posInVertice = a*4*6;
1088 vertices.insert (vertices.end(),fOglVertex.begin()+posInVertice,fOglVertex.begin()+posInVertice+1*6+6);
1090 vertices.insert (vertices.end(),fOglVertex.begin(),fOglVertex.begin()+1*6*6);
1091 fOglVertex = vertices;
1096 for (
G4int a=0; a<aNoFaces; a++) {
1097 fOglIndices.push_back(0);
1098 fOglIndices.push_back(a*2+2);
1101 fOglIndices.push_back(0);
1102 fOglIndices.push_back(2);
1105 for (
G4int a = 0; a<aNoFaces; a++) {
1106 fOglIndices.push_back(a*2+2);
1107 fOglIndices.push_back(a*2+1+2);
1109 fOglIndices.push_back(2);
1110 fOglIndices.push_back(2+1);
1114 for (
G4int a=0; a<aNoFaces; a++) {
1115 fOglIndices.push_back(a*2+3);
1116 fOglIndices.push_back(1);
1119 fOglIndices.push_back(0+3);
1121 fDrawArrayType = GL_TRIANGLE_STRIP;
1122 fEmulate_GL_QUADS =
false;
1125void G4OpenGLSceneHandler::glBeginVBO(GLenum type) {
1126 fDrawArrayType = type;
1127 glGenBuffers(1,&fVertexBufferObject);
1128 glGenBuffers(1,&fIndicesBufferObject);
1132 fOglIndices.clear();
1141void G4OpenGLSceneHandler::glEndVBO() {
1142 if (fOglIndices.size() == 0) {
1145 std::vector<double> vertices;
1147 if (fEmulate_GL_QUADS ==
true) {
1148 fEmulate_GL_QUADS =
false;
1165 for (
unsigned int a=0; a<fOglVertex.size(); a+=6*4) {
1166 vertices.insert (vertices.end(),fOglVertex.begin()+a,fOglVertex.begin()+a+1*6+6);
1169 if (a+4*6+5 < fOglVertex.size()) {
1170 if ((fOglVertex[a+2*6+0] != fOglVertex[a+5*6+0]) ||
1171 (fOglVertex[a+2*6+1] != fOglVertex[a+5*6+1]) ||
1172 (fOglVertex[a+2*6+2] != fOglVertex[a+5*6+2]) ||
1173 (fOglVertex[a+2*6+3] != fOglVertex[a+5*6+3]) ||
1174 (fOglVertex[a+2*6+4] != fOglVertex[a+5*6+4]) ||
1175 (fOglVertex[a+2*6+5] != fOglVertex[a+5*6+5]) ||
1177 (fOglVertex[a+3*6+0] != fOglVertex[a+4*6+0]) ||
1178 (fOglVertex[a+3*6+1] != fOglVertex[a+4*6+1]) ||
1179 (fOglVertex[a+3*6+2] != fOglVertex[a+4*6+2]) ||
1180 (fOglVertex[a+3*6+3] != fOglVertex[a+4*6+3]) ||
1181 (fOglVertex[a+3*6+4] != fOglVertex[a+4*6+4]) ||
1182 (fOglVertex[a+3*6+5] != fOglVertex[a+4*6+5])) {
1184 vertices.insert (vertices.end(),fOglVertex.begin()+a+3*6,fOglVertex.begin()+a+3*6+6);
1185 vertices.insert (vertices.end(),fOglVertex.begin()+a+2*6,fOglVertex.begin()+a+2*6+6);
1187 drawVBOArray(vertices);
1191 vertices.insert (vertices.end(),fOglVertex.begin()+a+3*6,fOglVertex.begin()+a+3*6+6);
1192 vertices.insert (vertices.end(),fOglVertex.begin()+a+2*6,fOglVertex.begin()+a+2*6+6);
1195 fOglVertex = vertices;
1198 drawVBOArray(fOglVertex);
1203 glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject);
1206 int sizeV = fOglVertex.size();
1209 glBufferData(GL_ARRAY_BUFFER,
sizeof(
double)*sizeV, &fOglVertex[0], GL_STATIC_DRAW);
1212 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, fIndicesBufferObject);
1215 int sizeI = fOglIndices.size();
1216 glBufferData(GL_ELEMENT_ARRAY_BUFFER,
sizeof(
int)*sizeI, &fOglIndices[0], GL_STATIC_DRAW);
1221 glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject);
1222 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, fIndicesBufferObject);
1227 glEnableVertexAttribArray(pGLViewer->fVertexPositionAttribute);
1229 glVertexAttribPointer(pGLViewer->fVertexPositionAttribute,
1241 glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject);
1242 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, fIndicesBufferObject);
1244 glDrawElements(fDrawArrayType, fOglIndices.size(), GL_UNSIGNED_SHORT, 0);
1247 glDisableVertexAttribArray(pGLViewer->fVertexPositionAttribute);
1251 glDeleteBuffers(1,&fVertexBufferObject);
1255void G4OpenGLSceneHandler::drawVBOArray(std::vector<double> vertices) {
1256 glGenBuffers(1,&fVertexBufferObject);
1257 glGenBuffers(1,&fIndicesBufferObject);
1260 glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject);
1262 int s = vertices.size();
1263 glBufferData(GL_ARRAY_BUFFER,
sizeof(
double)*s, &vertices[0], GL_STATIC_DRAW);
1268 glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject);
1273 glEnableVertexAttribArray(pGLViewer->fVertexPositionAttribute);
1283 glVertexAttribPointer(pGLViewer->fVertexPositionAttribute,
1294 glDrawArrays(fDrawArrayType,
1295 0, vertices.size()/6);
1297 glDisableClientState( GL_VERTEX_ARRAY );
1301 glDeleteBuffers(1,&fVertexBufferObject);
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
const G4Event * GetEvent() const
G4DisplacedSolid * CreateCutawaySolid()
virtual void EndPrimitives()
G4bool fThirdPassForNonHiddenMarkersRequested
void ClearAndDestroyAtts()
virtual void BeginPrimitives2D(const G4Transform3D &objectTransformation)
G4bool fThirdPassForNonHiddenMarkers
static FlushAction fFlushAction
static G4int fEntitiesFlushInterval
void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &)
void AddPrimitive(const G4Polyline &)
void AddCompound(const G4VTrajectory &)
virtual void EndPrimitives2D()
virtual void BeginPrimitives(const G4Transform3D &objectTransformation)
static const GLubyte fStippleMaskHashed[128]
G4bool fSecondPassForTransparency
virtual ~G4OpenGLSceneHandler()
G4DisplacedSolid * CreateSectionSolid()
G4OpenGLSceneHandler(G4VGraphicsSystem &system, G4int id, const G4String &name="")
std::map< GLuint, G4AttHolder * > fPickMap
G4bool fSecondPassForTransparencyRequested
void ChangeLineWidth(G4double width)
virtual void DrawText(const G4Text &)
void ChangePointSize(G4double size)
void SetMarkerType(MarkerType)
MarkerType GetMarkerType() const
static G4RunManager * GetMasterRunManager()
const G4Run * GetCurrentRun() const
G4bool GetRefreshAtEndOfEvent() const
G4bool GetRefreshAtEndOfRun() const
FillStyle GetFillStyle() const
G4Point3D GetPosition() const
const G4ModelingParameters * GetModelingParameters() const
G4int GetNoOfSides(const G4VisAttributes *)
virtual void EndPrimitives()
virtual G4DisplacedSolid * CreateSectionSolid()
virtual void ProcessScene()
G4double GetMarkerSize(const G4VMarker &, MarkerSizeType &)
virtual void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &)
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())
G4double GetLineWidth(const G4VisAttributes *)
virtual void ClearStore()
virtual void AddCompound(const G4VTrajectory &)
G4bool GetAuxEdgeVisible(const G4VisAttributes *)
void StandardSpecialMeshRendering(const G4Mesh &)
const G4ViewParameters & GetViewParameters() const
const G4Vector3D & GetUpVector() const
BasicVector3D< T > cross(const BasicVector3D< T > &v) const
BasicVector3D< T > & rotate(T a, const BasicVector3D< T > &v)
G4int GetNoFacets() const
G4bool GetNextFacet(G4int &n, G4Point3D *nodes, G4int *edgeFlags=nullptr, G4Normal3D *normals=nullptr) const