]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Add support for all variations of y-z plane rectangles.
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 17 Apr 2007 16:44:07 +0000 (16:44 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 17 Apr 2007 16:44:07 +0000 (16:44 +0000)
EVE/Reve/QuadSet.cxx
EVE/Reve/QuadSet.h
EVE/Reve/QuadSetGL.cxx

index 49c6d23613fb77074843de1bf5090b114d7e3b32..818b1beaf29b448c8de4f62ba78047e129683643 100644 (file)
@@ -167,11 +167,14 @@ void OldQuadSet::ComputeBBox()
 // QuadSet
 //
 // Supports various internal formats that result in rendering of a
-// set of rectangular objects.
+// set of planar (lines, rectangles, hegagons with shared normal) objects.
+//
+// Names of internal structures and their variables use A, B and C as
+// names for coordinate value-holders. Typical assignment is A->X,
+// B->Y, C->Z but each render mode can override this convention and
+// impose y or x as a fixed (third or C) coordinate. Alphabetic order
+// is obeyed in this correspondence.
 //
-// Names of internal structures and their variables use fixed
-// assignment to x, z, y coordinates; the render types can override
-// this convention and impose Y as a fixed coordinate.
 // For quad modes the deltas are expected to be positive.
 // For line modes negative deltas are ok.
 
@@ -249,12 +252,16 @@ Int_t QuadSet::SizeofAtom(QuadSet::QuadType_e qt)
   switch (qt) {
     case QT_Undef:                return 0;
     case QT_FreeQuad:             return sizeof(QFreeQuad);
-    case QT_RectangleXY:          return sizeof(QRect);
+    case QT_RectangleXY:
+    case QT_RectangleXZ:
+    case QT_RectangleYZ:          return sizeof(QRect);
     case QT_RectangleXYFixedDim:  return sizeof(QRectFixDim);
+    case QT_RectangleXYFixedZ:
     case QT_RectangleXZFixedY:
-    case QT_RectangleXYFixedZ:    return sizeof(QRectFixC);
+    case QT_RectangleYZFixedX:    return sizeof(QRectFixC);
+    case QT_RectangleXYFixedDimZ:
     case QT_RectangleXZFixedDimY:
-    case QT_RectangleXYFixedDimZ: return sizeof(QRectFixDimC);
+    case QT_RectangleYZFixedDimX: return sizeof(QRectFixDimC);
     case QT_LineXZFixedY:
     case QT_LineXYFixedZ:         return sizeof(QLineFixC);
     case QT_HexagonXY:
@@ -372,47 +379,51 @@ void QuadSet::AddQuad(Float_t* verts)
   memcpy(fq->fVertices, verts, sizeof(fq->fVertices));
 }
 
-void QuadSet::AddQuad(Float_t x, Float_t y)
+void QuadSet::AddQuad(Float_t a, Float_t b)
 {
-  AddQuad(x, y, fDefCoord, fDefWidth, fDefHeight);
+  AddQuad(a, b, fDefCoord, fDefWidth, fDefHeight);
 }
 
-void QuadSet::AddQuad(Float_t x, Float_t y, Float_t z)
+void QuadSet::AddQuad(Float_t a, Float_t b, Float_t c)
 {
-  AddQuad(x, y, z, fDefWidth, fDefHeight);
+  AddQuad(a, b, c, fDefWidth, fDefHeight);
 }
 
-void QuadSet::AddQuad(Float_t x, Float_t y, Float_t w, Float_t h)
+void QuadSet::AddQuad(Float_t a, Float_t b, Float_t w, Float_t h)
 {
-  AddQuad(x, y, fDefCoord, w, h);
+  AddQuad(a, b, fDefCoord, w, h);
 }
 
-void QuadSet::AddQuad(Float_t x, Float_t y, Float_t z, Float_t w, Float_t h)
+void QuadSet::AddQuad(Float_t a, Float_t b, Float_t c, Float_t w, Float_t h)
 {
   static const Exc_t eH("QuadSet::AddAAQuad ");
 
   QOrigin& fq = * (QOrigin*) NewQuad();
-  fq.fX = x; fq.fY = y;
+  fq.fA = a; fq.fB = b;
   switch (fQuadType)
   {
-    case QT_RectangleXY: {
+    case QT_RectangleXY:
+    case QT_RectangleXZ:
+    case QT_RectangleYZ: {
       QRect& q = (QRect&) fq;
-      q.fZ = z; q.fW = w; q.fH = h;
+      q.fC = c; q.fW = w; q.fH = h;
       break;
     }
     case QT_RectangleXYFixedDim: {
       QRectFixDim& q =  (QRectFixDim&) fq;
-      q.fZ = z;
+      q.fC = c;
       break;
     }
+    case QT_RectangleXYFixedZ:
     case QT_RectangleXZFixedY:
-    case QT_RectangleXYFixedZ: {
+    case QT_RectangleYZFixedX: {
       QRectFixC& q = (QRectFixC&) fq;
       q.fW = w; q.fH = h;
       break;
     }
+    case QT_RectangleXYFixedDimZ:
     case QT_RectangleXZFixedDimY:
-    case QT_RectangleXYFixedDimZ: {
+    case QT_RectangleYZFixedDimX: {
       break;
     }
     default:
@@ -420,12 +431,12 @@ void QuadSet::AddQuad(Float_t x, Float_t y, Float_t z, Float_t w, Float_t h)
   }
 }
 
-void QuadSet::AddLine(Float_t x, Float_t y, Float_t w, Float_t h)
+void QuadSet::AddLine(Float_t a, Float_t b, Float_t w, Float_t h)
 {
   static const Exc_t eH("QuadSet::AddLine ");
 
   QOrigin& fq = * (QOrigin*) NewQuad();
-  fq.fX = x; fq.fY = y;
+  fq.fA = a; fq.fB = b;
   switch (fQuadType)
   {
     case QT_LineXZFixedY:
@@ -439,18 +450,18 @@ void QuadSet::AddLine(Float_t x, Float_t y, Float_t w, Float_t h)
   }
 }
 
-void QuadSet::AddHexagon(Float_t x, Float_t y, Float_t z, Float_t r)
+void QuadSet::AddHexagon(Float_t a, Float_t b, Float_t c, Float_t r)
 {
   static const Exc_t eH("QuadSet::AddHexagon ");
 
   QOrigin& fq = * (QOrigin*) NewQuad();
-  fq.fX = x; fq.fY = y;
+  fq.fA = a; fq.fB = b;
   switch (fQuadType)
   {
     case QT_HexagonXY:
     case QT_HexagonYX: {
       QHex& q = (QHex&) fq;
-      q.fZ = z; q.fR = r;
+      q.fC = c; q.fR = r;
       break;
     }
     default:
@@ -546,6 +557,12 @@ void QuadSet::ComputeBBox()
       fBBox[2] = fDefCoord;
       fBBox[3] = fDefCoord;
     }
+    else if (fQuadType == QT_RectangleYZFixedX    ||
+            fQuadType == QT_RectangleYZFixedDimX)
+    {
+      fBBox[0] = fDefCoord;
+      fBBox[1] = fDefCoord;
+    }
 
     VoidCPlex::iterator qi(fPlex);
   
@@ -568,12 +585,40 @@ void QuadSet::ComputeBBox()
       {
        while (qi.next()) {
          QRect& q = * (QRect*) qi();
-         if(q.fX        < fBBox[0]) fBBox[0] = q.fX;
-         if(q.fX + q.fW > fBBox[1]) fBBox[1] = q.fX + q.fW;
-         if(q.fY        < fBBox[2]) fBBox[2] = q.fY;
-         if(q.fY + q.fH > fBBox[3]) fBBox[3] = q.fY + q.fH;
-         if(q.fZ        < fBBox[4]) fBBox[4] = q.fZ;
-         if(q.fZ        > fBBox[5]) fBBox[5] = q.fZ;
+         if(q.fA        < fBBox[0]) fBBox[0] = q.fA;
+         if(q.fA + q.fW > fBBox[1]) fBBox[1] = q.fA + q.fW;
+         if(q.fB        < fBBox[2]) fBBox[2] = q.fB;
+         if(q.fB + q.fH > fBBox[3]) fBBox[3] = q.fB + q.fH;
+         if(q.fC        < fBBox[4]) fBBox[4] = q.fC;
+         if(q.fC        > fBBox[5]) fBBox[5] = q.fC;
+       }
+       break;
+      }
+
+      case QT_RectangleXZ:
+      {
+       while (qi.next()) {
+         QRect& q = * (QRect*) qi();
+         if(q.fA        < fBBox[0]) fBBox[0] = q.fA;
+         if(q.fA + q.fW > fBBox[1]) fBBox[1] = q.fA + q.fW;
+         if(q.fB        < fBBox[4]) fBBox[4] = q.fB;
+         if(q.fB + q.fH > fBBox[5]) fBBox[5] = q.fB + q.fH;
+         if(q.fC        < fBBox[2]) fBBox[2] = q.fC;
+         if(q.fC        > fBBox[3]) fBBox[3] = q.fC;
+       }
+       break;
+      }
+
+      case QT_RectangleYZ:
+      {
+       while (qi.next()) {
+         QRect& q = * (QRect*) qi();
+         if(q.fA        < fBBox[2]) fBBox[2] = q.fA;
+         if(q.fA + q.fW > fBBox[3]) fBBox[3] = q.fA + q.fW;
+         if(q.fB        < fBBox[4]) fBBox[4] = q.fB;
+         if(q.fB + q.fH > fBBox[5]) fBBox[5] = q.fB + q.fH;
+         if(q.fC        < fBBox[0]) fBBox[0] = q.fC;
+         if(q.fC        > fBBox[1]) fBBox[1] = q.fC;
        }
        break;
       }
@@ -584,12 +629,12 @@ void QuadSet::ComputeBBox()
        const Float_t& h = fDefHeight;
        while (qi.next()) {
          QRectFixDim& q = * (QRectFixDim*) qi();
-         if(q.fX     < fBBox[0]) fBBox[0] = q.fX;
-         if(q.fX + w > fBBox[1]) fBBox[1] = q.fX + w;
-         if(q.fY     < fBBox[2]) fBBox[2] = q.fY;
-         if(q.fY + h > fBBox[3]) fBBox[3] = q.fY + h;
-         if(q.fZ     < fBBox[4]) fBBox[4] = q.fZ;
-         if(q.fZ     > fBBox[5]) fBBox[5] = q.fZ;
+         if(q.fA     < fBBox[0]) fBBox[0] = q.fA;
+         if(q.fA + w > fBBox[1]) fBBox[1] = q.fA + w;
+         if(q.fB     < fBBox[2]) fBBox[2] = q.fB;
+         if(q.fB + h > fBBox[3]) fBBox[3] = q.fB + h;
+         if(q.fC     < fBBox[4]) fBBox[4] = q.fC;
+         if(q.fC     > fBBox[5]) fBBox[5] = q.fC;
        }
        break;
       }
@@ -598,10 +643,10 @@ void QuadSet::ComputeBBox()
       {
        while (qi.next()) {
          QRectFixC& q = * (QRectFixC*) qi();
-         if(q.fX        < fBBox[0]) fBBox[0] = q.fX;
-         if(q.fX + q.fW > fBBox[1]) fBBox[1] = q.fX + q.fW;
-         if(q.fY        < fBBox[2]) fBBox[2] = q.fY;
-         if(q.fY + q.fH > fBBox[3]) fBBox[3] = q.fY + q.fH;
+         if(q.fA        < fBBox[0]) fBBox[0] = q.fA;
+         if(q.fA + q.fW > fBBox[1]) fBBox[1] = q.fA + q.fW;
+         if(q.fB        < fBBox[2]) fBBox[2] = q.fB;
+         if(q.fB + q.fH > fBBox[3]) fBBox[3] = q.fB + q.fH;
        }
        break;
       }
@@ -610,10 +655,22 @@ void QuadSet::ComputeBBox()
       {
        while (qi.next()) {
          QRectFixC& q = * (QRectFixC*) qi();
-         if(q.fX        < fBBox[0]) fBBox[0] = q.fX;
-         if(q.fX + q.fW > fBBox[1]) fBBox[1] = q.fX + q.fW;
-         if(q.fY        < fBBox[4]) fBBox[4] = q.fY;
-         if(q.fY + q.fH > fBBox[5]) fBBox[5] = q.fY + q.fH;
+         if(q.fA        < fBBox[0]) fBBox[0] = q.fA;
+         if(q.fA + q.fW > fBBox[1]) fBBox[1] = q.fA + q.fW;
+         if(q.fB        < fBBox[4]) fBBox[4] = q.fB;
+         if(q.fB + q.fH > fBBox[5]) fBBox[5] = q.fB + q.fH;
+       }
+       break;
+      }
+
+      case QT_RectangleYZFixedX:
+      {
+       while (qi.next()) {
+         QRectFixC& q = * (QRectFixC*) qi();
+         if(q.fA        < fBBox[2]) fBBox[2] = q.fA;
+         if(q.fA + q.fW > fBBox[3]) fBBox[3] = q.fA + q.fW;
+         if(q.fB        < fBBox[4]) fBBox[4] = q.fB;
+         if(q.fB + q.fH > fBBox[5]) fBBox[5] = q.fB + q.fH;
        }
        break;
       }
@@ -624,10 +681,10 @@ void QuadSet::ComputeBBox()
        const Float_t& h = fDefHeight;
        while (qi.next()) {
          QRectFixDimC& q = * (QRectFixDimC*) qi();
-         if(q.fX     < fBBox[0]) fBBox[0] = q.fX;
-         if(q.fX + w > fBBox[1]) fBBox[1] = q.fX + w;
-         if(q.fY     < fBBox[2]) fBBox[2] = q.fY;
-         if(q.fY + h > fBBox[3]) fBBox[3] = q.fY + h;
+         if(q.fA     < fBBox[0]) fBBox[0] = q.fA;
+         if(q.fA + w > fBBox[1]) fBBox[1] = q.fA + w;
+         if(q.fB     < fBBox[2]) fBBox[2] = q.fB;
+         if(q.fB + h > fBBox[3]) fBBox[3] = q.fB + h;
        }
        break;
       }
@@ -638,20 +695,36 @@ void QuadSet::ComputeBBox()
        const Float_t& h = fDefHeight;
        while (qi.next()) {
          QRectFixDimC& q = * (QRectFixDimC*) qi();
-         if(q.fX     < fBBox[0]) fBBox[0] = q.fX;
-         if(q.fX + w > fBBox[1]) fBBox[1] = q.fX + w;
-         if(q.fY     < fBBox[4]) fBBox[4] = q.fY;
-         if(q.fY + h > fBBox[5]) fBBox[5] = q.fY + h;
+         if(q.fA     < fBBox[0]) fBBox[0] = q.fA;
+         if(q.fA + w > fBBox[1]) fBBox[1] = q.fA + w;
+         if(q.fB     < fBBox[4]) fBBox[4] = q.fB;
+         if(q.fB + h > fBBox[5]) fBBox[5] = q.fB + h;
        }
        break;
       }
 
+      case QT_RectangleYZFixedDimX:
+      {
+       const Float_t& w = fDefWidth;
+       const Float_t& h = fDefHeight;
+       while (qi.next()) {
+         QRectFixDimC& q = * (QRectFixDimC*) qi();
+         if(q.fA     < fBBox[2]) fBBox[2] = q.fA;
+         if(q.fA + w > fBBox[3]) fBBox[3] = q.fA + w;
+         if(q.fB     < fBBox[4]) fBBox[4] = q.fB;
+         if(q.fB + h > fBBox[5]) fBBox[5] = q.fB + h;
+       }
+       break;
+      }
+
+      // Line modes
+
       case QT_LineXYFixedZ:
       {
        while (qi.next()) {
          QLineFixC& q = * (QLineFixC*) qi();
-         BBoxCheckPoint(q.fX,         q.fY,         fDefCoord);
-         BBoxCheckPoint(q.fX + q.fDx, q.fY + q.fDy, fDefCoord);
+         BBoxCheckPoint(q.fA,         q.fB,         fDefCoord);
+         BBoxCheckPoint(q.fA + q.fDx, q.fB + q.fDy, fDefCoord);
        }
        break;
       }
@@ -660,20 +733,22 @@ void QuadSet::ComputeBBox()
       {
        while (qi.next()) {
          QLineFixC& q = * (QLineFixC*) qi();
-         BBoxCheckPoint(q.fX,         fDefCoord, q.fY);
-         BBoxCheckPoint(q.fX + q.fDx, fDefCoord, q.fY + q.fDy);
+         BBoxCheckPoint(q.fA,         fDefCoord, q.fB);
+         BBoxCheckPoint(q.fA + q.fDx, fDefCoord, q.fB + q.fDy);
        }
        break;
       }
 
+      // Hexagon modes
+
       // Ignore 'slight' difference, assume square box for both cases.
       case QT_HexagonXY:
       case QT_HexagonYX:
       {
        while (qi.next()) {
          QHex& q = * (QHex*) qi();
-         BBoxCheckPoint(q.fX-q.fR, q.fY-q.fR, q.fZ);
-         BBoxCheckPoint(q.fX+q.fR, q.fY+q.fR, q.fZ);
+         BBoxCheckPoint(q.fA-q.fR, q.fB-q.fR, q.fC);
+         BBoxCheckPoint(q.fA+q.fR, q.fB+q.fR, q.fC);
        }
        break;
       }
index 4553a4b8456793e8af279eb1b732b9f9a34e9cc4..21090d96c766252f5071bb22da6570eaf7dccbb1 100644 (file)
@@ -92,11 +92,15 @@ public:
     QT_Undef,                // unknown-ignored
     QT_FreeQuad,             // arbitrary quad: specify 4*(x,y,z) quad corners
     QT_RectangleXY,          // rectangle in x-y plane: specify x, y, z, w, h
+    QT_RectangleXZ,          // rectangle in x-z plane: specify x, y, z, w, h
+    QT_RectangleYZ,          // rectangle in y-z plane: specify x, y, z, w, h
     QT_RectangleXYFixedDim,  // rectangle in x-y plane: specify x, y, z; w, h taken from fDefWidth/Height
     QT_RectangleXYFixedZ,    // rectangle in x-y plane: specify x, y, w, h; z taken from fDefCoord
     QT_RectangleXZFixedY,    // rectangle in x-z plane: specify x, z, w, h; y taken from fDefCoord
+    QT_RectangleYZFixedX,    // rectangle in y-z plane: specify y, z, w, h; x taken from fDefWidth/Height/Coord
     QT_RectangleXYFixedDimZ, // rectangle in x-y plane: specify x, y; w, h, z taken from fDefWidth/Height/Coord
     QT_RectangleXZFixedDimY, // rectangle in x-z plane: specify x, z; w, h, y taken from fDefWidth/Height/Coord
+    QT_RectangleYZFixedDimX, // rectangle in y-z plane: specify y, z; w, h, x taken from fDefWidth/Height/Coord
     QT_Rectangle_End,
     // line modes (needed for uniform handling of silicon-strip digits)
     QT_LineXYFixedZ,         // line in x-y plane: specify x, y, w(dx), h(dy); z taken from fDefCoord
@@ -127,11 +131,11 @@ protected:
 
   struct QFreeQuad     : public QuadBase      { Float_t fVertices[12]; };
 
-  struct QOrigin       : public QuadBase      { Float_t fX, fY; };
+  struct QOrigin       : public QuadBase      { Float_t fA, fB; };
 
   struct QRectFixDimC  : public QOrigin       { };
 
-  struct QRectFixDim   : public QRectFixDimC  { Float_t fZ; };
+  struct QRectFixDim   : public QRectFixDimC  { Float_t fC; };
 
   struct QRectFixC     : public QRectFixDimC  { Float_t fW, fH; };
 
@@ -139,7 +143,7 @@ protected:
 
   struct QLineFixC     : public QOrigin       { Float_t fDx, fDy; };
 
-  struct QHex          : public QOrigin       { Float_t fZ, fR; };
+  struct QHex          : public QOrigin       { Float_t fC, fR; };
 
 protected:
   QuadType_e        fQuadType;
@@ -149,9 +153,9 @@ protected:
   VoidCPlex         fPlex;
   QuadBase*         fLastQuad;     //!
 
-  Float_t           fDefWidth;
-  Float_t           fDefHeight;
-  Float_t           fDefCoord;
+  Float_t           fDefWidth;     // Breadth assigned to first coordinate  (A)
+  Float_t           fDefHeight;    // Breadth assigned to second coordinate (B)
+  Float_t           fDefCoord;     // Default value for third coordinate    (C)
 
   FrameBox*         fFrame;
   RGBAPalette*      fPalette;
@@ -212,14 +216,14 @@ public:
 
   void AddQuad(Float_t* verts);
 
-  void AddQuad(Float_t x, Float_t y);
-  void AddQuad(Float_t x, Float_t y, Float_t z);
-  void AddQuad(Float_t x, Float_t y, Float_t w, Float_t h);
-  void AddQuad(Float_t x, Float_t y, Float_t z, Float_t w, Float_t h);
+  void AddQuad(Float_t a, Float_t b);
+  void AddQuad(Float_t a, Float_t b, Float_t c);
+  void AddQuad(Float_t a, Float_t b, Float_t w, Float_t h);
+  void AddQuad(Float_t a, Float_t b, Float_t c, Float_t w, Float_t h);
 
-  void AddLine(Float_t x, Float_t y, Float_t w, Float_t h);
+  void AddLine(Float_t a, Float_t b, Float_t w, Float_t h);
 
-  void AddHexagon(Float_t x, Float_t y, Float_t z, Float_t r);
+  void AddHexagon(Float_t a, Float_t b, Float_t z, Float_t r);
 
   void QuadValue(Int_t value);
   void QuadColor(Color_t ci);
index 34822757bda55843dee083284f5d4c765876e327..2879bb6dc8280eb088fd5fde7b3f97c7f9bc54f4 100644 (file)
@@ -243,10 +243,46 @@ void QuadSetGL::RenderQuads(const TGLDrawFlags &flags) const
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitiveType);
-         glVertex3f(q.fX,        q.fY,        q.fZ);
-         glVertex3f(q.fX + q.fW, q.fY,        q.fZ);
-         glVertex3f(q.fX + q.fW, q.fY + q.fH, q.fZ);
-         glVertex3f(q.fX,        q.fY + q.fH, q.fZ);
+         glVertex3f(q.fA,        q.fB,        q.fC);
+         glVertex3f(q.fA + q.fW, q.fB,        q.fC);
+         glVertex3f(q.fA + q.fW, q.fB + q.fH, q.fC);
+         glVertex3f(q.fA,        q.fB + q.fH, q.fC);
+         glEnd();
+       }
+      }
+      break;
+    }
+
+    case QuadSet::QT_RectangleXZ:
+    {
+      while (qi.next()) {
+       QuadSet::QRect& q = * (QuadSet::QRect*) qi();
+       if (SetupColor(q))
+       {
+         if (flags.SecSelection()) glLoadName(qi.index());
+         glBegin(primitiveType);
+         glVertex3f(q.fA,        q.fC, q.fB);
+         glVertex3f(q.fA + q.fW, q.fC, q.fB);
+         glVertex3f(q.fA + q.fW, q.fC, q.fB + q.fH);
+         glVertex3f(q.fA,        q.fC, q.fB + q.fH);
+         glEnd();
+       }
+      }
+      break;
+    }
+
+    case QuadSet::QT_RectangleYZ:
+    {
+      while (qi.next()) {
+       QuadSet::QRect& q = * (QuadSet::QRect*) qi();
+       if (SetupColor(q))
+       {
+         if (flags.SecSelection()) glLoadName(qi.index());
+         glBegin(primitiveType);
+         glVertex3f(q.fC, q.fA,        q.fB);
+         glVertex3f(q.fC, q.fA + q.fW, q.fB);
+         glVertex3f(q.fC, q.fA + q.fW, q.fB + q.fH);
+         glVertex3f(q.fC, q.fA,        q.fB + q.fH);
          glEnd();
        }
       }
@@ -263,10 +299,10 @@ void QuadSetGL::RenderQuads(const TGLDrawFlags &flags) const
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitiveType);
-         glVertex3f(q.fX,     q.fY,     q.fZ);
-         glVertex3f(q.fX + w, q.fY,     q.fZ);
-         glVertex3f(q.fX + w, q.fY + h, q.fZ);
-         glVertex3f(q.fX,     q.fY + h, q.fZ);
+         glVertex3f(q.fA,     q.fB,     q.fC);
+         glVertex3f(q.fA + w, q.fB,     q.fC);
+         glVertex3f(q.fA + w, q.fB + h, q.fC);
+         glVertex3f(q.fA,     q.fB + h, q.fC);
          glEnd();
        }
       }
