Greetings,
I’ve been developing a personal tool to allow me to only use Rhino to designing architecture. This post is both to ask for feedback on the idea/approach and the possibility to help someone that is facing the same problem.
- Source Code
- Download (5.9 KB)
Background
I’m an architecture student who has worked with Rhino since my very first year of university. In the beginning it was mostly for modeling but more and more I’ve been trying to break out of Autodesk’s chains for a Rhino-only workflow. Last two years I took a break to work at studios in Belgium/Switzerland where the work was mainly done in Archicad (sometimes I managed to squeeze Rhino into the projects just because it was easier to model/iterate).
Problem
All this to say that I’ve been trying to take the good parts about these products and pour them into Rhino, not only because it’s a wonderful program for some usecases, but McNeel seems like a proper company to support (very few exist like this one these days). I know there are things like VisualARQ and RhinoLands but I prefer a generalized approach to problems (also one of the grips I have with Archicad, sometime efficient but too specific and self involved).
Some features that I miss from other software:
- Layouting (Archicad)
- Status Filter (Archicad)
- Plot Styles (Autocad/Archicad)
- Style Overrides (Archicad)
Solution
To solve some of my needs, I’ve created a layer structure that incorporates some of the metadata needed. (I wish we could have Custom Properties or a Tag system to handle Status/Authority instead of a one dimensional category system (Layers), I know UserStrings exist but I would have to query every object with X tag in Python).
Schema
+-- $authority [aux, design, context]
\-- $status [proposed, existing, demolished]
\-- $category
\-- $layer
Actual Layers
+-- aux
| |-- guideline
| +-- section planes
| +-- temp
| \-- underlay
+-- design
| |-- proposed
| | |-- draw [#2d]
| | +-- core [#3d]
| | +-- extra [#3d]
| | +-- landscape [#3d]
| | \-- documentation [#2d]
| +-- existing
| \-- demolished
\-- context
|-- draw [#2d]
\-- documentation [#2d]
This is a short description and I’m still adjusting it, but just wanted to illustrate how I solved the missing metadata problem.
The layer structure alone would do no good for me, since I needed it to be extensible and to allow me to mess with it’s style on the fly, also creating the layers by hand was getting annoying.
Onto to the script then. It’s packaged in a RHI file and it contains the following:
.
+-- user
| +-- overrides
| | \-- rennovation.json
| +-- schema.json
| \-- style.json
+-- SetupLayers_cmd.py
+-- _layers.py
\-- __plugin__.py
schema.json
: is a dictionary of classes (layers) that have children, it starts off with the root class and they can get referred to multiple times. supported attributes:
- name: explicit name, otherwise it uses the class name
- prefix:
- tags: list of enums, with the syntax
#$tag.$option
(eg. #status.proposed, it means it has the “proposed” value to the “status” key). Tags automatically appear as command options to be toggled.- group: if true it treats the class as a virtual class, generating its children inplace and passing on its attributes to them
- children: list of children to be created identified by their name
style.json
: is css-esk dictionary that hold style rules, it only supports a small number of identifiers:
layer
: the layer itself (however many exist with that “class”)layer *
: any children#tag.option
: any layer that has the tagoverrides
: directory that holds styles, exposes an option to toggle them [WIP]
Feel free to drop any suggestion below.
That’s it for now, I’m looking forward to develop this further while I still can — before I finish my Masters — and fully dive into the working world of architecture or perhaps trying my luck starting out my own studio with friends.
Cheers!