FEATURE REQUESTS ---------------- SHORT-TERM MUST DO ================== 1. All-the-way-through working UI to go from Python .CAD to rendered 3D images. (DONE!) 2. All-the-way-through UI to do the same for 2D geometry. (web PHP?) 3. Toolpath generation for 2-D tools. (apparently the grassfire toolpath algorithim has a fatal flaw?) (it works in most practical cases, but we should fix it later. -- David) 4. Output to laser cutter, waterjet, etc. ported from cad.py 5. Clear documentation of all build dependencies --- procedure to build from scratch. 6. Get web interface (amy PHP) into version control. (DONE!) In web interface, keep previous settings in one session by fixing postdata thing. Ability to list files and select one from list to edit by clicking Think about scheme for curated vs. non-curated libraries (DONE) Creating + documenting library functions (k_french) 2D version of render Rename things: 0 Fastest, Worst (Minimal) 1 (Smooth Surfaces) 2 Slowest, Best (Sharp Edges) resolution smller is slower, Smallest Feature Size bb dim javaviewer auto reload (DONE) kill java splash screen (amys) fix bumps onto Level 2 objects ability to click points in javaviewer and get their location / vertex # and surface normal vector wireframe mode box next to render for which part you want to render (DONE!) textures/colors? via viewer KAF -> (DONE) ******* have viewer show multiple STL, each with center coords, (rotation?) and color/texture. (DONE) ability to specify multiple things in python mutltiple objects to render multiple output // model description // make assembly from models part1 = x^2 + y^2 < 5 part2 = cylinder use part1 use part2 accomodate model metadata such as part1.origin = (0,1,0) part1.rendercolor = red... allows for multiple parts (not all & as one string) on stdin, math_string_to_stl could take: part1.function = foo; part1.color = black; part1.location[0] = (x,y,z) part1.location[1] = (x2,y2,z2) // fabrication epilog_file(part1) epilog_file(part2) problem is presenting a clean, easy-to-start but powerful, efficient assembly mode **** exexfile / use alias easy-to-identify button leading to nice, clear readable in 20 seconds getting started page (DONE) trap for empty and display welcome screen LONGER-TERM =========== 1. Fix problems with single-triangle inclusion errors in rendered object. Is a SAT solver needed to make sure all verticies are classified to a point? Or is there a simpler logic bug or floating point roundoff error that results in points getting misclasified? 1. Color rendering of objects with multivalued math string? 2. Hybrid program combining clicking to more anchor points with writing code to describe objects that allows high-speed circuit board routing and artistic playing but also allows arbitrary shape generation through code and easy automation of tasks through code, and documents the whole object in human-readable text. (Forrest has a good plan.) 3. Add a parametric variable, t, ranging from [0,1], and a syntax where the object gets rendered everywhere the expression is true for any value of t. This would allow spirals, extrusion of 2-D geometries along 3-D linear paths, etc. which are not currently possible with the implicit function format. 5. Improved expression support: Support for powers other than 2, exp, and ln functions. (and automatic differention of these functions.) Because ln and power are undefined on some ranges, this might be slightly tricky, but we can probably do something sensible. (right now we deal with the same problem that / is undefined if the denominator is 0 with no problems --- one approach would be to explicitly introduce branch cuts into expressions where the function might be undefined by modifying the math string with booleans; e.g. ln(x^2) > 4 --> (x^2 > 0) & ( ln(x^2) > 4 ) 6. Expression pruner could be improved. One simple change is to add pruning of multiplication by 0 and 1, addition/subtraction of 0. This might help a lot to improve speed of normal calculation in derivatives. Beyond this, all kinds of fancy compiler-type optimizations could go in --- but need to be careful they speed up rather than slow things down. 7. Javaviewer could use a download progress bar. (DONE!) 8. Could explicitly identify edges and corners (using clause table) and allow wireframe object display. 9. Could speed up by checking for a large angle between triangles before bothering to check if they span a face. 10. Ability for use to abort rendering in web interface 11. Ability to upload files 12. deal with BW constraints 13. server permissions / security / trap for rm * in python code 14. kokompe.org goes to phmgrid1, password protection? kokompe.cba .. 15. Scratch integration --- because scratch is a web-based coding environment. 16. write code in your favorite language (e.g. matlab, C, etc.) buttons/ hash-bang to select which language you are using in editor run gcc / octave / f77 / java BUGS ---- 1. Little inclusions on edges --- unknown cause -- find+fix. 2. trimesh: Rendering on a non-cubic region causes a bizzare directional incorrect-noral artifact. This is clearly visbile rendering the unit sphere on -.5 .5 -1 1 -1 1. A short term workaround is to always use cubic regions: this isn't much of a performance hit, due to the octree. Longer term, we should find out why---this may point the way to other bugs. (WORKED AROUND: PHP ONLY ALLOWS CUBIC REGIONS.) 3. javaviewer: Rendering an object on a domain that is all full or all empty results in an empty STL file (84 bytes long, 80-byte header plus 4-byte zero facet count) which causes javaviewer to display its deafult image of the teapot. (FIXED!) 4. javaviewer: Should properly handle I/O exceptions by printing a helpful error message, should not display teapot on bad URL's. (FIXED!) 5. Inccreasing text size in Mozilla on ara's machine causes line numbers to get messed up --- line numbers box needs to be size of browser