I. abstract II. overview -- use and overall design and interface A. the problem 1. plotting in 3d -- techniques and how they apply to X Windows a. generic plots b. function plotting is simpler, i. if you only ask for one func at a time ii. c. other decisions i. no prespective ii. shear and not rotation -- linear transformations faster 2. interactive 3d -- what does it mean to select a point in the plane? how translate to our virtual 3-space? 3. passing functions to the plotter -- programmer interface III. design decisions A. visible objects overview 1. threedee -- the plotter a. fixed positions and number of axes (need not draw all) b. unlimited number of possible data plots and plot sections 2. Axis3Object -- axes internal to the plotter 3. Plot3Object -- plots of data 4. Surface -- data to be plotted 5. callback data objects B. private objects overview 1. Projection -- surface image in virtual 3-space a. made up of individual polygons (sorted by depth) C. Threedee 1. resources a. text i. title b. graphical i. fontFamily, fontSize -- title ii. colors -- title iii. title position (x and y) iv. margin width & height c. parameters and computational directions i. xmin .. zmax ii. autoScale iii. Callbacks iv. axisZone d. axes i. axes 2. methods a. classinitialize b. initialize and destroy c. setvalues d. resize e. redisplay f. insertchild and deletechild g. constraintinitialize and constraintdestroy h. constraintsetvalues 3. other public functions ***************************************************** B. axis3 1. resources a. graphics i. label -- label, drawLabel, fontFamily, labelSize, labelColor ii. numbers -- drawNumbers, numberColor, numberFontFamily, numberSize b. axis scale data i. min and max (VALUES) ii. transform c. ticks and subticks i. the difference between the two. ii. ticsPerAxis -- restricted to 0 or > 2 and < too many to fit. explain how ntics is calcd iii. subsPerTic -- restricted to 0 if ntics (tPA) is 0 and otherwise < toomany iv. ticInterval v. ticLength and subticLength d. geometric data i. angle ii. axisType iii. labelSide and numberSide 2. methods a. Axis3Initialize and Axis3Destroy b. AtAxis3SetValues 3. other public functions a. AtAxis3SetLocation b. AtAxis3SetAngle c. AtAxis3ComputeTicSpacing C. plot3 1. Class structure including Recompute method 2. resources a. plotSurface -- the plotted data b. graphics resources i. line width ii. edge and fill colors iii. noFill -- hidden surface removal 3. methods a. Initialize and Destroy b. SetValues c. Recompute 4. other public functions a. ProjectPoint b. ProjectAsPolygon c. ProjectSurface d. ProjDeleteSurface e. ProjCreate f. PolyCopy g. ProjMerge D. annotations 1. the theory IV. implementation decisions A. threedee 1. internal functions to impl methods 2. private state 3. other functions to be accessible from outside B. axis3 1. internal functions to impl methods 2. private state 3. other functions to be accessible from outside C. plot3 1. internal functions to impl methods 2. private state 3. other functions to be accessible from outside D. Surfaces 1. Creating Surfaces 2. Adding data to surfaces 3. Accessing surface data 4. altering surface data V. Testing A. Unit Testing 1. Test suite for Surface 2. Test set for Projection 3. Test suite for Plot3 4. Test suite for Axis3 5. Test suite for Threedee B. Integration Testing 1. Test suite for the integration of Threedee with Axis3 2. Test suite for the integr of Threedee/Axis3 with Plot3 VI. Optimizations A. Projection and Surface Algorithms 1. Projection-drawing 2. Polygon-sorting 3. Surface deletion B. Layout computation 1. If not realized don't do most layout 2. If axis not shown, same C. Redrawing everything 1. Saving under might be a good idea here VII. Applications & Conclusion A. Basic applications + how to impl them 1. Test3d -- a demo program that plots specific data in basic manner 2. FunctionPlotter -- takes a ptr to a 2-vbl func and bounds specifications and plots the function in 3d 3. RovingEye -- FunctionPlotter which allows change of angle at which the func is seen in the (x, y) plane -- the Surface is recomputed by the program and then redisplayed. Zooming in + out by changing scales on axes B. A more complicated application -- TopoPlot 1. Plots one or more functions in individual cells for comparison 2. designating a region by clicking on axes highlights the region in red and produces a topographical map of the region as seen from above, as well as a cross-section as seen from the right (positive x) direction or another dir specified by user 3. selection of area of topographical map causes highlighting of appropriate polygons in the 3d plot 4. annotations should be addable. 5. zooming should be used, and rotation C. Eventually usable by statistical packages to display functions of 2 variables, piping them through Func2Surface or one of the data-to-Surface operations. D. Conclusion 1.