Armadillo is a plugin based on parametric arrays along path curves. It can create wide range of solutions: from a simple array along one curve to complex ribs and paneling systems, with extensive set of transformation features and interactive preview.

Rhino 5 SR14 is required to run Armadillo. It is recommended to install RhPicture plug-in - otherwise the image-driven features will not be available.

DOWNLOAD and install 'Armadillo.rhi' plugin setup file.
Once installed, new commands: 'Armadillo' and 'ReplaceArmadilloPanels' will become available.

TRIAL version is fully functional but limited to 10 PathCurves and 10 Items per PathCurve.

Unlimited version requires a license that can be purchased for $189.00 or $99 (Student).







  1. select an Item to array (Item = collection of objects) or press ENTER to use point object

  2. pick Item's initial BasePoint (or skip to use BoundingBox center)

  3. select PathCurve(s) (skip for FromIso mode: single, untrimmed surface's IsoCurves can be used as PathCurves)

  4. enter the number of items per path, or:
    - FromPoints > select points on path curves for item count/spacing/placement
    - FromEditPoints > PathCurves' EditPoints will be used

  5. select BaseSurface(s) - Select Surfaces, PolySurfaces or Meshes as a base geometry for Item orientation - skip for PathCurves only

  6. have fun adjusting options with solution update preview, then hit CREATE to bake the final result.


1) Main menu can be accessed via command line or Right-Click PopUp menu.
2) Options mode is transparent - Rhino commands can run during Armadillo runtime

COUNT - number of items per path curve.
Note: Count is disabled while in ‘FromPoints’ or ‘FromEditPoints’ mode.
UseCountFromCreated – gets item count from current solution. When spacing between items makes them not fit on the path curve, some items from the given count are not created. this option detects the number of currently created items and updates the defined counts to reflect the solution. Prompt to change spacing to “Fit” will be displayed after this option is selected.


SPACING – Armadillo can handle spacing between Items in 2 ways: regular and Item-size based. While ‘Settings>Size Affects Spacing’ is ON (default), Items spacing is based on their size (World_X dimension). Spacing=0 means items will be placed next to each other "touching", while higher numbers will keep indicated spacing consistent between items (even if their scale varies). By default Spacing is set to 'FIT'- items are arrayed along entire PathCurve length.

Available per-Path spacing modes:
Regular – keeps equal dimension between Items.
Fit – equally spaced items – adjusted to fit into entire PathCurve length.
Random – random spacing – MinMax range or ValueSet to randomly choose from.
RandomFit – same as above, but the spacing will be proportionally scaled to fit.
Pattern ­– define spacing pattern
PatternFit - same as above, but the spacing will be proportionally scaled to fit.


TRANSFORMS - can be applied from here. Note that all kinds of transformations (Regular, Random, Control-Curve or FromBitmap) will be combined in the final solution.
SCALE - each Item's scale can be adjusted from here. Armadillo will use ScaleNodes and linear interpolate the values between them. Initially there is only 1 ScaleNode. Start node cannot be removed. ScaleNodes are indicated in
red while interpolated ScaleFactors are cyan color. It is possible to pick any item and assign ScaleNode - it will be used to calculate the incremental item scale. It can also be removed anytime. Turning ON EnableNonUniform allows to enter separate values for X,Y and Z scale factors (disabled at start).
Note: You can switch ScaleNodes visibility with: 'Settings > Show ScaleNodes Only' (red nodes only will be shown if active).
ROTATE - rotation of Item along the PathCurve. StartAngle and Angle can be adjusted here. EndAngle or Incremental modes are available for defined Angle value.
OFFSET - offset of Items from PathCurve or BaseSurface along normal direction.


Spacing Notes:

  1. Item dimension can be overridden by accessing ‘Item > Size Override’ submenu.

  2. Spacing can be scaled along with item scale if Settings > Scale Spacing is enabled.

  3. Spacing value must be > 0 for items with World_X dimension=0.

  4. Spacing is disabled while in FromPoints or FromEditPoints mode.

  5. Equidistant spacing can be enabled from Settings menu; it will not affect paths with Fit, RandomFit or PatternFit spacing modes


RANDOMIZE – random factors can be applied to transform properties (Scale, Scale X,Y,Z, Rotate X,Y,Z and Offset X,Y,Z).

Min-Max values or ValueSets to randomly choose from can be defined.

The MASS EDIT mode allows to edit all random properties together.


CONTROL CURVE - implements the idea of "ControlCurve Graph". Curve objects can be used to control properties of Items in arrays (Scale, ScaleX,Y,Z, Rotate X,Y,Z and Offset X,Y,Z). For each PathCurve and each property the ControlCurve can be assigned and its Min-Max values defined.
Note: ControlCurve can be any Curve in WorldXY plane, that represents a valid function graph ( for each X value only 1 Y value is possible ) ; X represents PathCurve parameter range and Y is the property value.


