Subblocks

Stores sub-blocks of a block model.

Regular

Divide each parent block into a regular grid of count cells. Sub-blocks each covers a non-overlapping cuboid subset of that grid.

Sub-blocks are described by the parents and corners arrays. Those arrays must be the same length and matching rows in each describe the same sub-block. Each row in parents is an IJK index on the block model grid. Each row of corners is , all integers, that refer to the vertices of the sub-block grid within the parent block. For example:

  • A block with minimum size in the corner of the parent block would be (0, 0, 0, 1, 1, 1).

  • If the subblock_count is (5, 5, 3) then a sub-block covering the whole parent would be (0, 0, 0, 5, 5, 3).

Sub-blocks must stay within their parent, must have a non-zero size in all directions, and should not overlap. Further restrictions can be applied by the mode field, see SubblockMode for details.

Example of regular sub-blocks

Fields

type
"Regular"
count: array of integer, 3 items

The sub-block grid size.

Must be greater than zero in all directions. If mode is octree then these must also be powers of two but they don't have to be equal.

mode: SubblockMode or null
If present this further restricts the sub-block layout.
subblocks: Array
Array with RegularSubblock type storing the sub-block parent indices and corners relative to the sub-block grid within the parent.

Freeform

Divide each parent block into any number and arrangement of non-overlapping cuboid regions.

Sub-blocks are described by the parents and corners arrays. Each row in parents is an IJK index on the block model grid. Each row of corners is in floating-point and relative to the parent block, running from 0.0 to 1.0 across the parent. For example:

  • A sub-block covering the whole parent will be (0.0, 0.0, 0.0, 1.0, 1.0, 1.0) no matter the size of the parent.

  • A sub-block covering the bottom third of the parent block would be (0.0, 0.0, 0.0, 1.0, 1.0, 0.3333) and one covering the top two-thirds would be (0.0, 0.0, 0.3333, 1.0, 1.0, 1.0), again no matter the size of the parent.

Sub-blocks must stay within their parent, must have a non-zero size in all directions, and shouldn't overlap.

Fields

type
"Freeform"
subblocks: Array
Array with FreeformSubblock type storing the sub-block parent indices and corners relative to the parent.

Schema

{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "count",
        "subblocks",
        "type"
      ],
      "properties": {
        "count": {
          "type": "array",
          "items": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "maxItems": 3,
          "minItems": 3
        },
        "mode": {
          "anyOf": [
            {
              "$ref": "#/definitions/SubblockMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "subblocks": {
          "$ref": "#/definitions/Array"
        },
        "type": {
          "type": "string",
          "enum": [
            "Regular"
          ]
        }
      }
    },
    {
      "type": "object",
      "required": [
        "subblocks",
        "type"
      ],
      "properties": {
        "subblocks": {
          "$ref": "#/definitions/Array"
        },
        "type": {
          "type": "string",
          "enum": [
            "Freeform"
          ]
        }
      }
    }
  ]
}