A very cool tiny app! (I don't actually need it as I usually use OpenSCAD to produce my low-poly models, but you have given so much to the dev community that I wanted to support you.) Here are a few thoughts on how I think that you could make it even better!
- Mirrored mode for non-symmetrical shapes: When switched on, a second panel is added beside the first. (Also include a 'lock' button to only change the current side.) When unlocked, placing a pixel on either side will place the same color of pixel on the other, mirrored left-right. Also, when changing the height of a pixel, the height will be duplicated. When locked, changes only occur on one side. That will allow folks to make models that are substantially different on each side without needing a major rewrite of the code. ...hopefully. :grin:
- Voxel Depth: Currently, the height value creates voxels that extend to the center. I would add a second column of numbers called 'depths'. If the user control-clicks on a pixel, the voxel will have the height from the first column, but only extend behind it as far as the depth. For example, when making a car, the wheels could have a depth of 1 so that the final model won't have wheels that are a solid cylinder all the way across the car.
- Silhouette mode: Side and/or top pictures are imported/created to act as masks to further define the model by removing columns that aren't in the picture. For example, while currently if you drew a car from the side, it would have cylinders connecting the two wheels. If you also drew a front view, then the section of the cylinder between the wheels would be removed. This would make setting most of the pixel heights/depths automatic, as they would be adjusted to fit the silhouette. (e.g. If you started with a solid 32x32x32 block of pixels and added side, front, and top silhouettes of a car, it would be 90% done with the click of a button, only needing colouring and final smoothing.)
I hope that this helps!