Block Parameters

The parameters for block subdivision can be specified through the Block Parameters panel in the Inspector. Block Parameters can be individually set for each block.

Block Parameters
Block Parameters
Note:

Attributes can be mapped to Default, User, Object or to a map layer. See Mapping Attributes for details.

Block default rules

You can divide blocks into polygonal shapes or lots. The lots have the following default start rules:

Lot

Polygonal shape touching a street.

LotInner

Lots that reside within a block but do not touch a street.

LotCorner

Created when the corners of a lot are given a width when you set the cornerWidth parameter on a block with recursive or offset subdivision.

General parameters

Several parameters are available for the user to control the resulting street shapes. These parameters are available to all subdivision types.

shapeCreation

If true, shapes are created from the street network.

 

type

The subdivision algorithm to use, as illustrated below.

Recursive Subdivision creates rectangular lots by repeatedly splitting the block.

Recursive Subdivision

Offset Subdivision creates lots only within a given distance from the street edges of the block.

Offset Subdivision

Skeleton Subdivision creates street-aligned lots that always have access.

Skeleton Subdivision

No Subdivision doesn't perform subdivision on this Shape.

No Subdivision

 

alignment

This parameter is only used if the initial shapes are uneven. This sets the alignment of the lot over the terrain. There are four numeric options, as illustrated below.

Valid values are [0,1,2,3]

0. Uneven. The lots follow the terrain, given uneven heights.

Uneven

1. Minimum. The lots lie at their lowest point of the terrain that they cover.

Minimum

2. Maximum. The highest point of the lot is used.

Maximum

3. Average. The average height of the lot is used.

Average

Specific parameters

Recursive subdivision

The recursive subdivision technique is the default. It subdivides the block into rectangular lots of various sizes.

lotAreaMin and lotAreaMax

The approximate lower and upper bounds of the area of lots obtained after subdivision.

Given in absolute area units

Subdivision obtained for smaller lotAreaMin and lotAreaMax values.

lotAreaMin and lotAreaMax small values

Subdivision obtained for larger lotAreaMin and lotAreaMax values.

lotAreaMin and lotAreaMax large values

Subdivision obtained when the difference between lotAreaMax and lotAreaMin is small.

lotAreaMin and lotAreaMax small difference

Subdivision obtained when the difference between lotAreaMax and lotAreaMin is large.

lotAreaMin and lotAreaMax large difference

 

lotWidthMin

The minimum width of the side of a lot. Subdivision stops if the length of any of the sides of any of the resulting lots is less than this value. If this value is high, the area of resulting lots might be larger than the area specified by lotAreaMax.

Given in absolute length units

Subdivision obtained for a smaller lotWidthMin value.

small lotWidthMin

Subdivision obtained for a larger lotWidthMin value.

large lotWidthMin

 

irregularity

The relative deviation of the split line from the middle point of the center of the 'oriented bounding box' (OBB). If this value is 0.0, the split line will be pivoted at the middle point of the OBB of the parent lot. A higher value results in the split line being further away from the middle point, and generally, in a higher difference in the areas of the two children nodes.

Given in range [0.0,1.0]

Subdivision obtained for an Irregularity value close to 0.

Irregularity value close to 0

Subdivision obtained for an Irregularity value close to 0.5.

Irregularity value close to 0.5

 

forceStreetAccess

The factor indicating the preference for lots with street access. A higher value results in more lots having street access.

Given in range [0.0,1.0]

Subdivision obtained for a forceStreetAccess value close to 0.

forceStreetAccess value close to 0

Subdivision obtained for a forceStreetAccess value close to 1.0.

forceStreetAccess value close to 1.0

 

cornerWidth

Width of the interior side of the created corners. If this value is 0.0 no corners are created. The maximum value for this attribute is automatically computed to avoid self-intersections.

Given in absolute length units

Subdivision obtained for a smaller cornerWidth value.

Small cornerWidth

Subdivision obtained for a larger cornerWidth value.

Large cornerWidth

 

cornerAngleMax

Corner angle threshold. If the angle at the vertex of a block contour is less than this value, a corner lot is inserted. A larger value results in a more relaxed criterion for inserting corners, and thus in more corners being created. If this value is 0.0 no corners are created.

Given in degrees

Subdivision obtained for a smaller cornerAngle value.

Small cornerAngle

Subdivision obtained for a larger cornerAngle value.

Large cornerAngle

Offset subdivision

A block which uses offset subdivision is offset to create a fixed width strip along the street edges, which is then subdivided into lots.

offsetWidth

The perpendicular distance from the block contour to the inwards offset polygon. Intuitively, this value corresponds to the depth of the lots that are created when offset subdivision is used.

  • If this value is close to 0.0, OBB subdivision is used.
  • If this value is high enough so that the offset polygon is collapsed, OBB subdivision is used.

Given in absolute length units

Subdivision obtained for a smaller offsetWidth value.

Small offsetWidth

Subdivision obtained for a larger offsetWidth value.

Large offsetWidth

 

subdivisionRecursive

After the offset routine, there is an option to also run the recursive subdivision on the result. This is controlled by the same set of parameters as the recursive subdivision scheme.

See Recursive subdivision for the rest of the specific parameters.

Skeleton subdivision

Skeleton subdivision attempts to subdivide a block such that every lot has access to the street. The sides of the lots are perpendicular to the roads they are adjacent to.