@@ -282,10 +318,10 @@ void QuadSetGL::RenderQuads(const TGLDrawFlags &flags) const
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitiveType);
-         glVertex3f(q.fX,        q.fY,        z);
-         glVertex3f(q.fX + q.fW, q.fY,        z);
-         glVertex3f(q.fX + q.fW, q.fY + q.fH, z);
-         glVertex3f(q.fX,        q.fY + q.fH, z);
+         glVertex3f(q.fA,        q.fB,        z);
+         glVertex3f(q.fA + q.fW, q.fB,        z);
+         glVertex3f(q.fA + q.fW, q.fB + q.fH, z);
+         glVertex3f(q.fA,        q.fB + q.fH, z);
          glEnd();
        }
       }
@@ -294,17 +330,36 @@ void QuadSetGL::RenderQuads(const TGLDrawFlags &flags) const
 
     case QuadSet::QT_RectangleXZFixedY:
     {
-      const Float_t& z = mQ.fDefCoord;
+      const Float_t& y = mQ.fDefCoord;
+      while (qi.next()) {
+       QuadSet::QRectFixC& q = * (QuadSet::QRectFixC*) qi();
+       if (SetupColor(q))
+       {
+         if (flags.SecSelection()) glLoadName(qi.index());
+         glBegin(primitiveType);
+         glVertex3f(q.fA,        y, q.fB);
+         glVertex3f(q.fA + q.fW, y, q.fB);
+         glVertex3f(q.fA + q.fW, y, q.fB + q.fH);
+         glVertex3f(q.fA,        y, q.fB + q.fH);
+         glEnd();
+       }
+      }
+      break;
+    }
+
+    case QuadSet::QT_RectangleYZFixedX:
+    {
+      const Float_t& x = mQ.fDefCoord;
       while (qi.next()) {
        QuadSet::QRectFixC& q = * (QuadSet::QRectFixC*) qi();
        if (SetupColor(q))
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitiveType);
-         glVertex3f(q.fX,        z, q.fY);
-         glVertex3f(q.fX + q.fW, z, q.fY);
-         glVertex3f(q.fX + q.fW, z, q.fY + q.fH);
-         glVertex3f(q.fX,        z, q.fY + q.fH);
+         glVertex3f(x, q.fA,        q.fB);
+         glVertex3f(x, q.fA + q.fW, q.fB);
+         glVertex3f(x, q.fA + q.fW, q.fB + q.fH);
+         glVertex3f(x, q.fA,        q.fB + q.fH);
          glEnd();
        }
       }
