feat: добавить лестницы между этажами (#663)

Прямые и винтовые лестницы получили отдельную модель, инструменты редактора, безопасную межэтажную навигацию, вычитание из чистой площади и плоское отображение в 2.5D.

Issue: #663
User-Visible: yes
This commit is contained in:
Sergey Matyunin
2026-09-26 21:00:43 +03:00
parent 781902b3a8
commit d03a68b88a
70 changed files with 2635 additions and 107 deletions
+70
View File
@@ -1379,6 +1379,76 @@
"required": false,
"type": "float"
},
"config.spaces[].stairs": {
"required": false
},
"config.spaces[].stairs[]": {
"allowExtra": true
},
"config.spaces[].stairs[].angle": {
"max": 360.0,
"min": -360.0,
"opaque": "<function _finite>",
"required": true
},
"config.spaces[].stairs[].direction": {
"enum": [
"backward",
"clockwise",
"counterclockwise",
"forward"
],
"required": true
},
"config.spaces[].stairs[].id": {
"maxLength": 64,
"minLength": 1,
"required": true,
"type": "str"
},
"config.spaces[].stairs[].kind": {
"enum": [
"spiral",
"straight"
],
"required": true
},
"config.spaces[].stairs[].length": {
"max": 5000.0,
"min": 1e-07,
"opaque": "<function _finite>",
"required": false
},
"config.spaces[].stairs[].radius": {
"max": 5000.0,
"min": 1e-07,
"opaque": "<function _finite>",
"required": false
},
"config.spaces[].stairs[].target_space_id": {
"nullable": true,
"opaque": "Match('^[a-z0-9_-]{1,64}$', msg=None)",
"required": false,
"type": "str"
},
"config.spaces[].stairs[].width": {
"max": 5000.0,
"min": 1e-07,
"opaque": "<function _finite>",
"required": false
},
"config.spaces[].stairs[].x": {
"max": 5000.0,
"min": -5000.0,
"opaque": "<function _finite>",
"required": true
},
"config.spaces[].stairs[].y": {
"max": 5000.0,
"min": -5000.0,
"opaque": "<function _finite>",
"required": true
},
"config.spaces[].title": {
"required": true,
"type": "str"