SortalGI Shape Grammar Interpreter
(by stouffs)
The SortalGI shape grammar interpreter supports the specification and application of parametric and non-parametric shape rules.
Support Email

The SortalGI Grasshopper plug-in encapsulates the SortalGI shape grammar interpreter and makes part of its functionality available within Grasshopper. It supports the specification and application of both parametric and non-parametric shape rules and the generation of single or multiple (in parallel or sequence) rule application results. The latest version of the SortalGI Grasshopper plug-in supports points, line segments, plane segments, circles, ellipes, (circular) arcs and quadratic bezier curves, labelled points and descriptions, in 2D or 3D. Emergence is naturally supported.


The SortalGI Grasshopper plug-in is made available as a .zip file. After unzipping it, you will find a folder containing the following components: a sortal-setup folder, a components folder, a sample folder and a PDF user manual.

  • The sortal-setup folder contains a setup batch file and a number of support packages, including the SortalGI (Python) library.
  • The components folder contains the Grasshopper user objects that give access to (part of) the functionality of the SortalGI (Python) sortal grammar interpreter.
  • The sample folder offers a few demonstrations of the use of the SortalGI Grasshopper plug-in.
  • "SortalGI plug-in user manual 05.pdf" provides information on the plug-in, installation instructions for Windows, explanation on all of the components and their usage, and detailed information on specifying descriptions.

The installation involves two steps. The first step is the installation of the SortalGI library, the second step is the installation of the SortalGI plug-in user objects. These steps are also explained in the "SortalGI plug-in user manual 05.pdf".

  1. In case of Rhino 5, make sure to download the GhPython Grasshopper Assembly file (gha) from Food4Rhino, choose File > Special Folders > Components folder in Grasshopper and save the gha file in this folder.
  2. Execute the setup.bat batch file which can be found in the sortal-setup folder. This will copy the content of the sortal-setup\site-packages folder into the Plug-ins\IronPython\Lib\site-packages folder of your Rhino installation folder. Alternatively, you can do so manually.
  3. Next, add the Plug-ins\IronPython\Lib\site-packages folder of your Rhino installation folder into Rhino's Module Search Paths.
  • Launch Rhino
  • Type EditPythonScript in the Command box
  • In the Rhino Python Editor window, select 'Options...' from the Tools menu
  • Add the Plug-ins\IronPython\Lib\site-packages folder of your Rhino installation folder into the 'Module Search Paths'
  • Select the Script Engine tab, check the 'Frames Enabled' option and click 'OK'.
  1. Open Grasshopper and select the 'User Object Folder', under 'Special Folders', from the File menu. Copy the content of the sgi_components folder into the UserObjects folder.
  2. Exit Rhino and relaunch Rhino. The SortalGI plug-in should now be present as a specific tab in the Grasshopper Components Tab Panel, called 'SGI'.

You are now set to go.


The sample folder contains a few grasshopper demonstration files

  1. rules 1 shows the creation of two rules using only line segments. One rule moves a square diagonally and another rule moves an L-shape diagonally.
  2. rules 2 illustrates the concept of emergence. It shows a derivation (Knight, 2003) applying the two rules created above, using a series of Apply nodes.
  3. rules 3 shows an extended derivation of all possible rule applications over two steps, applying the two rules created above, using two Apply All nodes.
  4. inscribed llustrates the use of a point to constrain rule application. It shows a derivation (Stiny, 1985) applying a rule to inscribe a square with a rotated square.
  5. froebel illustrates the use of labelled points, descriptions and plane segments in 3D. It shows a derivation (Stiny, 1981) composing a design made up of blocks ('oblongs', 'pillars' and 'squares') from Froebel's building gift 6. The parallel description rules extract information form the shape to provide a description of the design, from which a block-by-block description can be derived. Note that compared to Stiny (1981), the derivation uses fewer rules, because the description rules are able to interact with the parallel shape rules. However, the derivation uses an additional labeled point assigned to each pillar.
  6. illustrates the use of quadratic bezier curves. It shows a derivation (Jowers and Earl, 2011) of a Celtic knotwork.
  7. illustrates the specification and application of parametric rules. It shows a derivation (Stiny, 1977) of a Chinese ice-ray lattice from five rules, each splitting a triangle, quadrilateral or pentagon into two polygons from among triangles, quadrilaterals and pentagons. Note that at this point it is hard to ensure a 'nice' ice-ray lattice, because the splitting points are randomly identified on the respective line segments. In a future version we expect to provide the means to control this better.
  8. shows how with the use of predicates (shortest-line) and directives (point-on-line) one is able to split a quadrilateral more 'nicely'.
  9. illustrates the specification and application of parametric-associative rules using descriptions, predicates and directives. It determines all void quadrilaterals (plots) in a figure, scales each quad (footprint) a given distance (border), extrudes each quad by a factor dependent on the ratio of the new area wrt the original area (gfa for a given plot ratio) and adds a surface to each face (facade and roof).