Console API
Руководство по взаимодействию с Редактором изделий через консоль браузера
Быстрый старт
Редактор предоставляет набор функций, доступных прямо в консоли браузера. С их помощью можно читать и изменять свойства компонентов, управлять позициями, материалами, размерами и другими параметрами проекта.
-
Откройте консоль браузера
НажмитеF12(илиCtrl+Shift+J) и перейдите на вкладку Console. -
Получите проект
const project = getProjectDataService().getProject(); -
Найдите нужный компонент
const comp = project.components[0]; console.log(comp.name, comp.guid); -
Измените свойство через diff
generateAndApplyFieldDiff( 'component', comp.guid, 'position.x', comp.position.x, // старое значение comp.position.x + 100 // новое значение );
Все изменения данных проекта должны проходить через функции generateAndApplyFieldDiff или generateAndApplyMultiFieldDiff. Прямая мутация объектов (comp.position.x = 100) не обновит 3D-сцену и не попадёт в историю отмен.
Как открыть консоль
| Браузер | Горячая клавиша |
|---|---|
| Chrome / Edge | F12 или Ctrl + Shift + J |
| Firefox | F12 или Ctrl + Shift + K |
| Safari | Cmd + Option + C (включите «Меню разработки» в настройках) |
После открытия DevTools перейдите на вкладку Console. Именно в ней вводятся все команды из этого руководства.
Получение проекта
const project = getProjectDataService().getProject();
Возвращает текущий объект проекта. Из него доступны все коллекции:
| Свойство | Тип | Описание |
|---|---|---|
project.components | Массив | Все компоненты (детали) проекта |
project.virtual_objects | Массив | Виртуальные объекты |
project.connection_points | Массив | Точки соединения |
project.graph | Объект | Параметрический граф проекта |
project.guid | Строка | Уникальный идентификатор проекта |
Просмотр компонентов
Список всех компонентов
const project = getProjectDataService().getProject();
// Вывести имя, guid и позицию каждого компонента
project.components.forEach((c, i) => {
console.log(
`[${i}] ${c.name}`,
`guid: ${c.guid}`,
`pos: (${c.position.x}, ${c.position.y}, ${c.position.z})`
);
});
Удобная таблица
console.table(
project.components.map(c => ({
name: c.name,
guid: c.guid.slice(0, 8) + '…',
x: c.position.x,
y: c.position.y,
z: c.position.z,
sizeX: c.size.x,
sizeY: c.size.y,
sizeZ: c.size.z,
type: c.modifier.type,
active: c.is_active,
}))
);
Поиск компонента
По имени
const comp = project.components.find(c => c.name === 'Столешница');
По части имени
const panels = project.components.filter(c => c.name.includes('Боковина'));
По типу модификатора
// Все ЛДСП-компоненты
const ldsp = project.components.filter(c => c.modifier.type === 'LDSP');
По GUID
const comp = project.components.find(c => c.guid === 'ваш-guid-здесь');
Изменение одного поля
Функция generateAndApplyFieldDiff — основной инструмент для изменения любого свойства сущности.
entityType: string,
entityGuid: string,
fieldPath: string,
oldValue: any,
newValue: any
)
| Параметр | Описание |
|---|---|
entityType | Тип сущности: 'component', 'virtualObject', 'project' и др. |
entityGuid | GUID сущности (берётся из comp.guid) |
fieldPath | Путь к полю через точку, например 'position.x', 'modifier.cut_angle1' |
oldValue | Текущее значение поля (необходимо для корректной работы Undo) |
newValue | Новое значение |
Пример: переименовать компонент
const comp = project.components[0];
generateAndApplyFieldDiff(
'component', comp.guid,
'name',
comp.name, // старое имя
'Новое название' // новое имя
);
Пример: сдвинуть по оси X на 100 мм
generateAndApplyFieldDiff(
'component', comp.guid,
'position.x',
comp.position.x,
comp.position.x + 100
);
Изменение нескольких полей
Функция generateAndApplyMultiFieldDiff — для атомарного изменения нескольких полей одной сущности за раз. Все поля попадают в один diff и в одну запись Undo.
entityType: string,
entityGuid: string,
changes: Array<{ path, oldValue, newValue }>
)
Пример: переместить компонент в точку (200, 150, 50)
const comp = getProjectDataService().getProject().components[0];
generateAndApplyMultiFieldDiff('component', comp.guid, [
{ path: 'position.x', oldValue: comp.position.x, newValue: 200 },
{ path: 'position.y', oldValue: comp.position.y, newValue: 150 },
{ path: 'position.z', oldValue: comp.position.z, newValue: 50 },
]);
Позиция и размер
Сдвинуть компонент
const comp = project.components.find(c => c.name === 'Столешница');
// Сдвиг по Y на 50мм вверх
generateAndApplyFieldDiff(
'component', comp.guid,
'position.y',
comp.position.y,
comp.position.y + 50
);
Изменить размер
// Задать ширину (X) = 600мм
generateAndApplyFieldDiff(
'component', comp.guid,
'size.x',
comp.size.x,
600
);
Изменить размер по всем осям
generateAndApplyMultiFieldDiff('component', comp.guid, [
{ path: 'size.x', oldValue: comp.size.x, newValue: 600 },
{ path: 'size.y', oldValue: comp.size.y, newValue: 400 },
{ path: 'size.z', oldValue: comp.size.z, newValue: 16 },
]);
X — ширина, Y — высота, Z — глубина (толщина). Единицы измерения — миллиметры.
Свойства модификатора
Свойства модификатора доступны по пути modifier.<поле>. Набор полей зависит от типа компонента.
ЛДСП — углы отреза
const comp = project.components.find(c => c.modifier.type === 'LDSP');
// Задать угол отреза 45°
generateAndApplyFieldDiff(
'component', comp.guid,
'modifier.cut_angle1',
comp.modifier.cut_angle1,
45
);
Основные поля модификаторов по типам
| Тип | Поля модификатора |
|---|---|
LDSP |
cut_angle1, cut_angle2, back_material, edges, real_size |
MESH |
mesh, node_name, use_scale, apply_offset, mesh_size, mesh_offset |
BUILTIN |
related_project, show_inputs, target_slot, allow_iik_slotting, margins |
PANEL |
center_depth, shape |
Введите в консоли console.log(comp.modifier) — браузер покажет объект целиком со всеми его полями и текущими значениями.
Видимость компонента
// Скрыть компонент
generateAndApplyFieldDiff(
'component', comp.guid,
'is_active',
true,
false
);
// Показать компонент
generateAndApplyFieldDiff(
'component', comp.guid,
'is_active',
false,
true
);
Входы графа
Параметрический граф проекта позволяет управлять изделием через входные параметры (ширина, высота, количество полок и т.д.).
Просмотр входов
const project = getProjectDataService().getProject();
console.table(
project.graph.inputs.map(inp => ({
name: inp.name,
label: inp.verbose_ru,
value: inp.value,
type: inp.type,
active: inp.is_active,
}))
);
Изменение значения входа
const inp = project.graph.inputs.find(i => i.name === 'width');
generateAndApplyFieldDiff(
'graphInput', inp.guid,
'value',
inp.value,
800
);
Пересчёт графа
После изменения входа графа нужно запустить пересчёт, чтобы все зависимые параметры обновились.
await getProjectDataService().recalculateGraph('width', 800);
recalculateGraph — асинхронная функция. Используйте await в консоли (в современных браузерах это работает по умолчанию). Функция возвращает true при успешном пересчёте.
Пакетные операции: сдвиг
Сдвинуть все компоненты по Y на 100мм
const project = getProjectDataService().getProject();
project.components.forEach(comp => {
generateAndApplyFieldDiff(
'component', comp.guid,
'position.y',
comp.position.y,
comp.position.y + 100
);
});
Каждый вызов generateAndApplyFieldDiff создаёт отдельную запись в истории отмен. Для пакетной операции над N компонентами потребуется N нажатий Ctrl+Z для отмены.
Пакетные операции: переименование
Добавить префикс к именам
project.components.forEach(comp => {
generateAndApplyFieldDiff(
'component', comp.guid,
'name',
comp.name,
'Шкаф_' + comp.name
);
});
Пронумеровать компоненты
project.components.forEach((comp, i) => {
generateAndApplyFieldDiff(
'component', comp.guid,
'name',
comp.name,
`Деталь_${i + 1}`
);
});
Пакетные операции: замена материала
Заменить материал всем ЛДСП-компонентам
const ldspParts = project.components.filter(c => c.modifier.type === 'LDSP');
ldspParts.forEach(comp => {
generateAndApplyFieldDiff(
'component', comp.guid,
'material',
comp.material,
'путь/к/новому/материалу'
);
});
Посмотрите текущий материал любого компонента: console.log(comp.material). Путь к материалу — это строка в формате S123Path, например "catalogs/materials/ldsp/egger/h3342".
ProjectDataService
Сервис Доступ к данным проекта и ядру IIK.
const pds = getProjectDataService();
| Метод | Описание |
|---|---|
getProject() | Возвращает текущий объект проекта |
getIIKCore() | Возвращает экземпляр ядра IIKCore |
getCurrentProjectGuid() | GUID текущего проекта |
getLastDiff() | Последний diff после Calculate() |
enableDiffCollection() | Включить сбор diff'ов в IIKCore |
disableDiffCollection() | Выключить сбор diff'ов |
recalculateGraph(name, value) | Пересчитать граф с новым значением входа |
assemble() | Запустить сборку проекта |
DiffService
Сервис Центральный хаб для всех изменений в проекте.
const ds = getDiffService();
Подписка на изменения
// Логировать все изменения в проекте
const unsub = getDiffService().onDiffApplied((event) => {
console.log('Diff:', event.type, event.diff);
});
// Чтобы отписаться:
unsub();
DiffType
| Значение | Описание |
|---|---|
DiffType.Immediate | Локальное изменение — записывается в историю, отправляется в CRDT |
DiffType.Preview | Временное — только визуальное обновление, без истории |
DiffType.Remote | Удалённое — от другого пользователя |
SceneService
Сервис Управление 3D-сценой (Three.js).
const scene = getSceneService();
Используется в основном для отладки рендеринга. Через него можно получить доступ к Three.js-объектам сцены.
Управление логами
Система логирования позволяет включать подробный вывод для отдельных модулей редактора.
| Команда | Описание |
|---|---|
enableLog('SceneService') | Включить логи конкретного модуля |
enableLog('*') | Включить логи всех модулей |
disableLog('SceneService') | Выключить логи модуля |
disableAllLogs() | Выключить все логи |
getLogStatus() | Показать включённые модули |
getAvailableModules() | Список всех доступных модулей |
clearLogs() | Сбросить конфигурацию логов |
Пример: отладка DiffService
enableLog('DiffService');
// Теперь каждое применение diff будет логироваться в консоль.
// Чтобы выключить:
disableLog('DiffService');
Включённые модули логирования сохраняются в localStorage и переживают перезагрузку страницы. Используйте clearLogs() для полного сброса.
Справочник: все функции
| Функция | Описание |
|---|---|
getProjectDataService() | Получить сервис данных проекта |
getDiffService() | Получить сервис diff'ов |
getSceneService() | Получить сервис 3D-сцены |
DiffType | Enum типов diff: Immediate, Preview, Remote |
generateAndApplyFieldDiff(type, guid, path, old, new) | Изменить одно поле сущности |
generateAndApplyMultiFieldDiff(type, guid, changes) | Изменить несколько полей сущности |
enableLog(module) | Включить логирование модуля |
disableLog(module) | Выключить логирование модуля |
disableAllLogs() | Выключить все логи |
getLogStatus() | Показать включённые логи |
getAvailableModules() | Список всех модулей логирования |
clearLogs() | Сбросить конфигурацию логирования |
Справочник: типы сущностей
Первый параметр функций generateAndApplyFieldDiff / generateAndApplyMultiFieldDiff.
| entityType | Описание | Где найти |
|---|---|---|
'component' | Компонент (деталь) | project.components[i] |
'virtualObject' | Виртуальный объект | project.virtual_objects[i] |
'connectionPoint' | Точка соединения | project.connection_points[i] |
'positioningPoint' | Точка позиционирования | comp.positioning_points[i] |
'graphInput' | Вход графа | project.graph.inputs[i] |
'graphOutput' | Выход графа | project.graph.outputs[i] |
'graphNode' | Нода графа | project.graph.nodes[i] |
'project' | Сам проект | project |
Справочник: поля компонента
Используются как fieldPath в функциях изменения.
| Путь поля | Тип | Описание |
|---|---|---|
name | string | Название компонента |
position.x | number | Позиция по X (мм) |
position.y | number | Позиция по Y (мм) |
position.z | number | Позиция по Z (мм) |
size.x | number | Размер по X — ширина (мм) |
size.y | number | Размер по Y — высота (мм) |
size.z | number | Размер по Z — глубина (мм) |
rotation.x | number | Вращение (кватернион X) |
rotation.y | number | Вращение (кватернион Y) |
rotation.z | number | Вращение (кватернион Z) |
rotation.w | number | Вращение (кватернион W) |
material | string | Путь к материалу (S123Path) |
color | object | Цвет компонента |
is_active | boolean | Видимость (true — видим) |
description | string | Описание |
build_order | number | Порядок сборки |
order | number | Порядок в списке |
modifier.cut_angle1 | number | Угол отреза 1 (ЛДСП) |
modifier.cut_angle2 | number | Угол отреза 2 (ЛДСП) |
modifier.back_material | string | Материал задней стенки (ЛДСП) |
modifier.center_depth | number | Глубина центра (Панель) |
modifier.mesh | string | Файл меша (Mesh) |
modifier.related_project | string | Связанный проект (BuiltIn) |
Справочник: DiffType
| Значение | Константа | История | CRDT | Сцена |
|---|---|---|---|---|
'immediate' |
DiffType.Immediate |
Да | Да | Да |
'preview' |
DiffType.Preview |
Нет | Нет | Да |
'remote' |
DiffType.Remote |
Да | Нет | Да |
Все функции generateAndApplyFieldDiff и generateAndApplyMultiFieldDiff используют DiffType.Immediate по умолчанию. Это значит, что ваши изменения автоматически попадут в историю отмен и будут синхронизированы с другими пользователями.