Marine Weight Schedule - User Manual


Marine Weight Schedule is a plugin for Rhino 3D designed to generate - from a vessel’s 3D model - a bill of masses/inertias, as well as a Bill Of Materials. It takes into account points, curves, surfaces, solids and blocks, and uses the parameters from the layers' names to apply the unitary/lineic/surfacic/volumic masses, with a margin percentage applied.

A command is also provided to generate a hydrostatic report at a given height interval (based on Rhino hydrostatics features)

Both reports will be generated as excel files (.xlsx) based on a customizable template, but Microsoft excel doesn’t need to be installed on the computer.

Plugin installation


The plugin installer can be downloaded at:
A free trial is included, and yearly licenses can be purchased on the aforementioned page.
Marine Weight Schedule works with Rhino 61) and Rhino72).


Our plugins are also compatible with Yak, Rhino's new package manager 3), which is basically an application store for Rhino. You just need to call Rhino's command _PackageManager:

You can also install from the repository with the following command line:

"D:\Program Files\Rhino 6\System\Yak.exe" install 'PluginName'

If you add this in a batch file (*.bat) at windows startup, it is probably the best way to keep all your plugins up-to-date ;-)

License activation


The free evaluation can be used once per computer, and requires network access to
The license activation requires network access to
Please check your firewall in case of failure.

Activation form

The activation window automatically shows up when the plugin is loading and a valid license or trial is not registered. If you want to see, change or remove your license while the plugin is already loaded, you can use the Rhino commands PluginName_License.
Activation status is always visible on the upper right corner of the form, if the icon is green your plugin will be enabled:

Trial Tab

This first tab is dedicated to the trial requests. Your trial status is displayed, and the button is disabled if a trial is not available for your computer (Your trial has already been activated, or the server is unreachable)

Commercial Tab

This tab's two main buttons let you Check-out (Activate) or Check-in (Desactivate) your license from our license server. When the checkbox “Enable floating licenses” is checked, every TomKod's plugin will try to deactivate the license automatically when closing (Making it available for another of your computers)

Finally, a license certificate (*.TkLic) can be selected at the bottom of this tab. It allows to activate a license offline, but the license won't be floating anymore. If you need one, contact us at


The toolbars for Rhino are always included in your plugins installation directory, or can be downloaded here.
You just have to drag/drop the file “Tomkod.rui” to a rhino window to install them.

Features and commands


This command can be used only from the command line prompt. It displays the plugin's current revision and license status.


This command can be used only from the command line prompt. It displays the plugin's activation form.

See license_activation.


Computes the whole model masses, as well as a Bill Of Materials4) and generates an excel report.


For each layer5), the command will retrieve the Mass, Margin and Vertical offset values from the layer name6), then:

  1. For each rhino object, the actual mass and gravity center will be computed, using the layer values. The layer's Mass will be used differently, depending on the object's type: punctual mass for Points, lineic mass for curves, surface mass for surfaces7), and volumic mass for closed polysurfaces.
  2. At the same time, the Bill-of-Materials will be created internally.
  3. An excel report will be created.

Model preparation

The fundamental idea of this plugin is to match data from the model's objects and their layer. For this reason, each layer should contain only one specific material. For example:

  • The layer Deck1:SectionB:Nuts could contain only points, and the layer's (mass) information would be used as a punctual mass for each nut.
  • The layer Deck1:SectionB:plates could contain only surfaces, and the layer's (mass) information would be used as a surface mass for each plate.
Layers naming convention

The document's layers should follow the following naming convention:

LayerName *MaterialName* (Mass) %Margin% |VerticalOffset|


  • Mass will be the ponctual/lineic/surfacic/volumic mass
  • Margin (optional) will be the percentage to add to the object's mass.
  • VerticalOffset (optional) will be the the vertical offset to apply to the layer's masses
  • MaterialName8) (optional) will the material's name. In the Bill-of-Material, the materials are displayed in a specific column.

