Skip to content

alfu32/k3d

Repository files navigation

Octodraw

splash.11.png

Octodraw is a Kotlin + libGDX desktop modeler for fast, direct 3D sketching. It focuses on edges, planar faces, and tool-driven workflows with precise snapping, groups (objects), and a live Groovy console for power users.

Android builds are available, the Android experience is currently optimized for external mouse + keyboard (touch-only use is limited).

img_8.png Screenshot placeholder: Console TUI

img_12.png

Get it from the Snap Store Get it from Google Play

Highlights

  • Direct modeling: draw edges, create faces, and push/pull solids.
  • Precision: snapping to grid, endpoints, midpoints, lines, faces, and guides.
  • Object workflow: group geometry into reusable object prototypes and instances.
  • Hotspot-driven visual programming for dynamic per-instance geometry behaviors.
  • Measurements: linear dimensions, numeric input, and unit-aware modeling.
  • Custom lighting and shadows with real-time controls.
  • Groovy-powered dev console and plugin system.

Screenshot placeholder: Tools + panels

Core tools

  • Select, Line, Rectangle, Surface Rectangle, Quad, Circle
  • Push/Pull, Move, Rotate, Scale, Stretch
  • Linear Dimension, Text, Paint, Object placement
  • Eraser tool (placeholder in this build)

Selection and snapping

  • Click, window (left-to-right), crossing (right-to-left), and volume selection.
  • Double-click groups to enter edit mode; double-click faces for coplanar selection; triple-click for connected geometry.
  • Snap to grid intersections/lines, endpoints, midpoints, line segments, faces, and guides.
  • Guides: G for grid guides, T for axis guides (Esc clears guides in Select mode).
  • Undo/redo: Ctrl+Z / Ctrl+Y (or Ctrl+Shift+Z).

Objects (groups and prototypes)

  • Create object prototypes from selection (Ctrl+G or Ctrl+O).
  • Place instances via the Objects panel or Object tool.
  • Edit an object by double-clicking an instance.
  • Glue-to-surface option keeps objects aligned to a picked surface during moves.

Panels and UI

  • Selection, Object Info, Objects, Model Settings, Lighting, Plugin Manager.
  • Action buttons: Cleanup, Delete, Flip Faces, Color, Lighting, Plugin Manager.
  • Command Palette (Ctrl+Shift+P) for tools and panel actions.

Built-in console (dev)

The dev console is a persistent Groovy REPL that runs alongside the GUI. Start it via the desktop launcher command:

edit --file path/to/model.octd

Inside the console, type :help and :examples for meta commands and snippets. Use app.run { ... } to mutate the model safely. Use :perf to print memory, disk, thread, and CPU stats.

Files and autosave

  • Default file: octodraw.octd in the working directory.
  • Autosaves on geometry, selection, and settings changes.
  • Model files store camera, lighting, shadow settings, units, and grid spacing.

Downloads and running

Grab the latest release from GitHub Releases and run the platform launcher:

  • Windows: octodraw-jre.cmd (bundled runtime) or octodraw.cmd (system Java)
  • macOS / Linux: ./octodraw-jre (bundled runtime) or ./octodraw-editor (system Java)

CLI commands (desktop launcher)

edit --file <path> [--size WIDTHxHEIGHT]   Open or create a model file
edit --plugins-dir <path>                 Override plugins folder
groovy <script>                           Run a Groovy script file
version                                  Show version information
update                                   Download and replace the editor jar
help                                     Show help

Build from source

./gradlew build
./gradlew :lwjgl3:run
./gradlew :web:bundleWeb

Web artifacts are written to dist/ as:

  • octodraw-<version>-webapp.{zip,tar.gz} (TeaVM/WebGL runtime shell + docs)
  • octodraw-<version>-webdocs.{zip,tar.gz} (docs-only bundle)

Documentation

Release notes

Roadmap (current priorities)

  1. M1 - UI foundation

    • Split built-in tools into Construction and Modification groups (Actions remain separate).
    • Always show tool button labels.
    • Add delayed hover popovers near controls.
    • Use floating, movable toolbars with persisted layout.
  2. M2 - OpenSCAD integration (before domain plugins)

    • Introduce a parametric generation pipeline (inputs -> generated faces/lines).
    • Add regeneration cache and invalidation.
    • Add safe execution boundaries (timeouts/errors surfaced in UI).
    • Support explode of generated objects into static geometry.
  3. M3 - Solid tools on the same backend

    • Add boolean operations (union / intersection / difference).
  4. M4 - Domain plugins on top of the core

    • Voxel plugin (voxel, volume, frame).
    • Architecture plugin (wall, slab, stair, rectangular hole workflow).
    • Mechanical plugin (gear first, then additional parametric parts).
  5. M5 - Consolidation

    • Unify plugin object lifecycle (edit/open/close/explode/update).
    • Keep robust fallback behavior when OpenSCAD runtime is missing or fails.

Status

Octodraw is an active work-in-progress. File formats and APIs may evolve as new modeling and topology features land.