Site Tools

Advanced Flattening

Summary: Since the Expander plug-in from Ship Constructor will not be available for Rhino 4.0, we have started developing a replacement. This is the first prototype.


Rhino 4.0 has:

  • UnrollSrf - makes a flat pattern from 3D developable (curved in one direction) surfaces. Always use this command first. If it fails, then try Squish.
  • Smash - is a special version of UnrollSrf that does not check to see if the surface is developable. It is not recommended now that Squish is available.
  • Squish new - makes a flat pattern from a 3D non-developable (curved in two directions) surface or polygon mesh. In general, try UnrollSrf first.

Rhino 4.0 does not have:

  • Unfold or unbend - to make a flat pattern from 3D shapes made from bending up a 2D pattern. Mostly used to create sheet metal cases, etc. Most MCAD products do this nicely, ojezu.
  • Flow - to make a flat pattern for a 3D shape made by flowing metal over a complex mold. An example is stamping a soda can from the metal disk or stamping an auto interior door panel from a flat pattern.
  • Peel - to split surfaces based on where they might rip and flattens the surfaces. An example is flattening a sphere. Note: if the shape is already split, Squish may work. You can tell when and where a 3D surface needs to be split by where it has extreme stretching or compression or the 2D pattern overlaps.

Squish overview

The Squish command flattens a non-developable (curved in two directions) 3-D mesh or NURBS surface into a flat 2D pattern.

squish1.jpg squish2.jpg squish3.jpg

The Squish command marks areas of compression (red point cloud) and stretching (green point cloud) and displays statistics about the amount of compression or stretch.

Area: unchanged
Compression: average=0.04%, maximum=0.11% (in 44% of the surface)
Stretching:  average=0.07%, maximum=0.28% (in 35% of the surface)

Here compression means the material will be compressed when the 2D pattern is deformed into the 3D shape. Stretching means the material will be stretched when the 2D pattern is deformed into the 3D shape. The percentages in the parenthesis give you an estimate of how much of the pattern will be compressed or stretched.

Up to ten text dots mark the locations with the most dramatic deformation. The number in the text dot is the percent stretching change in length. In the image above, the green text dots displaying “0.3” mean the regions near those dots will be stretched by 0.3% (3/1000) when mapped to 3D.

SquishBack overview

The SquishBack command lets you place points and curves on a 2D pattern that was made with the Squish command, and then “unsquish” them back to the 3D shape.

For example, suppose we wanted to put a “Rhino” brand name in the black circle on this 3D NURBS model of a shoe last.


First use the Squish command to generate a 2D pattern of the last.


Then use the TextObject command to create the white “Rhino” text as curves on the 2D pattern.


Finally, use the SquishBack command to “unsquish” the white Rhino text onto the 3D last.



For Rhino 4.0:

  1. Download and install the latest Microsoft runtime libraries (required to run Squish). (You only need to do this once.)
  2. Download the latest Squish plug-in. - Updated 11-January-2008
  3. Download the plug-in file Squish.rhp to a folder on your computer.
  4. Download the toolbar file Expand.tb to a folder on your computer. Activate the toolbar under menu Tools/ Toolbar layout.
  5. From Windows file Explorer, drag and drop Squish.rhp files into an open Rhino 4.0 viewport, or use the install button on the Tools - Options - Plug-ins page.

For Rhino 5:

1. Download and install the latest version of Rhino 5.

Squish command options

  • SplitSeams=Yes/No
    • Use SplitSeams=Yes for meshes from a single surface.
    • Use SplitSeams=No for meshes from a polysurface.
  • StiffBoundary=No/Yes
    • If StiffBoundary=Yes, Squish makes an extra effort to avoid distorting boundary lengths.
  • Deformation=Free/StretchMostly/StretchOnly/CompressMostly/CompressOnly
    • There are five built-in deformation options to choose from depending on your bias for stretching or compressing, and the ability to specify custom deformation settings.
      • Free - No preference for compression or stretching.
      • StretchMostly - Strong bias for expansion when the pattern is deformed into the 2D shape.
      • StretchOnly - Absolutely no compression when the pattern is deformed into the 2D shape.
      • CompressMostly - Strong bias for compression when the pattern is deformed into the 2D shape.
      • CompressOnly - Absolutely no expansion when the pattern is deformed into the 2D shape.
      • CustomA, CustomB, CustomC - custom deformations.
      • CustomSetup - Used to specify settings used by the CustomA, CustomB and CustomC options.
  • Material=Rigid/Floppy
    • If you are manufacturing something out of a rigid material and want to minimize stresses when forming the 3D surface from the 2D pattern, use Rigid.
    • If you are manufacturing something out of a floppy material and you want to limit geometric distortion as much as possible, use Floppy.
    • If you are manufacturing using a rigid material that is inelastically deformed, let us know what settings work best.
    • We can add support for more materials as we learn more about your needs.
  • Decorate=Yes/No
    • The red and green point clouds and text dots are decorations. To turn them off, set Decorate=No.
  • Outside=Up/Down
    • If Outside=Up, the outside of the 3D surface is up in the 2D pattern.
    • If Outside=Down, the outside of the 3D surface is down in the 2D pattern.

Using CustomSetup to define custom deformations

The CustomSetup option lets you set the parameters used by the custom deformations. There are four parameters you can set.

  • BndStretch
  • BndCompress
  • InteriorStretch
  • InteriorCompress

The default value for these parameters is 1 and they can be set to any positive number. A larger value reduces the amount of the specified deformation compared to what happens when all four parameters are equal. For example, if you want to severely limit interior expansion, you could do something like:


If you want to preserve boundary lengths you could use the settings:



  • Does not unroll, unfold, or peel.
  • Does not work great on developable surfaces. Use the UnRollSrf command.
  • For stamping with extreme deformations, like stamping aluminum beverage cans from aluminum disks, Squish will be worse than useless.
  • No check for overlapping 2D results.

To do

  • Label lines and surfaces.
  • Polysurface/solids support.
  • Simultaneous “Squishing” of multiple surfaces, and attempt to layout the resulting patterns in the best possible way. (Olivier Suire)
  • Better annotate on the plate the expansion/contraction. This is nicely represented by the graphical 'heat chart' with colors showing the relative change. This does not travel well when you go into the shop. It is my opinion that there should be contour rings printed on the plate at steps appropriate to the plate expansion/contraction much like a topographical map. This way the guy on the Eckhold machine would be able to concentrate on specific areas and know which direction to work. – Paul Fuchs
  • Fancy dialog interface.
  • Button development, first attempt (Gerard Petersen) button_24x24.jpg



Please post feedback to Dale Lear on the Rhino User Forum, be sure to use the word “Squish” in the subject line of your post.

We need to know whether or not the flattened patterns generated by the Squish command are useful in your specific manufacturing application. If you have a 3D model and 2D patterns that were used to successfully manufacture the object, we would like to compare the pattern created by the Squish command with the pattern that was used in manufacturing. Even if you cannot share the model, please let us know what is important in your specific manufacturing application.

  • What materials are you using?
  • How important is preserving area?
  • How much compressing can be tolerated?
  • How much expansion can be tolerated?
  • How much shear can be tolerated?
  • How important is preserving boundary length?
  • Does the material behave differently near the edge?
labs/advancedflattening.txt · Last modified: 2016/11/28 by pascal