<attribute name = "label_ISO" default = "none"/>
RhinoPiping is a rhino® plugin to create parametric piping networks in contextual 3D.
RhinoPiping is currently only compatible with Rhino 5.
RhinoPiping exists in two versions, RhinoPiping LT and RhinoPiping Pro. These two versions are not compatible, so when installing one, the other should be uninstalled beforehand. In both cases, two installers are provided: one for the plugin itself, and one for the provided basic catalog. The two of them need to be installed.
This is the free limited version. No hidden costs, no activation. The plugin installer can be downloaded at: https://downloads.tomkod.com/ProductFiles/RhinoPiping-LT-1.2.8.zip
This is the full featured version, it needs a product key. Shop The plugin installer can be downloaded at: https://downloads.tomkod.com/ProductFiles/RhinoPiping-Pro-1.2.8-WithZoo.zip
RhinoPiping command names follow these general rules:
Since Rhino3D has an auto-completion feature, it can be really useful to remember these.
RhinoPiping lets you flawlessly design a piping system made of any kind of rigid pipes as long as its section is a circle. Our engine, mainly based on connection circles can handle any number of components, each of them having up to eight connection circles.
This system also means that RhinoPiping could be used to design any other system using circular section elements, such as some electrical wiring or sometimes HVAC systems.
When a connection circle is green, it means it is not connected. While adding a piping element to your pipeline, the closest disconnected connection circle is highlighted in yellow, while the selected pipeline is highlighted in white. When two connection circles are connected, they become blue-colored. In the example below, the butterfly valve is connected to the pipe.
RhinoPiping adds a tab in the rhino options where you can select:
Every piping element created with RhinoPiping must be located in the layer named “Piping network”, or its sub-layers. If the piping layer “Piping network” does not exist, it will be created.
Some modifications of a pipeline created by RhinoPiping with a rhino3D command are forbidden to protect the piping data, for example:
These modifications would have been alright if the piping element hadn’t been connected (Try using the command “RP_Disconnect” if needed), or if your selection contains all the connected piping elements.
If you open a file with RhinoPiping elements with RhinoPiping uninstalled, it will work but you mustn’t modify any element belonging to the “Piping network” layer. (If you do, it can result in file corruptions, and make RhinoPiping crash later)
RhinoPiping is deeply integrated with a free rhino plugin named AdditionalAttribute. As its name suggests, AdditionalAttribute adds a special tab in rhino3D properties for attributes.
These attributes can be defined in RhinoPiping’s catalog (specific to a pipe class for example), calculated, read-only (or not), and a lot more. Special internal attributes will also be displayed, like the nominal diameter of the selected element, its type, and family, etc…
Every DN (Nominal Diameter) used in a piping class, an elbow class or a piping component must beforehand be declared in the file nominal-sizes.xml. If this rule is not followed, Rhinopiping won’t be able to start when launching Rhinoceros.
This file’s path is located in RhinoPiping “catalogs” folder. With windows 7, the default full path is: “C:\ProgramData\Navinn\catalogs\nominal-sizes.xml”
This file has two roles:
Limit the allowed DN to a predefined list Manage the equivalence between the DN (Nominal Diameter) and the NPS (Nominal Pipe Size – American standard) The values must absolutely be ascending. For example, to add the NPS 6 1/2, we must add it between NPS 6 and NPS 7:
<?xml version="1.0"?> <nominal-sizes> <item NPS="1/8" DN="6"/> <item NPS="1/4" DN="8"/> <item NPS="3/8" DN="10"/> <item NPS="1/2" DN="15"/> <item NPS="5/8" DN="16"/> <item NPS="3/4" DN="20"/> <item NPS="7/8" DN="22"/> <item NPS="1" DN="25"/> <item NPS="1 1/8" DN="28"/> <item NPS="1 1/4" DN="32"/> <item NPS="1 3/8" DN="35"/> <item NPS="1 1/2" DN="40"/> <item NPS="1 5/8" DN="42"/> <item NPS="1 3/4" DN="45"/> <item NPS="1 7/8" DN="48"/> <item NPS="2" DN="50"/> <item NPS="2 1/2" DN="65"/> <item NPS="3" DN="80"/> <item NPS="3 1/2" DN="90"/> <item NPS="4" DN="100"/> <item NPS="4 1/2" DN="110"/> <item NPS="5" DN="125"/> <item NPS="6" DN="150"/> <item NPS="6 1/2" DN="165"/> <item NPS="7" DN="175"/> <item NPS="8" DN="200"/> <item NPS="9" DN="225"/> <item NPS="10" DN="250"/> <item NPS="12" DN="300"/> <item NPS="14" DN="350"/> <item NPS="16" DN="400"/> <item NPS="18" DN="450"/> <item NPS="20" DN="500"/> <item NPS="22" DN="550"/> <item NPS="24" DN="600"/> <item NPS="26" DN="650"/> <item NPS="28" DN="700"/> <item NPS="30" DN="750"/> <item NPS="32" DN="800"/> <item NPS="34" DN="850"/> <item NPS="36" DN="900"/> <item NPS="38" DN="950"/> <item NPS="40" DN="1000"/> <item NPS="42" DN="1050"/> <item NPS="44" DN="1100"/> <item NPS="46" DN="1150"/> <item NPS="48" DN="1200"/> <item NPS="56" DN="1400"/> </nominal-sizes>
See RP_CC_CreateItem
Every pipe class definition file are declared in the file pipe-classes.xml
This file is located in RhinoPiping’s “catalogs\pipe” folder. With windows 7-10 the default full path is: “C:\ProgramData\Navinn\catalogs\pipe\pipe-classes.xml”
In the example below, lines 3-4 are defining the existing attributes for the pipe classes. The “name” option is mandatory, the “type” option is not mandatory, and the “default” option is not mandatory but highly recommended, because when missing it may prevent the command AA_Report to run as it should.
Lines 6-7 are the respective paths of the secondary XML files where the pipe classes are defined. These files should be located in the same folder as for pipe-classes.xml. Using secondary XML files like this is only to help to get a clean structure, it does not correlate with the classes tree in RhinoPiping.
<?xml version="1.0"?> <pipe-classes> <attribute name="lineic_mass" type="lineic-mass"/> <attribute name="CATALOG:Material" default="N/A"/> <include path="stainless-steel-ANSI-ASME-B36.19M-1985.xml"/> <include path="steel-ANSI-ASME-B36.10M-1995.xml"/> </pipe-classes>
Now let say we need to add a copper piping class and register it in a new file named “Coper.xml”. We will declare it like this:
<?xml version="1.0"?> <pipe-classes> <attribute name="lineic_mass" type="lineic-mass"/> <attribute name="CATALOG:Material" default="N/A"/> <include path="stainless-steel-ANSI-ASME-B36.19M-1985.xml"/> <include path="steel-ANSI-ASME-B36.10M-1995.xml"/> <include path="Copper.xml"/> </pipe-classes>
Then we will create a “Copper.xml” file in \Navinn\catalogs\pipe where the class will be registered. We could set every data in this file, but to make it easier, RhinoPiping lets you define the values in a CSV file, called from this XML. let see how it works:
<?xml version="1.0"?> <category name="CopperClass" OD-unit="mm" thickness-unit="mm"> <pipe-class name="CustomClass/Class1"> <import-csv path="CustomPipeClass\CopperClass1.csv" separator=";"> <DN></DN> <OD></OD> <thickness></thickness> <attribute:lineic_mass></attribute:lineic_mass> <attribute:CATALOG:Material></attribute:CATALOG:Material> </import-csv> </pipe-class> </category>
Line 2 defines the category name for this class, and the units used for OD (outside diameters) and Thickness. Line 3 defines the class name and its tree position in RhinoPiping. In the example, the tree is set to: CopperClass / CustomClass / Class1. Line 4 lets us define the path for a .csv file where the values will be. With the option separator, it’s also possible to choose the separator for this file. The CSV is imported by columns in the same order as the attributes declared in the XML file. Lines 5 to 7 are mandatory internal attributes: DN (nominal diameter): The theoretical nominal diameter of the pipe. (Can be different with the real diameter). It is possible to use the NPS attribute instead. OD (Outside Diameter): The pipe’s real outside diameter thickness: The pipe’s real thickness.
The lines 8-9 are non-mandatory custom attributes declared in pipe-classes.xml
This is what the CSV file should look like if we want to only have a copper class with DN32 and DN40:
32;35;1.5;1.41 kg/m;Copper 40;42;2;1.61 kg/m;Copper
If we wish to add another copper piping class, we could just create a new CSV file and update the XML file like this:
<?xml version="1.0"?> <category name="CopperClass" OD-unit="mm" thickness-unit="mm"> <pipe-class name="CustomClass/Class1"> <import-csv path="CustomPipeClass\CopperClass1.csv" separator=";"> <DN></DN> <OD></OD> <thickness></thickness> <attribute:lineic_mass></attribute:lineic_mass> <attribute:CATALOG:Material></attribute:CATALOG:Material> </import-csv> </pipe-class> <pipe-class name="CustomClass/Class2"> <import-csv path="CustomPipeClass\CopperClass2.csv" separator=";"> <DN></DN> <OD></OD> <thickness></thickness> <attribute:lineic_mass></attribute:lineic_mass> <attribute:CATALOG:Material></attribute:CATALOG:Material> </import-csv> </pipe-class> </category>
Here is an example of the file “CopperClass2.csv”, with thicker pipes and the DN50 available:
32;35;2.5;1.41 kg/m;Copper 40;42;3;1.61 kg/m;Copper 50;53;3;1.8 kg/m;Copper
You can download this tutorial’s example here.
For this tutorial, we assume you followed the previous one: “Creating a pipe class”
As for the pipe class file’s paths, the attributes dedicated to pipe classes are all declared in the file pipe-classes.xml
This file is located in Rhinopiping’s folder “catalogs\pipe”. With windows 7 the default full path is: “C:\ProgramData\Navinn\catalogs\pipe\pipe-classes.xml”
In the previous example, two attributes were already defined:
An attribute lineic-mass is typed to define a lineic mass. An attribute CATALOG:Material. The use of “:” is a way to define an attribute’s tree position. In RhinoPiping we will see an attribute Material under a group CATALOG.
<?xml version="1.0"?> <pipe-classes> <attribute name="lineic_mass" type="lineic-mass" default="N/A"></attribute> <attribute name="CATALOG:Material" default="N/A"></attribute> <include path="stainless-steel-ANSI-ASME-B36.19M-1985.xml"></include> <include path="steel-ANSI-ASME-B36.10M-1995.xml"></include> <include path="Copper.xml"></include> </pipe-classes>
To add an attribute Provider in the group CATALOG, we must add a line in the file:
<?xml version="1.0"?> <pipe-classes> <attribute name="lineic_mass" type="lineic-mass" default="N/A"></attribute> <attribute name="CATALOG:Material" default="N/A"></attribute> <attribute name="CATALOG:Provider" default="N/A"></attribute> <include path="stainless-steel-ANSI-ASME-B36.19M-1985.xml"></include> <include path="steel-ANSI-ASME-B36.10M-1995.xml"></include> <include path="Copper.xml"></include> </pipe-classes>
Now if we restart Rhinoceros, in the attributes tab we will see our attributes as defined: Nevertheless, our new attribute Provider always has its default value (here “N/A”), since we did not define its values for the different pipe classes. To customize the providers for the two copper pipe classes we created in the previous tutorial, we must update the file “copper.xml” in \Navinn\catalogs\pipe , then add a column in the corresponding CSV files:
<?xml version="1.0"?> <category name="CopperClass" OD-unit="mm" thickness-unit="mm"> <pipe-class name="CustomClass/Class1"> <import-csv path="CustomPipeClass\CopperClass1.csv" separator=";"> <DN></DN> <OD></OD> <thickness></thickness> <attribute:lineic_mass></attribute:lineic_mass> <attribute:CATALOG:Material></attribute:CATALOG:Material> <attribute:CATALOG:Provider></attribute:CATALOG:Provider> </import-csv> </pipe-class> <pipe-class name="CustomClass/Class2"> <import-csv path="CustomPipeClass\CopperClass2.csv" separator=";"> <DN></DN> <OD></OD> <thickness></thickness> <attribute:lineic_mass></attribute:lineic_mass> <attribute:CATALOG:Material></attribute:CATALOG:Material> <attribute:CATALOG:Provider></attribute:CATALOG:Provider> </import-csv> </pipe-class> </category>
Our two classes CSV files will have to be modified accordingly:
32;35;1.5;1.41 kg/m;Copper;unimat 40;42;2;1.61 kg/m;Copper;unimat
32;35;2.5;1.41 kg/m;Copper;unimat 40;42;3;1.61 kg/m;Copper;unimat 50;53;3;1.8 kg/m;Copper;altitube
After restarting Rhinoceros, the attribute Provider now displays the appropriate values. You can download this tutorial example here.
RhinoPiping can use two different kinds of elbows:
Every elbow class is defined in only one file named elbow-classes.xml.
This file is located in RhinoPiping’s folder “catalogs\elbow”. With windows 7 the default full path is: “C:\ProgramData\Navinn\catalogs\elbow\elbow-classes.xml”
The elbow classes can be defined in two different ways: from a curvature factor, or from curvature values. An elbow class is only compatible with one pipe class but a pipe class can have several elbow classes.
For each factor needed, we add a line with these properties:
<CurvatureFactors> <item key = "D1" factor = "1" pipe-class="CopperClass/CustomClass/Class1"></item> <item key = "D1.5" factor = "1.5" pipe-class="CopperClass/CustomClass/Class1"></item> <item key = "D2" factor = "2" pipe-class="CopperClass/CustomClass/Class1"></item> <item key = "D3" factor = "3" pipe-class="CopperClass/CustomClass/Class1"></item> </CurvatureFactors>
For each DN (Nominal diameter) used in each class, we define the curvature radius.
<Standard name="PieceOfCake"> <Class name="3D" pipe-class="CopperClass/CustomClass/Class2"> <item DN="32" curvature="47.5"></item> <item DN="40" curvature="57"></item> <item DN="50" curvature="76"></item> </Class> </Standard>
When updated, our elbow-classes.xml file should look like this:
<?xml version="1.0" encoding="utf-8"?> <angle-elements> <CurvatureFactors> <item key = "D1" factor = "1" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-5S"></item> <item key = "D1" factor = "1" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-10S"></item> <item key = "D1" factor = "1" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-40S"></item> <item key = "D1" factor = "1" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-80S"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Standard"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Extra-Strong"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Double-Extra-Strong"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-10"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-20"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-30"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-40"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-60"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-80"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-100"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-120"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-140"></item> <item key = "D1" factor = "1" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-160"></item> <item key = "D1.5" factor = "1.5" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-5S"></item> <item key = "D1.5" factor = "1.5" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-10S"></item> <item key = "D1.5" factor = "1.5" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-40S"></item> <item key = "D1.5" factor = "1.5" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-80S"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Standard"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Extra-Strong"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Double-Extra-Strong"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-10"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-20"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-30"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-40"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-60"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-80"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-100"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-120"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-140"></item> <item key = "D1.5" factor = "1.5" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-160"></item> <item key = "D2" factor = "2" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-5S"></item> <item key = "D2" factor = "2" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-10S"></item> <item key = "D2" factor = "2" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-40S"></item> <item key = "D2" factor = "2" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-80S"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Standard"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Extra-Strong"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Double-Extra-Strong"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-10"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-20"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-30"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-40"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-60"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-80"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-100"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-120"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-140"></item> <item key = "D2" factor = "2" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-160"></item> <item key = "D3" factor = "3" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-5S"></item> <item key = "D3" factor = "3" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-10S"></item> <item key = "D3" factor = "3" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-40S"></item> <item key = "D3" factor = "3" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-80S"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Standard"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Extra-Strong"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Double-Extra-Strong"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-10"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-20"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-30"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-40"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-60"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-80"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-100"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-120"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-140"></item> <item key = "D3" factor = "3" pipe-class="steel-ANSI-ASME-B36.10M-1995/Schedule-160"></item> <item key = "D1" factor = "1" pipe-class="CopperClass/CustomClass/Class1"></item> <item key = "D1.5" factor = "1.5" pipe-class="CopperClass/CustomClass/Class1"></item> <item key = "D2" factor = "2" pipe-class="CopperClass/CustomClass/Class1"></item> <item key = "D3" factor = "3" pipe-class="CopperClass/CustomClass/Class1"></item> </CurvatureFactors> <TabulatedCurvatures> <Standard name="VALLOUREC"> <Class name="3D" pipe-class="stainless-steel-ANSI-ASME-B36.19M-1985/Schedule-10S"> <item DN="20" curvature="28.5"></item> <item DN="25" curvature="38"></item> <item DN="32" curvature="47.5"></item> <item DN="40" curvature="57"></item> <item DN="50" curvature="76"></item> <item DN="65" curvature="95"></item> <item DN="80" curvature="114.5"></item> <item DN="100" curvature="152.5"></item> <item DN="125" curvature="190.5"></item> <item DN="150" curvature="228.5"></item> <item DN="200" curvature="305"></item> <item DN="250" curvature="381"></item> <item DN="300" curvature="457"></item> <item DN="350" curvature="533.5"></item> <item DN="400" curvature="609.5"></item> </Class> </Standard> <Standard name="PieceOfCake"> <Class name="3D" pipe-class="CopperClass/CustomClass/Class2"> <item DN="32" curvature="47.5"></item> <item DN="40" curvature="57"></item> <item DN="50" curvature="76"></item> </Class> </Standard> </TabulatedCurvatures> </angle-elements>
Caution! To create an elbow component, it can be faster to create first an automatic elbow, then explode it in Rhino3D and make it a component.
You can download this tutorial’s example here.
It is possible to change quite easily some Rhino/RhinoPiping objects color to match a specific attribute. In our example, we with to have an attribute “Status”, with a choice between the value Built and the value Todo.
In default-attribute-spec.xml we must add:
<enum name = "STATUS_ENUM"> <literal value = "Built"></literal> <literal value = "ToDo"></literal> </enum> <attribute name = "Status" type = "STATUS_ENUM" read-only = "false"> <description>Status of the pipeline</description> </attribute>
We will write the script as shown below, then run the command “ChangeColors” every time we want to update the colors.
Option Explicit 'Script written by Matthieu Arnold 'Script copyrighted by NAVINN 'Script version Thursday, November 27, 2014 5:28:33 PM Rhino.Print "------------------------------------------" Rhino.AddAlias "ChangeColors", "_-RunScript (ChangeColors)" Call ChangeColors() Dim MyAttribute Sub ChangeColors Dim arrObjects, strObject arrObjects = Rhino.AllObjects If IsArray(arrObjects) Then For Each strObject In arrObjects Rhino.Print strObject 'Rhino.SelectObject strObject If VarType(strObject) = vbString Then MyAttribute = Rhino.GetUserText(strObject, "Status") If IsNull(MyAttribute) = False Then Rhino.Print MyAttribute If MyAttribute = "Built" Then Rhino.ObjectColor strObject, RGB(0, 255, 0) Else Rhino.ObjectColor strObject, RGB(255, 0, 0) End If End If End If Next End If End Sub
The template file is formated like a kind of .csv with a .tpl extension. It can be opened with a text editor like notepad.
When you create your template file, you must follow those rules:
Let’s build a typical example of a template file to generate a Bill of Materials. Create a text file and rename it for example “BillOfMaterials.tpl”. The template file will be read from top to bottom when `AA_Report` is running. So you may wish to begin with a simple line of texts for columns titles:
Label_ISO ;DN;Part number;Mass;Lineic mass;Material
The attributes values will be called like that: (example with label_ISO)
$(attribute:label_ISO)
We can look for different attributes for each kind of population. This is nearly always necessary since all piping elements don’t have the same attributes (for example only the elbows have a curvature attribute). To separate the population, we use filters. The most common way would be to separate pipes, elbows, and others:
$(filter:population:Pipe)$(attribute:label_ISO);;;;; $(end-filter) $(filter:population:Elbow)$(attribute:label_ISO);;;;; $(end-filter) $(filter:population:ComponentNode:)$(attribute:label_ISO);;;;; $(end-filter)
As you can see, the line begins with the filter, and there is no separator before the first column definition. (We take the following line to end the filter.) The population:Elbow stands for the automatic elbows (not the components). If you leave nothing between two separators, it will leave a blank cell in the Bill Of Material. In the example above, `AA_Report` will create a CSV file with only the labels in the first column. Now we can complete it and add the line for column titles:
Label_ISO ;DN;Mass;Lineic mass;Material $(filter:population:Pipe)$(attribute:label_ISO);$(attribute:rhinopiping:sorted_DN);$(attribute:CATALOG:Weight);$(attribute:lineic_mass);$(attribute:CATALOG:Material); $(end-filter) $(filter:population:Elbow)$(attribute:label_ISO);$(attribute:rhinopiping:sorted_DN);;;$(attribute:CATALOG:Material); $(end-filter) $(filter:population:ComponentNode:)$(attribute:label_ISO);$(attribute:rhinopiping:sorted_DN);$(attribute:CATALOG:Weight);;$(attribute:CATALOG:Material); $(end-filter)
As you may have noticed, the command RP_RemoveComponent is not available for RhinoPiping LT free licenses. You can still remove a component with one more step:
As you may have noticed, the command RP_ChangeElbows is not available for RhinoPiping LT free licenses. You can still remove a component with one more step:
This one is RhinoPiping's most important command since it is the one with which you are going to draw your pipelines with.
If the Rhinoceros® snap “Point” is enabled, the command can:
It may occur that RhinoPiping has difficulties connecting to an existing pipeline if too many snaps are enabled. Depending on the case, you may need to temporarily disable every snap except “Point”.
If pipelines are pre-selected when the command starts, the snaps for connection or tapping are built only for the pre-selected elements.
RhinoPiping always makes sure every piping element is compatible with the others in the same pipeline. When you change an option, it might change others. For example, if you switch from DN40 to DN50: if the current pipe class doesn’t have DN50, the pipe class should change automatically.
A pipeline can only contain one pipe class with compatible elbow classes. (You won’t be able to change the pipe class if you try to connect to an existing pipeline). The components are not associated with a specific pipe class. (You may use them with every pipe class).
When this option is enabled, the pipe will be drawn with an offset. Through the OffsetParam menu, you can choose its axis (X, Y, Z) and gap (Distance between the picked points and the pipe’s side).
This option lets you define if the pipeline’s angles should be locked to a list of specific angles or free. AngleValues Let you register a list of allowed angles in degrees. This option is active only when Angle=Locked.
When using ortho mode, if you removed 90 from the parameter AngleValues, it may happen that no angle proposed by the component family satisfies the constraints induced by the ortho mode. In that case, Rhino Piping won't propose any elbow.
This option configures the dynamic display of future pipeline during the vertices picking. You can choose between:
This option lets you change the elbows class of the pipeline. It can be changed after several vertices are picked.
When using ortho mode, if the elbows class is based on a component family, it may happen that no angle proposed by the component family satisfies the constraints induced by the ortho mode. In that case, Rhino Piping won't propose any elbow.
If the value is Keep, the axis polyline of the pipeline is kept after the command. The default value is Destroy.
This option lets you choose the nominal diameter of the pipeline. This option is disabled when the pipeline starts with a continuation or a tapping.
This option lets you change the pipes class of the pipeline. The pipes class can still be changed after several vertices are picked. This option is disabled when the pipeline starts with a continuation or a tapping.
This option lets you configure specific piping snaps. You can allow or forbid:
This option lets you change the tapping class of the pipeline.
This command adds a component to the model. The component can be inserted:
The component is chosen among the catalog. The choice is limited to the components compatible with the context (selected pipeline…).
If a pipeline is selected before running the command, it will be used as command context (the step of the pipeline's choice is skipped).
This option allows changing the component to add. It is proposed when several components of the same family can be added. (For example when inserting tees)
Please note that the current component’s diameter(s) is displayed in the state bar.
Permutes the connection circles to choose which circle on the new component is connected to the end of the pipeline.
This option is not considered when inserting the component into a pipe.
Permutes the connection circles to choose which circle is placed at the mouse cursor. This option applies when inserting a component into a pipe, not when connecting to the end of the line.
This option turns the component over.
If a component is pre-selected, this component will be transformed.
Permutes the connection circles to choose which circle is placed at the mouse cursor. This option applies when inserting a component into a pipe, not when connecting to the end of the line.
Pre-selection is ignored.
When selected, Rhino Piping will check every circle on the active document, and connect them automatically if they are matching.
This command disconnects the selected piping element from its pipeline. The pre-selection is canceled if several piping elements were selected.
This command lets you cut a pipe. It becomes then two different pipes, with a green (disconnected) connection circle between them.
This command replaces a component with any other one compatible in shape and size. If components are pre-selected, the command will replace, among these components, the ones of the chosen family. (RhinoPiping will then propose to select which family should be replaced)
This command rotates an element around the axis of one of its connection circles. It can also be used to rotate a larger part of a pipeline.
By default, you choose among all elements of the model. If elements are pre-selected, you choose among the selection.
If the value is “True”, the transformation is also applied to the neighbors of the transformed element. This option is disabled if the neighbors cannot follow the transformation. (It's the case when the transformed element is on a loop.)
This command turns a component around an axis while keeping the connections. You just have to run the command, choose the component, and pick the symmetry’s axis.
The creation of piping components for RhinoPiping is highly flexible and quite fast. You can create as many components as you want, even with the free RhinoPiping LT license. The main characteristics of a component will be:
Before it could be imported as a RhinoPiping component, you should add to your Rhino model a closed circle for each future pipe connection point. They will become the basis to generate the actual piping connection circle.
If your design allows it, the fastest way would be to use the Rhino command: _dupedge Else the command: _circle would obviously do the job
Tip for using an existing component as a basis:
Provider/Class/ValveButterfly1
will appear later as: The dressed components are special piping components, made of several components each 5). The dressed component has its own attributes, but it is possible to “undress” it and make it back to the original components.
For example, you could group together a valve with its two flanges and joints, which would make it really faster to use when designing a pipeline.
The opposite command is available to decompose a dressed component as several base components: RP_ExplodeDressedComponent
From left to right:
This command changes the diameter of a pipeline. Every piping element of the selected pipeline, including components, will be replaced. You will only be able to select compatible diameters. (For example, if a valve included in the selected pipeline only exists for DN40 and DN50, you will only be able to choose between these two sizes.)
Switch the unchanged and transformed ends.
This command creates the symmetry of a pipeline portion. The created components are the same as the original ones, only their position is symmetrical. The pre-selection is taken into account.
This option lets you change the elbow class of the pipeline. The elbows class can be changed after several vertices are picked.
When using ortho mode, if the elbows class is based on a component family, it may happen that no angle proposed by the component family satisfies the constraints induced by the ortho mode. In that case, Rhino Piping doesn’t propose any elbow.
This option lets you define if the pipeline’s angles should be locked to a list of specific angles or free. AngleValues Let you register a list of allowed angles in degrees. This option is active only if Angle=Locked.
When using ortho mode, if you removed 90 from the parameter ‘AngleValues’, it may happen that no angle proposed by the component family satisfies the constraints induced by the ortho mode. In that case, Rhino Piping won't propose any elbow.
This option lets you enter on the keyboard the avoidance's depth.
This option lets you enter on the keyboard the avoidance's length.
This option lets you choose if the first selected point will be the centered vertex or the side vertex of the avoidance.
This command deletes a component and tries to redraw a pipeline instead. Just launch the command, select the component and validate to remove it. Pre-selection is taken into account.
An error will occur if the pipes connected to the removed components are not from the same pipe class. This is due to a limitation of the components: as their class is not checked, you may connect them with several non-compatible pipe classes. In this case, the RP_RemoveComponent command would try to connect two pipe classes that are not supposed to be compatible.
This command lets you read an attribute value for the selected rhino or RhinoPiping element (s), and display it in the command results. If the attribute path is left empty, every attribute will be read.
This command lets you set the value for a specific attribute. Several elements may be changed at once.
<attribute name = "label_ISO" default = "none"/>