A Student's approach to Rhino for Architecture

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.

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 tag
  • overrides: 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!

5 Likes

Thank you so much for your files. I installed the .rhi file but what do I do now? I am sorry that I am maybe too much a newbie. If you are interested in developing custom scripts or other means to automate 2d documentation for specific purposes or if you have resources to learn what you are developing so I can contribute better, please let me know.

Hey Fritz,

Since then I’ve been working on these and forgot to update the post, here is the latest version.

That’s a good point, I also forgot to explain what it exactly does from a user’s point of view (the post was intended for the tech savy). But alas, here are the commands that this plugin adds:

  • SetupLayers: Creates layers based on some options that are dependent on your JSON configuration. It creates a layer state for each scale and override, here’s an example with 1:100, 1:200 and 1:500 for scales; Renovation and OverrideB for overrides:
    • Default::100
    • Default::200
    • Default::500
    • Renovation::100
    • Renovation::200
    • Renovation::500
    • OverrideB::100
    • OverrideB::200
    • OverrideB::500
  • OpenLayersConfig: Opens the configuation folder used for customizing your layer structure/styles/overrides.
  • OrderLayers: It sets all object’s display order based on their layer style (it uses the display_order attribute in styles.json)
  • MergeLayers: Merges multiple layers into one, this is more of utilty command and I stole from Karim’s script.

For the actual configuration you have three files/directories:

  • schema.json: where you declare the tree structure (it has an schema entry where you can see all the available attributes)
  • styles.json: where you define the styles of each layers in css-esk manner (it also has a schema entry)
  • overrides: each json file in these directory becomes an override, it has the same syntax as styles.json but it’s toggleable in the SetupLayers command and it’s associated with different Layer State(s).

If you have any more questions I would be happy to assist you over Discord,

Good luck

Thank you very much for your rapid answer and sorry for delay in my answering. I showed your posting to others and it gave us good suggestions. We design film sets so our workflow is different, but this gave us a good suggestion on where to go. Thanks again.