{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://openeik.org/schemas/0.2/slopedSlab/plane.schema.json",
  "$comment": "OpenEik 0.2: folded by tools/fold-schemas.mjs from the proposal slopedSlab, which 0.2 makes a rule (decision D5). Written by hand from the text, not generated.",
  "title": "A slab's plane",
  "description": "The plane of a slab's top face (Part II, 6.3.1): its gradient as slope, in degrees, or as rise over run, in mm; and its direction as edgeId, the edge of the outline from whose line the top rises into the outline, at the slab's level plus its offset, as a roof's slope-defining edge, or as fall, the direction in plan in which the top falls, in degrees counter-clockwise from the model's x axis, the top at the slab's level plus its offset at its profile's first point. Exactly one of slope and rise with run, and exactly one of edgeId and fall.",
  "type": "object",
  "properties": {
    "edgeId": {
      "description": "The edge of the outline the top rises from (Part I, 6, rule 6; Part II, 6.1, rule 10).",
      "type": "string",
      "minLength": 1
    },
    "fall": {
      "description": "The direction in plan in which the top falls, degrees counter-clockwise from the model's x axis.",
      "type": "number"
    },
    "slope": {
      "description": "The slope, degrees.",
      "type": "number",
      "minimum": 0,
      "maximum": 75
    },
    "rise": {
      "description": "The rise over run, mm: the slope is atan(rise / run), at most 75 degrees.",
      "type": "number",
      "minimum": 0,
      "maximum": 100000
    },
    "run": {
      "description": "The run the rise is over, mm.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100000
    }
  },
  "dependentRequired": {
    "rise": [
      "run"
    ],
    "run": [
      "rise"
    ]
  },
  "allOf": [
    {
      "oneOf": [
        {
          "required": [
            "edgeId"
          ]
        },
        {
          "required": [
            "fall"
          ]
        }
      ]
    },
    {
      "oneOf": [
        {
          "required": [
            "slope"
          ]
        },
        {
          "required": [
            "rise"
          ]
        }
      ]
    }
  ],
  "x-eik-closed": true
}
