SVBugsAndWishes.doc Last edited by Bier on January 2, 1983 3:19 pm Author: Eric Bier on December 13, 1982 11:56 pm Contents: A Description of the many ways Solidviews could be more wonderful. Each will be given a general classification such as Bug, Easy Feature, Intermediate Feature, Complex Feature, Point of Style, Performance. [Bug] NameAlreadyExists. Various copying and adding operations can produce this signal. It should always be caught. It is not always caught. [Bug] When the Selected Viewer is Deleted, the editToolData.currentViewerTool points to trash. Unless the user explictly selects another viewer, errors occur. System should either reselect another viewer or nil out the selection. [Bug] I have seen the scratchpad complain "only 30 points allowed in a linear sweep" when only 15 points were on the screen. I have not been able to reproduce the bug, however. [Bug] Floating Point Fuzz. When revolute sweeps are made from polygons, the parts are classified as either cylinders, cones, or disks depending on whether the line of the polygon is horizontal, slanted or vertical respectively. It tests this by using the angle theta of the TrigLineSeg formed by the polygon endpoints. However CylinderFromTrigLine tests again using the x coordinates of the segment endpoints. These tests don't always agree. [Bug] The nature of the tree building process in Solidviews necessitates adding composite assemblies and then adding children to them. If a composite assembly has no children at the time of a ray tracing (and hence pointing) operation, an error results. DisplayListToTreeImpl must be updated to work around this problem. [Bug] In order to make some of my thesis illustrations, I rewrote SVViewerUser.DrawScene (or something it calls) so that when the "Coords" button is video-reversed, DrawScene will draw the coordinate system of the assembly named next to "Assembly:" in the edittool. This doesn't work when double buffering, or if the scene is redrawn due to an edittool command. It should probably be rewritten to draw all coordinate systems again for the time being. [Warning] Solidviews tries to save calculations by doing matrix multiplications only at drawing time. Make sure that SVTransforms.TellAboutCameraAndWorld is called before you do operations which rely on knowing the correct position of an assembly in WORLD. Even this will not always be adequate since TellAboutCameraAndWorld only updates the assembly coordinate systems. Some mechanism must be provided which will take care of updating the primary and secondary selections as well, for instance. It is also somewhat strange that a ray tracing tree must be calculated whenever a bounding box is needed. This is due to the fact that bounding boxes are unioned, intersected, and differenced as are their objects. It might be desireable to separate this mechanism from tree building. [Warning] Ray Tracing code was not written to handle cases where two surfaces are hit at exactly the same value of t. The code won't break but it is indeterminate as to which the system will consider itself to have hit first. This can be a real bummer when the difference operator is in use. However, the UofR style regularized set operations may be quite difficult to implement. [Complex Feature] To help the designer with mapping 2d images onto surfaces, there should be a quick way to show (on the shaded approximation) where the image will go. For instance, the bounding rectangle of the ais file might be painted onto the object with ray casting or projected on by projecting its lines onto the approximation planes. [Performance] After each editing command, Solidviews checks to see if this is the sort of command which means the file has been edited. If so, the newVersion bit is set and the header is refreshed. This need only be done if the bit was previously false. [Performance] Use a dodecahedron or icosohedron as the boundhedron for spheres instead of a hexagonal prism. [Performance] On [Indigo]<Solidviews> somewhere is FastMatrix3dImpl.mesa. I was trying to make Matrix3dImpl.mesa even smarter about when it doesn't have to do real multiplications. Of course, the multiplications by zero which I get rid of may not cost very much. Anyway this project should be finished (or started over). [Easy Feature] Torus Raycast. Needs some mathematical tightening. See below. [Bug/Intermediate Feature] I have implemented the Cubic Formula and most of the Quartic Formula from Lyle Ramshaw's National Bureau of Standards Mathematics reference text, pgs 17 and 18. The part about getting the signs right is not finished. It should be written and tested somehow. Then torus ray casting may work better and faster. [Point of Style] Currently Sweep shapes are represented completely as a mesh of points. It happens that the last column of this mesh for revolute sweeps (the top layer for linear sweeps) contains the defining polygon of these sweeps. This does not lend itself to readable. The defining polygon should probably be defined separately. This will make sweeps a little "heavier" of course. [Easy Feature] It should be possible to draw one assembly without drawing the scene. DisplayList3d already supports this. It should be brought forward to the interface. [Easy Feature] Camera Tilt. Currently, the camera can have a point of focus and an origin changed. It should be possible to specify and angle of tilt. [Easy Feature] Add a Reset button which restores the scene to the way it was when the scene was last saved. Actually, reloading does the same. Maybe this would be a waste of a button. [Easy Feature] Change Solidviews to load the current selection and eliminate the Pic: slot on the viewer tool. Then the feature above becomes necessary again. [Easy Feature] Making a primary selection should probably load the name of the selected assembly into "With Respect To:" and the secondary selection should load "Assembly:". [Easy Feature] DisplayList3d already implements a MergeSceneIntoScene Feature. This should be brought forward to the interface. [Easy Feature] Decouple surface reflectance (plastic or chalk) from surface color. This will allow changing the material of a complex assembly without having to A) for each part do GetArtwork!, change material and SetColorArtwork (or worse SetBoxArtwork) or B) set whole assembly to the right material and one color and reset all of the rest of the colors. [Easy Feature] It should be possible to change the resolution of an ais artwork, or change its background color without losing the information about where the ais file was positioned (translation and rotation). [Intermediate Feature] Most objects, when they make their rayCastBodies, define a number of surfaces (such as conical and disk for a cone). These surfaces are past to ray casting so that, if desired, mapping functions can make use of the knowledge of surfaces in painting. This part of a rayCastBody could be made manditory for all shapes. It could be used to draw a cube with different colors on each of its 6 faces for instance. [Intermediate Feature] Use ray tracing to implement a hidden-line drawing style. [Intermediate Feature] Some hooks are already in place to allow objects to be invisible while still being part of the scene. This will speed up redrawing by not drawing pieces which are not currently of interest. DisplayList3d.Assembly has a "Tool" bit to declare that an object is around as a tool (a plane tool gives you something to point at to help position another object) and a visible bit (the object is part of the scene but is not currently visible). This facility should be developed and brought forward to the interface. [Intermediate Feature] The relationship between the Scratchpad and the ViewerTool is somewhat strange. The Scratchpad must be in "NewLin" mode while you design a linear sweep, etc. It would be nice if you could use think of the tool as designing polygons with or without symmetry constraints and use either sort to define either a linear or revolute sweep (Perhaps the symmetry mode could even toggle during the design of a polygon. Making symmetrical polygons into linear sweeps seems to be a particularly popular idea. [Intermediate Feature] Speaking of pointing at surfaces. The primary and secondary selections should have a name and should be accessible by typing their names next to "Assembly:" or "With Respect To:" in the edittool. One often desires to rotate about them, for instance, after the secondary selected assembly has been made tangent to the primary selected assembly. [Intermediate Performance] I believe SVTransforms still implements TellAboutCameraAndWorld in the inefficient NlogN manner instead of the N manner. Reimplement so that each level of transforms uses the level before instead of recalculating it. [Intermediate Feature] Experiment with redrawing only the assembly which changed (and perhaps others which intersect its bounding box). [Complex Feature] It should be possible to point at the artwork and have a coordinate system (or other cursor) show where on the object surface that point of the artwork will go. By extension, it should be possible to draw the boundaries of the artwork (ie the edges of the unfolded box) onto the surface of the object. [Complex Feature] Like Tioga, Solidviews should have an Edit History facility and an Undo command. In addition to aiding the user in editting, the edit description language which would be developed to support such a tool could be used to write a "Torture Test", a set of edits which tests much of the solidviews code. It could be run after major system rewrites to quickly find any bugs which may have been introduced. [Complex Feature] Implement Reentrant Polygon Clipping or something similar to make the approximation style work properly. The richer list of polygons which each primitive assembly will have to provide to the Solidviews kernel to make this work will probably include a surface normal making the DrawNormals procedure in the Shape Class Interface obsolete. [Complex Feature] Pointing at surfaces is great. Sometimes you wish you could point in a constrained fashion, ie to the nearest point on the surface which is hit by one of the axes of the coordinate system of the object (which buys you the center of the disk of a cylinder or the center of the faces of a block, etc.) [Complex Feature] Anti-aliasing. [Complex Feature] Improved lighting model. [Complex Feature] New master object classes. [Complex Feature] Program ray tracing to use RPC and multiple dorados. [Complex Feature] A hidden line drawing style based on ray tracing. Look for discontinuities in the surface normal. Can probably be made significantly faster than shaded ray tracing. [Complex Feature] Implement the plane as a simple surface for mappings. The S mapping is trivial. Try stereometric and orthogonal projection O mappings. A good way to make a sphere look like Jupiter given a picture of Jupiter (orthogonal projection).