home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-386-Vol-2of3.iso / c / ctds220.zip / CTDS220.DOC < prev    next >
Text File  |  1993-01-25  |  25KB  |  623 lines

  1.                            Connect The Dots Smoother
  2.  
  3.                                     [CTDS]
  4.  
  5.                                  version 2.20
  6.  
  7.                         Copyright (c) 1991, 1992, 1993
  8.  
  9.                                  Truman Brown
  10.  
  11.                              All Rights Reserved
  12.  
  13.                                January 15, 1993
  14.  
  15.  
  16.  
  17. ---
  18. COPYRIGHT STATEMENT:
  19. ---
  20. Connect The Dots Smoother (CTDS) is freely distributable.  There is no charge
  21. nor registration fee associated with its use.
  22.  
  23. The author retains the copyright to the program, but authorizes free
  24. distribution by electron bulletin boards (BBS'es), networks, magnetic media,
  25. etc.  If necessary, the distributor may charge no more than five dollars ($5)
  26. U.S. for distribution of this program.
  27.  
  28. CTDS may NOT be used as part of any commercial software or hardware package
  29. without the explicit consent of the author.  Interested parties may contact
  30. the author via CompuServe ID [71477,221].
  31.  
  32. The author makes no guarantees or warranties with this program and claims no
  33. responsibility for any damages or losses incurred through use of this program.
  34.  
  35.  
  36. ---
  37. INTRODUCTION:
  38. ---
  39. Connect The Dots Smoother (CTDS) is a data file generator currently supporting
  40. the following raytracer formats:
  41.  
  42. .  Persistence of Vision Raytracer (POV-Ray) - by various contributors
  43. .  Vivid Raytracer                           - by Stephen Coy
  44. .  PolyRay Raytracer                         - by Alexander Enzmann
  45.  
  46. For information about any of these raytracers, or about the art of raytracing,
  47. or the current state of computer graphics or computer art in general please
  48. visit the Graphics Developers forum on CompuServe (tm) (GO GRAPHDEV).
  49.  
  50. For those who are familiar with the art of raytracing, you know that computer
  51. generated raytraced images are created by combining and arranging basic
  52. primitives such as spheres, cylinders, boxes, etc.  Often, scenes will call for
  53. complex arrangements of primitives and it would be desirable for the connections
  54. between them to appear smooth and seamless.  Accomplishing this is quite often
  55. difficult and/or memory-intensive.  The artist may resort to the use of
  56. spline-based polygons generated by various modeling programs, or to the
  57. "packing" of primitives until the desired smoothness is achieved.
  58.  
  59. Though effective, these may or may not be the best methods.
  60.  
  61. CTDS provides another alternative.  It does what it's name implies, working like
  62. a rock-steady hand of a child connecting "dots" in three dimensional space.
  63. Given a series of 3d dot coordinates, CTDS will compute the appropriate
  64. clippings or intersections, scalings, rotations, and translations of cylinders,
  65. truncated elliptic cones, or the simple cones required to "connect the dots".
  66.  
  67. The author's original intent for this program was to aid in the creation of
  68. smooth spiral objects that could not easily be created manually using
  69. Constructive Solid Geometry.  While CTDS can simply be used to create smooth
  70. links between spheres in space (such as a spiral), people have found CTDS useful
  71. for creating everything from human heads to outer space vehicles.
  72.  
  73. Enjoy.
  74.  
  75.  
  76. ---
  77. CREATING A CTDS INPUT FILE:
  78. ---
  79. Using your favorite text editor or other CTDS-compatible modeling utility (such
  80. as SPIRAL or WORM), create an ASCII text file which contains numeric information
  81. describing the position and size of the spheres you desire to be connected.  The
  82. format should appear as follows:
  83.  
  84. [;] X-value Y-value Z-value R-value
  85.  │   │       │       │       │
  86.  └> signifies a comment line
  87.      └> defines X coordinate of the dot
  88.              └> defines Y coordinate of the dot
  89.                      └> defines Z coordinate of the dot
  90.                              └> defines radius of the dot
  91.  
  92. Example:
  93. ;This is a comment line:
  94. ;X    Y    Z    R
  95.  1.0  1.0 -3.0  1.34
  96.  2.0  2.0  3.0  1.34
  97.  3.3  1.0  4.5  2.44
  98.  
  99. Pretty simple, dontcha think?
  100.  
  101. Important points to keep in mind:
  102. .  The entire XYZ and Radius values for a sphere must appear on a single line
  103. .  Only one set of XYZ and Radius values may appear on a single line.
  104. .  The file you create must contain at least TWO lines of coordinates.
  105. .  The maximum length of a line is 80 characters.
  106. .  There may be no sequential duplications, meaning no line may repeat the
  107.    coordinates of the prior line (unless the /m parameter is selected - more
  108.    about that later).
  109.    This is a basic fact of existence: two objects cannot exist in the same space
  110.    at the same time, therefore it is impossible to connect them.
  111.    You will get errors.
  112.    And the universe will explode in a quantum meltdown.
  113.  
  114. Once you have created a dot-definition file, executing CTDS will automatically
  115. create a PoVRAY-, Vivid-, or PolyRay-compatible data file which contains spheres
  116. placed at the coordinates which you defined, as well as connecting cylinders
  117. and/or elliptic cones which will fill in the blanks between the dots.
  118.  
  119.  
  120. ---
  121. RUNNING CTDS
  122. ---
  123.  
  124. USAGE: CTDS [various optional parameters]
  125.  
  126. The optional parameters are as follows:
  127.  
  128. /i[inputfile]
  129.    This is the name of the ASCII dot-definition file which you created.  If you
  130.    don't specify a filename, the program will search for a default input
  131.    filename called CTDS.CTD.
  132.  
  133. /o[outputfile]
  134.    This is the name of the (guess what?) output file.  If you don't specify a
  135.    filename, the program will create a default output file called CTDS.POV.
  136.  
  137. /v
  138.    If specifed, this value flags CTDS to generate Vivid output data.  The
  139.    default is POV-Ray output.
  140.  
  141. /pr | /pr1
  142.    If specifed, this value flags CTDS to generate PolyRay output data.
  143.    Output format is standard sphere-cone-sphere-cone sequence.
  144.  
  145. /pr2
  146.    If specifed, this value flags CTDS to generate PolyRay output data.
  147.    Output format is union of sphere-cone-sphere-cone sequence.
  148.  
  149. /#
  150.    If specified, this value controls the level of precision for the floating
  151.    point values spit out by the program.  If no value is specified, the default
  152.    is 6 decimal places (/6).
  153.  
  154. /m
  155.    If specified, this parameter flags CTDS to create "multiple autonomous mini-
  156.    objects or mini-composites".  This is described in detail later.
  157.  
  158. /c
  159.    If specified, this parameter flags CTDS to create a connector between the
  160.    first and the last spheres defined in the input file.  Simply put, this
  161.    closes the object.
  162.  
  163. /so
  164.    If specified, this parameter flags CTDS to only output the data required to
  165.    render the spheres.  In other words, no connectors are computed.
  166.  
  167. /co
  168.    This is the opposite of /so.
  169.    If specified, this parameter flags CTDS to only output the data required to
  170.    render the connectors.
  171.  
  172. /c1
  173.    If specified, this parameter flags CTDS to only output the data required to
  174.    render CYLINDRICAL connectors (connectors with equal radii on both ends).
  175.  
  176. /bo
  177.    If specified, this parameter flags CTDS to only output the bounding data
  178.    data for POV-Ray, or the object extents for PolyRay or Vivid.  Useful for
  179.    manually optimizing bounds.
  180.  
  181. /qt
  182.    If specified, this parameter flags CTDS work without sending output to the
  183.    screen.  Useful for other applications that want to call CTDS silently.
  184.  
  185. /sc
  186.    This parameter only applies to POV-Ray output:
  187.    If specified, this parameter flags CTDS to add a block of texture transforms
  188.    to the output so that you can scale the texture separately from the object or
  189.    composite itself.
  190.       Translations use declared variables
  191.          transx1 transx2
  192.          transy1 transy2
  193.          transz1 transz2
  194.       Scalers use declared variables
  195.          scalex1
  196.          scaley1
  197.          scalez1
  198.    Change the values of these to translate or scale a composite before the
  199.    texture is applied to it.  This is useful if you need to change the location
  200.    or size of a composite, but don't desire to have the texture translated or
  201.    scaled as well.
  202.  
  203. /n[objectname]
  204.    This parameter only applies to POV-Ray output:
  205.    This is the name of the object or composite that the program spits out.  If
  206.    no name is specified, the program will automatically name your object or
  207.    composite "YourThing".
  208.  
  209. /d
  210.    This parameter only applies to POV-Ray output:
  211.    If specified, this parameter flags CTDS to NOT include the CTDS declarations
  212.    required for defining the basic spheres and connectors.  You will still be
  213.    required to have these declarations someplace however (such as an included
  214.    file).
  215.  
  216. /t[texturename]
  217.    This parameter only applies to POV-Ray output:
  218.    This is the name of the texture that is globally applied to your object or
  219.    composite.  If no texturename is specified, the program will use a default
  220.    texture called CTDS_Texture.
  221.  
  222. /s
  223.    This parameter only applies to POV-Ray output:
  224.    If specified, this parameter flags CTDS to write dots as sphere primitives
  225.    instead of quadric spheres.  If you want to be able to scale your output
  226.    unevenly, do NOT use this parameter.  Note however that sphere primitives
  227.    render faster than quadric spheres.
  228.  
  229. /bs
  230.    This parameter only applies to POV-Ray output:
  231.    If specified, this parameter flags CTDS to use spheres or quadric spheres to
  232.    bound your objects/composites.  The default is bounding by boxes.
  233.  
  234. /f#
  235.    This parameter only applies to POV-Ray output:
  236.    If specified, this value enables you to specify a percentage value to "fudge"
  237.    the bounding of your objects/composites.  This value must be greater than or
  238.    equal to zero.  If no value is specified, the program bounds with no fudging
  239.    (in other words: /f0).
  240.  
  241. /b
  242.    This parameter only applies to POV-Ray output:
  243.    If specified, this parameter flags CTDS to add a summary of bounding data to
  244.    the end of each object or composite.  This commented bounding data provides
  245.    the maximum, minimum and center extents of the object or composite and can be
  246.    used for hand-optimization of the bounding of the object or composite.
  247.  
  248. Miscellaneous usage notes:
  249. .  All parameters are optional.
  250. .  Typing CTDS with any other parameter (i.e., /h, /?, ?, /gimmeinfo) will
  251.    display a summary of the usage syntax.
  252. .  Whitespace is permitted between parameters and tokens:
  253.    (i.e., CTDS /i myinfile /o myoutfile /n NameofObject).
  254. .  Parameter token symbols are optional.  In other words /b -b and b are all the
  255.    same.
  256.  
  257.  
  258. ---
  259. USING THE OUTPUT:
  260. ---
  261. Include or copy the CTDS-generated outfile into your own .pov, .v , or .pi file,
  262. run your raytracer against it, and enjoy your image!
  263.  
  264.  
  265. ---
  266. IMPORTANT POV-Ray NOTE:
  267. ---
  268. . CTDS generates either a single object or a composite of objects using the dot
  269.   coordinates you defined.  You should inspect the output file to determine
  270.   whether an object or a composite was created.
  271.  
  272. . As noted earlier, CTDS generates objects and composites.  When objects and/or
  273.   composites are defined, PoVRAY allows them to be bounded by simpler shapes
  274.   such as boxes or spheres.  This GREATLY reduces the amount of time required to
  275.   render an image, since bounding reduces the number of tests the raytracer must
  276.   make.  CTDS automatically bounds each object and/or composite with a box,
  277.   unless you select the /bs parameter in which case it will bound with either a
  278.   quadric dot or a sphere depending upon the status of the /s parameter.
  279.  
  280.  
  281. ---
  282. IMPORTANT PolyRay NOTE:
  283. ---
  284. . /PR and /PR1 are functionally the same.  They will generate output in the sequence
  285.   of sphere-connector-sphere-connector.
  286. . /PR2 will output data in the format of a single union with the same sequence
  287.   of sphere-connector-sphere-connector.
  288.  
  289.  
  290. ---
  291. IMPORTANT PolyRay and Vivid NOTE:
  292. ---
  293.  
  294. . Specifying any of the bounding parameters (/b /bs /bo) will cause CTDS to write
  295.   a summary of the scene extents at the end of the output file.
  296.  
  297.  
  298. ---
  299. IMPORTANT developers NOTE:
  300. ---
  301.  
  302. . If you want to call CTDS from your own application, you can specify the /qt flag.
  303.   This will force CTDS to run in a quiet mode, not sending any data to the screen.
  304.   Error messages *WILL* be echoed however.
  305.  
  306.  
  307. ---
  308. OK, SO WHAT'S THAT MULTIPLE AUTONOMOUS BLAH BLAH NONSENSE?
  309. ---
  310. The purpose of multiple autonomous mini-objects/composites is to allow you to
  311. create a single file that contains specifications for several sets of connected
  312. sequences.  If you are using POV-Ray, each separate sequence is individually
  313. bounded.  This is useful for creating non-sequentially linked objects such as
  314. letters.
  315.  
  316. When reading an input file, CTDS will recognize blank lines as separators of
  317. "mini-objects".  When CTDS reads a blank line, it interprets that as a flag to
  318. end the current sequence and start a new one.  For POV-Ray, whenever a blank
  319. line is encountered, CTDS closes the current object it is processing, bounds it,
  320. and begins a new one.
  321.  
  322. It is important to note that, depending upon the status of the "/m" parameter,
  323. CTDS responds to blank lines in one of two ways.  To understand the difference
  324. in processing, let's go through an example:
  325.  
  326. Suppose you created a dot definition file with the following coordinates:
  327.  
  328.    ; This is a sample definition file:
  329.    ; TinySpiral
  330.    ; ---------------------------
  331.    ; X      Y      Z      Radius
  332.    ; ---------------------------
  333.      2.00   0.00   0.00   0.50
  334.      1.46  -0.20  -1.06   0.45
  335.      0.50  -0.40  -1.54   0.40
  336.     -0.44  -0.60  -1.36   0.35
  337.     -1.00  -0.80  -0.72   0.30
  338.     -1.05  -1.00   0.00   0.25
  339.     -0.69  -1.20   0.50   0.20
  340.     -0.20  -1.40   0.63   0.15
  341.      0.14  -1.60   0.45   0.10
  342.      0.23  -1.80   0.17   0.05
  343.      0.10  -2.00  -0.00   0.00
  344.  
  345. When the values are read by CTDS, they will be interpreted as a single object.
  346. In this particular case CTDS will create one (1) object composed of eleven dots
  347. and ten connectors.
  348.  
  349. However, if blank lines are stategically placed between the sphere definitions,
  350. CTDS will interpret the list of values as a collection of smaller objects which
  351. will be used as the building blocks of a final composite.  Each one of these
  352. smaller "mini-objects" can describe a unique "dot trail".  Each "dot trail",
  353. however, will begin where the previous one ended.
  354.  
  355.     ; This is a sample definition file:
  356.     ; TinySpiral
  357.     ; ---------------------------
  358.     ; X      Y      Z      Radius
  359.     ; ---------------------------
  360.       2.00   0.00   0.00   0.50 \
  361.       1.46  -0.20  -1.06   0.45  \
  362.       0.50  -0.40  -1.54   0.40   - mini-object
  363.      -0.44  -0.60  -1.36   0.35  /
  364.      -1.00  -0.80  -0.72   0.30 /
  365.  
  366.      -1.05  -1.00   0.00   0.25 \
  367.      -0.69  -1.20   0.50   0.20  \
  368.      -0.20  -1.40   0.63   0.15   - mini-object
  369.       0.14  -1.60   0.45   0.10  /
  370.       0.23  -1.80   0.17   0.05 /
  371.  
  372.       0.10  -2.00   0.00   0.00   - mini-object
  373.  
  374. In this case CTDS will create three mini-objects -
  375. one for the first block of coordinates
  376.    [2.00, 0.00, 0.00, 0.50] through [-1.00, -0.80, -0.72, 0.30],
  377. one for the second block of coordinate
  378.    [-1.05, -1.0, 0.00, 0.25] through [0.23, -1.80, 0.17, 0.05],
  379. and one for the last set of coordinates
  380.    [0.10, -2.00, 0.00, 0.00].
  381.  
  382. Thus each mini-object fits into the whole, much like a piece in a jigsaw puzzle.
  383.  
  384. You can probably get a clearer understanding if you visualize the sequence in
  385. which CTDS builds each mini-object and then the whole composite.  When the "/m"
  386. parameter is not specified, as in the previous example, CTDS will process the
  387. dot definitions within each block in the sequence of:
  388.    DOT-CONNECTOR-DOT           (1st mini-object) ...
  389.    CONNECTOR-DOT-CONNECTOR-DOT (subsequent mini-objects) ...
  390.  
  391. When the "/m" parameter is selected however, each grouping of dot definitions is
  392. treated like a separate puzzle instead of another piece of the main puzzle.
  393. These groupings are the multiple autonomous mini-objects.
  394.  
  395. CTDS will process the dot definitions within each block in the sequence of:
  396.    DOT-CONNECTOR-DOT           (all mini-objects) ...
  397. such that each mini-object begins with the first dot definition for that
  398. particular block and ends with the last dot definition of that particular block.
  399. This allows you to specify different starting and ending points for each block
  400. of definitions; thus these mini-objects are referred to as "autonomous".
  401.  
  402. While these autonomous mini-objects will still be utilized for building the
  403. final composite, they provide a different flexibility for defining the item you
  404. wish to create.
  405.  
  406. The two primary benefits of this are:
  407. . you now can create multiple mini-objects that fall under a single composite
  408.   and a single, easily accessed texture statement; and
  409. . multiple "dot trails" can be defined emanating from a common coordinate.
  410.  
  411. The one drawback of this is that since each mini-object is supposed to be
  412. autonomous, it will always begin with a dot.  Thus, if you use the "/m"
  413. parameter to perform branching, where each "dot trail" emanates from a common
  414. coordinate, the initial dot of each branch will be overloaded (duplicated),
  415. requiring manual editing of the generated data file to remove that initial dot
  416. from the branches (if you feel so inclined of course).
  417.  
  418. A final point to note is that the "/c" parameter will always connect only the
  419. first dot definition of the infile and the last dot definition. It will NOT
  420. connect the beginnings and endings of autonomous mini-objects.
  421.  
  422. If the use of "/m" is is still unclear, just play around with it and see what
  423. happens (what a cop out, huh?).
  424.  
  425.  
  426. ---
  427. MISCELLANEOUS STUFF:
  428. ---
  429. . For POV-Ray output, the bounding boxes, spheres, or quadric spheres generated
  430.   by CTDS should enhance the speed of rendering your complex images.  A default
  431.   "fudge factor" of 0 percent is built into the bound limits.  Depending upon
  432.   the irregularities of the shape you are trying to create, this may or may not
  433.   be enough.  You may notice large portions of your object are missing where the
  434.   bounds fail.  As explained earlier, CTDS can append a summary of statistics
  435.   about each mini-object and composite so that you can manually
  436.   optimize/customize the bounding shape as you see fit.  Additionally, the
  437.   command line parameter "/f#" allows you to specify a different percentage for
  438.   the fudge factor (i.e., /f20 for a 20 percent fudge factor).
  439.  
  440. . While CTDS will do its best to smooth out the spacing between dots, a low
  441.   density of spheres will still create a somewhat "bumpy" image.  This is a fact
  442.   of life: if you want better quality you have to pay for it.  In this case, the
  443.   costs are increased dot density and increased CPU time.  Keep in mind that
  444.   there is basically a one-to-one relationship between the number of dots and
  445.   the number of connectors generated.
  446.  
  447. . A final point to note is that when attempting to create smooth curves, the
  448.   (external) side of the curve farthest from the radius will appear smoother
  449.   than the (internal) side closest to the radius.  This is because the
  450.   connectors (cylinders and cones) are basically straightedges and will
  451.   intersect at sharp angles when they meet.  In the case of curves, they meet on
  452.   the internal side of the curve and do not meet at all on the external side.
  453.   If the sharp angles bother you, increase the density of the dots.
  454.  
  455.  
  456. ---
  457. CONTENTS:
  458. ---
  459. Files included in the package:
  460.    CTDS220.EXE         The program
  461.    CTDS220.DOC         The documentation
  462.    CTDS.CTD            Sample CTDS input file
  463.    POVRAY.CTD          Sample CTDS input file
  464.    VIVID.CTD           Sample CTDS input file
  465.    POLYRAY.CTD         Sample CTDS input file
  466.  
  467.  
  468. ---
  469. HISTORY: (the life of a small program)
  470. ---
  471. 01/22/93: CTDS v2.2
  472. . Changed /x to /pr[#] for PolyRay output
  473. . Added /bo to output bounds only. Writes object extents for PolyRay and Vivid.
  474. . Rewrote main processing function of program for easier maintenance.
  475. . Changed default bounding primitive from spheres to boxes.
  476. . Added /bs parameter to allow bounding by spheres.
  477. . Rewrote commandline parser for easier maintenance
  478. . Changed /t parameter (connectors only) to /co
  479. . Changed /p parameter (spheres only) to /so
  480. . Added /t option for a named texture
  481. . Shuffled various functions around, deleted a few, optimized a few
  482. . Fixed a big bounding bug.  Minimum values for bounding weren't working right.
  483.   Now they are.
  484. . Minor rewrite of documentation.
  485.  
  486. 12/20/92: CTDS v2.0c Macintosh port [Eduard Schwan]
  487. . Changed YourTexture to CTDS_Texture
  488. . Changed YourTransform to CTDS_Transform
  489.  
  490. ??/??/92: CTDS v2.0d
  491. . Fixed bug in declaration of roughness for POV-Ray declarations.
  492.   Mixed up stuff, can't remember when this was done.
  493.  
  494. 05/09/92: CTDS v2.0c
  495. . Added /SC parameter to perform scaling of composite prior to application of
  496.   texture.
  497. . Translations use declared variables transx1 transx2
  498.                                       transy1 transy2
  499.                                       transz1 transz2
  500.   Scalers use declared variables      scalex1
  501.                                       scaley1
  502.                                       scalez1
  503.  
  504. 05/02/92: CTDS v2.0b
  505. . Fixed a major bug that nobody ever complained about - dot sequences flowing
  506.   from small dot to large dot were not being connected properly
  507.  
  508. 04/12/92: CTDS v2.0
  509. Major code rewrite:
  510. . cleaned up source logic; cleared out a lot extraneous nonsense
  511. . removed DKB Raytracer output option -- outdated
  512. . fixed bug in generating null composites
  513. . added /b parameter; made bounding stats optional
  514. . added /c1 parameter; force usage of cylindrical connector only
  515. . changed default fudge factor to 0 percent instead of 10
  516. . changed default filenames to CTDS.CTD and CTDS.POV
  517. . Jumped to v2.0 just for the hell of it.
  518. . Removed some examples from documentation; was too confusing.
  519. . Resubmitted source to PoV-team for inclusion in PoV 1.0 utilities.
  520.  
  521. 04/12/92: CTDS v2.0a[ddon]
  522. . PolyRay output added by Alexander Enzmann.
  523.  
  524. 02/15/92: CTDS v1.17a
  525. . Cleaned up spheres-only output.
  526.   Not publicly released.
  527.  
  528. 01/21/92: CTDS v1.17
  529. . Made PoV 1.0 syntax-compliant.
  530. . Submitted source to PoV-team for inclusion in PoV 1.0 utilities.
  531.  
  532. 01/16/92: CTDS v1.16
  533. . Added Vivid support.
  534. . Added option to generate connectors only.
  535. . Made command line more flexible (major rewrite of parser).
  536. . Changed default filenames to VALS.COR and SMOOTH.INC.
  537. . Minor bug fix in /c parameter.
  538.  
  539. 12/22/91: CTDS v1.15
  540. . Removed option to choose whether to use CLIPPED_BYs or INTERSECTIONS.
  541. . Added option to generate spheres only.
  542.   Not publicly released.
  543.  
  544. 11/15/91: CTDS v1.14
  545. . Added option to choose whether to use CLIPPED_BYs or INTERSECTIONS.
  546.   Not publicly released.
  547.  
  548. 09/19/91: CTDS v1.13
  549. . Modified to default to POV-Ray compatibility.  Uses CLIPPED_BYs instead of
  550.   INTERSECTIONs for faster renderings.  DKB output still uses INTERSECTIONS.
  551.  
  552. . Added error message when /m and /c parameters are used together.
  553. . Revoked shareware constraint, now an official POV-Ray utility.
  554.  
  555. 08/24/91: CTDS v1.12
  556. . Added whitespace flexibility in commandline.
  557.   Not publicly released.
  558.  
  559. 07/30/91: CTDS v1.11
  560. . Minor bug fixes.
  561.   Not publicly released.
  562.  
  563. 06/30/91: CTDS v1.10
  564. . CTDS now generates mini-objects and a final composite instead of UNIONs.
  565. . CTDS automatically bounds the mini-objects and composite.
  566. . Added additional optional command line parameters:
  567.    - /m:  multiple autonomous mini-objects
  568.    - /d:  do NOT generate initial dot and connector declarations
  569.    - /s:  use spheres not quadricS
  570.    - /n:  user defined objectname
  571.    - /f#: fudge factor for bounds
  572. . Rewrite of documentation
  573.   Minor bug fixes.
  574.  
  575. 06/14/91: CTDS v1.10beta
  576.   Not publicly released.
  577.  
  578. 05/20/91: CTDS v1.00
  579. ! 1st Official release
  580.  
  581. 05/01/91: CTDS b0.90
  582. . Added command line option for user-specified input and output files.
  583.  
  584. 04/14/91: CTDS b0.70a
  585. . Algorithm modified to work with DKB 2.10.
  586. . Corrected error in Z axis rotation that resulted in "divide by zero" error.
  587.  
  588. 04/01/91: CTDS b0.70
  589. . Tangent compensations implemented.
  590. . All axis rotations fully functioning.
  591. . SPIRAL (c) value generator written to test results.
  592.  
  593. 03/25/91: CTDS b0.60
  594. . SMOOTHER renamed to CTDS.
  595. . Full screen interface replaced by command line implementation.
  596. . DKB rotations recognized as reversed from documentation.
  597. . Tangent compensation algorithm developed with assistance from Jim Castro.
  598.  
  599. 03/02/91: SMOOTHER b0.50
  600. . Hard disk crash!  No backups.  Preliminary test versions lost.
  601.  
  602. 01/15/91: SMOOTHER b?.??
  603. . The idea is born.  Math research begun.
  604.  
  605.  
  606. ---
  607. CREDITS:
  608. ---
  609. I wish to thank:
  610.  
  611. My wife Madrid for her patience and love.  Obsessed programmers / trace-aholics
  612. can be miserable to live with.
  613.  
  614. My kids Jamaica, Martinique, and Savannah for letting Daddy hog the PC.
  615.  
  616. Jim Castro, Math Specialist of California State University, Northridge for his
  617. assistance with the basic geometric algorithm.
  618.  
  619. Alexander Enzman for implementing PolyRay support.
  620.  
  621. Eduard Schwan and Jim Nitchals for porting CTDS to the Macintosh.
  622.  
  623. Heinz Schuller for beta testing Vivid output.