@@ -322,10 +377,10 @@ void QuadSetGL::RenderQuads(const TGLDrawFlags &flags) const
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitiveType);
-         glVertex3f(q.fX,     q.fY,     z);
-         glVertex3f(q.fX + w, q.fY,     z);
-         glVertex3f(q.fX + w, q.fY + h, z);
-         glVertex3f(q.fX,     q.fY + h, z);
+         glVertex3f(q.fA,     q.fB,     z);
+         glVertex3f(q.fA + w, q.fB,     z);
+         glVertex3f(q.fA + w, q.fB + h, z);
+         glVertex3f(q.fA,     q.fB + h, z);
          glEnd();
        }
       }
@@ -334,7 +389,28 @@ void QuadSetGL::RenderQuads(const TGLDrawFlags &flags) const
 
     case QuadSet::QT_RectangleXZFixedDimY:
     {
-      const Float_t& z = mQ.fDefCoord;
+      const Float_t& y = mQ.fDefCoord;
+      const Float_t& w = mQ.fDefWidth;
+      const Float_t& h = mQ.fDefHeight;
+      while (qi.next()) {
+       QuadSet::QRectFixDimC& q = * (QuadSet::QRectFixDimC*) qi();
+       if (SetupColor(q))
+       {
+         if (flags.SecSelection()) glLoadName(qi.index());
+         glBegin(primitiveType);
+         glVertex3f(q.fA,     y, q.fB);
+         glVertex3f(q.fA + w, y, q.fB);
+         glVertex3f(q.fA + w, y, q.fB + h);
+         glVertex3f(q.fA,     y, q.fB + h);
+         glEnd();
+       }
+      }
+      break;
+    }
+
+    case QuadSet::QT_RectangleYZFixedDimX:
+    {
+      const Float_t& x = mQ.fDefCoord;
       const Float_t& w = mQ.fDefWidth;
       const Float_t& h = mQ.fDefHeight;
       while (qi.next()) {
@@ -343,10 +419,10 @@ void QuadSetGL::RenderQuads(const TGLDrawFlags &flags) const
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitiveType);
-         glVertex3f(q.fX,     z, q.fY);
-         glVertex3f(q.fX + w, z, q.fY);
-         glVertex3f(q.fX + w, z, q.fY + h);
-         glVertex3f(q.fX,     z, q.fY + h);
+         glVertex3f(x, q.fA,     q.fB);
+         glVertex3f(x, q.fA + w, q.fB);
+         glVertex3f(x, q.fA + w, q.fB + h);
+         glVertex3f(x, q.fA,     q.fB + h);
          glEnd();
        }
       }
