Skip to content

gmalmquist/drawall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

drawall

This is a CAD tool for making quick and easy mockups of floor plans. It's a static web app.

It's designed to support fuzzy constraints given imprecise measurements—because we've all had the experience of taking a thousand measurements, then trying to draw it up and finding that the inches don't quite add up! Or trying to plan a move based off of vague dimensions provided by a landlord.

screenshot of the drawall ui

This is a hobby project; I make no guarantees of future maintenance, functionality, or quality. You can use it here or run it yourself!

constraints

To support imprecise and possibly conflicting measurements, constraints are "soft," and are applied with kinematic spring forces. Currently supported are constraints on the angle of a corner, the length of a wall or ruler, and alignment to the X/Y axes. The strength of constraints can be controlled with tension sliders.

Individual wall corners can also be locked in place (this is a hard constraint).

feature todo list

  • save/load json to localstorage
  • save/load json to disk
  • various spring constraints
  • export to PNG
  • simple furniture drawing and arranging
  • doors & windows
  • background reference images
  • export to 3D .obj
  • 3D view (?)
  • copy+paste / duplicate furniture
  • select from already-upload images
  • preset images for lamps and stuff
  • lock furniture dims to prevent accidental resizing
  • angle snapping

development

setup

Simple and absurd, because I've thus far avoided doing things properly (eg using webpack) for reasons (I spent too long professionally maintaining build systems, and now it doesn't give me any dopamine). Requires python3 and tsc on the path.

I like to run test-server.py to spin up a basic a web server served at http://localhost:8234, which calls build.sh automatically whenever the page is refreshed, and returns a plaintext page of compiler errors (if there are any). Yeah. It's silly.

Or you can just run build.sh yourself, serve the static files with your favorite teeny webserver (python3 -m http.server is my go-to, but ofc you could also use caddy or smth). It's just a static site, so there's no actual backend to spin up.

Note that for the files for which order matters, the order is determined by the list hardcoded in build.sh.

tech debt

Much of the initial development was written feverishly on little sleep, resulting in some less than ideal code quality. I'd like to (1) add a proper build system / webpack / etc, (2) add literally any unit tests, and (3) do lots of cleanup (in that order).

dependencies

the only actual library dependency currently is minewt, a very minimal newtype library with no runtime overhead.

About

a cad tool for drawing floorplans quickly

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages