BUGS ---- o Some invalid DXF data gets pass the import checks and breaks the tessing code o Broken polyhedron() entities are not correctly detected and cause CGAL segfaults o Tesselation via GLU sometimes produces strange results o Non-manifold objects make CGAL crash (e.g. two cubes which touch at one edge) o Export STL: Exports existing CGAL model even though the current model is changed, but not CGAL rendered USER INTERFACE -------------- o Preferences - Beautify color schemes - Color schemes read from file - Color scheme editor - wireframe width - pointsize - OpenGL params - Default language feature settings - Auto-view CSG/thrown together on load o Export etc.: automatically add missing extension as in SaveAs 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 - Add modifier key combos to handle pan on 1 mouse button systems - Show grid - 4 x split view w/orthogonal cameras? - Quick highlighting of object under the cursor in the editor - View All - overlay indicator displaying current view mode - CSG rendering: prefer holes when coincident surfaces to avoid zbuffer fighting? o Editor - line numbers - tear-off/maximize options? - Save somehow uses current dir, even if the file is already saved earlier - Autocompletion/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. - More infrastructur for external editor (or is the reload good enough?) - Evaluate QCodeEdit (http://qcodeedit.edyuk.org) - 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 o Computation - Run CGAL rendering in a backgroud thread - Move progress bar to status bar (as in Eclipse) - Cancel rendering - Enable viewing/editing while rendering o Misc - Reload and compile: Ask for confirmation if file is locally edited (make this configurable in preferences?) - Save: Ask for confirmation if file has been externaly changed - Rename OpenCSG and CGAL to smth. not specific to the underlying libraries (e.g Preview, Render) ENGINE ------ o Primitives - Springs, spirals (requested by Cathal Garvey) - (TTF) Text o 2D Subsystem - Performance: Is it necessary to union children before extrusion when compiling? Can this be postponed to CGAL evaluation time? o Built-in modules - extrude*: Allow the base 2D primitive to have a Z value o Advanced Transformations - Add statement for 2D and 3D minkowski sum - 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) - Add "use" statement to load modules. Like include but read a module only once, ignore all top level objects (they are used as module testcase) and search in a module search path. - Add a default search path for included files to allow bundling libs o DXF 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 o Mesh optimization on STL export - Remove super small triangles (all sides are short) - Replace super thin triangles (one h is short) o Misc - Add symbolic colors to the color() statement - 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 o Grammar - dim->name -> dim->label - A random(seed) function - import_*() -> *_import() (consistent prefix vs. postfix) - linear_extrude()/rotate_extrude(): Cumbersome names? -> (extrude, revolve, lathe, sweep ?) CODE ---- o Refactor from MainWindow: - Fix current_win hack - CSG data structure (compiled model) - CGAL data structure (compiled model) o C++-ify - Use smart pointers where it makes sense (e.g. instead of homegrown refcount, and to get memory ownership under control) - Use static_cast instead of C-style casts o dxflinextrude and dxfrotextrude could share code o Consider decoupling DXF-specific functionality from the 2D subsystem o Make the interfaces from OpenSCAD and OpenCSG and CGAL cleaner to facilitate experimentation with other frameworks (ref. Nef_polyhedron_2() problems) INFRASTRUCTURE -------------- o Think about making external libraries easier available. Probably mostly convenience. o Use a logging framework to get debugging/info output more under control? (check log4j, google project) MISC ---- o Collect "all" available OpenSCAD scripts from the internets and batch convert them to STL to assist with robustness testing. o Mac OS X: - universal binary -> fix cgal and opencsg