Гайд: Как исправить сбои перевода DWG в APS и потерю выбора у сотен одинаковых блоков - Часть 3

Как исправить сбои перевода DWG в APS и потерю выбора у сотен одинаковых блоков. Практические советы по оптимизации чертежей и настройке Model Derivative.

2026.11.01                  


Гайд: Как исправить сбои перевода DWG в APS и потерю выбора у сотен одинаковых блоков - Часть 3Гайд: Как исправить сбои перевода DWG в APS и потерю выбора у сотен одинаковых блоков - Часть 3

6. Что делать с ошибкой перевода

6.1. Не использовать x-ads-force: true без изменения источника

Если файл не изменился, повторная конвертация часто даст тот же результат. x-ads-force полезен, когда:

  • вы изменили исходник;
  • нужно перебить кэш перевода;
  • был временный сбой;
  • менялись настройки задания.

Но если источник остается тяжелым или проблемным, ошибка повторится.


6.2. Загрузить файл заново под новым именем/новым URN



Иногда полезно не просто пересоздать manifest, а:

  1. заново загрузить объект в OSS;
  2. получить новый urn;
  3. запустить перевод.

Это помогает, если:

  • объект был поврежден при загрузке;
  • есть проблема с кэшем/регионом;
  • файл был загружен с ошибками;
  • нужно исключить влияние старого состояния.

6.3. Проверить messages в манифесте

Смотрите не только status, но и:

"messages": [...]

Там могут быть предупреждения:

  • слишком много объектов;
  • пропущены элементы;
  • проблемы с листами;
  • проблемы с памятью;
  • ограничения по геометрии.

6.4. Разделить файл

Если файл 50–100 МБ и содержит плотную штриховку + сотни блоков, перевод может не укладываться во внутренние лимиты времени/памяти.

Варианты разделения:

Вариант A: зоны участка

site_zone_01.dwg
site_zone_02.dwg
site_zone_03.dwg

Вариант B: фон и объекты

site_background.dwg
site_cranes.dwg

Вариант C: листы и модель

model_space.dwg
layout_01.dwg
layout_02.dwg

Для отображения в Viewer можно:

  • загружать несколько моделей;
  • использовать overlay;
  • синхронизировать выбор через внешние ID;
  • скрывать/показывать слои/модели.

7. Рекомендуемые архитектурные решения

Ниже три основных варианта. Для вашей задачи с кранами я бы рассматривал их именно в таком порядке.


Вариант 1. Сделать каждый кран уникальным в DWG

Подходит, если:

  • кранов сотни, не десятки тысяч;
  • вам нужен именно DWG как источник;
  • вы хотите максимально использовать стандартный выбор Viewer;
  • можно модифицировать исходный файл.

Что сделать

  1. Оставить один блок CRANE.
  2. Сделать его статическим.
  3. Добавить атрибут CRANE_ID.
  4. Для каждой вставки задать уникальное значение.
  5. Убрать динамические состояния.
  6. Убедиться, что вставки находятся в Model Space.
  7. Убедиться, что это не MINSERT, не массив, не вложенный блок.
  8. Упростить/удалить штриховку.
  9. Перевести.
  10. Проверить выбор и свойства.

Ожидаемый результат

Каждый кран имеет:

dbId
properties:
  Block: CRANE
  CRANE_ID: CR-017
  Layer: ...

Тогда можно:

viewer.search('CR-017', (ids) => {
  viewer.select(ids);
  viewer.isolate(ids);
});

Риски

  • не гарантировано, что транслятор создаст объект на каждую вставку;
  • при большом числе уникальных атрибутов перевод может стать тяжелее;
  • нужно тестировать на реальном файле.

Вариант 2. Разделить файл: фон + краны

Подходит, если:

  • фон тяжелый;
  • штриховка вызывает сбои;
  • краны должны быть выбираемыми;
  • нужно улучшить производительность.

Схема

background.dwg  → только план, дороги, зоны, штриховка
cranes.dwg      → только краны, желательно с атрибутами

В Viewer можно:

  • грузить обе модели;
  • совмещать их по координатам;
  • фон делать полупрозрачным или неактивным;
  • краны держать как отдельную выбираемую модель.

Плюсы:

  • меньше нагрузка на перевод каждого файла;
  • проще изолировать проблему;
  • можно отключать фон;
  • легче управлять выбором.

Минусы:

  • нужно управлять несколькими моделями;
  • нужно синхронизировать координаты.

Вариант 3. Подложка + маркеры/оверлеи кранов

Это часто самый надежный производственный подход для больших планов с сотнями/тысячами одинаковых объектов.

Идея

Вы не заставляете Viewer выбирать каждый векторный кран как объект.

Вместо этого:

1. План участка отображается как:

  • упрощенный DWG;
  • PDF;
  • растровая подложка;
  • векторная подложка без тяжелых блоков.

2. Краны хранятся в вашей БД:

{
  "id": "CR-017",
  "x": 12345.67,
  "y": 6543.21,
  "rotation": 90,
  "type": "tower_crane",
  "status": "active"
}
  1. Поверх плана рисуются маркеры/иконки/HTML-оверлеи.
  2. Клик по маркеру открывает карточку крана.
  3. Выбор работает не через dbId, а через ваш craneId.



Плюсы

  • полностью контролируемая выбираемость;
  • не зависит от внутренней оптимизации транслятора;
  • масштабируется на тысячи объектов;
  • можно добавлять цвета, статусы, фильтры;
  • легко связать с внешней БД;
  • хорошая производительность.

Минусы

  • нужно хранить координаты кранов;
  • нужно синхронизировать систему координат;
  • нужно рисовать собственное выделение;
  • если нужен выбор именно векторной геометрии крана, это не полная замена.

Как реализовать

Шаг 1. Получить координаты кранов из DWG

Можно через:

  • AutoCAD Data Extraction;
  • AutoLISP;
  • AutoCAD .NET API;
  • ObjectARX;
  • APS Design Automation for AutoCAD;
  • экспорт в CSV/JSON.

Нужны:

CRANE_ID
INSERT_X
INSERT_Y
ROTATION
SCALE_X
SCALE_Y
LAYER
BLOCK_NAME

Шаг 2. Загрузить легкую подложку

В подложке можно оставить:

  • границы;
  • дороги;
  • здания;
  • основные слои;
  • упрощенную штриховку или без нее.

Шаг 3. Наложить маркеры

Варианты:

  • HTML-элементы поверх viewer.container;
  • canvas overlay;
  • SVG overlay;
  • THREE.Sprite / 3D overlay objects;
  • Autodesk Data Visualization extension;
  • Markups Core для временных выделений.

Шаг 4. Реализовать picking

Алгоритм:

pointerup → получить экранные координаты
→ преобразовать в мировые/модельные координаты
→ найти ближайший кран в радиусе
→ выделить маркер
→ показать свойства из вашей БД

Шаг 5. Синхронизировать координаты

Для 2D-плана часто достаточно аффинного преобразования.

Можно:

  • взять 2–3 известные точки на плане;
  • получить их экранные координаты в Viewer;
  • вычислить преобразование между DWG-координатами и клиентскими координатами;
  • применять его для маркеров.

В Viewer есть методы преобразования координат, например clientToWorld, worldToClient, а для 2D-листов также можно использовать getPageToModelTransform, если доступно. Но надежнее всего сначала проверить на конкретных известных точках.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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