Beispiel #1
0
void
drawClipVolume (void)
{

  float xminL,xmaxL,yminL,ymaxL,zminL,zmaxL;

  XClearArea(dsply,volumeWindow,backFaceX-1,backFaceY,
             lengthFace+deltaFace+2,lengthFace+deltaFace+1,False);

  GSetForeground(trashGC,(float)boxInline,Xoption);     /*boxOutline=133*/
  GSetLineAttributes(trashGC,0,LineSolid,CapButt,JoinMiter,Xoption);

  /* define corners of volume, clockwise, back to front */
  xminL = xClipMinN*lengthFace;
  xmaxL = xClipMaxN*lengthFace;
  yminL = yClipMinN*lengthFace;
  ymaxL = yClipMaxN*lengthFace;
  zminL = zClipMinN*zLength;
  zmaxL = (1-zClipMaxN)*zLength;  /* percentage upwards from bottom */

  flatClipBoxX[0]   = backFaceX + xminL + zminL;
  flatClipBoxY[0]   = backFaceY + yminL + zminL;
  flatClipBoxX[1]   = backFaceX + xmaxL + zminL;
  flatClipBoxY[1]   = flatClipBoxY[0];
  flatClipBoxX[2]   = flatClipBoxX[1];
  flatClipBoxY[2]   = backFaceY + ymaxL + zminL;
  flatClipBoxX[3]   = flatClipBoxX[0];
  flatClipBoxY[3]   = flatClipBoxY[2];
  flatClipBoxX[4]   = frontFaceX + xminL - zmaxL;
  flatClipBoxY[4]   = frontFaceY + yminL - zmaxL;
  flatClipBoxX[5]   = frontFaceX + xmaxL - zmaxL;
  flatClipBoxY[5]   = flatClipBoxY[4];
  flatClipBoxX[6]   = flatClipBoxX[5];
  flatClipBoxY[6]   = frontFaceY + ymaxL - zmaxL;
  flatClipBoxX[7]   = flatClipBoxX[4];
  flatClipBoxY[7]   = flatClipBoxY[6];

  /* now draw the volume */
  GDrawRectangle(trashGC,volumeWindow,
                 flatClipBoxX[0],flatClipBoxY[0],
                 flatClipBoxX[2]-flatClipBoxX[0],
                 flatClipBoxY[2]-flatClipBoxY[0],Xoption);
  GDrawLine(trashGC,volumeWindow,
            flatClipBoxX[0],flatClipBoxY[0],flatClipBoxX[4],flatClipBoxY[4],Xoption);
  GDrawLine(trashGC,volumeWindow,
            flatClipBoxX[1],flatClipBoxY[1],flatClipBoxX[5],flatClipBoxY[5],Xoption);
  GDrawLine(trashGC,volumeWindow,
            flatClipBoxX[2],flatClipBoxY[2],flatClipBoxX[6],flatClipBoxY[6],Xoption);
  GDrawLine(trashGC,volumeWindow,
            flatClipBoxX[3],flatClipBoxY[3],flatClipBoxX[7],flatClipBoxY[7],Xoption);
  GSetForeground(trashGC,(float)boxOutline,Xoption);
  GDrawRectangle(trashGC,volumeWindow,
                 flatClipBoxX[4],flatClipBoxY[4],
                 flatClipBoxX[6]-flatClipBoxX[4],
                 flatClipBoxY[6]-flatClipBoxY[4],Xoption);
  /* make sure volumeGC is set properly before calling these functions */

} /* drawClipVolume() */
Beispiel #2
0
void
drawEyeControl (void)
{

  float here;
  int there;

  GSetForeground(trashGC,(float)eyeColor,Xoption);

    /* draw the eyeDistance box & slide bar */
  GDraw3DButtonOut(trashGC,volumeWindow,
                 frusX(eyeWinX),frusY(eyeWinY+5),eyeWidth,eyeHeight,Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(eyeMinX),frusY(eyeBarY+5),frusX(eyeMaxX),frusY(eyeBarY+5),Xoption);
  here = (viewData.eyeDistance - minEyeDistance) /
         (maxEyeDistance - minEyeDistance);
  here = pow((double)here,0.333333);
  there = here * (eyeMaxX - eyeMinX) + eyeMinX;  /* screen x */
  GDrawLine(trashGC,volumeWindow,
            frusX(there),frusY(eyeBarY+2),frusX(there),frusY(eyeBarY+8),Xoption);

    /* draw the eye */
  GSetLineAttributes(trashGC,2,LineSolid,CapButt,JoinMiter,Xoption);
  GSetForeground(trashGC,(float)monoColor(52),Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(there),frusY(frustrumMidY-5),
            frusX(there+8),frusY(frustrumMidY),Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(there+2),frusY(frustrumMidY+4),
            frusX(there+8),frusY(frustrumMidY-1),Xoption);
  GSetForeground(trashGC,(float)frustrumColor,Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(there+4),frusY(frustrumMidY-3),
            frusX(there+2),frusY(frustrumMidY),Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(there+4),frusY(frustrumMidY+2),
            frusX(there+3),frusY(frustrumMidY),Xoption);
  GSetLineAttributes(trashGC,0,LineSolid,CapButt,JoinMiter,Xoption);

  /* draw string label */
  GSetForeground(volumeGC,(float)eyeColor,Xoption);
  GDrawString(volumeGC,volumeWindow,eyeDistMessX,eyeDistMessY,
              "Eye Distance",strlen("eye distance"),Xoption);

}
Beispiel #3
0
void
drawLightingPanel(void)
{

    char *s;
    int i,strlength;

    /* Draw border lines to separate the lighting window, potentiometers,
       and button regions of the lightng subpanel. */
    GSetForeground(trashGC,(float)foregroundColor,Xoption);
    GSetLineAttributes(trashGC,3,LineSolid,CapButt,JoinMiter,Xoption);
    GDrawLine(trashGC, lightingWindow, 0,  potA, controlWidth, potA, Xoption);

    GSetLineAttributes(trashGC,2,LineSolid,CapButt,JoinMiter,Xoption);
    GDrawLine(trashGC, lightingWindow, 0, lightB, controlWidth, lightB, Xoption);
    GDrawLine(trashGC, lightingWindow, 0, lightPotA, controlWidth,
              lightPotA, Xoption);
    GDrawLine(trashGC, lightingWindow, 0, lightPotB, controlWidth,
              lightPotB, Xoption);
    GDrawLine(trashGC, lightingWindow, lightTransL, lightPotA,
              lightTransL, lightPotB, Xoption);

    writeControlTitle(lightingWindow);
    s = "Lighting Control Panel";
    strlength = strlen(s);
    GSetForeground(anotherGC,(float)lightingTitleColor,Xoption);
    GDrawString(anotherGC, lightingWindow,
                centerX(anotherGC, s, strlength, controlWidth),
                lightB+18, s, strlength, Xoption);

    for (i=lightingButtonsStart; i<(lightingButtonsEnd); i++) {
        switch (i) {
        case lightMove:
            GSetForeground(lightingGC,(float)lightingButtonColor,Xoption);
            GDraw3DButtonOut(lightingGC,lightingWindow,
                             (control->buttonQueue[i]).buttonX,
                             (control->buttonQueue[i]).buttonY,
                             (control->buttonQueue[i]).buttonWidth,
                             (control->buttonQueue[i]).buttonHeight,Xoption);
            GSetForeground(lightingGC,(float)monoColor(buttonColor),Xoption);
            GDrawLine(lightingGC,lightingWindow,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY +
                      2*(control->buttonQueue[i]).yHalf,Xoption);
            GDrawLine(lightingGC,lightingWindow,
                      (control->buttonQueue[i]).buttonX,
                      (control->buttonQueue[i]).buttonY +
                      (control->buttonQueue[i]).yHalf,
                      (control->buttonQueue[i]).buttonX +
                      2*(control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY +
                      (control->buttonQueue[i]).yHalf,Xoption);
            break;
        case lightMoveXY:
            GSetForeground(lightingGC,(float)lightingButtonColor,Xoption);
            GDraw3DButtonOut(lightingGC,lightingWindow,
                             (control->buttonQueue[i]).buttonX,
                             (control->buttonQueue[i]).buttonY,
                             (control->buttonQueue[i]).buttonWidth,
                             (control->buttonQueue[i]).buttonHeight,Xoption);
            GSetForeground(lightingGC,(float)monoColor(buttonColor),Xoption);
            GDrawLine(lightingGC,lightingWindow,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY +
                      2*(control->buttonQueue[i]).yHalf,Xoption);
            GDrawLine(lightingGC,lightingWindow,
                      (control->buttonQueue[i]).buttonX,
                      (control->buttonQueue[i]).buttonY +
                      (control->buttonQueue[i]).yHalf,
                      (control->buttonQueue[i]).buttonX +
                      2*(control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY +
                      (control->buttonQueue[i]).yHalf,Xoption);
            break;
        case lightMoveZ:
            GSetForeground(lightingGC,(float)lightingButtonColor,Xoption);
            GDraw3DButtonOut(lightingGC,lightingWindow,
                             (control->buttonQueue[i]).buttonX,
                             (control->buttonQueue[i]).buttonY,
                             (control->buttonQueue[i]).buttonWidth,
                             (control->buttonQueue[i]).buttonHeight,Xoption);
            GSetForeground(lightingGC,(float)monoColor(buttonColor),Xoption);
            GDrawLine(lightingGC,lightingWindow,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf,
                      (control->buttonQueue[i]).buttonY +
                      2*(control->buttonQueue[i]).yHalf,Xoption);
            GDrawLine(lightingGC,lightingWindow,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf -
                      (control->buttonQueue[i]).xHalf/2,
                      (control->buttonQueue[i]).buttonY +
                      (control->buttonQueue[i]).yHalf,
                      (control->buttonQueue[i]).buttonX +
                      (control->buttonQueue[i]).xHalf +
                      (control->buttonQueue[i]).xHalf/2,
                      (control->buttonQueue[i]).buttonY +
                      (control->buttonQueue[i]).yHalf,Xoption);
            break;
        case lightTranslucent:
            drawLightTransArrow();
            break;
        default:
            GDraw3DButtonOut(lightingGC,lightingWindow,
                             (control->buttonQueue[i]).buttonX,
                             (control->buttonQueue[i]).buttonY,
                             (control->buttonQueue[i]).buttonWidth,
                             (control->buttonQueue[i]).buttonHeight,Xoption);
            s = (control->buttonQueue[i]).text;
            strlength = strlen(s);
            GSetForeground(trashGC,
                           (float)monoColor((control->buttonQueue[i]).textColor),Xoption);
            GDrawString(trashGC, lightingWindow,
                        (control->buttonQueue[i]).buttonX +
                        centerX(processGC,s,strlength,
                                (control->buttonQueue[i]).buttonWidth),
                        (control->buttonQueue[i]).buttonY +
                        centerY(processGC,(control->buttonQueue[i]).buttonHeight),
                        s,strlen(s),Xoption);
        }  /* switch */
    }  /* for i in control->buttonQueue */

    GSetForeground(lightingGC,(float)monoColor(labelColor),Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightMoveXY].buttonX +
                control->buttonQueue[lightMoveXY].buttonWidth + 3,
                control->buttonQueue[lightMoveXY].buttonY +
                control->buttonQueue[lightMoveXY].yHalf,
                "x",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightMoveXY].buttonX +
                control->buttonQueue[lightMoveXY].xHalf - 2,
                control->buttonQueue[lightMoveXY].buttonY - 4,
                "y",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightMoveZ].buttonX +
                control->buttonQueue[lightMoveZ].xHalf - 2,
                control->buttonQueue[lightMoveZ].buttonY - 4,
                "z",1,Xoption);

    /** Draw the title for the intensity potentiometer. */
    GSetForeground(lightingGC,(float)lightingTransColor,Xoption);

    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY,
                "I",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight,
                "n",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight*2,
                "t",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight*3,
                "e",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight*4,
                "n",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight*5,
                "s",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight*6,
                "i",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight*7,
                "t",1,Xoption);
    GDrawString(lightingGC,lightingWindow,
                control->buttonQueue[lightTranslucent].buttonX +
                control->buttonQueue[lightTranslucent].buttonWidth + 3,
                control->buttonQueue[lightTranslucent].buttonY +
                lightFontHeight*8,
                "y",1,Xoption);
    drawLightingAxes();
    drawLightTransArrow();

}  /* drawLightingPanel */
Beispiel #4
0
void
drawVolumePanel (void)
{

  int i,strlength;


            /* Draw some lines for volume panel. */
  GSetForeground(trashGC,(float)foregroundColor,Xoption);
  GSetLineAttributes(trashGC,3,LineSolid,CapButt,JoinMiter,Xoption);
  GDrawLine(trashGC, volumeWindow, 0, potA, controlWidth, potA, Xoption);

  GSetLineAttributes(trashGC,2,LineSolid,CapButt,JoinMiter,Xoption);
  GDrawLine(trashGC, volumeWindow, 0, volumeTitleA, controlWidth,
            volumeTitleA, Xoption);
  GDrawLine(trashGC, volumeWindow, 0, volumeTitleB, controlWidth,
            volumeTitleB, Xoption);

  writeControlTitle(volumeWindow);
  s = "Viewing Volume Panel";
  strlength = strlen(s);
  GSetForeground(anotherGC,(float)volumeTitleColor,Xoption);
  GDrawString(anotherGC,volumeWindow,
              centerX(anotherGC,s,strlength,controlWidth),
              volumeTitleA+18,s,strlength,Xoption);

  GSetForeground(anotherGC,(float)monoColor(toggleColor),Xoption);
  GDrawString(anotherGC,volumeWindow,
              control->buttonQueue[perspectiveBut].buttonX + 4,
              control->buttonQueue[perspectiveBut].buttonY - 17,
              "Settings", 8, Xoption);

  GSetForeground(trashGC,(float)monoColor(toggleColor),Xoption);
  GDraw3DButtonOut(trashGC,volumeWindow,
                 control->buttonQueue[perspectiveBut].buttonX - 7,
                 control->buttonQueue[perspectiveBut].buttonY - 36,
                 100,100,Xoption);


  for (i=0; i<strlen(clipMess); i++)
    GDrawString(trashGC,volumeWindow,clipMessX,clipMessY + i*clipMessDy,
                &(clipMess[i]),1,Xoption);
  for (i=0; i<strlen(eyeMess1); i++)
    GDrawString(trashGC,volumeWindow,eyeMess1X,eyeMess1Y + i*eyeMess1Dy,
                &(eyeMess1[i]),1,Xoption);
  for (i=0; i<strlen(eyeMess2); i++)
    GDrawString(trashGC,volumeWindow,eyeMess2X,eyeMess2Y + i*eyeMess2Dy,
                &(eyeMess2[i]),1,Xoption);

  GSetLineAttributes(trashGC,0,LineSolid,CapButt,JoinMiter,Xoption);
  GSetForeground(trashGC,(float)volumeButtonColor,Xoption);
  for (i=volumeButtonsStart; i<(volumeButtonsEnd); i++) {
    GSetForeground(trashGC,
                   (float)monoColor((control->buttonQueue[i]).textColor),Xoption);
    switch (i) {
    case perspectiveBut:
    case clipRegionBut:
    case clipSurfaceBut:
      GSetForeground(volumeGC,(float)monoColor(toggleColor),Xoption);
      GDraw3DButtonOut(volumeGC,volumeWindow,
                     (control->buttonQueue[i]).buttonX,
                     (control->buttonQueue[i]).buttonY,
                     (control->buttonQueue[i]).buttonWidth,
                     (control->buttonQueue[i]).buttonHeight,Xoption);
      GSetForeground(volumeGC,
                     (float)monoColor((control->buttonQueue[i]).textColor),Xoption);
      GDrawString(volumeGC,volumeWindow,
                  (control->buttonQueue[i]).buttonX +
                  (control->buttonQueue[i]).buttonWidth + 4,
                  (control->buttonQueue[i]).buttonY +
                  centerY(volumeGC,(control->buttonQueue[i]).buttonHeight),
                  (control->buttonQueue[i]).text,
                  strlen(control->buttonQueue[i].text),Xoption);
      if (i==perspectiveBut && viewData.perspective)
        GDrawString(volumeGC,volumeWindow,
                    (control->buttonQueue[i]).buttonX +
                    centerX(volumeGC,"x",1,
                            (control->buttonQueue[i]).buttonWidth),
                    (control->buttonQueue[i]).buttonY +
                    centerY(volumeGC,(control->buttonQueue[i]).buttonHeight),
                    "x",1,Xoption);
      else if (i==clipRegionBut && viewData.clipbox)
        GDrawString(volumeGC,volumeWindow,
                    (control->buttonQueue[i]).buttonX +
                    centerX(volumeGC,"x",1,
                            (control->buttonQueue[i]).buttonWidth),
                    (control->buttonQueue[i]).buttonY +
                    centerY(volumeGC,(control->buttonQueue[i]).buttonHeight),
                    "x",1,Xoption);
      else if (i==clipSurfaceBut && viewData.clipStuff)
        GDrawString(volumeGC,volumeWindow,
                    (control->buttonQueue[i]).buttonX +
                    centerX(volumeGC,"x",1,
                            (control->buttonQueue[i]).buttonWidth),
                    (control->buttonQueue[i]).buttonY +
                    centerY(volumeGC,(control->buttonQueue[i]).buttonHeight),
                    "x",1,Xoption);

      break;

    case clipXBut:
      drawClipXBut();
      break;

    case clipYBut:
      drawClipYBut();
      break;

    case clipZBut:
      drawClipZBut();
      break;

    case frustrumBut:
      break;

    default:
      GDraw3DButtonOut(trashGC,volumeWindow,
                     (control->buttonQueue[i]).buttonX,
                     (control->buttonQueue[i]).buttonY,
                     (control->buttonQueue[i]).buttonWidth,
                     (control->buttonQueue[i]).buttonHeight,Xoption);
      s = (control->buttonQueue[i]).text;
      strlength = strlen(s);
      GSetForeground(trashGC,
                     (float)monoColor((control->buttonQueue[i]).textColor),Xoption);
      GDrawString(trashGC,volumeWindow,
                  (control->buttonQueue[i]).buttonX +
                  centerX(processGC,s,strlength,
                          (control->buttonQueue[i]).buttonWidth),
                  (control->buttonQueue[i]).buttonY +
                  centerY(processGC,(control->buttonQueue[i]).buttonHeight),
                  s,strlen(s),Xoption);
    }  /* switch */
  }  /* for i in volumeButtons */

  drawFrustrum();
  drawClipVolume();   /*** put in header ***/
  drawClipXBut();
  drawClipYBut();
  drawClipZBut();

} /* drawVolumePanel() */
Beispiel #5
0
void
drawControlPanel(void)
{

  controlPanelStruct *cp;
  int i,strlength;
  char *s;

  cp = viewport->controlPanel;
  /* Draw border lines to separate the potentiometer, message, graph select
     and button regions of the control panel. */
  GSetForeground(trashGC,(float)foregroundColor,Xoption);
  GSetLineAttributes(trashGC,3,LineSolid,CapButt,JoinMiter,Xoption);
  GDrawLine(trashGC, cp->controlWindow, 0, potA, controlWidth, potA, Xoption);
  GSetLineAttributes(trashGC,2,LineSolid,CapButt,JoinMiter,Xoption);
  GDrawLine(trashGC, cp->controlWindow, 0, potB, controlWidth, potB, Xoption);
  GDrawLine(trashGC, cp->controlWindow, 0, messageBot,
            controlWidth, messageBot, Xoption);
  GDrawLine(trashGC, cp->controlWindow, 0, 286, controlWidth, 286, Xoption);

  /** put the line width as 1 last because used below as well **/
  GSetLineAttributes(trashGC,1,LineSolid,CapButt,JoinMiter,Xoption);
  GDrawRectangle(trashGC,cp->controlWindow,closeLeft,closeTop,
                 (controlWidth-closeLeft+8),(controlHeight-closeTop+8),Xoption);

  /* Write potentiometer titles on the control panel. */
  writeControlTitle();
  GSetForeground(globGC,(float)controlPotHeaderColor,Xoption);
  s = "Scale";
  strlength = strlen(s);
  GDrawString(globGC,cp->controlWindow,
              centerX(globGC,s,strlength,
                      cp->buttonQueue[scale2D].buttonWidth) +
              cp->buttonQueue[scale2D].buttonX, 31+headerHeight,s,strlength,Xoption);

  s = "Translate";
  strlength = strlen(s);
  GDrawString(globGC,cp->controlWindow,
              centerX(globGC,s,strlength,
                      cp->buttonQueue[translate2D].buttonWidth) +
              cp->buttonQueue[translate2D].buttonX,
              31+headerHeight,s,strlen(s),Xoption);

  GSetForeground(globGC,(float)controlColorColor,Xoption);

  /* Write title of the graph selection window. */
  s = "Graphs";
  strlength = strlen(s);
  GDrawString(globGC,cp->controlWindow,
              centerX(globGC,s,strlength,controlWidth),graphHeaderHeight,
              s,strlength,Xoption);

  /* Write titles on regular buttons and draw pixmaps on potentiometers. */

  for (i=0; i<(maxButtons2D); i++) {
    if ((cp->buttonQueue[i]).pot) {

      GSetForeground(globalGC1,(float)buttonColor,Xoption);
      GDrawRectangle(globalGC1,cp->controlWindow,
                     (cp->buttonQueue[i]).buttonX,
                     (cp->buttonQueue[i]).buttonY,
                     (cp->buttonQueue[i]).buttonWidth,
                     (cp->buttonQueue[i]).buttonHeight,Xoption);

      GSetForeground(trashGC,
                     (float)monoColor((cp->buttonQueue[i]).textColor),Xoption);

      GDrawLine(globalGC1,cp->controlWindow, /* trashGC, */
                (cp->buttonQueue[i]).buttonX + (cp->buttonQueue[i]).xHalf,
                (cp->buttonQueue[i]).buttonY,
                (cp->buttonQueue[i]).buttonX + (cp->buttonQueue[i]).xHalf,
                (cp->buttonQueue[i]).buttonY + 2*(cp->buttonQueue[i]).yHalf,Xoption);
      GDrawLine(globalGC1,cp->controlWindow, /* trashGC, */
                (cp->buttonQueue[i]).buttonX,
                (cp->buttonQueue[i]).buttonY + (cp->buttonQueue[i]).yHalf,
                (cp->buttonQueue[i]).buttonX + 2*(cp->buttonQueue[i]).xHalf,
                (cp->buttonQueue[i]).buttonY + (cp->buttonQueue[i]).yHalf,Xoption);
      switch (i) {
      case scale2D:
        GDrawLines(trashGC,cp->controlWindow,scaleArrow,
                   scaleArrowN,CoordModeOrigin,Xoption);
        break;
      case translate2D:
        GDrawLines(trashGC,cp->controlWindow,translateArrow,
                   translateArrowN,CoordModeOrigin,Xoption);
        break;
      } /* switch i */
    } else if (cp->buttonQueue[i].graphNum) {

      if (mono) {
        if (graphStateArray[i-graphStart].showing) {
          GSetForeground(graphGC,(float)backgroundColor,Xoption);
          GSetBackground(graphGC,(float)foregroundColor,Xoption);
        } else {
          GSetForeground(graphGC,(float)foregroundColor,Xoption);
          GSetBackground(graphGC,(float)backgroundColor,Xoption);
        }
        strlength = strlen((cp->buttonQueue[i]).text);
        GDrawImageString(graphGC,cp->controlWindow,
                         (cp->buttonQueue[i]).buttonX +
                         centerX(graphGC,cp->buttonQueue[i].text,
                                 strlength,(cp->buttonQueue[i]).buttonWidth),
                         (cp->buttonQueue[i]).buttonY +
                         centerY(graphGC,(cp->buttonQueue[i]).buttonHeight),
                         cp->buttonQueue[i].text,strlength,Xoption);
      } else {
        if (graphStateArray[i-graphStart].showing)
          GSetForeground(graphGC,(float)graphBarShowingColor,Xoption);
        else
          GSetForeground(graphGC,(float)graphBarHiddenColor,Xoption);
        strlength = strlen((cp->buttonQueue[i]).text);
        GDrawString(graphGC,cp->controlWindow,
                    (cp->buttonQueue[i]).buttonX +
                    centerX(graphGC,cp->buttonQueue[i].text,
                            strlength,(cp->buttonQueue[i]).buttonWidth),
                    (cp->buttonQueue[i]).buttonY +
                    centerY(graphGC,(cp->buttonQueue[i]).buttonHeight),
                    cp->buttonQueue[i].text,strlength,Xoption);
        }
    } else if (cp->buttonQueue[i].graphSelect) {
      /* The select characters are defined as: "^" for on and "-" for off. */
      if (graphStateArray[i-graphSelectStart].selected) {
        GSetForeground(graphGC,(float)graphBarSelectColor,Xoption);
        strcpy((cp->buttonQueue[i]).text,"^");
      } else {
        GSetForeground(graphGC,(float)graphBarNotSelectColor,Xoption);
        *(cp->buttonQueue[i]).text = '-';
        strcpy((cp->buttonQueue[i]).text,"-");
      }
       GDrawString(graphGC,cp->controlWindow,
                 (cp->buttonQueue[i]).buttonX +
                 centerX(graphGC,cp->buttonQueue[i].text,
                         strlength,(cp->buttonQueue[i]).buttonWidth),
                 (cp->buttonQueue[i]).buttonY +
                 centerY(graphGC,(cp->buttonQueue[i]).buttonHeight),
                 cp->buttonQueue[i].text,strlength,Xoption);
    }
    else {  /* a regular button */
      int isOn = 1;

      switch(i) {
        case pointsOnOff:
          isOn = pointsON = graphStateArray[0].pointsOn;
          if (graphStateArray[0].pointsOn)
            strcpy((cp->buttonQueue[i]).text,"Pts On ");
          else
            strcpy((cp->buttonQueue[i]).text,"Pts Off");
          break;

        case spline2D:
          isOn = splineON = graphStateArray[0].splineOn;
          if (graphStateArray[0].splineOn)
            strcpy((cp->buttonQueue[i]).text, "Box On ");
          else
            strcpy((cp->buttonQueue[i]).text, "Box Off");
          break;

        case connectOnOff:
          isOn = connectON = graphStateArray[0].connectOn;
          if (graphStateArray[0].connectOn)
            strcpy((cp->buttonQueue[i]).text, "Lines On ");
          else
            strcpy((cp->buttonQueue[i]).text, "Lines Off");
          break;

        case axesOnOff2D:
          isOn = axesON = graphStateArray[0].axesOn;
          if (graphStateArray[0].axesOn)
            strcpy((cp->buttonQueue[i]).text , "Axes On ");
          else
            strcpy((cp->buttonQueue[i]).text , "Axes Off");
          break;

        case unitsOnOff2D:
          isOn = unitsON = graphStateArray[0].unitsOn;
          if (graphStateArray[0].unitsOn)
           strcpy( (cp->buttonQueue[i]).text , "Units On ");
          else
           strcpy( (cp->buttonQueue[i]).text , "Units Off");
          break;
        case closeAll2D:
          isOn = 0;

        default:
          break;
      } /* switch i */

      s = (cp->buttonQueue[i]).text;
      strlength = strlen(s);

      GDrawPushButton(dsply, globalGC1, trashGC, processGC, cp->controlWindow,
          (cp->buttonQueue[i]).buttonX, (cp->buttonQueue[i]).buttonY,
          (cp->buttonQueue[i]).buttonWidth, (cp->buttonQueue[i]).buttonHeight,
          isOn, s,buttonColor,
          monoColor((cp->buttonQueue[i]).textColor), Xoption);

    } /* else a regular button */
  } /* for each button */

  /* Refresh the latest message */
  makeMessageFromData(0);
  writeControlMessage();
  XFlush(dsply);

}    /*** drawControlPanel ***/