--- "$schema": "http://json-schema.org/schema#" id: "opcut://opcut.yaml#" definitions: params: type: object description: | calculation input parameters independent of calculation method required: - cut_width - panels - items properties: cut_width: type: number description: | width of the guillotine cut min_initial_usage: type: boolean description: | minimize usage of initial panels panels: type: object description: | input panels (keys represent unique panel identifiers) patternProperties: ".+": "$ref": "opcut://opcut.yaml#/definitions/panel" items: type: object description: | required items (keys represent unique item identifiers) patternProperties: ".+": "$ref": "opcut://opcut.yaml#/definitions/item" result: type: object description: | calculation result required: - params - used - unused properties: params: "$ref": "opcut://opcut.yaml#" used: type: array description: | resulting panels associated with required items items: "$ref": "opcut://opcut.yaml#/definitions/used" unused: type: array description: | resulting unused panels items: "$ref": "opcut://opcut.yaml#/definitions/unused" panel: type: object description: | single input panel required: - width - height properties: width: type: number description: | panel's initial width height: type: number description: | panel's initial height item: type: object description: | single required item required: - width - height - can_rotate properties: width: type: number description: | items's width height: type: number description: | items's height can_rotate: type: boolean description: | can item be rotated (is grain direction irrelevant) used: type: object description: | single resulting panels associated with required item required: - panel - item - x - y - rotate properties: panel: type: string description: | input panel identifier item: type: string description: | matching required item identifier x: type: number description: | used panel location based on input panel's width offset y: type: number description: | used panel location based on input panel's height offset rotate: type: boolean description: | is resulting panel rotated unused: type: object description: | single unused resulting panel required: - panel - width - height - x - y properties: panel: type: string description: | input panel identifier width: type: number description: | unused resulting panel's width height: type: number description: | unused resulting panel's height x: type: number description: | used panel location based on input panel's width offset y: type: number description: | used panel location based on input panel's height offset ...