lotWidthMin

The ideal length of street front that each lot should possesses. This is increased or decreased by several other processes. A low lot width relative to the block size may create many narrow lots.

Given in absolute length units

Subdivision obtained for a lotWidthMin value of 15.

lotWidthMin value of 15

Subdivision obtained for a lotWidthMin value of 30.

lotWidthMin value of 30

 

simplify

Amount of simplification that occurs. A high value creates irregular lots with fewer vertices.

Given in range [0.0,1.0]

Subdivision obtained for a smaller simplify value.

Small simplify

Subdivision obtained for a larger simplify value.

Large simplify

 

cornerAlignment

Skeleton subdivided lots face their nearest streets. At the corner of two streets, one will normally take priority. The corner alignment determines how this priority is assigned, either by Street length or by Street width.

Street width: the widest street takes priority. If the streets have similar average widths, the street length is used instead.

cornerAlignment street width priority

Street length: the longest street takes priority.

cornerAlignment street length priority

 

lotAreaMin

After subdivision, lots with a small area are repeatedly combined with their neighbors until they are larger than this minimum. This reduces the number of smaller lots, but may create lots of more irregular shape.

Given in absolute area units

 

irregularity

As this parameter increases, it introduces a stochastic element into the lot width and lot edge direction.

Given in range [0.0,1.0]

Subdivision obtained for a smaller irregularity value.

Small irregularity

Subdivision obtained for a larger irregularity value.

Large irregularity

 

shallowLotFrac

Limit for merging triangular lots.

Subdivision obtained for a smaller shallowLotFrac value.

Small shallowLotFrac

Subdivision obtained for a larger shallowLotFrac value.

Large shallowLotFrac

 

No subdivision

This simple subdivision technique subdivides the block into a single lot of the same shape. There is an option to remove the lot's corners.

Description of algorithms

Recursive OBB algorithm

The recursive OBB algorithm computes a split line at each step. If the two lots resulting from the split meet the user-specified constraints, the algorithm recurses on them. To determine the pivot point and direction of the split line, the minimum-area oriented bounding box (OBB) of the lot is computed. By default, the pivot point is set to the midpoint of the largest edge of the OBB, and the split line direction is set to the direction of the smallest edge of the OBB. The split line pivot and direction can be modified by three criteria:

  • Street access: If one of the lots resulting from a split has no street access, the orthogonal vector to the initial direction vector is used.
  • Snap to block contour vertices: If the split line is within a threshold distance from one of the vertices of the contour of the original block, the pivot point of the split line is set to that vertex.
  • Edge alignment: To increase the stability of subdivisions under interactive editing operations, the sampling angle space to compute an approximation of the OBB uses one of the lot edges as reference.
  • Random seeds: To increase the stability of subdivisions under interactive editing operations, the random seeds for the children lots of a given lot are computed before the recursive call to the subdivision function.
Successive steps of the recursive OBB algorithm
Successive steps of the recursive OBB algorithm

Offset algorithm

The offset subdivision algorithm computes the inwards offset of the block contour and subdivides into lots the stripe between the block contour and its offset. The inwards offset is computed with CGA. A set of sample points is computed along the offset. Consecutive points are separated by a distance computed as a function of the user-specified lot areas. Lines orthogonal to the offset at the sample points and passing through the sample points are used to split the stripe between the block contour and the offset.

Skeleton subdivision algorithm

The skeleton subdivision algorithm uses the straight skeleton (below, top left) to identify the center lines of the block. Given a set of skeleton faces, we identify those whose street edges are adjacent and of a similar curvature (below, top right). These faces are then grouped together. For each corner, the alignment priority (see cornerAlignment) determines how we assign the corner sections of these face-groups (below, bottom left). Finally each of the face-groups are sliced in a direction perpendicular to their street edges to create lots, and small lots are merged together until they are larger than lotAreaMin.

Successive steps of the skeleton subdivision algorithm
Successive steps of the skeleton subdivision algorithm

Consistent Indexing

As a result of the recursive nature of the subdivision algorithm and the different criteria dictated by shape attributes, the ordering of the lots resulting from subdivision might significantly vary after an editing operation. This is particularly inconvenient if models have been generated inside the lots.

To improve the consistency in the lot indexing among two consecutive subdivisions, the algorithm computes the relative position of each lot for each one of the two subdivisions, using a metric based on generalized barycentric coordinates. Pairs of lots that are the closest to each other in this barycentric space, are assigned the same index.

The same approach is also used to improve the consistency of the seed of each lot. As a result, two lots that are relatively in the same position of the block at two different subdivision configurations, have higher chances of sharing the same seed and attributes. The figure below shows a subdivision together with the shapes generated from a grammar that assigns one of 15 possible random colors to each lot. Due to the consistency logic above, the colors of lots that have similar relative positions inside the block are preserved, even though the topology and geometry of the subdivisions are different as a result of an editing operation.

Subdivision for initial block

Subdivision for initial block

Subdivision for block after interactive editing

Subdivision for block after interactive editing

Auto-generated street width attributes

For each resulting lot, an array of street width object attributes is generated.

A typical lot selected in the Viewport
A typical lot selected in the Viewport
Street width attributes in the Inspector
Street width attributes in the Inspector
Note:

The first edge of a lot is the edge with maximal street width.