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.
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. | |
Offset Subdivision creates lots only within a given distance from the street edges of the block. | |
Skeleton Subdivision creates street-aligned lots that always have access. | |
No Subdivision doesn't perform subdivision on this Shape. |
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. | |
1. Minimum. The lots lie at their lowest point of the terrain that they cover. | |
2. Maximum. The highest point of the lot is used. | |
3. Average. The average height of the lot is used. |
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. | |
Subdivision obtained for larger lotAreaMin and lotAreaMax values. | |
Subdivision obtained when the difference between lotAreaMax and lotAreaMin is small. | |
Subdivision obtained when the difference between lotAreaMax and lotAreaMin is large. |
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. | |
Subdivision obtained for a larger lotWidthMin value. |
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. | |
Subdivision obtained for an 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. | |
Subdivision obtained for a 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. | |
Subdivision obtained for a larger cornerWidth value. |
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. | |
Subdivision obtained for a larger cornerAngle value. |
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.
| |
Given in absolute length units | |
Subdivision obtained for a smaller offsetWidth value. | |
Subdivision obtained for a larger offsetWidth value. |
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. | |
Subdivision obtained for a 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. | |
Subdivision obtained for a larger simplify value. |
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. | |
Street length: the longest street takes 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. | |
Subdivision obtained for a larger irregularity value. |
shallowLotFrac | |
Limit for merging triangular lots. | |
Subdivision obtained for a smaller shallowLotFrac value. | |
Subdivision obtained for a larger shallowLotFrac value. |
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.
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.
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 block after interactive editing |
Auto-generated street width attributes
For each resulting lot, an array of street width object attributes is generated.
Note:
The first edge of a lot is the edge with maximal street width.