Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Initialisation of RV2 is required at the beginning of all RV2 sessions. It does several necessary jobs:
Bring up a front-page providing useful links about RV2 and require users to accept RV2’s Terms and Agreements to proceed.
Initialize data structures and user session needed for RV2 to operate in Rhino environment.
Kick off compas_cloud
server in background and establish connection to it from Rhino.
If a previously saved .3dm file is being used, open the file directly without any Rhino windows open, instead of starting Rhino then opening the file.
Once RV2 has been initialised, previously saved .rv2 session file can be loaded to resume work.
One of the simplest, and the most manual, way to make the Pattern is to draw the edges of the Pattern
as Rhino lines. Each edge of the Pattern should be an individual line; all lines should be broken at all line intersections. In other words, these lines may not be overlapping.
The input set of lines must consist of closed loops of lines representing the faces of the Pattern.
If there are closed loops of lines, a Pattern
will be generated and all lines that do not form a closed loop, such as the "leaf" edges will be omitted.
There are many ways to generate a topological pattern. Each method has pros and cons, and the desired design or workflow will help determine which method is more appropriate.
In the case of the rib layout variations for the rib-stiffened funicular floor system, the boundary remains fixed (the footprint and depth of the floor). However, depending on the topology of the form diagram, the distribution and flow of forces change drastically.
In RV2, three types of Rhino geometries can be used to generate a Pattern :
Lines, Mesh and Surfaces. These pattern generation features would be particularly useful when there is already an existing structure with a geometry that one would like to recreate the pattern for.
Photographs and diagrams of different rose windows with complex mullion geometries, showing from left to right an outside picture, the equilibrated and piped form diagram, and the reciprocal force diagram: (a) Notre Dame de Mantes, France; (b) Notre Dame de Chartres, France (Photo by Holly Hayes); (c) Durham Cathedral, England (Photo by Carcharoth on Wikipedia); (d) Notre Dame de Paris, France (Photo by Ellen Brown); (e) Bisshop’s Eye of Lincoln Cathedral, England (Photo from Cornell University Library); (f) Sainte-Chapelle Paris, France.
Pattern
is a COMPAS mesh object. A mesh datastructure is network of faces, where the connectivities of the faces are defined by halfedge adjacencies.
A Rhino mesh object can be used to create a Pattern
. Since a Pattern is also a mesh object, the vertices and edges can be directly used to create the vertices and edges of the Pattern
.
This section provides detailed descriptions of all the functionalities of the RV2 workflow. The following subsections are ordered according to sequence of the RV2 workflow.
RV2pattern_from_surfaces
is a new developed feature based on previous command RV2pattern_from_rhino_objects
.
A single 2D or 3D non-trimmed Rhino NURBS surface or multiple joined, non-trimmed surfaces can be used to generate a Pattern.
To generate a pattern simply select the icon “create pattern” --> “From Surfaces”, then select a single Surface or Polysurface and press Enter.
Quad-surfaces are subdivided based on UV mapping of the surface, given a default subdivision value for UV. You can differentiate the subdivision value in U and/or V direction by selecting an edge.
Non-quad surfaces are subdivided equally throughout the surface based on a subdivision value “n” and Catmull Clark subdivision. The n value must be an integer that is power of 2.
Modify Subdivision :
Once the default pattern is generated you can select "Subdivide Entire Mesh" to further subdivide the entire mesh by giving a new subdivision value. The subdivision value can be any integer for quad surfaces, and an integer that is power of 2 for non-quad surfaces.
To subdivide a single edge strip, select "Subdivide Edge Strip", then select a mesh-edge that belongs to the strip, and give a subdivision value following the same restrictions for quad and non-quad surfaces.
Continue modifying the pattern until you are satisfied. Select "Finish Subdivision" or press Enter to finish.
You can follow the steps of the following video and experiment with Subdivision Modification
until you are satisfied with the Pattern
.
The first step of the workflow is to generate the topology of the FormDiagram
, which is called the Pattern
in RV2. A Pattern
is a collection of vertices interconnected by lines, represented by the COMPAS mesh datastructure.
RV2 offers several methods for generating a Pattern
. Each method has a direct influence not only on the topology of the eventual shell structure, but also the type of application and interaction that is desired during the design process.
RV2pattern_from_skeleton
is a powerful new RV2 feature that provides easy and intuitive method for generating complex patterns for free form vaults with just a few clicks.
RV2pattern_from_skeleton
is a feature based on the compas_skeleton
package. Fore more detailed information on the package, please check out its online documentation.
Choose "Create Pattern" --> "From Skeleton" from the tool bar, select a group of lines from Rhino and press Enter.
Follow the instructions in the command window, for each step click on the corresponding vertex, move cursor to input skeleton node width, leaf width and end extension respectively.
After initialising the skeleton, there will be available editing methods showing up in the command window. try out these options, get your ideal pattern.
increase the subdivision level of skeleton and finish editing. by clicking on "Finish", a force pattern diagram will be automatically generated.
Follow the instructions in the command window, choose outer boundary, inner boundaries and constraint curves. For the last step enter a target triangle edge length. Triangulated force pattern will be generated.
outer boundary is a closed polycurve that represents the outline of the diagram.
inner boundaries are openings of the intended design pattern.
constraint curves are where the vertices and edges will be forced to snapped onto.
Triangulation is a method that is fast and robust for creating a Pattern from a set of complex boundary features. However, triangulated patterns have no clear direction or hierarchy of the edges, which make it difficult to interact with (for example, if you wanted to attract forces using the force diagram).
RV2pattern_from_features
is based on the compas_singular
package. For more information on the package, please check out its online documentation.
RV2pattern_from_features
is in early stages of development, and may not always result in suitable solutions. The contents of this feature are subject to change, and will be improved in future releases of RV2.
Using the RV2pattern_from_features
command is a powerful and an effective way to generate quad mesh patterns from complex or irregular boundary conditions and point features, such as the British Museum Great Courtyard Roof.
The first example takes into account only the input surface to produce a pattern align with the boundaries. This aspect is important in funicular form finding in the case of non-supported boundaries.
The second example also takes into account point features on the surface to include pole points in the pattern. The point features at the corner can integrate local concentration of thrust. The other point features can integrate point loads or nodal supports. All these aspects are important to design a suitable pattern for funicular form finding.
In RV2, horizontal equilibrium is computed by parallelising the edges of the Form and Force Diagram to corresponding target vectors. These target vectors are defined as the weighted average of the vectors of corresponding edge pairs. Therefore, the most important parameter for the calculation of horizontal equilibrium in RV2 is alpha
, which is the weighting factor for the calculation of the target vectors.
If alpha = 100
, the target vectors are completely defined by the vectors of the edges of the Form Diagram. This means that only the geometry of the Force Diagram will be updated to achieve horizontal equilibrium. This is the default.
If alpha = 0
, the target vectors are completely defined by the edges of the force diagram. Therefore only the Form Diagram will be updated.
For all other values, the target vectors are calculated using the following formula:
Note that using alpha
efficiently requires a bit of practice and experience. Since the Form Diagram defines the intended layout of horizontal forces and RV2 has many tools for designing force layouts that provide a good starting point for form finding explorations, it is usually a good idea to start with alpha = 100
. However, once you have the horizontal equilibrium under control, playing around with lower alpha
values can have a significant influence on finding nicely balanced force distributions.
Computing horizontal equilibrium is an iterative process. The default number of iterations is 100
. For sensible force layouts, this value should go a long way. However, there are many cases in which more iterations are required. For example, if the Form Diagram has multiple open/unsupported edges, and especially if those edges have a low "sag" value, more iterations will typically be required to reduce all angle deviations between corresponding edges to less than 5 degrees.
Computing horizontal equilibrium is quite fast. Therefore, don't hesitate to set the number of iterations to 1000
or more if the need arises. However, don't go completely overboard either (10000
iterations is quite excessive in most cases), because the calculation has no stoppage criterion, since it tends to be more computationally expensive to check for convergence than to just run all the requested iterations.
Furthermore, resolving all angle deviations is not an absolute requirement, and is in many cases unnecessary. For example, the angle deviations between very short edges tend to be quite persistent as they are dominated by edges with (much) longer lengths during the calculation process. Since short edges in the Force Diagram also represent (relatively) small horizontal forces, these deviations can often be ignored.
The iterations of the horizontal equilibrium calculation process is dynamically visualised. The rate at which the diagrams are updated is controlled by the refreshrate. The default value is 10
, which means that the diagrams are updated every 10 iterations.
For large diagrams the dynamic visualisation slows down the calculations a little bit. In these cases, and/or for high numbers of iterations (> 1000
), it is therefore advisable to set the refreshrate to a higher value. For example, if the number of iterations is 1000
, then a refresh rate of 100
seems more appropriate.
Once the FormDiagram
has been successfully created, the ForceDiagram
can be created. When it is first created, the ForceDiagram
is the dual diagram of the FormDiagram
.
A ForceDiagram
is represented by the mesh datastructure.
The Force Diagram is the dual of the Form Diagram, in the sense that both diagrams have the same number of edges and that vertices in one diagram correspond to faces in the other, and vice versa.
Initially, the Force Diagram is created as the "centroidal dual" of the Form Diagram. This means that the geometry of the Force Diagram is defined by placing its vertices at the centroids of their corresponding faces in the Form Diagram.
In order for the Form and Force Diagram to describe the distribution of horizontal thrust in a three-dimensional network of compression forces in equilibrium with vertical loads applied to its nodes, they need to be not only dual, but also reciprocal.
Two diagrams are reciprocal if they are dual, and if their corresponding edges are at a constant angle with each other. Typically, corresponding edges are required to be parallel, or perpendicular, but any other constant angle is sufficient as well.
In RV2, the Form and Force Diagram are considered reciprocal if corresponding edges are perpendicular.
Once the Form and Force Diagram are reciprocal they describe the horizontal equilibrium of the corresponding three-dimensional force network. The edges of the Form Diagram define the directions and points of application of the forces, whereas the edges of the Force Diagram define the distribution of force magnitudes along those directions.
The magnitudes of horizontal forces are equal to the lengths of the edges in the Force Diagram, multiplied with a scaling factor.
FormDiagram
is the 2D projection of the thrust network. In RV2, a FormDiagram
is represented by the mesh datastructure.
The boundary condition information, such as the support locations and loading conditions, is automatically inherited from the Pattern
. Any edges of the pattern, of which both endpoints are supports are removed from the FormDiagram
.
A FormDiagram
is represented by the mesh datastructure.
Depending on how the support vertices are defined, corners of the Pattern are automatically processed during the creation of the FormDiagram
.
In RV2, the ThrustDiagram
representing the thrust network, is an instance of the FormDiagram
, with the only difference being the coordinates. A ThrustDiagram
is simply an alternate visualisation of the FormDiagram
with updated coordinates. When a FormDiagram
is successfully created, the ThrustDiagram
is automatically created.
A ThrustDiagram
is represented by the mesh datastructure.
Under “Settings,” various global parameters and visualisation options can be modified. For each of the categories, various parameters and display settings can be modified. In general, various elements of the three diagrams turned on or off, and the colors of the elements can be customised. The modifiable parameters for each category are summarised below.
angles (float (5.0)) - Angle deviation tolerance for horizontal equilibrium. Default is 5 degrees.
angles (bool (True)) - Display angle deviations as dots on the edges of the FormDiagram
and the ForceDiagram
. Display of angle deviations are turned on by default.
horizontal.alpha (int (100)) - Default is 100 (or 'form100', meaning that the FormDiagram
remains fixed and only the ForceDiagram
will change during the Horizontal Equilibrium.
horizontal.kmax (int (100)) - Number of iterations for the Horizontal Equilibrium solver. Default is 100.
horizontal.refreshrate (int (10)) - Number of iterations to skip for the Conduit (dynamic drawing showing the iterations) during the Horizontal Equilibrium solver. Default is 10.
vertical.kmax (int (300)) - Number of iterations for the Vertical Equilibrium solver. Default is 300.
vertical.zmax (float (4.0)) - Default target height for the Vertical Equilibrium solver.
density.U (int (10)) - Number of divisions in the U direction of a surface for Create Pattern
> From Surface
. Default is 10.
density.V (int (10)) .- Number of divisions in the U direction of a surface for Create Pattern
> From Surface
. Default is 10.
pipes (float (0.01)) - Global display scale factor for pipes.
reactions (float (0.1)) - Global display scale factor for reaction forces at anchored vertices of the ThrustDiagram
.
residuals (float (1.0)) - Global display scale factor for residual forces at the non-anchored vertices of the ThrustDiagram
.
pipes (float (0.001)) - Tolerance threshold for displaying pipes
reactions (float (0.001)) - Tolerance for displaying reaction forces; if the reaction force is smaller than this value, it will not be displayed.
residuals (float (0.001)) - Tolerance for displaying residual forces; of the residual force is smaller than this value, it will not be displayed.
forces (bool (False)) - Display the edges of the ForceDiagram
in a based on its length, and the corresponding edges in the FormDiagram
are also displayed in the same color; red means longer edges (higher force magnitudes), blue means shorter edges (lower force magnitudes).
RV2 is based on the COMPAS framework, which means that RV2 can be integrated with various other COMPAS packages and extensions, such as best-fit TNA, load path optimization, and fabrication-related applications.
These extensions and integrations are currently under construction.
Once the Form and Force Diagrams have been created and horizontal equilibrium has been established through parallelisation, the distribution of horizontal forces in the system is fixed. The actual magnitude of the horizontal forces depends on a scale factor and will determine the depth of the final thrust diagram. A higher scale factor results in higher horizontal forces and therefore a shallower three-dimensional shape. Vice versa, a lower scale factor results in lower horizontal thrust and thus a deeper solution.
The meaning of the scale factor and the magnitude of horizontal forces is related to the magnitude of the loads, which in turn are related to the self-weight of the resulting three-dimensional geometry.
Rather than asking you to "guess" the scale factor to get the three-dimensional shape you want, RV2 will determine the scale for you based on the desired height of the final solution.
The default value for the target height is 25% of the length of the diagonal of the bounding box of the Form Diagram (essentially of the bounding box of the footprint of your shell). This value tends to produce well-proportioned geometries.
The minimum value for the target height is 10% of the length of the diagonal. Currently this is hard-coded and can't be changed through the UI.
A Pattern
object is a mesh datastructure that describes the topology of the structure. Several additional layers of information regarding the boundary conditions need to be added in order to give the Pattern
a structural meaning: identification of the supports; treatment of the openings and open edges; and defining the loading condition.
In RV2, a support is defined as a vertex of the structure that is fixed, and can have external horizontal reactions. By definition then, only the vertices on the boundary of a Pattern
can be defined as supports.
The vertices can be selected using these modes:
AllBoundaryVertices : all boundary vertices
Corners : all corner vertices
ByContinuousEdges : all vertices on the selected boundary edge (corner to corner)
Manual : manual selection by the user
An opening is a chain of edges at the boundary of a Pattern
, in between two support vertices. In general, openings in TNA cannot be straight, unless there are no internal forces in the non-boundary edges at the openings (i.e. barrel vault or cross vault).
This feature relaxes the Pattern
using the force density method, resulting in curved openings. For each opening, the amount of curvature is defined by using the sag , which is calculated based on the percentage of the length of the opening. The s for the boundary edges are automatically calculated based on the target sag values, which are then used for the force density method.
Although this feature is optional, the user should be aware that the treatment of the openings are very much dependent on the type of vault that is being investigated. In some applications where openings may already have some curvature, the relaxation will make the Pattern
more "equilibrated" and optimal for the horizontal equilibrium solver later on.
This feature is currently under construction.
In TNA, externally applied loads can only be vertical. The user can define how the self-weight of the structure is calculated:
ByFace : the self-weight at each vertex is calculated by the tributary area of all the faces at the vertex (i.e. continuous shell), times the density and thickness, which are defined in the global settings
ByEdge : the self-weight at each vertex is calculated by the tributary lengths of all the edges at the vertex (i.e. grid shell), times the density and thickness, which are defined in the global settings
PointLoad : vertical point loads of can be applied to any vertices
This feature allows you to modify the attributes of the vertices of a Pattern
.
constraints : Rhino object to which the vertex is referenced or constrained to (not yet implemented)
is_fixed : fixes the x, y, z coordinates of the vertex
x : x coordinate of the vertex
y : y coordinate of the vertex
z : z coordinate of the vertex
This feature allows you to modify the attributes of the edges of a Pattern
.
lmax : maximum length desired for the edge during relaxation/smoothing
lmin : minimum length for the edge during relaxation/smoothing
q : force density
This feature allows you to manually move selected vertices of a Pattern
.
This feature allows you to delete vertices of a Pattern
. By deleting interior vertices of a pattern, holes can be created.
Using the force density method, this feature relaxes the entire Pattern
.
Using area-based smoothing (every vertex is repositioned to the centroid of its neighboring vertices), the pattern is smoothed.
Once horizontal and vertical equilibriums have been successfully found, the user can interact with the three diagrams to continue design explorations.
'constraints': None
'is_anchor': False
'is_fixed': False
'px': 0.0
'py': 0.0
'pz': 0.0
't': 1.0 (thickness)
This feature allows the user to move any of the anchored vertices of the ThrustDiagram
in the z axis.