Пример #1
0
void
drawFrustrum (void)
{

  float normalizedEyeDistance;

  XClearArea(dsply,volumeWindow,
             control->buttonQueue[frustrumBut].buttonX,
             control->buttonQueue[frustrumBut].buttonY,
             control->buttonQueue[frustrumBut].buttonWidth+9,
             control->buttonQueue[frustrumBut].buttonHeight,False);
  GSetForeground(trashGC,(float)frustrumColor,Xoption);
  normalizedEyeDistance = (viewData.eyeDistance - minEyeDistance) /
                          (maxEyeDistance - minEyeDistance);
  normalizedEyeDistance = pow((double)normalizedEyeDistance,0.333333333);
  frustrumVertex = normalizedEyeDistance * (frustrumMax - frustrumMin) +
                   frustrumMin - 4;
  GDrawLine(trashGC,volumeWindow,
            frusX(frustrumX),frusY(frustrumY),
            frusX(frustrumX),frusY(frustrumY+frustrumLength),Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(frustrumX),frusY(frustrumY),
            frusX(frustrumVertex),frusY(frustrumMidY),Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(frustrumX),frusY(frustrumBotY),
            frusX(frustrumVertex),frusY(frustrumMidY),Xoption);

  /* draw controls */
  drawHitherControl();
  drawEyeControl();

} /* drawFrustrum() */
Пример #2
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() */
Пример #3
0
void
drawHitherControl (void)
{

  float xx,b,slope;
  int hitherTop, hitherBot;

  float b0x,b1x;

   /* draw box indicating minimum and maximum distance of projection */
  GSetForeground(trashGC,(float)hitherBoxColor,Xoption);
  b0x = (pzMin - clipPlaneMin)/(clipPlaneMax-clipPlaneMin);
  b0x = hitherMaxX - b0x*(hitherMaxX - hitherMinX);  /* screen x */
  b1x = (pzMax - clipPlaneMin)/(clipPlaneMax-clipPlaneMin);
  b1x = hitherMaxX - b1x*(hitherMaxX - hitherMinX);  /* screen x */
  GDraw3DButtonOut(trashGC,volumeWindow,
                 (int)(b0x),frusY(hitherBoxTop),
                 (int)fabs(b1x-b0x),hitherBoxHeight,Xoption);

    /* draw the hither plane */
  GSetForeground(trashGC,(float)hitherColor,Xoption);

  /* percentage x */
  xx = ((viewData.clipPlane-clipPlaneMin)/(clipPlaneMax-clipPlaneMin));
  xx = hitherMaxX - xx*(hitherMaxX - hitherMinX);  /* screen x */
  slope = ((float)frustrumY - frustrumMidY)/(frustrumX - frustrumVertex);
  b = ((float)frustrumX*frustrumMidY - frustrumVertex*frustrumY) /
      (frustrumX - frustrumVertex);
  hitherTop = slope * xx + b + 0.5;
  slope = (float)(frustrumBotY - frustrumMidY)/(frustrumX - frustrumVertex);
  b = ((float)frustrumX*frustrumMidY - frustrumVertex*frustrumBotY) /
      (frustrumX - frustrumVertex);
  hitherBot = slope * xx + b + 0.5;
  GDrawLine(trashGC,volumeWindow, frusX((int)xx),frusY(hitherTop),
            frusX((int)xx),frusY(hitherBot),Xoption);

  /* draw hither control box and bar */
  GDraw3DButtonOut(trashGC,volumeWindow,
                 frusX(hitherWinX),frusY(hitherWinY+5),
                 hitherWidth,hitherHeight,Xoption);
  GDrawLine(trashGC,volumeWindow,
            frusX(hitherMinX),frusY(hitherBarY+5),
            frusX(hitherMaxX),frusY(hitherBarY+5),Xoption);
  /* draw hither plane I/O pointer arrow */

  GDrawLine(trashGC,volumeWindow,
            frusX((int)xx),frusY(hitherBarY+2),
            frusX((int)xx),frusY(hitherBarY+8),Xoption);

   /* print string label */
  GSetForeground(volumeGC,(float)hitherColor,Xoption);
  GDrawString(volumeGC,volumeWindow,hitherMessX,hitherMessY,"Hither",6,Xoption);

}
Пример #4
0
void
drawClipZBut (void)
{

  XClearArea(dsply,volumeWindow,clipZButX,clipZButY,
             midAxis+blank,midAxis+blank,False);
  GSetForeground(trashGC,(float)monoColor(toggleColor),Xoption);
  GDrawLine(trashGC,volumeWindow,clipZButTopEndX,clipZButTopEndY,
            clipZButBotEndX,clipZButBotEndY,Xoption);
  GDrawLine(trashGC,volumeWindow,clipZButTopEndX-4,clipZButTopEndY,
            clipZButTopEndX,clipZButTopEndY,Xoption);

  GDrawLine(trashGC,volumeWindow,clipZButTopEndX,clipZButTopEndY-4,
            clipZButTopEndX,clipZButTopEndY,Xoption);

  GDrawLine(trashGC,volumeWindow,clipZButBotEndX+4,clipZButBotEndY,
            clipZButBotEndX,clipZButBotEndY,Xoption);

  GDrawLine(trashGC,volumeWindow,clipZButBotEndX,clipZButBotEndY+4,
            clipZButBotEndX,clipZButBotEndY,Xoption);


  GSetForeground(trashGC,(float)monoColor(arcColor),Xoption);
  GFillArc(trashGC,volumeWindow,
           (int)(zClipMinN * midAxis * zFactor + clipZButTopEndX - 3),
           (int)(zClipMinN * midAxis * zFactor + clipZButTopEndY + 3),
           arcSize,arcSize,45*64,360*64,Xoption);       /* 64 units per degree */
  GFillArc(trashGC,volumeWindow,
           (int)(zClipMaxN * midAxis * zFactor + clipZButTopEndX + 3),
           (int)(zClipMaxN * midAxis * zFactor + clipZButTopEndY - 5),
           arcSize,arcSize,45*64,360*64,Xoption);       /* 64 units per degree */

  GSetForeground(volumeGC,(float)monoColor(toggleColor),Xoption);
  GDrawString(volumeGC,volumeWindow,clipZMessX,clipZMessY,"Z",1,Xoption);

}
Пример #5
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);

}
Пример #6
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 */
Пример #7
0
void
drawLightTransArrow(void)
{

    int i;
    float f;

    /*** Draw the intensity potentiometer window. ***/
    XClearArea(dsply,lightingWindow,
               (control->buttonQueue[lightTranslucent]).buttonX,
               (control->buttonQueue[lightTranslucent]).buttonY-5,
               (control->buttonQueue[lightTranslucent]).buttonWidth,
               (control->buttonQueue[lightTranslucent]).buttonHeight+10,
               False);
    GDrawLine(controlMessageGC,lightingWindow,
              (control->buttonQueue[lightTranslucent]).buttonX,
              (control->buttonQueue[lightTranslucent]).buttonY,
              (control->buttonQueue[lightTranslucent]).buttonX,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).buttonHeight,Xoption);
    GDrawLine(controlMessageGC,lightingWindow,
              (control->buttonQueue[lightTranslucent]).buttonX + 1,
              (control->buttonQueue[lightTranslucent]).buttonY,
              (control->buttonQueue[lightTranslucent]).buttonX +
              (control->buttonQueue[lightTranslucent]).buttonWidth * 3/10,
              (control->buttonQueue[lightTranslucent]).buttonY,Xoption);
    GDrawLine(controlMessageGC,lightingWindow,
              (control->buttonQueue[lightTranslucent]).buttonX + 1,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).yHalf/2,
              (control->buttonQueue[lightTranslucent]).buttonX +
              (control->buttonQueue[lightTranslucent]).buttonWidth * 2/10,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).yHalf/2,Xoption);
    GDrawLine(controlMessageGC,lightingWindow,
              (control->buttonQueue[lightTranslucent]).buttonX + 1,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).yHalf,
              (control->buttonQueue[lightTranslucent]).buttonX +
              (control->buttonQueue[lightTranslucent]).buttonWidth * 3/10,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).yHalf,Xoption);
    GDrawLine(controlMessageGC,lightingWindow,
              (control->buttonQueue[lightTranslucent]).buttonX + 1,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).buttonHeight*3/4,
              (control->buttonQueue[lightTranslucent]).buttonX +
              (control->buttonQueue[lightTranslucent]).buttonWidth * 2/10,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).buttonHeight*3/4,Xoption);
    GDrawLine(controlMessageGC,lightingWindow,
              (control->buttonQueue[lightTranslucent]).buttonX + 1,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).buttonHeight,
              (control->buttonQueue[lightTranslucent]).buttonX +
              (control->buttonQueue[lightTranslucent]).buttonWidth * 3/10,
              (control->buttonQueue[lightTranslucent]).buttonY +
              (control->buttonQueue[lightTranslucent]).buttonHeight,Xoption);

    /*** Draw the intensity selection arrow ***/
    GSetForeground(lightingGC,(float)lightingTransArrowColor,Xoption);

    f = (control->buttonQueue[lightTranslucent].buttonY +
         control->buttonQueue[lightTranslucent].buttonHeight) -
        (tempLightIntensity *
         control->buttonQueue[lightTranslucent].buttonHeight);
    i = f;
    GDrawLine(lightingGC, lightingWindow, arrowHead + 10, i,
              arrowHead + 22, i + 2, Xoption);
    GDrawLine(lightingGC, lightingWindow, arrowHead + 22, i + 2,
              arrowHead + 22, i - 2, Xoption);
    GDrawLine(lightingGC, lightingWindow, arrowHead + 22, i - 2,
              arrowHead + 10, i, Xoption);

}  /* drawLightTransArrow() */
Пример #8
0
void
drawLightingAxes(void)
{

    XWindowAttributes laInfo;
    int i,xCenter,yCenter;
    float Px0,Py0;
    int vPx0,vPy0,vPx1,vPy1;
    viewTriple pointX,pointY,pointXY,pointXYZ;

    XGetWindowAttributes(dsply,lightingAxes,&laInfo);
    XClearWindow(dsply,lightingAxes);
    xCenter = laInfo.width / 2;
    yCenter = laInfo.height / 2;

    sinTheta = sin(-viewport->theta);
    cosTheta = cos(-viewport->theta);
    sinPhi   = sin(viewport->phi);
    cosPhi   = cos(viewport->phi);

    GSetForeground(lightingGC,(float)monoColor(buttonColor),Xoption);
    for (i=0; i < 3; i++) {
        Px0 = proj2PX(axes[i][0],axes[i][1]);
        Py0 = proj2PY(axes[i][0],axes[i][1],axes[i][2]);
        vPx0 =                   Px0 * lightScale + xCenter;
        vPy0 = laInfo.height - (Py0 * lightScale + yCenter);
        Px0 = proj2PX(axes[i][3],axes[i][4]);
        Py0 = proj2PY(axes[i][3],axes[i][4],axes[i][5]);
        vPx1 =                   Px0 * lightScale + xCenter;
        vPy1 = laInfo.height - (Py0 * lightScale + yCenter);
        GDrawLine(lightingGC,lightingAxes,vPx0,vPy0,vPx1,vPy1,Xoption);
    }

    GSetForeground(lightingGC,(float)lightingLabelColor,Xoption);
    for (i=0; i < basicScreen; i++) {
        Px0 = proj2PX(labels[i][0],labels[i][1]);
        Py0 = proj2PY(labels[i][0],labels[i][1],labels[i][2]);
        vPx0 =                   Px0 * lightScale + xCenter;
        vPy0 = laInfo.height - (Py0 * lightScale + yCenter);
        Px0 = proj2PX(labels[i][3],labels[i][4]);
        Py0 = proj2PY(labels[i][3],labels[i][4],labels[i][5]);
        vPx1 =                   Px0 * lightScale + xCenter;
        vPy1 = laInfo.height - (Py0 * lightScale + yCenter);
        GDrawLine(lightingGC,lightingAxes,vPx0,vPy0,vPx1,vPy1,Xoption);
    }

    GSetForeground(lightingGC,(float)lightingBoxColor,Xoption);
    pointX.x = tempLightPointer[0] * lightAxesScale;
    pointX.y = 0;
    pointX.z = 0;

    pointY.x = 0;
    pointY.y = tempLightPointer[1] * lightAxesScale;
    pointY.z = 0;

    pointXY.x = tempLightPointer[0] * lightAxesScale;
    pointXY.y = tempLightPointer[1] * lightAxesScale;
    pointXY.z = 0;

    pointXYZ.x = tempLightPointer[0] * lightAxesScale;
    pointXYZ.y = tempLightPointer[1] * lightAxesScale;
    pointXYZ.z = tempLightPointer[2] * lightAxesScale;

    Px0 = proj2PX(pointXY.x,pointXY.y);
    Py0 = proj2PY(pointXY.x,pointXY.y,pointXY.z);
    vPx0 =                   Px0 * lightScale + xCenter;
    vPy0 = laInfo.height - (Py0 * lightScale + yCenter);

    Px0 = proj2PX(pointX.x,pointX.y);
    Py0 = proj2PY(pointX.x,pointX.y,pointX.z);
    vPx1 =                   Px0 * lightScale + xCenter;
    vPy1 = laInfo.height - (Py0 * lightScale + yCenter);
    GDrawLine(lightingGC,lightingAxes,vPx0,vPy0,vPx1,vPy1,Xoption);

    Px0 = proj2PX(pointY.x,pointY.y);
    Py0 = proj2PY(pointY.x,pointY.y,pointY.z);
    vPx1 =                   Px0 * lightScale + xCenter;
    vPy1 = laInfo.height - (Py0 * lightScale + yCenter);
    GDrawLine(lightingGC,lightingAxes,vPx0,vPy0,vPx1,vPy1,Xoption);

    Px0 = proj2PX(pointXYZ.x,pointXYZ.y);
    Py0 = proj2PY(pointXYZ.x,pointXYZ.y,pointXYZ.z);
    vPx1 =                   Px0 * lightScale + xCenter;
    vPy1 = laInfo.height - (Py0 * lightScale + yCenter);
    GDrawLine(lightingGC,lightingAxes,vPx0,vPy0,vPx1,vPy1,Xoption);

    GSetForeground(lightingGC,(float)lightingLightColor,Xoption);
    Px0 = proj2PX(point0.x,point0.y);
    Py0 = proj2PY(point0.x,point0.y,point0.z);
    vPx0 =                   Px0 * lightScale + xCenter;
    vPy0 = laInfo.height - (Py0 * lightScale + yCenter);
    GDrawLine(lightingGC,lightingAxes,vPx0,vPy0,vPx1,vPy1,Xoption);

}   /* drawLightingAxes */
Пример #9
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() */
Пример #10
0
void
drawClipYBut (void)
{

  XClearArea(dsply,volumeWindow,clipYButX,clipYButY,
             minorAxis+blank,majorAxis+blank,False);
  GSetForeground(trashGC,(float)monoColor(toggleColor),Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf,
            (control->buttonQueue[clipYBut]).buttonY,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf,
            (control->buttonQueue[clipYBut]).buttonY +
            (control->buttonQueue[clipYBut]).buttonHeight,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf-3,
            (control->buttonQueue[clipYBut]).buttonY-3,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf,
            (control->buttonQueue[clipYBut]).buttonY,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf+3,
            (control->buttonQueue[clipYBut]).buttonY-3,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf,
            (control->buttonQueue[clipYBut]).buttonY,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf-3,
            (control->buttonQueue[clipYBut]).buttonY +
            (control->buttonQueue[clipYBut]).buttonHeight+3,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf,
            (control->buttonQueue[clipYBut]).buttonY +
            (control->buttonQueue[clipYBut]).buttonHeight,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf+3,
            (control->buttonQueue[clipYBut]).buttonY +
            (control->buttonQueue[clipYBut]).buttonHeight+3,
            (control->buttonQueue[clipYBut]).buttonX +
            (control->buttonQueue[clipYBut]).xHalf,
            (control->buttonQueue[clipYBut]).buttonY +
            (control->buttonQueue[clipYBut]).buttonHeight,Xoption);

  GSetForeground(trashGC,(float)monoColor(arcColor),Xoption);

  /* note: minimum buttons closer to the box */
  GFillArc(trashGC,volumeWindow,
           (int)(clipYButX + minorAxis/2 - 8),
           (int)(yClipMinN * (majorAxis-tinyArc) + clipYButY),
           arcSize,arcSize,90*64,360*64,Xoption);       /* 64 units per degree */
  GFillArc(trashGC,volumeWindow,
           (int)(clipYButX + minorAxis/2 + 3),
           (int)(yClipMaxN * (majorAxis-tinyArc) + clipYButY),
           arcSize,arcSize,90*64,360*64,Xoption);       /* 64 units per degree */

  GSetForeground(volumeGC,(float)monoColor(toggleColor),Xoption);
  GDrawString(volumeGC,volumeWindow,clipYMessX,clipYMessY,"Y",1,Xoption);

}
Пример #11
0
void
drawClipXBut (void)
{

  XClearArea(dsply,volumeWindow,clipXButX,clipXButY,
             majorAxis+blank,minorAxis+blank,False);
  GSetForeground(trashGC,(float)monoColor(toggleColor),Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipXBut]).buttonX,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf,
            (control->buttonQueue[clipXBut]).buttonX +
            (control->buttonQueue[clipXBut]).buttonWidth,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipXBut]).buttonX-3,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf-3,
            (control->buttonQueue[clipXBut]).buttonX,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipXBut]).buttonX-3,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf+3,
            (control->buttonQueue[clipXBut]).buttonX,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipXBut]).buttonX +
            (control->buttonQueue[clipXBut]).buttonWidth+3,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf-3,
            (control->buttonQueue[clipXBut]).buttonX +
            (control->buttonQueue[clipXBut]).buttonWidth,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf,Xoption);
  GDrawLine(trashGC,volumeWindow,
            (control->buttonQueue[clipXBut]).buttonX +
            (control->buttonQueue[clipXBut]).buttonWidth+3,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf+3,
            (control->buttonQueue[clipXBut]).buttonX +
            (control->buttonQueue[clipXBut]).buttonWidth,
            (control->buttonQueue[clipXBut]).buttonY +
            (control->buttonQueue[clipXBut]).yHalf,Xoption);

  GSetForeground(trashGC,(float)monoColor(arcColor),Xoption);
  GFillArc(trashGC,volumeWindow,
           (int)(xClipMinN * (majorAxis-tinyArc) + clipXButX),  /* x value */
           (int)(clipXButY + minorAxis/2 + 1),                  /* y value */
           arcSize,arcSize,0,360*64,Xoption);               /* 64 units per degree */
  GFillArc(trashGC,volumeWindow,
           (int)(xClipMaxN * (majorAxis-tinyArc) + clipXButX),  /* x value */
           (int)(clipXButY + minorAxis/2 - 7),                  /* y value */
           arcSize,arcSize,0,360*64,Xoption);               /* 64 units per degree */

  GSetForeground(volumeGC,(float)monoColor(toggleColor),Xoption);
  GDrawString(volumeGC,volumeWindow,clipXMessX,clipXMessY,"X",1,Xoption);

}
Пример #12
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 ***/