@@ -384,8 +460,8 @@ void QuadSetGL::RenderLines(const TGLDrawFlags &flags) const
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(GL_LINES);
-         glVertex3f(q.fX,         q.fY,         z);
-         glVertex3f(q.fX + q.fDx, q.fY + q.fDy, z);
+         glVertex3f(q.fA,         q.fB,         z);
+         glVertex3f(q.fA + q.fDx, q.fB + q.fDy, z);
          glEnd();
        }
       }
@@ -401,8 +477,8 @@ void QuadSetGL::RenderLines(const TGLDrawFlags &flags) const
        {
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(GL_LINES);
-         glVertex3f(q.fX,         z, q.fY);
-         glVertex3f(q.fX + q.fDx, z, q.fY + q.fDy);
+         glVertex3f(q.fA,         z, q.fB);
+         glVertex3f(q.fA + q.fDx, z, q.fB + q.fDy);
          glEnd();
        }
       }
@@ -447,12 +523,12 @@ void QuadSetGL::RenderHexagons(const TGLDrawFlags &flags) const
          const Float_t rs = q.fR * sqr3hf;
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitveType);
-         glVertex3f( q.fR + q.fX,       q.fY, q.fZ);
-         glVertex3f(   rh + q.fX,  rs + q.fY, q.fZ);
-         glVertex3f(  -rh + q.fX,  rs + q.fY, q.fZ);
-         glVertex3f(-q.fR + q.fX,       q.fY, q.fZ);
-         glVertex3f(  -rh + q.fX, -rs + q.fY, q.fZ);
-         glVertex3f(   rh + q.fX, -rs + q.fY, q.fZ);
+         glVertex3f( q.fR + q.fA,       q.fB, q.fC);
+         glVertex3f(   rh + q.fA,  rs + q.fB, q.fC);
+         glVertex3f(  -rh + q.fA,  rs + q.fB, q.fC);
+         glVertex3f(-q.fR + q.fA,       q.fB, q.fC);
+         glVertex3f(  -rh + q.fA, -rs + q.fB, q.fC);
+         glVertex3f(   rh + q.fA, -rs + q.fB, q.fC);
          glEnd();
        }
       }
