Park generator 0.5 (pending approval)

Oversized junctions are now permissible.


  • SketchUp UI
    • The Park is placed into a Group instead of having all elements placed into the scene root. A previously generated park model can be selected and re-generated.
  • Grid
    • An option to have all vertical or all horizontal ‘stripe’ Path Sections, by setting either x or y rule parameters to zero, e.g. grid(0,4).
    • A Vertical and Horizontal Path Sections have the local orientation along its lengths, allowing more meaningful path productions by using Edge Angle selection.
    • Large Path Junctions are now possible, as long as they do not touch the neighbouring Sections and Junctions.

Technical Details

  • Changes to the Shrinking algorithm
  • Logging is cleared after an update
  • Rays inner_graph_thinout attribute allows thinning out of the inner graph, by varying the ratio between the spanning tree and the maximal planar graph.
  • Cells rule bug fixes
  • Grid rule:
    • Major Refactoring
    • Second-stage Bounding Box based Quarter Indexing. When centre-point indexing fails (which was and still is used by default) – for instance, if the Quarter centre is clipped away, a hint shape enclosing box is used to locate a quarter.
    • OBB indexing added (as described in the Thesis).
    • Large Junctions can co-exist with the neighbours by performing clipping in ‘checkerboard’ arrangement (see picture above).

Park Generator 0.4, Rays Rule

Rays rule park in a fitted region

New Rules

  • Rays rule – ‘ray’-like partitioning of the input region
    • Entrance positions need to be given as a list parameter, which informs where on the boundary the entrances should be placed.


  • New match condition, border – boundary-touching regions are selected.

Technical Details

  • Tested using Shape Fitting plugin – a Quad is provided in conjunction with the original Input Region; this, however, it is still under development
  • shape_num_segments” attribute determines circle shape resolution
  • Layout library (DLL) no longer throws exceptions but logs errors instead.

Park Generator 0.3, Cells Rule

 New Rules

  • Cells rule – natural looking region partitioning (pictures above)
    • smoothing
    • X and Y junction symmetry
  • Select rule – rewrite labels without modifying input geometry.


  • 01indexing modulation
    • when attribute “selection_internal_minimal” is set (not equal to 0) – no boundary-touching edges are included in inner selection
  • insert operator
    • the second parameter changed to weight (from the number of passes – see below); can be a random range value; 0.5 by default
  •  Smoothing
    • Adaptive smoothing: keep smoothing until the largest edge is less or equal to the threshold attribute “smoothing_len_threshold_max” (default: 10%)
    • Number of passes bounded by attributes:
      • smoothing_num_passes_min” (default: 1) – number of passes that is applied always
      • smoothing_num_passes_max” (default: 8) – upper limit in adaptive smoothing, stop at this number of passes regardless.

Technical Details

  • a default value for the second parameter in insert operator is set at run time instead of compile time (parsing).

Park Generator 0.2, Stochastic Selectors

General Changes

  • Stochastic selectors
  • Place rule – single CENTRE parameter placed shape in the middle of the region
  • Attributes
    • could be set using values of other attributes
      • for instance set(a, 20) set(b, a)
    • new attribute “elevation” specifies the amount to extrude upwards (push/pull)
    • new type attribute “border” – sets stone-like material to the region and elevates 6 units up
  • Scatter rule – samples that are placed along the edge (EDGE_SELECTION) are jittered by a small amount to make them look more natural.

Grammar Changes

  • place rule – third selector block is optional (will use the first for the second shape).

Technical Details

  • Attribute system is re-written. Global attribute evaluation is performed after the entire Rulefile is parsed (thus the order of assignment is not important). Shape attributes are evaluated during rule application
  • Grid rule fixes: path widths for non-rectangular input regions are evenly adjusted.

Park Generator 0.1


General Changes

  • Insert rule as a standalone rule
  • Two new park examples
    • demonstration of Place, Peel and Insert rule use
    • fountain component added
  • Two new region type attributes:
    • bushes” – set to get bush-like park region
    • loam” – for placement of trees and flowerbeds; default type for inserted regions.

Grammar Changes

  • set operator – insert/update attribute
  • insert operator – insert geometry.

Technical Details

  • Shape attributes, attribute propagation
  • Insert rule clipping fixed
  • Insert rule 01indexing fixes
  • Scatter rule EDGE_SELECTION modifier
  • Negative ranges allowed in extractStringByRange().

Park Generator updates 0.0.4, 0.0.5

Smooth Cell Partitioning (v0.0.4)

Splitting input region based on smoothed Voronoi Diagram cells works correctly now. Topological changes during reduction (edge collapse) is now handled correctly by the new algorithm.

Public Release on Extension Warehouse (v0.0.5)

The plugin is has now been officially released on SketchUp Warehouse!

Other rule changes

  • Rule rewrite/derivation sign is now same as in CGA, “- ->”.
  • Grid rule parameters are changed to the number of cells, rather than number of paths. Namely grid(2, 2) specifies 2×2 cell arrangement instead of 3×3.

Stochastic Rule Parameters

Random ranges have been added. The earlier version allowed only fixed numbers in rule parameters, for instance grid(2, 3), now it is possible to do grid(ri(2..3), ri(2..4)). “ri” is Random Integer range, which means grid can be anywhere between 2 and 3 cells wide and 2 and 4 cells high (in xy plane). Distribution is uniform.

Label Selector Enhancements

Label selector list is used to select the derived label. Index-based (idx(2, odd): Label2), or just plain selectors are possible. Plain label is always selected, it can be optionally preceded with “else” keyword (e.g. else: Label3).  Label selectors are separated with “|”.

Park Generator (alpha)

Park Generator v0.0.3


Quick Start

  1. Download and unpack the archive. README.txt found within describes how to install the Generator.
  2. Start SketchUp. Open Generator dialogue by going to menu Extensions -> Park Generator.
  3. Select a rule file which describes the park generation. An example rule file can be used initially.
  4. Set any optional parameters. Please note that rulefule will override any parameters by “parameter_name = parameter_value” line in it (though it is a matter of discussion whether it stays that way).
  5. Select the faces (could be just one, of course) in the SketchUp Drawing are where the parks should be generated into. For instance:
    1. Press ‘r’ to select Rectangle tool and to draw a rectangular polygon.
    2. Press Space to deselect a tool.
    3. Click on the middle of the new polygon to select its face.
  6. Click on Generate button.

Depending on the rule parameters it might be instant or take some time, if for example the number of subdivisions and placements is great.  Please not that scatter distribution radius (Scatter rule) can affect the performance – for a smaller radius will result in more samples generated.

The whole generation is recorded as one SketchUp procedure and undo can be used to revert the state of the original polygon (iregion).

Example Rulefiles

The generator comes with two sample rule files in “example_rules” folder. First one generates a Grid-like park and places trees in the middle of square regions and scatters some grass around it.  The other generates a park with radial paths/junctions, places trees along the boundary and bushes in the centre regions.

Version 0.0.3 Notes

  • Plugin currently works with rectangular shapes best. If an input polygons contains more than 4 vertices it will try to detect a quad and use it. If nothing is produced – the shape was not accepted. Weird input shapes may crash the plugin (this will be fixed in the next releases).
  • Only two partitioning rules are supported currently (Grid and RayCast). FFregions rule currently fails for almost half of the input of rectangles of various sizes (a bug in the partitioning algorithms which is triggered when one of the edges of a partitioned polygon is small enough).
  • Peel rule may result in bad shapes when applied after RayCast rule – for some inputs.