Two layers with the same name but different materials will not be grouped together.

Particular case for Stiffeners

A specific naming convention has been added to properly count the stiffeners in the Bill-of-Materials, to consider the scenarii explained below.

Those particular cases only impact how materials will be counted in the Bill-of-Material tab. The weight report results won't be impacted.

  • Implicit stiffeners

There are some cases where you don't want/need to create an actual geometry for your structure stiffeners, for example when you are at the early stage of your project. Implicit stiffeners let you count the required stiffener lengths relative to the layer's metal sheet's areas.

LAYERNAME:   MyLayerName (Mass) %Margin% |VerticalOffset| [StiffenerName s=value]

In the Bill-of-Material, this would create two outputs: an area for the surfaces in “MyLayerName”, and a length for their stiffeners.

'StiffenerName Length' = 'MyLayerName Area' / s

For example:

Since v1.1.3, the implicit stiffeners can also have their material names defined with a specific syntax:

LAYERNAME:   MyLayerName *MaterialName* (Mass) %Margin% |VerticalOffset| [StiffenerName s=value *MaterialName*]
  • Stiffeners defined as curves in the model

Two kind of curves-defined stiffeners can be used:

  • Folded plates
LAYERNAME:   W:120x6 BF60

This will be counted as one surface, Thickness 6, width=120+60. Thus the result in the Bill-of-materials will be:

'Th.6 plate Area' = length x (120+60)

  • Profile with flat plate
W:120x6 F:80x8

This will count as one surface, Thickness 6, width=120, plus one profile 80×8

In this case, the command will output an area for the plate and a length for the profile:

'Th.6 plate Area' = length x 120

'80×8 profile length ' =length

  • Stiffeners defined as surfaces in the model

In some cases, you might want to represent your stiffeners as a 3D surface in the model, but count them as lineic outputs in the Bill-of-Materials because they are technically profiles.


This would output:

'80×8 profile Length' = area / 80

As for the weight estimate, the layer's optional %Tolerance% will be considered:

LAYERNAME:   F:80x8 |34.1| (87.2) %3.4%

This would output:

'80×8 profile Length' = (area / 80) + (area / 80) * 3.4/100

Particular case for Blocks

By default, rhino® blocks9) are ignored by the command. However, we provide several commands to transform blocks into GBlocks, which are considered in the reports as punctual masses.

See gblock_setdata

When the command will process GBlocks, their layer properties will be ignored, and their internal definition will be used instead (Name, gravity center, mass).


When the whole model has been processed, an excel10) report is generated, and the user is invited to pick a name and location for the resulting file. Bill of masses main sheet:

Bill of masses detailed sheets for Volumes, surfaces, curves, and points:

Bill of materials:

A custom ViewPort is created with the gravity center displayed:


No option available.

Scripted mode

Using the command's scripted mode -ProjectWeightReportByHullSection will enable an hidden option:

  • AxisLengthInMeters: Enter the gravity center's preview axis length used in the result views


This command behavior can be customized, by editing some files in the install directory11).

Excel templates

The excel report template “PWE_Model.xlsx” can be modified to fit your graphical needs, however, it is recommended to edit only the text values, the column sizes, and the logos while keeping the document's general layout.

Naming conventions for the layers

The naming convention for information specified in the layer's names is based on REGEX (Regular expression), which is the most common way to match a text string to a pattern. The default values can be edited in the file “MWS_CustomRegex.yaml” with any standard text editor.

We recommend using the free text editor NotePad++ will make the YAML format more readable:

You can test in real-time your customized regular expressions at, and see if your pattern matches your layer's names.

Example1: The default regular expression to match the implicit stiffeners between square brackets: [StiffenerName s=value *MaterialName*]

Example2: The edited regular expression to match the implicit stiffeners between either square brackets or exclamation marks: [StiffenerName s=value *MaterialName*] or !StiffenerName s=value *MaterialName*!


