Skip to main content

A powerful, offline procedural floorplan layout generator package optimizing room placement, wall snapping, and Vastu compliance

Project description

RoomRubiksPack (Client Library)

PyPI version GitHub repo

Links:

RoomRubiksPack is a powerful procedural architectural floorplan layout generator package. It optimizes room placement, wall snapping, checks for non-overlapping areas, and inherently supports Vastu compliance while respecting predefined connectivity and topological constraints.


Installation

Option 1: Install from PyPI

Once published, install the package via:

pip install roomrubikspack

Option 2: Install from GitHub

pip install git+https://github.com/architectvijeshkumarv/roomrubikspack-0.1.0-Public.git

Option 3: Local Installation (After Downloading)

Navigate to the directory containing pyproject.toml and run:

pip install .

For local developers who want to modify the source code, run in editable mode:

pip install -e .

Quick Start

1. Initialization and Settings

import roomrubikspack as rr

# Initialize a new session/project
rr.init()

# Set global preferences (unit: 'm' or 'ft')
rr.settings(unit="m")

# Define Rooms
rr.room("living",   "Living Room",  area=20.0, startSpace=True)
rr.room("kitchen",  "Kitchen",      w=3.0, h=3.0)
rr.room("bed1",     "Master Bed",   area=16.0)
rr.room("bath1",    "Attached Bath", area=4.0, attachedSpace=True)

# Define site boundary
rr.site([{"x": 0, "y": 0}, {"x": 20, "y": 0}, {"x": 20, "y": 20}, {"x": 0, "y": 20}])

# Define connectivity
rr.connectivity(
    ("living", "kitchen"),
    ("living", "bed1"),
    ("bed1",   "bath1")
)

# Enable Vastu compliance (inherently supported)
rr.vastu(True)

# Optional: Draw connectivity graph locally
rr.connectivityshow()

# Add constraints to guide layout generation
rr.constraint("position", "bed1", "N")
rr.constraint("area", None, 120)
rr.constraint("perimeter", None, "minimize")

# Generate sizes for rooms missing width/height
rr.dimensiongen()

# Generate baseline layout variations (sent to the server engine)
rr.generatelayout()

# View first variation locally
rr.showlayout(n=1, label=["name", "dim", "area", "vastu"], shownetwork=True)

# DEEP REFINEMENT: Tell the GA to deeply optimize the topological shape of Rank 1
# This extracts the shape of Rank 1 and strictly limits a 45-second deep GA search to that topology!
rr.generatelayout(selv=1)

# View the highly-optimized, mathematically clamped variation
rr.showlayout(n=1, label=["name", "dim", "area", "vastu"], shownetwork=True)

# Export layout to DXF locally
rr.exportlayout(n=1, filepath="output_layout.dxf")

# Blocks execution until plots are closed
rr.wait_for_plots()

Example Visualizations

When you run the script above, you can use the built-in visualisation functions to plot the network graph and the generated floorplan layout using Matplotlib.

1. Connectivity Network Diagram (rr.connectivityshow()) Network Diagram

2. Layout with Position Constraint (Vastu Off) Position Constraint

3. Layout with Vastu Compliance Engine (No hard constraints needed) Vastu Layout

4. Generated Layout with Overlaid Connectivity Network (shownetwork=True) Layout with Network


API Reference

  • rr.init(): Clears all current session state.
  • rr.settings(unit, server_url): Set global measurement units ('m' or 'f') and configure the solver backend API endpoint.
  • rr.constructiongrid(add, remove, reset): View or manipulate the base construction grid sizes locally.
  • rr.room(id, name, w, h, area, startSpace, attachedSpace, ...): Register a room.
  • rr.site(points): Set an optional site boundary polygon.
  • rr.vastu(keep: bool): Enable or disable Vastu Shastra rules during generation.
  • rr.connectivity(*pairs): Define room connections. Planarity check runs instantly on the client.
  • rr.connectivityshow(): Opens a Matplotlib window showing the adjacency graph.
  • rr.constraint(type, room_id, value): Registers a layout constraint.
  • rr.dimensiongen(avar, mar): Requests standard room dimensions from the server.
  • rr.generatelayout(lvar, sgap, max_variations, selv): Sends session state to the server to run the GA layout engine. Pass selv=N to perform a deep refinement search on the topological shape of the N-th variation.
  • rr.showlayout(n, label): Plots the n-th generated variation using Matplotlib.
  • rr.exportlayout(n, filepath): Saves the n-th layout to JSON or DXF.
  • rr.wait_for_plots(): Helper to keep visual plots open.

Citation

If you use RoomRubiks in your academic or professional work, please cite the following paper:

APA: Valiyappurakkal, V. K. (2026). RoomRubiks: An Application for Floor Layout Generation Using a Nonfragmented Rectangular Approach. Journal of Architectural Engineering, 32(3). https://doi.org/10.1061/JAEIED.AEENG-2207

BibTeX:

@article{Valiyappurakkal2026RoomRubiks,
  author  = {Valiyappurakkal, Vijesh Kumar},
  title   = {RoomRubiks: An Application for Floor Layout Generation Using a Nonfragmented Rectangular Approach},
  journal = {Journal of Architectural Engineering},
  year    = {2026},
  volume  = {32},
  number  = {3},
  doi     = {10.1061/JAEIED.AEENG-2207},
  url     = {https://doi.org/10.1061/JAEIED.AEENG-2207}
}

Support and Discussions

For any questions, bug reports, feature requests, or general discussions regarding RoomRubiks, please visit our GitHub Discussions page. We prefer managing all support requests publicly via GitHub rather than email to help the community build a shared knowledge base.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

roomrubikspack-0.2.6.tar.gz (48.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

roomrubikspack-0.2.6-py3-none-any.whl (53.7 kB view details)

Uploaded Python 3

File details

Details for the file roomrubikspack-0.2.6.tar.gz.

File metadata

  • Download URL: roomrubikspack-0.2.6.tar.gz
  • Upload date:
  • Size: 48.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for roomrubikspack-0.2.6.tar.gz
Algorithm Hash digest
SHA256 bc1939807e9950b57ad017221a828c8fa877ce5d18fd98aed2149a940d3ed8b8
MD5 2c35ff7ab2de7e994fd2feef130ccd4f
BLAKE2b-256 cb4e042d802824858f07909b188cc1b13b5a0099da6928cb76c5fba073c5ab8e

See more details on using hashes here.

File details

Details for the file roomrubikspack-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: roomrubikspack-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 53.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for roomrubikspack-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 18c98a175bdc46b697f85fd1ab5794a2cc1e09f374b4bd6c1681370920ddacfe
MD5 718d87e43bb994fe3c7a511c5e4ba9f1
BLAKE2b-256 cc73473a1d8481b643ab17ca5f9672ec563899ac8b6f55cbcb5f835437f8a2e3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page