Skip to content

Ideas for Development Tasks

Dima Pulkinen edited this page Jan 31, 2024 · 38 revisions

This is a list of ideas for relatively stand-alone development tasks which would be possible to tackle for new developers.

The "big" projects

Issue Handling

There are a lot of open issues with very varying difficulty and time needed to solve. It would be very helpful and also very educational to spend some time managing issues.

Suggesions:

  • Devise a scheme to categorize issues making it easier to choose tasks.
  • Handle incoming issues and communicate with reporters to be able to categorize issues to the point where it's possible to fix it without further communication.
  • Select issues with suitable difficulties and fix them.
  • A document or other means to ensure essential information is logged with issue reports (version, OS info, checklist etc) - maybe a Help/Dump command to output relevant state info??

Once issues reported by users are being fixed, we can push out snapshot binaries daily, to provide users with the opportunity to test and give feedback on fixes. This would be a very nice positive feedback loop for students.

Difficulty: Easy to get started, can scale to any difficulty as wanted

Test Framework Improvements

We have a black-box regression-testing framework in place. It includes ca. 700 tests, testing various output from a number of test drivers, including using the OpenSCAD binary itself as a test driver. Most of the tests actually render 3D models into images and do a fuzzy (ImageMagick) image compare to check for regressions. Some tests also look at text-representations of evaluated CSG trees to look for front-end regressions.

Since the test framework was retrofitted into OpenSCAD, there are a number of features not being tested. This includes basic language features, function implementations, and probably some modules.

A preliminary list of missing tests is maintained at the bottom of https://github.com/openscad/openscad/blob/master/doc/TODO.txt

Difficulty: Easy to get started (no C++ needed), next level would cmake/ctest/python to handle the test framework

User interface brushup

The user interface could need a general brush-up (it's written in Qt). While at it, improvements could include

  • Improve 3D interaction: better mouse interaction, render grids, better wireframe
  • Add more GUI items to Preferences
  • Rework menus (they're a bit messy)
  • More well-behaved MDI across platforms
  • Improve accessibility (Qt5 is supposed to support this much better than Qt4)

Difficulty: Relatively easy - especially if there is already Qt experience.

Persistant caching

OpenSCAD caches intermediate results in memory (polygon meshes and CGAL objects). The cache keys are hashes on the evaluated CSG trees themselves. We'd like to implement a file-based cache which is persistant over time, as well as having the potential of being shared between users (by making it available online).

Difficulty: Medium. Caches are relatively well handled internally, so a similar interface could be used.

OpenSCAD Standard Library

OpenSCAD comes with a number of basic built-in primitives and operators. When creating 3D designs it would be useful to have access to a library of commonly used parts and techniques. One way of improving the current situation would be to define an OpenSCAD Standard Library. This would include well-defined, orthogonal, well-tested and well-documented components. All components would be user-space OpenSCAD code.

Some initial attempts, as well as ongoing work is being on in scad-utils and the dev branch of MCAD.

Difficulty: Medium. The main challenge is to have good enough structure, documentation and testing in order to have trustworthy and useful components.

Larger tasks for particularly experienced people

These require deeper refactoring of the existing code base, longer discussions with subsequent consensus, as well as defining their scope in the first place:

Replace evaluation engine

Research possibilities for replacing our evaluation engine with an existing one (V8, scheme, Lua etc.)

Multi-material support

https://github.com/openscad/openscad/wiki/Multi-material-support

Asynchronous calculation

Sometimes, it's important to be able to prove near instantaneous previews, while rendering heavier components in the background. We want support for using placeholder objects which are successively replaced by real objects as they finish rendering.

Difficulty: Relatively hard. Might require a fair bit of refactoring. Rendering would be done off-screen. Threading might be an issue.

Improve STL import

OpenSCAD fails on border-case STL models. This is typically caused by things like co-incident vertices caused by floating point inaccuracy. To improve this, this is the suggested path:

  • Refactor the internal mesh representation (core developer task)
  • Write some simple mesh-repair methods; e.g. co-indicent vertex removal (look at e.g. MeshLab for typical operators, as well as implementation hints)
  • Look at opportunities for implementing surface optimization techniques (e.g. null-decimation)
  • Extend the mesh representation as needed

Difficulty: Medium, but could be relatively isolated once the refactoring is in place

Interactive Editor

An often requested feature on the Mailing-List is to allow more interaction in the text editor. One example is to change number literals while the cursor is positioned at the number.

Keyboard: Command-Up/Down key +1 / -1 Command-Shift-Up/Down key +0.1 / -0.1

Mouse (quote from the post): "For example if I had a literal of 1.02 and the cursor was between the 0 and the 2, pushing the mouse wheel should increment the literal in 0.1 increments. The mouse wheel would normally scroll the text so perhaps this functionality should be via a keyboard modifier (alt?)."

Basic language features

Geometry features

Line and point geometries

New functionality

SVG import

Today we support DXF import for 2D data. SVG is a much more widely used format for this. Importing needs to be robust and well tested. We already have preliminary SVG support as an experimental feature and this needs to be finalized and robustified.

Difficulty: Relatively straight-forward. Needs to be structured and pay close attention to testing. Experience with vector tools like Inkscape and Illustrator is a plus

AI import (Illustrator)

A lot of people appear to be using Adobe Illustrator to draw vector graphics, especially students who get access to Illustrator through school.

Difficulty: Intermediate. A bit tricky to test against various version of the proprietary .ai file format. Idea: Layer this on top of the SVG importer.

Resources:

OBJ import/export

For import, see https://github.com/openscad/openscad/issues/351

New GUI Features

Infrastructure/Refactoring/Optimization opportunities

No implicit union

See https://github.com/openscad/openscad/issues/350

Clone this wiki locally