CONTROL BITMAP – bitmap images can be used to drive Armadillo solution parameters. Color values can be applied to Object Color and Material Color of Items and CP Panels; Luminescence values can drive Scale, Rotation, Offsets and Material Transparency properties. A bitmap can be assigned to each transform property with min-max values defined and basic image transforms applied (invert, flip X, Y and rotate 90 deg.).

In standard mode the order of path curves and items is translated to bitmap XY values: item#1 on path#1 relates to XY (0, 0) pixel value on bitmap, last item on last path relates to opposite bitmap corner. All other values are interpolated between.

SurfUV-BmpXY mode – the reference surface must be defined first (entering this mode disables ‘Size Affects Spacing’ setting). In this mode all bitmap values relate to item position on surface, disregarding item or path order. Surface UV coordinates are mapped onto Bitmap XY pixel values.


Round Transform Values - each transform type can be rounded to defined increment from here. For example, OffsetZ ranging from 0 to 10 with rounding=2 will result in limiting OffsetZ to the set of: 0,2,4,6,8,10 values.


PROFILES - Armadillo can create new geometry from arrays of Items. This menu is available only if Curves or Points are part of Item's objects set. Loft/Sweep surfaces can be created from Curves and Interpolated Curves from Points.
Note: If more than 1 item defined, the order of item's component selection keeps proper Profiles continuity
Loft - Loft surface from Profile curves
Sweep1 - Sweep1 surface from Profile curves.
Note: use single profile (count=1) sweeping along polycurve path to keep the profile polysurface connected.
IterpCrv - Interpolated Curve from Profile points.
Loft Type - Normal, Loose, Straight, Tight and Developable loft types are available.
Curve Degree – Interpolated Curve degrees 1 or 3 are available.
Cap - while enabled, Loft/Sweep surfaces will be capped if possible.
Loft Pattern / Curve Pattern - defines the pattern of profile pairs to create profile geometry between. For example: T,T,F ( True, True, False ) will create loft from profiles 1-2-3, leave a gap between 3-4 and continue with loft between 4-5-6 and so on; RANDOM option is also available.


ITEM - options to manage Item collection.

Base Point - change Item's base point.

Pick Item - define new Item (new set of objects for single Item can be selected).

Pick Multiple Items - define multiple Items. Note that the order of selecting objects in each Item determines profiles continuity/availability for curves (Lofts/Sweeps) and points (Interpolated Curves). While first set of objects is selected it is possible to distribute all selected objects as separate Items with automatic base point placement in predefined bounding box position.

Item Order - only available if multiple items are defined. Allows to redefine item distribution order or use Random order.

Order Mode - defines the way multiple items are distributed along path curves.Available modes: Local (default), Global, Per Path and FromControlBitmap.

FromControlBitmap order mode will use image luminescence information to determine item placement - brighter values=higher item order index.

Size Override - allows to redefine Item's World_X size (this dimension determines the Spacing calculations if 'Size Affects Spacing' setting is enabled). By default, Item Size is derived from its bounding box World X dimension. It can be adjusted here to enhance the item spacing or overlapping control.

Transform Exclusions - allows to keep some Items unaffected by Transforms. Exclusion pattern ( True-False ), mode ( Global, Local, PerPath ) and a list of individual transforms to exclude from are available.

Reference Plane Direction - defines the World Axis that will correspond with "along path curve" orientation direction. This setting will affect CP_Item orientation too.

PATH - options to manage Path Curves collection.

Match Properties - pick source PathCurve and apply its selected properties to destination PathCurves.

Reverse - reverse selected PathCurves direction.

Adjust Ends - allows to adjust the start/end points of array per PathCurve.
Note: End Adjust is disabled while in FromPoints or FromEditPoints mode.

Path Order - PathCurve order is important for Item OrderModes, CrossPath and Bitmap-driven operations. The default path order is based on curve selection order, but while window-selecting, curves may not be ordered the desired way. PathOrder provides options to manually or automatically order the PathCurves with color-gradient preview. Automatic order detection modes available are based on: World X,Y,Z position, distance from point, position along curve, position along surface U and V parameters. The order can be also shifted and reversed from there.

Redefine IsoCurves - available only in FromIso mode (single, untrimmed base surface with IsoCurves as PathCurves ). From here the IsoCurve Path count and direction can be redefined.
Note: All per-path transforms will reset to default values. The CrossPath and Bitmap-driven transforms will remain unaffected.

Path Style Manager - Path Styles can be saved, loaded or deleted from here. Path Styles are saved into *.ini file (located in 'Application Data' folder) with all properties and loaded/applied in next Armadillo session or another Rhino session to selected PathCurves.

Bitmap Style Manager - Bitmap Styles can be saved, loaded or deleted from here. Bitmap Styles are saved into *.ini file (located in 'Application Data' folder) with all properties and loaded/applied in next Armadillo session or another Rhino session to current Armadillo solution.


CROSSPATH – creates geometry based on the grid defined by primary, ordered set of PathCurves and the secondary set of CrossPathCurves created by connecting Items’ insertion points across.The CrossPath solution (Items and Panels) will inherit all transforms defined for primary PathCurves nodes.
Note: Available only if more than 1 PathCurve is defined.


