/
Cybran65
/
Project_0
Обзор
Документация
Войти
/
Cybran65
/
Project_0
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/data/demoModel.ts
295 строк
6 KB
Cybran65
style: выравнивание модели, масштаб ленты и векторные иконки
09 авг 2026, 01:10
09 авг 2026, 01:10
9ead2b4
Код
Авторство
О чём код?
import type { DemoElement } from '../types'; /** * Демонстрационные элементы рабочей области. * * Это НЕ BIM-модель: замкнутая коробка из стен, перекрытие, покрытие, * четыре стойки и один проём — чтобы viewport не выглядел пустым * и было что выбирать мышью. Размеры условные. * * Габарит здания в осях: 8…22 м по X, 8…20 м по Y. * Толщина наружных стен 0,4 м, внутренней перегородки 0,2 м. */ const X1 = 8; const X2 = 22; const Y1 = 8; const Y2 = 20; const T = 0.4; /** Отметки уровней, м. */ const LEVEL_1 = 0; const LEVEL_2 = 3.6; const ROOF = 7.2; /** Толщина перекрытия и покрытия, м. */ const SLAB = 0.2; /** Наружные стены яруса: замкнутый контур с одинаковой толщиной. */ function outerWalls(level: 'level-1' | 'level-2', base: number, height: number): DemoElement[] { const suffix = level === 'level-1' ? '1' : '2'; const sides: Array<{ id: string; axis: string; footprint: Array<[number, number]> }> = [ { id: 'south', axis: 'ось 1', footprint: [ [X1, Y1], [X2, Y1], [X2, Y1 + T], [X1, Y1 + T], ], }, { id: 'north', axis: 'ось 3', footprint: [ [X1, Y2 - T], [X2, Y2 - T], [X2, Y2], [X1, Y2], ], }, { id: 'west', axis: 'ось А', footprint: [ [X1, Y1 + T], [X1 + T, Y1 + T], [X1 + T, Y2 - T], [X1, Y2 - T], ], }, { id: 'east', axis: 'ось В', footprint: [ [X2 - T, Y1 + T], [X2, Y1 + T], [X2, Y2 - T], [X2 - T, Y2 - T], ], }, ]; return sides.map((side) => ({ id: `wall-${suffix}-${side.id}`, treeId: level === 'level-1' ? 'wall-1' : 'wall-3', label: `Стена наружная С-${suffix} (${side.axis})`, kind: 'wall', footprint: side.footprint, base, height, levelId: level, })); } export const DEMO_ELEMENTS: DemoElement[] = [ /* ------------------------------------------ несущие стены двух ярусов */ ...outerWalls('level-1', LEVEL_1, LEVEL_2), ...outerWalls('level-2', LEVEL_2 + SLAB, ROOF - LEVEL_2 - SLAB), /* ------------------------------------------------ внутренняя стена */ { id: 'wall-inner', treeId: 'wall-2', label: 'Стена внутренняя С-2', kind: 'wall', footprint: [ [X1 + T, 14], [X2 - T, 14], [X2 - T, 14.2], [X1 + T, 14.2], ], base: LEVEL_1, height: LEVEL_2, levelId: 'level-1', }, /* ------------------------------------------------------- помещения */ { id: 'room-1', treeId: 'room-1', label: 'Помещение 101', kind: 'slab', footprint: [ [X1 + T, Y1 + T], [X2 - T, Y1 + T], [X2 - T, 14], [X1 + T, 14], ], base: LEVEL_1, height: 0, levelId: 'level-1', }, { id: 'room-2', treeId: 'room-2', label: 'Помещение 201', kind: 'slab', footprint: [ [X1 + T, Y1 + T], [X2 - T, Y1 + T], [X2 - T, Y2 - T], [X1 + T, Y2 - T], ], base: LEVEL_2 + SLAB, height: 0, levelId: 'level-2', }, /* --------------------------------------------------------- стойки */ ...([ [12, 10.5], [18, 10.5], [12, 17], [18, 17], ] as Array<[number, number]>).map<DemoElement>(([x, y], index) => ({ id: `column-${index + 1}`, treeId: 'building', label: `Колонна К-${index + 1}`, kind: 'column', footprint: [ [x - 0.2, y - 0.2], [x + 0.2, y - 0.2], [x + 0.2, y + 0.2], [x - 0.2, y + 0.2], ], base: LEVEL_1, height: LEVEL_2, levelId: 'level-1', })), /* ------------------------------------------------------------ проём */ { id: 'door-1', treeId: 'door-1', label: 'Дверь Д-1', kind: 'opening', footprint: [ [14.5, Y1], [15.5, Y1], [15.5, Y1 + T], [14.5, Y1 + T], ], base: LEVEL_1, height: 2.1, levelId: 'level-1', }, /* ---------------------------------------------- перекрытие и покрытие */ { id: 'slab-2', treeId: 'slab-2', label: 'Перекрытие П-2', kind: 'slab', footprint: [ [X1, Y1], [X2, Y1], [X2, Y2], [X1, Y2], ], base: LEVEL_2, height: SLAB, levelId: 'level-2', }, { id: 'roof-slab', treeId: 'roof-slab', label: 'Покрытие К-1', kind: 'slab', footprint: [ [X1, Y1], [X2, Y1], [X2, Y2], [X1, Y2], ], base: ROOF, height: SLAB, levelId: 'roof', }, /* -------------------------------------------------------- участок */ { id: 'site-boundary', treeId: 'site-boundary', label: 'Границы участка', kind: 'site', footprint: [ [2, 2], [28, 2], [28, 28], [2, 28], ], base: 0, height: 0, levelId: 'site', }, ]; /** Проезды территории (осевые линии в метрах). */ export const DEMO_ROADS: Array<Array<[number, number]>> = [ [ [0, 5], [30, 5], ], [ [5, 0], [5, 30], ], [ [5, 24], [26, 24], ], ]; /** Инженерные сети (осевые линии в метрах). */ export const DEMO_PIPES: Array<Array<[number, number]>> = [ [ [0, 26], [15, 26], [15, 20], ], [ [26, 0], [26, 12], [22, 12], ], ]; /** Контур наложения плана строительства (стройгенплан, заглушка). */ export const CONSTRUCTION_PLAN_ZONES: Array<{ id: string; label: string; footprint: Array<[number, number]>; }> = [ { id: 'crane', label: 'Зона крана', footprint: [ [6, 6], [24, 6], [24, 22], [6, 22], ], }, { id: 'storage', label: 'Склад', footprint: [ [24, 6], [29, 6], [29, 14], [24, 14], ], }, { id: 'temp', label: 'Бытовой городок', footprint: [ [1, 22], [9, 22], [9, 29], [1, 29], ], }, ];