RhinoVAULT 2

An open-source research platform for funicular form finding based on COMPAS

Research Platform

RhinoVAULT 2 (RV2) is an open-source research and development platform for funicular form-finding built with COMPAS, a Python-based framework for computational research and collaboration in Architecture, Engineering, and Digital Fabrication. More information about COMPAS is available here.

RV2 has a Rhino plugin that replaces RhinoVAULT for Rhino versions 6 and above. Unlike RhinoVAULT, RV2 no longer relies on Rhino for its computational implementation. Instead, it is built entirely with open source packages from the COMPAS ecosystem and will, therefore, be available not only for Rhino and Grasshopper, but also for Blender and other tools with a Python scripting interface, and ultimately even in the browser.

Core Functionality

The core functionality of RV2 is based on the following COMPAS packages and can be used in any environment that supports Python.

  • compas

    • Base data structures

    • File support

    • Numerical solvers

    • Geometry processing

  • compas_tna

    • Form, Force and Thrust Diagrams

    • Horizontal equilibrium

    • Vertical equilibrium

For the design of force patterns in Form Diagrams, we use

  • compas_singular

    • Pattern design based on topological features and placement of singularities in quad meshes.

  • compas_skeleton

    • Pattern design based on line skeletons.

  • compas_triangle

    • Pattern design based on Constrained/Conforming Delaunay Triangulations.

CAD integration packages make this core functionality available in specific software like Blender or Rhino. The current release of RV2 provides only a plugin for Rhino (Blender and Grasshopper integration is under development and will be available soon):

  • compas_rhino

    • Geometry and data structure conversions.

    • Drawing functionality.

    • Selections and interaction.

  • compas_cloud

    • Remote Procedure Calls

Rhino CommandPlugin

The Rhino plugin is implemented as a CommandPlugin. In the current release, the following commands are available:

  • RV2boundary_boundaries

  • RV2boundary_openings

  • RV2boundary_supports

  • RV2clear_all

  • RV2cloud_check

  • RV2cloud_restart

  • RV2cloud_shutdown

  • RV2file_open

  • RV2file_save_as

  • RV2file_save

  • RV2force_attributes

  • RV2force

  • RV2force_modify_edges

  • RV2force_modify_vertices

  • RV2force_move_vertices

  • RV2form_attributes

  • RV2form

  • RV2form_modify_edges

  • RV2form_modify_vertices

  • RV2form_move_vertices

  • RV2form_relax

  • RV2form_smooth

  • RV2init

  • RV2pattern_attributes

  • RV2pattern_delete

  • RV2pattern_from_features

  • RV2pattern_from_lines

  • RV2pattern_from_mesh

  • RV2pattern_from_skeleton

  • RV2pattern_from_surface

  • RV2pattern_from_triangulation

  • RV2pattern_modify_edges

  • RV2pattern_modify_vertices

  • RV2pattern_move_vertices

  • RV2pattern_relax

  • RV2pattern_smooth

  • RV2pattern_subdivide

  • RV2redraw

  • RV2settings

  • RV2thrust_attributes

  • RV2thrust_modify_vertices

  • RV2thrust_move_supports

  • RV2tna_horizontal

  • RV2tna_vertical

Each command has a corresponding xxx_cmd.py file. All command files have the same structure. For example, one of the simplest commands is RV2redraw, which is defined in RV2redraw_cmd.py

from __future__ import print_function
from __future__ import absolute_import
from __future__ import division


from compas_rv2.rhino import get_scene


__commandname__ = "RV2redraw"


def RunCommand(is_interactive):

    scene = get_scene()
    if not scene:
        return

    scene.update()


# ==============================================================================
# Main
# ==============================================================================

if __name__ == '__main__':

    RunCommand(True)

Rhino UI

Using a JSON config file, commands are then organised as menu items and toolbar buttons and compiled into a Rhino User Interface file (*.rui). This is the file you loaded into Rhino during the installation process.

By initialising RV2, the COMPAS functionality is loaded and the commands are made available. At the same time, a server is started to run commands that require specific CPython functionality "in the cloud" through remote procedure calls.

Open Source

The development of RV2 is hosted on Github and is entirely open source. The public repository is available here: https://github.com/BlockResearchGroup/compas-RV2.

Note that this is also the place where you can contribute to the development, report issues, or submit feature requests.

Current Release

The current release of RV2 aims at providing similar functionality as the original RhinoVAULT plugin with the same workflow.

Available

  • Integration of various force layout mechanisms through pattern design and modification.

  • Form, Force, and Thrust Diagrams re-implemented as half-edge data structures for more flexible and robust topological operations.

  • Automatic updating of unsupported boundaries.

  • Weighted horizontal equilibrium calculations (in pure Python).

  • Dynamic visualisation of horizontal equilibrium calculations.

  • Force scaling based on target heights.

  • Iterative vertical equilibrium calculations with automatic self-weight updating.

  • Form/Force Diagram geometry constraints.

  • Horizontal force constraints.

  • Internal openings.

  • Internal supports ("Drop-downs").

  • RV2 session files for saving and loading design sessions.

Coming soon

  • Synchronized topological operations on Form and Force Diagrams.

  • Integration of tension members.

  • Assignment of additional/live loads.

  • Lumped stress visualisation.

  • Interactive inspection of the topological relation between the diagrams.

Future Releases

Future releases will focus on the integration of recent recent at the BRG related to funicular form finding. This includes the following.

  • Automated force distribution finding based on target surfaces ("Best-fit").

  • Automated pattern modifications for live load cases.

  • Assignment of force distribution templates.

Last updated