From 6e07ce8f0c6c77b61cfa2f8be54781160018ff91 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Sun, 9 Mar 2008 03:47:21 +0000 Subject: * graph/: Depamphletize. * include/addfile.h: Move from hyper. * include/addfile.H1: Move external declarations into addfile.h. Remove. --- src/graph/view3D/volume3d.c.pamphlet | 899 ----------------------------------- 1 file changed, 899 deletions(-) delete mode 100644 src/graph/view3D/volume3d.c.pamphlet (limited to 'src/graph/view3D/volume3d.c.pamphlet') diff --git a/src/graph/view3D/volume3d.c.pamphlet b/src/graph/view3D/volume3d.c.pamphlet deleted file mode 100644 index c3603972..00000000 --- a/src/graph/view3D/volume3d.c.pamphlet +++ /dev/null @@ -1,899 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/graph/view3D volume3d.c} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{License} -<>= -/* -Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of The Numerical ALgorithms Group Ltd. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -@ -<<*>>= -<> - -#define _VOLUME3D_C -#include "axiom-c-macros.h" - -#include -#include - -#include "header.h" -#include "cpanel.h" -#include "process.h" -#include "volume.h" -#include "../include/purty/volume.bitmap" -#include "../include/purty/volume.mask" - - - -#include "XSpadFill.H1" -#include "Gfun.H1" -#include "all_3d.H1" - -#define eyeDistMessX (frusX(eyeWinX+27)) -#define eyeDistMessY (frusY(eyeWinY-5)) -#define hitherMessX (frusX(hitherWinX+15)) -#define hitherMessY (frusY(hitherWinY)) - -#define clipXMessX (control->buttonQueue[clipXBut].buttonX + \ - control->buttonQueue[clipXBut].xHalf) -#define clipXMessY (control->buttonQueue[clipXBut].buttonY + 2) -#define clipYMessX (control->buttonQueue[clipYBut].buttonX + \ - control->buttonQueue[clipYBut].buttonWidth-2) -#define clipYMessY (control->buttonQueue[clipYBut].buttonY + \ - control->buttonQueue[clipYBut].yHalf) -#define clipZMessX (control->buttonQueue[clipZBut].buttonX + \ - control->buttonQueue[clipZBut].xHalf+4) -#define clipZMessY (control->buttonQueue[clipZBut].buttonY + \ - control->buttonQueue[clipZBut].yHalf-4) - -#define volumeCursorForeground monoColor(68) -#define volumeCursorBackground monoColor(197) - -#define hitherBoxColor monoColor(141) -#define hitherBoxTop (frustrumMidY - 10) -#define hitherBoxHeight 20 - -#define clipButtonColor 144 -#define toggleColor 42 -#define arcColor 75 - -#define arcSize 6 -#define tinyArc 5 -#define blank 4 -#define toggleX 190 -#define toggleY 280 - -#define oldWay - -#define frusX(x) (control->buttonQueue[frustrumBut].buttonX + x) -#define frusY(y) (control->buttonQueue[frustrumBut].buttonY + y) - -#define clipMessX 7 -#define clipMessY (control->buttonQueue[clipXBut].buttonY + 15) - /* someotherFont holds title font (see main.c) */ -#define clipMessDy (globalFont->max_bounds.ascent/2 + \ - globalFont->max_bounds.descent) -static char *clipMess = "Clip Volume"; - -#define eyeMess1Dy clipMessDy -#define eyeMess1X 7 -#define eyeMess1Y (frustrumY + 40 + 3*eyeMess1Dy) -static char *eyeMess1 = "Eye"; - -#define eyeMess2X (globalFont->max_bounds.width + 14) -#define eyeMess2Y (frustrumY + 40) -#define eyeMess2Dy eyeMess1Dy -static char *eyeMess2 = "Reference"; - - - /* global stuff */ -int flatClipBoxX[8], flatClipBoxY[8]; - - - - -/******************* volume buttons **********************/ - -int -#ifdef _NO_PROTO -initVolumeButtons (volumeButtons) - buttonStruct *volumeButtons; -#else -initVolumeButtons (buttonStruct *volumeButtons) -#endif -{ - int ii, num = 0; - - ii = volumeReturn; - volumeButtons[ii].buttonX = 154; - volumeButtons[ii].buttonY = 370; - volumeButtons[ii].buttonWidth = 110; - volumeButtons[ii].buttonHeight = 24; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = no; - volumeButtons[ii].mask = buttonMASK; - volumeButtons[ii].text = "Return"; - volumeButtons[ii].textColor = 52; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = volumeAbort; - volumeButtons[ii].buttonX = 36; - volumeButtons[ii].buttonY = 370; - volumeButtons[ii].buttonWidth = 110; - volumeButtons[ii].buttonHeight = 24; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = no; - volumeButtons[ii].mask = buttonMASK; - volumeButtons[ii].text = "Abort"; - volumeButtons[ii].textColor = 28; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = frustrumBut; - volumeButtons[ii].buttonX = frustrumWindowX; - volumeButtons[ii].buttonY = frustrumWindowY; - volumeButtons[ii].buttonWidth = frustrumWindowWidth; - volumeButtons[ii].buttonHeight = frustrumWindowHeight; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = yes; - volumeButtons[ii].mask = potMASK; - volumeButtons[ii].text = "Frustrum Window"; - volumeButtons[ii].textColor = frustrumColor; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = perspectiveBut; - volumeButtons[ii].buttonX = toggleX; - volumeButtons[ii].buttonY = toggleY; - volumeButtons[ii].buttonWidth = 10; - volumeButtons[ii].buttonHeight = 10; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = no; - volumeButtons[ii].mask = potMASK; - volumeButtons[ii].text = "Perspective"; - volumeButtons[ii].textColor = arcColor; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = clipRegionBut; - volumeButtons[ii].buttonX = toggleX; - volumeButtons[ii].buttonY = toggleY+20; - volumeButtons[ii].buttonWidth = 10; - volumeButtons[ii].buttonHeight = 10; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = no; - volumeButtons[ii].mask = potMASK; - volumeButtons[ii].text = "Show Region"; - volumeButtons[ii].textColor = arcColor; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = clipSurfaceBut; - volumeButtons[ii].buttonX = toggleX; - volumeButtons[ii].buttonY = toggleY+40; - volumeButtons[ii].buttonWidth = 10; - volumeButtons[ii].buttonHeight = 10; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = no; - volumeButtons[ii].mask = potMASK; - volumeButtons[ii].text = "Clipping On"; - volumeButtons[ii].textColor = arcColor; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = clipXBut; - volumeButtons[ii].buttonX = clipXButX; - volumeButtons[ii].buttonY = clipXButY; - volumeButtons[ii].buttonWidth = majorAxis; - volumeButtons[ii].buttonHeight = minorAxis; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = yes; - volumeButtons[ii].mask = potMASK; - volumeButtons[ii].text = "Clip X"; - volumeButtons[ii].textColor = clipButtonColor; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = clipYBut; - volumeButtons[ii].buttonX = clipYButX; - volumeButtons[ii].buttonY = clipYButY; - volumeButtons[ii].buttonWidth = minorAxis; - volumeButtons[ii].buttonHeight = majorAxis; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = yes; - volumeButtons[ii].mask = potMASK; - volumeButtons[ii].text = "Clip Y"; - volumeButtons[ii].textColor = clipButtonColor; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - ii = clipZBut; - volumeButtons[ii].buttonX = clipZButX; - volumeButtons[ii].buttonY = clipZButY; - volumeButtons[ii].buttonWidth = midAxis; - volumeButtons[ii].buttonHeight = midAxis; - volumeButtons[ii].buttonKey = ii; - volumeButtons[ii].pot = yes; - volumeButtons[ii].mask = potMASK; - volumeButtons[ii].text = "Clip Z"; - volumeButtons[ii].textColor = clipButtonColor; - volumeButtons[ii].xHalf = volumeButtons[ii].buttonWidth/2; - volumeButtons[ii].yHalf = volumeButtons[ii].buttonHeight/2; - ++num; - - return(num); -} - - -/************************* - * int makeVolumePanel() * - *************************/ - -void -#ifdef _NO_PROTO -makeVolumePanel () -#else -makeVolumePanel (void) -#endif -{ - - int i; - XSetWindowAttributes cwAttrib, controlAttrib; - XSizeHints sizehint; - Pixmap volumebits, volumemask; - XColor foreColor, backColor; - - volumebits = XCreateBitmapFromData(dsply,rtWindow,volumeBitmap_bits, - volumeBitmap_width,volumeBitmap_height); - volumemask = XCreateBitmapFromData(dsply,rtWindow,volumeMask_bits, - volumeMask_width,volumeMask_height); - cwAttrib.background_pixel = backgroundColor; - cwAttrib.border_pixel = foregroundColor; - cwAttrib.event_mask = volumeMASK; - cwAttrib.colormap = colorMap; - cwAttrib.override_redirect = overrideManager; - foreColor.pixel = volumeCursorForeground; - XQueryColor(dsply,colorMap,&foreColor); - backColor.pixel = volumeCursorBackground; - XQueryColor(dsply,colorMap,&backColor); - cwAttrib.cursor = XCreatePixmapCursor(dsply,volumebits,volumemask, - &foreColor,&backColor, - volumeBitmap_x_hot, - volumeBitmap_y_hot); - volumeWindow = XCreateWindow(dsply,control->controlWindow, - -3,-3,controlWidth,controlHeight,3, - CopyFromParent,InputOutput,CopyFromParent, - controlCreateMASK,&cwAttrib); - - sizehint.flags = USPosition | USSize; - sizehint.x = 0; - sizehint.y = 0; - sizehint.width = controlWidth; - sizehint.height = controlHeight; - /*** the None stands for icon pixmap ***/ - XSetNormalHints(dsply,volumeWindow,&sizehint); - XSetStandardProperties(dsply,volumeWindow,"Volume Panel 3D", - "View Volume",None,NULL,0,&sizehint); - - /*** volume frustrum window ***/ - - /*** do volume buttons ***/ - initVolumeButtons(control->buttonQueue); - for (i=volumeButtonsStart; i<(volumeButtonsEnd); i++) { - controlAttrib.event_mask = (control->buttonQueue[i]).mask; - (control->buttonQueue[i]).self = - XCreateWindow(dsply,volumeWindow, - (control->buttonQueue[i]).buttonX, - (control->buttonQueue[i]).buttonY, - (control->buttonQueue[i]).buttonWidth, - (control->buttonQueue[i]).buttonHeight, - 0,0,InputOnly,CopyFromParent, - buttonCreateMASK,&controlAttrib); - XMakeAssoc(dsply,table,(control->buttonQueue[i]).self, - &((control->buttonQueue[i]).buttonKey)); - XMapWindow(dsply,(control->buttonQueue[i]).self); - } - -} /* makeVolumePanel() */ - - -void -#ifdef _NO_PROTO -drawClipXBut () -#else -drawClipXBut (void) -#endif -{ - - 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); - -} - -void -#ifdef _NO_PROTO -drawClipYBut () -#else -drawClipYBut (void) -#endif -{ - - 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); - -} - - -void -#ifdef _NO_PROTO -drawClipZBut () -#else -drawClipZBut (void) -#endif -{ - - 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); - -} - - -void -#ifdef _NO_PROTO -drawClipVolume () -#else -drawClipVolume (void) -#endif -{ - - 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() */ - - -void -#ifdef _NO_PROTO -drawHitherControl () -#else -drawHitherControl (void) -#endif -{ - - 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); - -} - -void -#ifdef _NO_PROTO -drawEyeControl () -#else -drawEyeControl (void) -#endif -{ - - 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); - -} - - -/************************** - * void drawFrustrum() * - **************************/ - -void -#ifdef _NO_PROTO -drawFrustrum () -#else -drawFrustrum (void) -#endif -{ - - 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() */ - - - -/************************** - * void drawVolumePanel() * - **************************/ - -void -#ifdef _NO_PROTO -drawVolumePanel () -#else -drawVolumePanel (void) -#endif -{ - - 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; ibuttonQueue[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() */ - - -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} -- cgit v1.2.3