This command12) splits the model into sections, then runs ProjectWeightReport on each section. The resulting Excel file will contain the usual model-wide report, plus independent reports for every section. (Named from S001 to Sxxx)


  1. Run the command ProjectWeightReportByHullSection
  2. Pick the x-axis coordinates delimiting the sections13).
  3. The script will split internally the curves and surfaces, and sort points and volumes by each section's bounding box. GBlocks will be allocated using the location of their gravity centers.

Items14) located on the plane between two sections will be counted in both sections, leading to a difference between the global weight and the sum of every section's weight. A solution is to offset the cutting plane by a few millimeters.

Solids15) must not by split, because the result would be opened polysurfaces, which is forbidden when creating a ProjectWeightReport

Scripted mode

Using the command's scripted mode -ProjectWeightReportByHullSection will enable two hidden options:

  • AxisLengthInMeters: Enter the gravity center's preview axis length used in the result views
  • DrawSplittedGeometries: When enabled, a layer ProjectWeightReportByHullSection will be added to the model, with the split geometry. This is useful to check if no curves/surfaces were lost in the sections' splitting operations.



Computes a hydrostatic analysis at different heights and generates an excel report.


The hull's surface or polysurface is selected as input. Once validated, Rhino's hydrostatic calculation is run at various heights as defined in options, and an excel report is generated.


TEMin Minimum height (mm)
TEmax Maximum height (mm)
Delta Distance between two tested height (mm)
Density Water Density
AutoMinMax Detect TEMin and TEmax values from geometry (Only available when a geometry is selected)


The excel report template “Hydro_Model.xlsx” can be modified in the plugin's install directory, usually:

%AppData%\McNeel\Rhinoceros\7.0\Plug-ins\Marine Weight Schedule for RH6-RH7 (dac6da37-23fc-4ad6-9b46-33a2cad9e13b)\VersionNumber
(Adapt Rhino's version if needed, as well as the plugin's version) It is recommended to edit only the text values and the logos while keeping the document's general layout.


Adds gravity center and mass information to a block. GBlocks are considered by the command ProjectWeightReport , which makes them extremely useful for your pieces of equipment.

When using this command on an existing GBlock, its gravity center, mass information, and name will be overridden.

This is the only way to edit a GBlock name or data.


  1. Start the command
  2. Pick a rhino block16) in the model
  3. Pick the GBlock's gravity center
  4. Enter the GBlock's mass
  5. Enter the GBlock's name (By default, Rhino's block name is used)
  6. Click OK or press Enter


Lists every existing GBlock name and masses to the command line.


  1. Start the command
  2. A window is shown with details about every block instances in the model


Reads a GBlock data.


  1. Select a GBlock
  2. The data is shown in the command line:


Select a block by their GBlock Name. (From a list of available GBlock names)


  1. Launch the command
  2. Pick a GBlock name from the list
  3. Every instance of this GBlock will be selected in the model


Selects the next block in the document which is not a GBlock (gravity center and mass are undefined)


  1. Launch the command
  2. The commands loops between the non-GBlocks instances in the model. (Press ESC to leave)


Renames a GBlock definition (Every instance will be renamed)


  1. Launch the command
  2. Pick a Gblock from the list
  3. Enter a new name for the GBlock
Rhino 6.15 or higher
Rhino 7.5 or higher
Rhino 6 or later only, with graphic user interface for Rhino7 only
v1.0.4 and later versions
The whole model or worksession will be used
Read “Model preparation” below
To avoid errors, opened polysurfaces won't be allowed
Since v1.1.3
instances references
If you installed from Rhino's package manager, the installation path is usually: %appdata%\McNeel\Rhinoceros\7.0\Plug-ins
From v1.2.0
The coordinates can be registered either by clicking on the model or by entering numbers in the command line.
Volumes, surfaces, curves, points, or GBlocks
Closed polysurfaces
Instance reference