9382b063aa
Фаза A3 раунда «Конструктор». Построения через точку, опираясь на объект: - lpar: прямая ∥ выбранной прямой; - lperp: прямая ⟂ выбранной плоскости (вдоль нормали); - ppar: плоскость ∥ выбранной плоскости; - pperp: плоскость ⟂ выбранной прямой (= плоскость по точке+нормали, через _createPlaneFromPointNormal — мост к Фазе C). Поток: кнопка op → выбор опоры в дереве → клик точки. Общий undo/redo конструкторного слоя: JSON-снапшоты _undoStack/_redoStack (кап 60), хуки _pushHistory в create/remove/clear; Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y + кнопки «Отменить»/«Вернуть». Видимость объекта — не шаг истории. - StereoSim: setRelMode/_pickRelRef/_onRelClick/_createPlaneFromPointNormal; _snapshot/_pushHistory/_restoreSnapshot/undo/redo/canUndo/canRedo; pickConstructObject диспатчит rel/intersect; getConstructions отдаёт relMode + selected по опоре; _lastConstructMsg → flash в подсказку. Сброс rel/истории в setFigure, очистка в clearConstructions. - Панель: 4 кнопки (∥/⟂ прямая/плоск.) + «Отменить»/«Вернуть»; интеграция в _stereoDeactivateTools; glue stereoRelMode/HistUndo/HistRedo; дерево — строки выбираемы и в rel-режиме. Верификация: node --check OK; headless-смоук 30/30 (4 rel-операции с проверкой параллельности направлений/нормалей, гард типа опоры, undo/redo одиночный/многошаговый/redo-сброс/clear-undoable/vis-не-шаг/кап, setFigure- сброс истории, dispose); эмодзи/eval/new Function — 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>