@@ -469,12 +545,12 @@ void QuadSetGL::RenderHexagons(const TGLDrawFlags &flags) const
          const Float_t rs = q.fR * sqr3hf;
          if (flags.SecSelection()) glLoadName(qi.index());
          glBegin(primitveType);
-         glVertex3f( rs + q.fX,    rh + q.fY, q.fZ);
-         glVertex3f(      q.fX,  q.fR + q.fY, q.fZ);
-         glVertex3f(-rs + q.fX,    rh + q.fY, q.fZ);
-         glVertex3f(-rs + q.fX,   -rh + q.fY, q.fZ);
-         glVertex3f(      q.fX, -q.fR + q.fY, q.fZ);
-         glVertex3f( rs + q.fX,   -rh + q.fY, q.fZ);
+         glVertex3f( rs + q.fA,    rh + q.fB, q.fC);
+         glVertex3f(      q.fA,  q.fR + q.fB, q.fC);
+         glVertex3f(-rs + q.fA,    rh + q.fB, q.fC);
+         glVertex3f(-rs + q.fA,   -rh + q.fB, q.fC);
+         glVertex3f(      q.fA, -q.fR + q.fB, q.fC);
+         glVertex3f( rs + q.fA,   -rh + q.fB, q.fC);
          glEnd();
        }
       }