chisel icon indicating copy to clipboard operation
chisel copied to clipboard

chisel

Chisel is a 3D modelling & slicing software written in Clojure, where you work directly from Clojure repl, primary by specifying parametric curves & patches (Bezier/NURBS, but curve/patch protocol can by extended by any other parametric curve type satisfying very simple interface). It includes lightweight OpenScad interoperability namespace in order to render polygons/polyhedrons described by curves/patches, also supports direct export to STL mesh.

Slicer portion consists of panel generator implementing many types of strength-to-weight optimised infills, it gets parametric patches on input and returns internal data representation of print layers/segments. This is then together with print data (map capturing all important print parameters like speed, temperature, etc.) fed into gcode generator, which emits GCODE instructions string.

What it's currently capable of:

  • Generating lightweight & strong panels/closed profiles described by parametric patches, separate full control over perimeter/core line width, each type of infill structure can be configured to great detail (for example sine modulation in Z direction, confinement just to specified interval within panel cross-section, smoothly varying infill density/thickness, etc.)

  • Automatic cutting of big patches and centring them on build platform (takes care of coordinate origin difference between circular/rectangular bed printers)

  • Automatic generation of skirt/brim for better adhesion

  • Detailed control of print parameters, start-end temperature/speed/fan-speed ranges with control of rate of change (ramp-layers)

  • Enforcing minimal layer time (print speed is progressively lowered whenever reaching the limit)

  • Batch printing of multiple copies of the same object at once

Roadmap:

  • Much better and more extensive documentation & example workflows

  • Public API reference

  • Batch printing of multiple different objects

  • Automatic option of generating support structures to tie together tall objects/close C-shaped profiles over certain (configurable) height

  • Non-planar printing, leveraging strength gains especially with fiber-filled materials, which are much stronger/stiffer in direction "drawn" by nozzle

  • Support extracting & importing Curve/Patch data from common CAD file formats (STEP/IGS)

  • Basic simple graphic interface to support manipulating parametric curves via control points, automatically reflecting those changes into code. I'm not entirely sure how that would work, basically I like working from repl even when doing CAD design for the amazing control and full power of programming language, but sometimes GUI would be helpful for initial exploration of shapes, etc.

  • Performance optimisations, there is already some work done, like caching basis functions for Bezier/NURBS curves + it's using core.matrix with vectorz impl, but some things could be much more performant when properly using matrices, etc.

Usage

Add chisel dependency to your project:

[org.clojars.janherich/chisel "0.1.0-SNAPSHOT"]

Or download/clone the repository, start repl and explore chisel.example ns for example usage.

License

Copyright © 2021 Jan Herich

This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.

This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.