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

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

2026.11.01                  


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

4. Диагностика: что проверить в первую очередь

4.1. Проверьте, какие виды существуют в манифесте

Вам нужно понять, что именно вы грузите: модель, лист, layout.

Пример диагностики:

Autodesk.Viewing.Document.load(urn, (doc) => {
  const nodes = doc.getRoot().search({ type: 'geometry', role: '2d' });

  console.table(
    nodes.map(n => ({
      name: n.name(),
      viewableID: n.data.viewableID,
      sheetType: n.data.sheetType,
      role: n.data.role
    }))
  );

  // Далее пробуйте грузить разные узлы:
  // viewer.loadDocumentNode(doc, nodes[0]);
});


Если есть узел с названием вроде Model, попробуйте его. Если сейчас грузится Layout, Sheet, Paper, это может быть причиной.


4.2. Сравните 5 выбираемых кранов и 115 невыбираемых

Это очень важно. Найдите в AutoCAD, чем отличаются выбираемые экземпляры.

Проверьте:

Параметр Что проверить
Тип объекта INSERT, не MINSERT, не array, не прокси
Имя блока одно ли имя, нет ли анонимных *U...
Effective name особенно для динамических блоков
Вложенность не внутри ли другого блока
Пространство Model Space или Paper Space
Слой один и тот же слой или разные
Цвет/тип линий есть ли переопределения
Атрибуты есть ли атрибуты и разные ли значения
Масштаб/поворот не отличаются ли только 5 штук
Состояние видимости разные ли состояния динамического блока
Перекрытие не лежит ли штриховка сверху
Viewport не находятся ли они в разных видовых экранах

Если найдете отличие — это ключ к решению. Например, если 5 выбираемых кранов имеют уникальные атрибуты или лежат на отдельных слоях, а остальные нет — значит нужно сделать уникальными все.


4.3. Проверьте выбор и свойства в Viewer

Добавьте диагностику:

viewer.addEventListener(
  Autodesk.Viewing.SELECTION_CHANGED_EVENT,
  () => {
    const ids = viewer.getSelection();
    console.log('Selected dbIds:', ids);

    if (!ids.length) return;

    viewer.getProperties(
      ids[0],
      (result) => {
        console.log('Properties:', result.properties);
      },
      (err) => {
        console.warn('getProperties error:', err);
      }
    );
  }
);

Если клика нет и SELECTION_CHANGED_EVENT не возникает, значит объект не существует как выбираемый.

Если у вас есть подозрительные dbId из дерева объектов, попробуйте программно:

viewer.select([dbId]);

Если программно выбирается, а кликом нет — это может быть вопрос picking/перекрытия. Если и dbId нигде нет — объект отсутствует в маппинге.


4.4. Проверьте metadata/properties

Можно проверить через Model Derivative metadata endpoints:

GET /modelderivative/v2/designdata/{urn}/metadata

И далее для конкретного вида:

GET /modelderivative/v2/designdata/{urn}/metadata/{viewableId}/properties

Если в properties есть только 5 кранов, а 115 отсутствуют, значит проблема точно на этапе трансляции.


5. Подготовка DWG: что сделать перед повторной загрузкой

5.1. Базовая очистка

Вы уже делаете многое, но вот полный практический список:

-PURGE
AUDIT
RECOVER
OVERKILL
PURGE REGAPPS
PURGE ZERO-LENGTH GEOMETRY
PURGE UNUSED LAYERS
PURGE UNUSED BLOCKS
PURGE UNUSED LINE TYPES
PURGE UNUSED DIMENSION STYLES
PURGE UNUSED TEXT STYLES

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


5.2. Убрать динамические блоки или перевести их в статические

Для APS лучше:

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

Варианты:

  1. Вручную заменить динамические блоки на статические.
  2. Использовать BURST, если доступно и если это не ломает нужные атрибуты.
  3. Экспортировать/пересохранить чертеж так, чтобы динамические состояния были зафиксированы.
  4. Если файл генерируется автоматически — генерировать сразу статические блоки.

Важно:

Если вы используете EXPLODE, вы можете потерять сущность «кран» как блок. Иногда это допустимо, но чаще лучше оставить блок, но сделать его статическим и атрибутивным.




5.3. Добавить уникальный атрибут на каждый кран

Это один из лучших вариантов.

Создайте блок крана с атрибутом, например:

Tag: CRANE_ID
Value: CR-001

Каждая вставка должна иметь уникальное значение:

CR-001
CR-002
...
CR-120

Зачем это нужно:

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

Пример поиска:

viewer.search('CR-017', (ids) => {
  console.log('Found ids:', ids);
  viewer.select(ids);
});

Важно:

Не полагайтесь только на dbId. После повторного перевода dbId могут измениться. Лучше использовать внешний идентификатор, например атрибут CRANE_ID.


5.4. Альтернатива: уникальные слои

Если атрибуты не помогают, можно попробовать разнести краны по уникальным слоям:

CRANE_001
CRANE_002
...

Это грубее, но иногда заставляет транслятор не сливать объекты.

Минусы:

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

Для 120 кранов это может быть приемлемо. Для тысяч — уже нежелательно.


5.5. Альтернатива: уникальные имена блоков

Можно создать:

CRANE_001
CRANE_002
...

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

Минусы:

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

Этот вариант стоит использовать, если атрибуты и слои не помогли, а объектов не тысячи.


5.6. Убрать массивы, MINSERT, группы и вложенность

Проверьте:

  • нет ли MINSERT;
  • нет ли ассоциативных массивов;
  • нет ли группы;
  • нет ли родительского блока;
  • нет ли вложенных ссылок.

Если есть:

EXPLODE / конвертировать в отдельные вставки

Но делать это нужно так, чтобы не потерять идентификацию кранов. Лучше после взрыва создать уникальные атрибуты или заново вставить блоки с атрибутами.


5.7. Упростить штриховку

Рекомендации:

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

Если штриховка обязательна визуально, часто лучше:

фон: упрощенный вектор или растр
краны: отдельный слой/модель/маркеры

5.8. Проверить пространство и виды

Рекомендую:

  1. Оставить только Model Space, если вам нужен именно план в модели.
  2. Удалить лишние layout'ы.
  3. Удалить ненужные видовые экраны.
  4. Проверить, что краны находятся прямо в Model Space.
  5. Если нужен лист, проверить выбор именно в контексте листа отдельно.

Если вы грузите sheet, а краны в model viewport, это может быть причиной отсутствия выбора.


5.9. Проверить аннотативность и прокси-объекты

Если блоки аннотативные:

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

Если объекты прокси:

  • используйте EXPORTTOAUTOCAD или аналогичный экспорт в чистый AutoCAD DWG;
  • запросите исходник без вертикальных объектов.

5.10. Сохранить в более простую/старую версию

Иногда помогает:

  • сохранить как DWG 2013;
  • сохранить как DXF 2013/2018;
  • удалить динамические функции;
  • удалить лишние metadata.


Но это именно диагностический и обходной шаг, не гарантия.


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


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

Комментарии

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