26 #ifdef G4VIS_BUILD_OI_DRIVER
36 #include <HEPVis/nodes/SoMarkerSet.h>
38 #include <Inventor/errors/SoDebugError.h>
39 #include <Inventor/misc/SoState.h>
40 #include <Inventor/actions/SoGLRenderAction.h>
41 #include <Inventor/nodes/SoPointSet.h>
43 #include <Inventor/elements/SoCoordinateElement.h>
44 #include <Inventor/elements/SoCacheElement.h>
45 #include <Inventor/elements/SoLazyElement.h>
47 #include <HEPVis/SbGL.h>
48 #include <HEPVis/actions/SoGL2PSAction.h>
50 static void drawMarker(SoAction*,
int);
51 static GLubyte* getBitmap(
int,
int,
char []);
75 static char plus_5_5[] = {
82 static char asterisk_5_5[] = {
89 static char cross_5_5[] = {
96 static char star_5_5[] = {
103 static char circle_line_5_5[] = {
110 static char circle_filled_5_5[] = {
117 static char triangle_up_line_5_5[] = {
124 static char triangle_up_filled_5_5[] = {
131 static char triangle_down_line_5_5[] = {
138 static char triangle_down_filled_5_5[] = {
145 static char david_star_line_5_5[] = {
152 static char david_star_filled_5_5[] = {
159 static char swiss_cross_line_5_5[] = {
166 static char swiss_cross_filled_5_5[] = {
173 static char diamond_line_5_5[] = {
180 static char diamond_filled_5_5[] = {
187 static char square_line_5_5[] = {
194 static char square_filled_5_5[] = {
204 static char plus_7_7[] = {
213 static char asterisk_7_7[] = {
222 static char cross_7_7[] = {
231 static char star_7_7[] = {
240 static char circle_line_7_7[] = {
249 static char circle_filled_7_7[] = {
258 static char triangle_up_line_7_7[] = {
267 static char triangle_up_filled_7_7[] = {
276 static char triangle_down_line_7_7[] = {
285 static char triangle_down_filled_7_7[] = {
294 static char david_star_line_7_7[] = {
303 static char david_star_filled_7_7[] = {
312 static char swiss_cross_line_7_7[] = {
321 static char swiss_cross_filled_7_7[] = {
330 static char diamond_line_7_7[] = {
339 static char diamond_filled_7_7[] = {
348 static char square_line_7_7[] = {
357 static char square_filled_7_7[] = {
370 static char plus_9_9[] = {
381 static char asterisk_9_9[] = {
392 static char cross_9_9[] = {
403 static char star_9_9[] = {
414 static char circle_line_9_9[] = {
425 static char circle_filled_9_9[] = {
436 static char triangle_up_line_9_9[] = {
447 static char triangle_up_filled_9_9[] = {
458 static char triangle_down_line_9_9[] = {
469 static char triangle_down_filled_9_9[] = {
480 static char david_star_line_9_9[] = {
491 static char david_star_filled_9_9[] = {
502 static char swiss_cross_line_9_9[] = {
513 static char swiss_cross_filled_9_9[] = {
524 static char diamond_line_9_9[] = {
535 static char diamond_filled_9_9[] = {
546 static char square_line_9_9[] = {
557 static char square_filled_9_9[] = {
569 static char* sFigures[54] = {
576 triangle_up_line_5_5,
577 triangle_up_filled_5_5,
578 triangle_down_line_5_5,
579 triangle_down_filled_5_5,
581 david_star_filled_5_5,
582 swiss_cross_line_5_5,
583 swiss_cross_filled_5_5,
594 triangle_up_line_7_7,
595 triangle_up_filled_7_7,
596 triangle_down_line_7_7,
597 triangle_down_filled_7_7,
599 david_star_filled_7_7,
600 swiss_cross_line_7_7,
601 swiss_cross_filled_7_7,
612 triangle_up_line_9_9,
613 triangle_up_filled_9_9,
614 triangle_down_line_9_9,
615 triangle_down_filled_9_9,
617 david_star_filled_9_9,
618 swiss_cross_line_9_9,
619 swiss_cross_filled_9_9,
626 SO_NODE_SOURCE(HEPVis_SoMarkerSet)
628 void HEPVis_SoMarkerSet::initClass (
633 SO_NODE_INIT_CLASS(HEPVis_SoMarkerSet,SoPointSet,
"PointSet");
636 HEPVis_SoMarkerSet::HEPVis_SoMarkerSet (
641 SO_NODE_CONSTRUCTOR(HEPVis_SoMarkerSet);
643 SO_NODE_ADD_FIELD(markerIndex,(CROSS_5_5));
646 HEPVis_SoMarkerSet::~HEPVis_SoMarkerSet (
653 void HEPVis_SoMarkerSet::GLRender (
654 SoGLRenderAction* aAction
659 SoState* state = aAction->getState();
661 const SoCoordinateElement* coordinateElement =
662 SoCoordinateElement::getInstance(state);
663 if(coordinateElement==NULL)
return;
665 if(aAction->isOfType(SoGL2PSAction::getClassTypeId())) {
666 SoCacheElement::invalidate(state);
669 const SbColor& color = SoLazyElement::getDiffuse(aAction->getState(),0);
671 color.getValue(red,green,blue);
673 int mark = markerIndex[0];
675 int starti = startIndex.getValue();
676 int pointn = numPoints.getValue();
679 glPushAttrib( (GLbitfield)(GL_CURRENT_BIT | GL_ENABLE_BIT));
680 glDisable(GL_LIGHTING);
681 glColor3f(red,green,blue);
685 glDisable(GL_DEPTH_TEST);
688 glPixelStorei(GL_UNPACK_ALIGNMENT,1);
689 for(pointi=starti;pointi<pointn;pointi++){
690 const SbVec3f& vec = coordinateElement->get3(pointi);
691 glRasterPos3f(vec[0],vec[1],vec[2]);
699 drawMarker(aAction,mark);
713 GLfloat xorig = 0,yorig = 0;
714 GLfloat xmove = 0,ymove = 0;
716 if((aStyle>=0)&&(aStyle<18)) {
719 GLubyte* bitmap = getBitmap(w,h,sFigures[aStyle]);
720 glBitmap(w,h,xorig,yorig,0.,0.,bitmap);
722 }
else if((aStyle>=18)&&(aStyle<36)) {
725 GLubyte* bitmap = getBitmap(w,h,sFigures[aStyle]);
726 glBitmap(w,h,xorig,yorig,0.,0.,bitmap);
728 }
else if((aStyle>=36)&&(aStyle<54)) {
731 GLubyte* bitmap = getBitmap(w,h,sFigures[aStyle]);
732 glBitmap(w,h,xorig,yorig,0.,0.,bitmap);
738 if(aAction->isOfType(SoGL2PSAction::getClassTypeId())) {
739 ((SoGL2PSAction*)aAction)->addBitmap(w,h,xorig,yorig,xmove,ymove);
753 GLubyte* bitmap =
new GLubyte[aW * aH + 1];
756 unsigned char byte = 0;
757 for (
int row = 0; row < aH; row++ ){
758 for (
int col = 0; col < aW; col++){
759 unsigned char c = aFigure[ichar];
764 byte += (1<<(7-ibit));
771 bitmap[index] = byte;
782 bitmap[index] = byte;