Skip to content

pier-bezuhoff/Dodeclusters

Repository files navigation

Dodeclusters ֍

License: GPL v3 Static Badge GitHub Actions Workflow Status

Circle-based vector graphics editor

Dodeclusters

Features

♾️ Infinite canvas, infinite zoom, infinite precision*
⬤ Powerful circle geometry instrumentation: treating points, circles and straight lines uniformly
💬 Simple & intuitive design with interactive tips & brief descriptions
💯 Cross-platform (mobile + desktop + browser)
🌲 Dynamic expression-dependency tree
📜 Undo/redo history & auto-save
💾 Custom YAML-derived file format + Safe SVG export
✌ Smart gestures: drag-and-drop, swipe coloring & swipe selection, keyboard shortcuts
🌘 Light/dark mode (WIP, for now as a URL argument ?theme=light or ?theme=dark)

*: objects are related via dynamic expressions and child nodes' formulae are recalculated when moving parents or zooming in/out

Built with Compose Multiplatform, targeting

  • Desktop (Windows, Linux)
  • Android 7.0+ (SDK 24+)
  • Web (via Wasm)
  • macOS/iOS if ever get an Apple dev account (have to notarize/staple binaries), for now only works as a web app

End goal

Combine interactive designs ~ Geogebra
with vector graphics editor ~ Inkscape
and specific type of animations ~ Möbius transformations and possibly Lie sphere geometry

Note

This project is in beta, beware of bugs and breaking changes

Installation

Live deployed here from the github-pages branch.
Executables for Linux, Window and Android can be found in the assets attached to the latest release or on Google Drive.

Windows

  1. From the latest release go to assets and download windows.zip
  2. Unarchive it
  3. In folder com.pierbezuhoff.dodeclusters find file com.pierbezuhoff.dodeclusters.exe
  4. Run it! That's it~ (it is bundled with JVM)

Linux

  1. From the latest release go to assets and download linux.zip
  2. Unarchive it
  3. Go into folder com.pierbezuhoff.dodeclusters/bin, you'll find executable file com.pierbezuhoff.dodeclusters
  4. chmod +x it and you can run it as ./com.pierbezuhoff.dodeclusters (bundled with JVM)

Android

You can find the apk in the assets attached to the latest release.

Note

Bundled binaries are likely behind web version

Keyboard shortcuts

  • Ctrl + A: quickly select/deselect everything
  • Delete, Backspace: delete selected objects
  • Ctrl + V: duplicate selected objects
  • Ctrl + +, Ctrl + =; Ctrl + -; mouse wheel: enlarge/shrink selected objects or zoom in/out
  • Ctrl + Z: undo ↶
  • Ctrl + Y: redo ↷
  • Esc: cancel any ongoing constructions
  • M: go to Drag mode (~ Move)
  • S: go to MultiSelect mode (~ Selection)
  • R: go to Regions mode
  • T: open Transform tools
  • C: open Create tools

Build and run via Gradle

Important

Requires JDK 17

Run desktop app

./gradlew :composeApp:run

Run web app (dev)

./gradlew :composeApp:wasmJsBrowserDevelopmentRun

Package for Windows/macOS/Linux

Build platform-dependent package (e.g. run thru Github Actions using corresponding OS):
./gradlew composeApp:createDistributable
output directory: composeApp/build/compose/binaries/main/app/
Same + use ProGuard to minify:
./gradlew composeApp:createReleaseDistributable
output directory: composeApp/build/compose/binaries/main-release/app/

Individually:

  • ./gradlew packageReleaseMsi
  • ./gradlew packageReleaseDmg + notarize/register (requires Apple dev acc)
  • ./gradlew packageReleaseDeb
    output directory: composeApp/build/compose/binaries/main-release/app/

Package for web browser

./gradlew wasmJsBrowserDistribution
output directory: composeApp/build/dist/wasmJs/productionExecutable/

Package development version for web

./gradlew wasmJsBrowserDevelopmentExecutableDistribution output directory: composeApp/build/dist/wasmJs/developmentExecutable/

Generate debug .apk for Android

./gradlew assembleDebug output directory: composeApp/build/outputs/apk/debug/

Web Wasm compatibility

To run applications built with Kotlin/Wasm in a browser, you need a browser supporting wasm garbage collection feature:

  • For Chrome and Chromium-based browsers (Edge, Brave etc.), it should just work since version 119.
  • For Firefox 120+ it should just work.
  • For Safari it should work starting from version 18.2+.
  • Relevant Wasm compatibility table.

For more information see https://kotl.in/wasm_help/.