1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
|
%% Oh Emacs, this is a -*- Makefile -*-, so give me tabs.
\documentclass{article}
\usepackage{axiom}
\title{\$SPAD/src/graph Makefile}
\author{Timothy Daly \and Gabriel Dos~Reis}
\begin{document}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject
\section{General Comments}
This directory contains the C source code for the Scratchpad's
graphics. Comments given to the maintenance program refer to
version numbers. The versions are documented below, starting with
version23.
\begin{verbatim}
version23: (first version after returning from Europe)
added a $DEVE environment variable - if it exists, the viewport manager
tries those executable files first; if it was unsuccessful or, if the
$DEVE variable was not defined, the $SPAD variable is used tube.c:
changed order of crossedLines(p,q... to crossedLines(q,p... in order to
use segNum info (which segment of the second polygon the first polygon
crosses) and using splitPolygon() rather than splitAndMove()
tube.c: changed crossedLines() to generalPartialSplit() - an algorithms
i hope would work. it is not taken from any literature as all the
literature i have looked into and tried out had design flaws or lacked
precise specifications (including Foley & van Dam volume I, Newman &
Sprouill and others)
viewport3D.c: xPts now malloced as a global variable in makeView3D and
not freed up at the end. quadMesh is also not freed anymore (shouldn't
be as it was changed to a global some time ago).
made eyeDistance (3D stuff) into a float (from integer)
added outlineRender (outlineOnOff in actions.h) field. note that this
and the previous change both affected the following files:
view3D/: main.c, process.c, viewport3D.c, spadAction.c, write.c
viewman/: fun3D.c make3D.c
viewAlone/: spoon3D.c spoonTube.c
spad/: view3D.spad (viewport3D, makeViewport3D and the Rep)
3D: ability to write Stellar recognizable data files for Tube types
spad additions: write(v,fn,listOfTypes)
fixed perspective, added min/max range of eyeDistance
version24: view3D/tube.c: put in calculations for xmin,xmax,ymin,ymax
>>> took them out again - doesn't the viewport manager do that?
polygon list saved if previous render/opaque (hidden surface)
was completed so that subsequent draws would be faster
view3D: added NIL(pType) macro which checks for a null pointer
>>> need same change in view2D (after testing)
totalShades is now a global variable (to be decremented if color trouble)
>>> need same change in view2D (after testing)
cleaning up: added exitWithAck(info,size,i) macro to send spad
acknowledge right before exit of a troubled program. this
should avoid some of the causes of entering spad break loops
not enough colors could be allocated; now, only a message is given.
viewman: adding checks for abnormal exits of child processes (from
people who use the "Cancel" command from the X server).
deadBaby() and brokenPipe() in the works.
view3D: hey! there was a bug in the projections: with perspective on,
it turns out the Z-axis was rotating opposite of the rest of
the system...?...
fixed perspective
added box (with back face removal)
function of 2 variables now has it's own substructure, like tube, and
shares the (now) general hidden surface subroutine used for the
tube stuff when the perspective is turned on (when perspective is
off, a simple back to front routine is sufficient and fast but the
property that allows that is not preserved in the perspective projection)
seems like (in tube.c) the overlap list property is not preserved (see
notes) so now, routine needs to check, for polygon i, polygons
i+1 through N, always.
affects ALL: added deltaZ to all the stuff
(spad, viewman, viewAlone, view3D) - though not used yet
error messages: if the .Xdefault not found (or .Xdefault wasn't defined)
then view2D and view3D will a predefined default set of fonts. it that
still doesn't work, a (more or less useful) error message is displayed
and an error signal is sent to Scratchpad to prevent a freeze-up situation.
viewpack.spad (package VIEW) and view2D.spad (domain GRIMAGE) now check for
lists that contain illegal empty lists (i.e. point list contains nothing).
warnings are issued for lists containing both legal point lists and empty
point lists, errors are issued for lists containing nothing but empty lists.
made spadcolors30.c into an archived library by the name of libColors.a,
source file changed to spadcolors.c; makeColors' arguments have changed
and now returns the number of colors allocated - not a pointer to the
pixel map
saymem, check, etc. moved to util.c for library archive
added a view.h file, with macros to be used by all view programs
monoColor(x) macro (in view.h) replaces spadColors[x] calls in case
display is monochromatic (in global variable mono)
tube.c: connecting of slices - polygon points changed to outline the
rectangular regions without the diagonals (may be prettier when outlines
are sketched...slightly, if no split occurs).
clipping model: both against the hither plane as well as with a
clipping volume
viewport3D.c: made polygon list for functions of two variables so
that it could call the general hidden surface algorithm (in tube.c) as
well (turns out that back to front property of 3D explicit equations is
not preserved when viewed with perspective)
added volume.c, volume.h for the frustrum (perspective), projected clipping
and clip volume interface
version25:
view3D: added long jump to address signals that arrive while in the
XNextEvent call. spadSignalHandler() now calls spadAction()
if a signal is received.
view2D: added query button and messages for each graph image
(viewport2D.c, control.c, process.c)
view3D: tube.c: improved speed of drawPolygon by creating overlapped
list for unmoved polygon, and list for moved polygon that
may be smaller than the entire list.
see "Notes on the Depth Sort Algorithm" for strategy, etc.
tube.c: moved the resetting of the variables relevant to recalc
from process.c to tube.c (rotated, switchedPerspective,
changedEyeDistance)
GraphImage now supports 2D primitives like point(), component(), addPoint()
ViewportDefaultsPackage now exports viewXPos() and stuff; all references
to integers have been replaced by the more restrictive subdomains
(e.g. PositiveInteger, NonNegativeInteger)
ViewportPackage has dwindled to just drawCurves() and graphCurves()
view2D, view3D: put in more robust signal handling routines so that
signals from the viewport manager (Scratchpad) are all processed properly.
the condition where the user is not allowed to use the control panel of the
viewport that Scratchpad is sending commands to no longer exists!!!! wow!!!
simultaneous processing without a race condition occuring (sorta) should
not occur anymore.
view3D: modification to keepDrawingViewport() so that signals also causes
a return of no. this allows Scratchpad input files to be indistinguishable
from interactive commands from a control panel! (that is, drawViewport()
no longer need to complete the drawing if it was called from Scratchpad.)
view2D: spadAction(): now only redraws viewport if the info was received for
a graph image that is being shown
view2D: fixed up pick/drop hangup problem. the "dodat" variable in process.c
needed to be reset earlier, and in each separate routine (pick, drop and
query) that required sequential button clicks (e.g.
"Drop" + graph number "1").
view2D: added global variable queriedGraph - so that the last queried graph
will always be the one displayed.
view2D.spad: default to points off
added inverse and monochrome fields in .Xdefaults
(e.g. view3D*monochrome : on)
BUG FIXED: clipping of wire mesh for tubes
view3D.spad: function of three variables for color specifications ==> changes
in viewman, viewAlone, and view3D to accept additional information.
structure of fun2VarModel in view3D.h changes *** not backwards
compatible with version24.
BUG FOUND: viewport3D.c still drawing the function of 2 variables
without perspective (painter's algorithm without processing) wrong!
BUG FIXED: this time, for shur. flipped quadrants II and IV to remedy bug
found in painter's algorithm in viewport3D.c.
tube.c (view3D): changed routine that redraws quickly from the saved up list
of processed polygons from the hidden surface algorithm so that each polygon
version 26:
view3D: switched over to a generalized subspace points definition.
so far, wire meshes work for existing types. code in viewport3D.c and tube.c
are replaced by one more general in component.c; size reduced in half.
include: modified=[view3D.h] new=[component.h]
view3D: modified=[viewport3D.c, tube.c] new=[component.c]
viewman: modified=[fun3D.c, make3D.c]
representation should also handle future 3D things - like space curves,
points and stuff without new data structures.
NEED: take out unused code
component.spad there temporarily to handle the new representation on the
algebra side point.spad deals with the new representation in more
generality on the algebra side
NEED: interface to rest of algebra world
view2D: draw dashed line if ticks are too close. view2D:
modified=[viewport2D.c]
coord.spad added for coordinate transformation
XSpadFill.c in the src/ directory for shade dithering in color - affects:
src: modified=[spadcolors.c, spadcolors.h] new=[XSpadFill.c]
view3D: modified=[globals.h, main.c, tube.c]
view2D: added tick labels for 2D
view2D: modified=[viewport2D.c]
view3D: tube.c replaced by surface.c and project.c
viewman: for hue and shade fields in 2D, spad is one based and the viewport
stuff is 0 based. modified=[makeGraph.c]
--- backed up on tape ---
replaced sprintf of XGetDefault value with direct assignment since
XGetDefault may return a NULL value which causes sprintf to freak out
(xDefault is now pointer to char rather than a character array)
view2D: modified=[globals.h, main.c]
view3D: modified=[globals.h, main.c]
BUG FOUND: on the PS2, redraws of hidden surface with saved data (quickList)
bombs.
BUG FIXED: no more bombs of quick draws
view3D: modified=[surface.c (previously, tube.c)]
put in SIGTERM handlers so that a kill signal to viewman would cause it
exit cleanly (that is, kill all the child processes and then exit)
viewman: modified=[viewman.h, viewman.c, cleanup.c]
view3D: modified=[main.c]
view2D: modified=[main.c]
viewWoman: modified=[viewWoman.c]
version27:
3D primitives: added type flag to polygon structure (for 3D primitives) -
may or may not actually be used
include: modified=[tube.c]
added "#define smwattDefaultToFast" which, when defined, defaults to the
simple back-to-front draw rather than the full depth sort processes
(click middle button to switch)
BUG FIXED: title reading in viewAlone (to add \0 on top of the \newline
fgets reads in)
viewAlone: modified=[spoon2D.c, spoonComp.c]
points in 3D stored as references (indices) into a pool of points
include: modified=[tube.h, component.h]
view3D: modified=[main.c, project.c, surface.c, component.c]
added (maybe last version...?) window manager override flag in override.h
file which sets to true or false (e.g. Presentation Manager may need
override=false)
BUG FIXED: after the 3D stuff saves the ordering of polygons, the quick draw
misses the last polygon...had to change doNotStopDraw flag to affect the
subsequent polygon.
view3D: modified=[surface.c]
added a development header file for temporary defines
include: added=[DEVE.h]
part II:
BUG FOUND: 3D color bar goes off the positive end
BUG FIXED: the color bar error
view3D: modified=[process.c]
put XMapWindow after the drawViewport in make3DComponents - fixes the
problem of having an empty viewport window come up with no well defined data
view3D: modified=[component.c]
view3D: initialize the numOfPolygons and polygons field right before they're
used (as opposed to whereever i had them before)
view3D: modified=[component.c]
\end{verbatim}
\section{Directory overview}
\subsection{Environment variables}
<<environment>>=
SUBDIRS = Gdraws viewman view2D view3D viewAlone
pamphlets = fileformats.pamphlet Makefile.pamphlet
@
\subsection{The viewman directory}
<<viewmandir>>=
all-viewman: all-Gdraws
cd viewman && ${MAKE}
@
\subsection{The Gdraws directory}
<<Gdrawsdir>>=
all-Gdraws:
@$(mkinstalldirs) $(axiom_target_libdir)/graph
cd Gdraws && ${MAKE}
@
\subsection{The view3D directory}
<<view3Ddir>>=
all-view3D: all-Gdraws
cd view3D && ${MAKE}
@
\subsection{The view2D directory}
<<view2Ddir>>=
all-view2D: all-Gdraws
cd view2D && ${MAKE}
@
\subsection{The viewAlone directory}
<<viewAlonedir>>=
all-viewAlone: all-Gdraws
cd viewAlone && ${MAKE}
@
\section{Documentation}
\subsection{environment variables}
<<fileformats>>=
parabola/data parabola/graph0: $(srcdir)/fileformats.pamphlet
$(axiom_build_document) --tangle=`basename $@` --output=$@ $<
@
<<*>>=
<<environment>>
subdir = src/graph/
pamphlets = Makefile.pamphlet
.PHONY: all all-ax all-graph
all: all-ax
all-ax all-graph: stamp
@ echo 24 finished ${IN}
stamp: all-subdirs parabola/data parabola/graph0
$(STAMP) stamp
.PHONY: all-subdirs
all-subdirs: all-subdirs.pre all-subdirs.rest
.PHONY: all-subdirs.pre
all-subdirs.pre:
-rm -f stamp
$(mkinstalldirs) parabola
.PHONY: all-subdirs.rest
all-subdirs.rest: all-subdirs.pre all-Gdraws all-viewman \
all-view2D all-view3D all-viewAlone
<<viewmandir>>
<<Gdrawsdir>>
<<view3Ddir>>
<<view2Ddir>>
<<viewAlonedir>>
<<fileformats>>
mostlyclean-local:
clean-local: mostlyclean-local
@rm -f parabola/data parabola/graph0
distclean-local: clean-local
@
\eject
\begin{thebibliography}{99}
\bibitem{1} nothing
\end{thebibliography}
\end{document}
|