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.

This unified version is 100% offline and runs its Elitist Genetic Algorithm entirely on your local machine—no server setup required!


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"])

# 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"])

# 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.5.tar.gz (48.2 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.5-py3-none-any.whl (53.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: roomrubikspack-0.2.5.tar.gz
  • Upload date:
  • Size: 48.2 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.5.tar.gz
Algorithm Hash digest
SHA256 0412bcbfc0985d077effe5ecc9babc6728157a58ff4c1aaf7ec4e4480d6ef376
MD5 b4c0fe778f299c855dd48b59f29b1081
BLAKE2b-256 e8f3c71b30d8df4d8606b109df655b140907013e7e93b27dd993c75e8a078041

See more details on using hashes here.

File details

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

File metadata

  • Download URL: roomrubikspack-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 53.3 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 7d5c30b60f985b01f75db31bd9f57e514f19da934c4c9d94f32dd2e76d13e442
MD5 d242e51dd0f743aa7d74cf6946cf668c
BLAKE2b-256 42e6b935a20832d12f283ce77abc73fa80ddfed00aa36fe7ee436b7cc6909019

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