{
  "$defs": {
    "HelicalLayer": {
      "properties": {
        "frictionLambda": {
          "default": 0.0,
          "minimum": 0.0,
          "title": "Frictionlambda",
          "type": "number"
        },
        "leadInMM": {
          "exclusiveMinimum": 0,
          "title": "Leadinmm",
          "type": "number"
        },
        "leadOutDegrees": {
          "exclusiveMinimum": 0,
          "title": "Leadoutdegrees",
          "type": "number"
        },
        "lockDegrees": {
          "exclusiveMinimum": 0,
          "title": "Lockdegrees",
          "type": "number"
        },
        "patternNumber": {
          "exclusiveMinimum": 0,
          "title": "Patternnumber",
          "type": "integer"
        },
        "skipIndex": {
          "exclusiveMinimum": 0,
          "title": "Skipindex",
          "type": "integer"
        },
        "skipInitialNearLock": {
          "default": false,
          "title": "Skipinitialnearlock",
          "type": "boolean"
        },
        "windAngle": {
          "exclusiveMinimum": 0,
          "title": "Windangle",
          "type": "number"
        },
        "windType": {
          "const": "helical",
          "default": "helical",
          "title": "Windtype",
          "type": "string"
        }
      },
      "required": [
        "windAngle",
        "patternNumber",
        "skipIndex",
        "lockDegrees",
        "leadInMM",
        "leadOutDegrees"
      ],
      "title": "HelicalLayer",
      "type": "object"
    },
    "HoopLayer": {
      "properties": {
        "terminal": {
          "default": false,
          "title": "Terminal",
          "type": "boolean"
        },
        "windType": {
          "const": "hoop",
          "default": "hoop",
          "title": "Windtype",
          "type": "string"
        }
      },
      "title": "HoopLayer",
      "type": "object"
    },
    "MandrelParameters": {
      "properties": {
        "diameter": {
          "exclusiveMinimum": 0,
          "title": "Diameter",
          "type": "number"
        },
        "endDiameter": {
          "anyOf": [
            {
              "exclusiveMinimum": 0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Enddiameter"
        },
        "profile": {
          "anyOf": [
            {
              "$ref": "#/$defs/VonKarmanProfile"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "windLength": {
          "exclusiveMinimum": 0,
          "title": "Windlength",
          "type": "number"
        }
      },
      "required": [
        "diameter",
        "windLength"
      ],
      "title": "MandrelParameters",
      "type": "object"
    },
    "SkipLayer": {
      "properties": {
        "mandrelRotation": {
          "title": "Mandrelrotation",
          "type": "number"
        },
        "windType": {
          "const": "skip",
          "default": "skip",
          "title": "Windtype",
          "type": "string"
        }
      },
      "required": [
        "mandrelRotation"
      ],
      "title": "SkipLayer",
      "type": "object"
    },
    "TowParameters": {
      "properties": {
        "thickness": {
          "exclusiveMinimum": 0,
          "title": "Thickness",
          "type": "number"
        },
        "width": {
          "exclusiveMinimum": 0,
          "title": "Width",
          "type": "number"
        }
      },
      "required": [
        "width",
        "thickness"
      ],
      "title": "TowParameters",
      "type": "object"
    },
    "VonKarmanProfile": {
      "description": "Von K\u00e1rm\u00e1n (LD-Haack) nose profile (schemaVersion 1.2+).\n\nA non-developable surface of revolution: radius runs from the mandrel\n``diameter`` at the base (z=0) to 0 at the tip (z=``windLength``). The profile\ncarries only its ``type`` discriminator \u2014 base radius comes from ``diameter`` and\naxial length from ``windLength`` (no duplicated dimensions), mirroring how\n``endDiameter`` reuses those fields. ``type`` lets other profiles (domes) be added\nadditively later.",
      "properties": {
        "type": {
          "const": "vonKarman",
          "title": "Type",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "title": "VonKarmanProfile",
      "type": "object"
    }
  },
  "$id": "https://fiberpath.org/schemas/wind/1/wind.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "Schema for FiberPath filament winding pattern definitions",
  "properties": {
    "defaultFeedRate": {
      "exclusiveMinimum": 0,
      "title": "Defaultfeedrate",
      "type": "number"
    },
    "layers": {
      "items": {
        "discriminator": {
          "mapping": {
            "helical": "#/$defs/HelicalLayer",
            "hoop": "#/$defs/HoopLayer",
            "skip": "#/$defs/SkipLayer"
          },
          "propertyName": "windType"
        },
        "oneOf": [
          {
            "$ref": "#/$defs/HoopLayer"
          },
          {
            "$ref": "#/$defs/HelicalLayer"
          },
          {
            "$ref": "#/$defs/SkipLayer"
          }
        ]
      },
      "title": "Layers",
      "type": "array"
    },
    "mandrelParameters": {
      "$ref": "#/$defs/MandrelParameters"
    },
    "schemaVersion": {
      "default": "1.0",
      "description": "Version of the .wind file format schema (1.x).",
      "pattern": "^1\\.\\d+$",
      "title": "Schema Version",
      "type": "string"
    },
    "towParameters": {
      "$ref": "#/$defs/TowParameters"
    }
  },
  "required": [
    "layers",
    "mandrelParameters",
    "towParameters",
    "defaultFeedRate"
  ],
  "title": "WindDefinition",
  "type": "object"
}
