Schemas / Geometry / paint

rig.geometry.polygon

v0.31.0 · draft 3 fields 1 required

Fields

FieldTypeMeaning
points array<vec2>min 3 items required Vertices in order; at least 3. Winding is this order - no winding field
closed bool optional Optional. Absent means closed
fillRule enumnonzero · evenodd optional Optional. nonzero, evenodd; absent = nonzero. Self-intersecting rings only

Freeform polygon with explicit vertices. Format when present.

This is a single ring. Compound shapes with holes use rig.geometry.path (extra move-to ... close subpaths). A lone ring used as a CAD boolean / extrude operand still has orientation: reverse points to flip it.

2D page space (+X right, +Y down): clockwise shoelace = outer / solid; counter-clockwise = hole (boolean difference or profile cutout). Under fillRule: nonzero, opposite winding punches a hole. Under evenodd, overlap toggles.

Do not put fillRule on paint. Do not add a winding field here or on rectangle / ellipse / star / ring.

For an n-gon defined by a radius and a side count rather than by vertices, use rig.geometry.regular_polygon - it survives editing as a parametric shape, where this one has already been resolved to points.

Curved contours use rig.geometry.path.

Appearance: rig.paint.fill_stroke.

JSON Schema

Resolves at https://rig.works/schemas/rig.geometry.polygon.schema.jsonraw file.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://rig.works/schemas/rig.geometry.polygon.schema.json",
  "title": "rig.geometry.polygon",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "points": {
      "type": "array",
      "items": {
        "$ref": "./_defs.schema.json#/$defs/vec2"
      },
      "minItems": 3
    },
    "closed": {
      "$ref": "./_defs.schema.json#/$defs/bool"
    },
    "fillRule": {
      "type": "string",
      "enum": [
        "nonzero",
        "evenodd"
      ]
    }
  },
  "required": [
    "points"
  ]
}

Seen in

bim-model.json · minimal-scene.json