BUGS (FIXME: Verify and move these to github) --------------------------------------------- o Some invalid DXF data gets pass the import checks and breaks the tessing code o Tesselation via GLU sometimes produces strange results o Export STL: Exports existing CGAL model even though the current model is changed, but not CGAL rendered o Look into the polygon winding and rotate_extrude() problem reported by Britton o CGAL Aff_transformation_3 doesn't support non-affine transformations (non-aff-matrix.scad) o 2D union of polygons with a touching vertex doesn't work. see testdata/scad/bugs/polygon-touch.scad STL Import BUGS (FIXME: Verify and move these to github) -------------------------------------------------------- Using STL-imported models is tricky and triggers multiple issues: (these all fail with the usual "Illegal polygonal object" error) 1) null-faces causes F6 rendering to fail while F5 rendering succeeds. (null-faces are exported by OpenSCAD). Example: adns2610_dev_circuit_inv.stl by Andrew Plumb 2) Even very simple imported STL models don't render correctly with F5 when taking a difference(), though F6 looks correct. Example: test_cube.stl by Andrew Plumb with this scad file: difference() { import_stl("test_cube.stl"); translate([2,2,2]) cylinder(h=10); } 3) More complex STL models with something simple unioned or subtracted fails rendering using F6 even though F5 works. Example: adns2610_dev_circuit_inv.stl by Andrew Plumb with the three null-faces removed by MeshLab with this scad file: union() { import_stl("adns2610_dev_circuit_inv_4.stl"); sphere(r=5); } 4) More complex STL models cannot be projected (both F5 and F6). Example: adns2610_dev_circuit_inv.stl by Andrew Plumb with the three null-faces removed by MeshLab and this scad file: projection(cut=true) { import_stl("adns2610_dev_circuit_inv.stl"); } USER INTERFACE -------------- o Preferences - Beautify color schemes - Color schemes read from file - Color scheme editor - wireframe width - pointsize - OpenGL params - Default language feature settings - Make the library search path configurable? - Turn on/off caching (advanced) o MDI - Think about how to do MDI the right way - Ctrl-W should close the current dialog, not the current main window -> implement as for Preferences? - Menu bar handling: Mac: share menubar among all top-level windows? - currentPath is global but is used by each document, e.g. parser and handle_dep. o 3D View - Improve mouse rotation/zoom/pan - Add modifier key combos to handle pan and zoom on 1 mouse button systems - Show grid - Measurement ticks on the axes that look like rulers that one can turn off and on. - 4 x split view w/orthogonal cameras? - Quick highlighting of object under the cursor in the editor - View All - Allow specifying viewpoint in the scad file - overlay indicator displaying current view mode - Use OpenGL picking to facilitate ray-tracing like features like measuring thicknesses, distances, slot thicknesses etc. - Add option to change lights, e.g. add an optional camera light - 2D objects are rendered at z = -0.1 - why? - Rewrite to use VBOs or smth. - avoid inline calculations - Rewrite to a higher-level library (e.g. OSG)? - Make navigation (e.g. zoom) available through menu entries (requested by disabled user) o Editor wishlist - More infrastructure for external editor (allow communication from the outside) - Preferences GUI for the features below - line numbers - tear-off/maximize options? - Save somehow uses current dir, even if the file is already saved earlier - Code completion/hints for builtin (and user-defined) functions/modules - builtin quick function reference/help - Drawer/popup with all modules/functions listed which can be inserted into the editor by clicking or drag&drop -> icons in toolbar? -> This would be moving in the direction of a traditional CAD GUI and needs a fair bit of thinking. - Display some kind of line wrap indicator - Couple the source code to the AST to allow highlighting selected elements in the source code in the 3D view - Tabbed editor for designs including other files - C-c/C-v should work on the focused widget, not always in the editor - Auto-indent on enter and on tab o Error reporting/debugging - Provide better error messages when polygon ordering causes CGAL errors: o Detect common error: self-intersecting polyhedron() o Supply syntax highlighting of the exact polygon indices which are reported to be wrong o Provide some interaction for debug walk-through? - Provide visual highlighting of geometry corresponding to code -> could aid debugging a lot - Optionally output console log to a file - Common error: detect and report (and ignore?) duplicate line segments in DXF o Computation - Multi-threaded computation (mostly important for CGAL) - Progress: Call progresswidget more often to improve feedback o Misc - Save: Ask for confirmation if file has been externally changed - Rename OpenCSG and CGAL to smth. not specific to the underlying libraries (e.g Preview, Render) - If trying to export STL/DXF but source is newer than the CGAL rendering, ask for confirmation. - Go through keyboard shortcuts and make them more conformant to platform standards - Show design info/stats (sizes, caches etc.) - Support Voice Over and related technologies for vision-impaired users o Cmd-line - Add verbose option (PRINT command from mainwin.cc and progress output) OpenCSG-related --------------- o OpenCSG rendering: Coincident surfaces causes z-buffer fighting. Is this somehow avoidable tuning the depth tests in OpenCSG? o When specifying a transparency with the color() statement, the object is not sorted and will be rendered wrongly. See issue #310 for some good test models. o Bug: Using the background operator (%) on the only object in a scene triggers a CSG error: No top level object found CGAL-related ------------ o Hollow donut problem When extruding a 2D CSG tree (e.g. a polygon with a hole), the hole information is lost when performing the extrusion. For linear extrusions, this has only a minor visual impact, but for rotate extrusion, the resulting CGAL models will lose the hole. The OpenCSG rendering keeps the hole, but renders slightly incorrect. o CGAL issues - CGAL doesn't handle almost planar polygons. Consider splitting into triangles ourselves. See WillamAdams/dodec.scad o Look at the EPEC kernel for improved performance (suggested by Giles) o Look at performance: Is CGAL doing proper bounding box calculation before testing all primitives? LANGUAGE && BUILTINS -------------------- o Primitives - Springs, spirals (requested by Cathal Garvey) - (TTF) Text - Image-based height field like http://www.thingiverse.com/thing:2078 - mesh (coordinates and indices) o 2D Subsystem - Performance: Is it necessary to union children before extrusion when compiling? Can this be postponed to CGAL evaluation time? - Add inset() operation o Built-in modules - extrude*: Allow the base 2D primitive to have a Z value - rotate_extrude(): Allow for specification of start/stop/sweep angle? o Advanced Transformations - Add statement for refinement via surface subdivision - Add statement for intersections in cartesian product of childs o Function-Module-Interface - Pass a module instanciation to a function (e.g. for a volume() function) - Pass a function to a module instanciation (e.g. for dynamic extrusion paths) o Language Frontend - Allow local variables and functions everywhere (not only on module level) - Rethink for vs. intersection_for vs. group. Should for loops generate child lists instead, and make these passable to other modules or accessible by child()? o Misc - center as default: Very often, center=true is used everywhere. Make a global variable ($center?) control this to beautify code and the avoid typical errors when forgetting to specify center - Go through default values of parameters (e.g. cube() has x,y,z=1 while linear_extrude() has height=100) - Add support for symbolic names to child() statement - Add 'lines' object type for non-solid 2d drawings - Is there a reason why modules like echo, empty if, empty for loop returns an empty AbstractNode instead of being ignored? - Dependency tracking of libraries (USE'd modules) isn't implemented. See Mail from nophead 20110823. o Grammar/Parser - dim->name -> dim->label - A random(seed) function - linear_extrude()/rotate_extrude(): Cumbersome names? -> (extrude, revolve, lathe, sweep ?) - If a compile error occurs in an included file, line numbers are global and doesn't say in which file the error occurred. INFRASTRUCTURE -------------- o DXF Import/Export - Use dxflib from RibbonSoft for import/export? -> investigate - Import - Support for POLYLINE entity - Support for SPLINE entity - Support for LEADER entity - Support for MTEXT entity ? - idea: DXF inline - convert from dxf to OpenSCAD syntax -> parametrize dxf content - Progress when exporting large STLs o Mesh optimization on STL export - Remove super small triangles (all sides are short) - Replace super thin triangles (one h is short) o Use a logging framework to get debugging/info output more under control? (check log4j, google project) o Export to other file formats - IGES: Should support CSG so it might be possible to keep some structure IDEAS FOR LANGUAGE CHANGES -------------------------- o More strict checking of module parameters to make e.g. this fail: module test(a,b) { a=1; b=2; echo(a,b,c); } test(c=3); (also for built-in modules) CODE ---- o Refactor from MainWindow: - Put all application-global data in one place (QApplication subtype?) - Fix current_win hack - CSG data structure (compiled model) - CGAL data structure (compiled model) o C++-ify - Use static_cast/dynamic_cast instead of C-style casts o dxflinextrude and dxfrotextrude could share code o Consider decoupling DXF-specific functionality from the 2D subsystem o Visitation refactoring - Make AbstractNode members private/protected? DOCUMENTATION ------------- o Auto-generate API documentation instead of, in addition to or combined with, the wikibooks docs. o Write checklists for typical extension work (add new module, add new function) -> syntax highlighter, test files, examples, documentation (external editor modes) o Clarify include/use better in the wikibook docs (e.g. that use'd modules have to be self-contained) TESTING ------- o Caching and MDI looks suspicious when the code relies on external resources which might be loaded from difference locations in different documents -> we might get a false cache hit o Collect "all" available OpenSCAD scripts from the internets and run the integration tests on them all MISSING TESTS: -------------- o cmd-line -D variable override o OPENSCADPATH env.variable o all functions o mirror o scale o open polyline from dxf using new method o linear_extrude DXF o rotate_extrude DXF o import_stl o import_off o import_* - open polylines o include: test subdirs under librarydir (e.g. include ) o variants of module transparent() { %child(); } o define modules o define functions o built-in variables and constants (builtin-tests.scad) o Caching - Test that caching is actually performed (speedup + same results) - Test the modifier characters correctly influence the cache (also when added/removed) - Test the individual caches - PolySetCache - CGALCache - nodecache - ModuleCache o other tests - export - cmd-line tests - leaf nodes having children, e.g. cube() cylinder(); - dependency tracking (use and include)