CrossPaths ACTIVE - activate CrossPath solution
ClosestPoint Lines ACTIVE - activate ClosestPoint Lines


CP Settings:

Closed – CrossPath curves will be closed
Loft – create Loft surface from the CPItem profile curves when available
Loft Type – Normal if checked, otherwise Straight
InterpCurve – create InterpCurve from CPItem points when available
Curve Degree – Degree=3 if checked, otherwise Degree=1
Panelize – activate/deactivate CP Panels
Mesh Panels – create Mesh object from CP Grid along with panels
Paneling Tools Grid – create grid of points compatible with Paneling Tools
Disconnect Panels – connect/disconnect CP Panels
Pull Curves and Points – Curves and Points from the CP Panels and CP_Lines will be pulled to the Base Surface. Not available while Flow is ON or if multiple or no Base Surfaces are defined.
Flow Panels - in this mode, instead of using 8 panel corners and morphing panel bounding box into them, panels will be 'flown' into the surface created by 4 edge curves of each CrossPath cell.


CP Item – define item to array along CrossPath curves. Currently only 1 Item is allowed. CP Item orientation is inherited from the primary PathCurve, so 90° Z-rotation may be desired to orient it along CrossPath curve. The BasePoint can be redefined from here as well as disabling the CP Item.


CP Panel – options for generating panels in CrossPath Grid cells.
GetPanels – define panel(s). Panel is a collection of objects – its default or user-defined bounding box will be used as a reference to morph panel objects into CrossPath Grid cell. Any number of panels (object sets) can be defined. By pressing ENTER while prompted for Panel #1, multiple panels can be defined at once from individual objects selected.
BboxEdit - transform, define new or reset panel reference bounding box.
Offset – panel normal offset from the grid.
Order - define order of panels in the grid. Available only when more than 1 panel is defined. Random order is also available.
OrderMode – defines how the Panel Order will affect the solution; available modes: Global, ByRow, ByColumn.
OrderFromBmp – uses bitmap luminescence values to define panel placement. Lighter values translate to higher panel order index.
Discard – discards all defined panels.



Command Mode - Armadillo main Options mode is transparent - most of the Rhino commands can run during the script runtime. However some commands may collide with menu items names and will not work. Command mode takes care of this limitation. Inside command mode SelectionMode and Update Array (per PathCurve or All) are available.
Note: It is possible to add, delete or modify geometry while still in Armadillo command. Modifying or deleting some objects that are part of the solution can result in errors.
Show ScaleNodes Only - while ON, only the Red ScaleNodes will be visible for editing Scale.
Scale Offsets - while ON, offset value will be scaled based on Item scale.
Scale Spacing - while ON, spacing value will be scaled based on Item scale.
Size Affects Spacing - while enabled, Item's World X dimension will be taken into account while calculating the spacing along PathCurve. Disabling this option will force all items X dimension to be = 0.
Equidistant Spacing - direct spacing between objects will be used instead of the curve-arc length spacing. Fit, PatternFit or RandomFit modes are not supported.
Progress Preview - enables viewport redraw after generating array on each PathCurve. While disabled, redraw is turned off until entire solution is generated (faster).
Name Items - enables Item's object naming. Name format: [ ABCDEF_pN_iN_nN ] where ABCDEF is unique ID randomly generated per each script runtime, pN - path#, iN - item#, nN - object in item index. This naming format enables easy object selection with Rhino SelName * filters for further processing.
Define Name - define the name that replaces the randomly generated name prefix
World_Z Always Up - World_Z (Up) Item orientation will be unaffected.
Cplane_Z Always Up - Cplane_Z (Up) Item orientation will be unaffected.
Orient to Next Item - the next Item's insertion point will be used to determine the direction of current Item. While disabled, PathCurve tangent vector is used.

Color Settings - customization of Path, CrossPath and CP_Lines curves color
REGENERATE - regenerates the Armadillo solution.
Help (website)

Licensing - to enable full version after purchasing Armadillo, generate the License Request file from here and follow the instructions.
About - Script info and contact information.

CREATE - "bakes" the final result. Created objects will be grouped by category.
If Profile-based geometry was created the option to delete profile curves/points will be available.

ReplaceArmadilloPanels command:
This command lets user replace panels created previously with Armadillo command.
IMPORTANT NOTE: Currently the replaced panels will be recreated in their original location ignoring all post-command transformations. Replacing copies of originally created panels may also not work as expected.

REPLACE - prompts to pick replacement panels for selected indices and replaces selected panels
SubSelect - panel set sub selection modes: All, ByIndex, ByRow, ByColumn, Manual, Add/Remove and Invert Selection
Offset - replacement panels offset
Pull - (Yes/No) - while enabled, pulling surface must be defined and all new panel's curves and points will be pulled to the selected surface
NewIndex - sets new panel index number for selected panels
DONE - finish panel replacement