Кому интересно чуть-чуть утренней нудности, добро пожаловать…

Проснувшись с утра и налив чашечку кофе, заглянул на свой любимый forum.nanocad.ru и обнаружил мольбу о помощи — мол, nanoCAD не отображает чертеж из AutoCAD. Точнее отображает, но не всё: «кто уже боролся с подобным явлением, подскажите рецепт»… Подозревая, в чем дело, отставил кофе в сторону и загрузил *.dwg-чертеж для исследования.

Смотрим в nanoCAD

Итак, дан *.dwg-чертеж неизвестного происхождения, который плохо отображается в nanoCAD (можно взять на форуме: forum.nanocad.ru/index.php?app=core&module=attach&section=attach&attach_id=5451). Надо выяснить, почему не все отображается и что с этим делать…

Первым делом загружаю nanoCAD Plus 6.0, нажимаю Открыть и поднимаю чертеж. Грузится быстро, отображается явно не всё (рис. 1).

Отображение проблемного *.dwg-файла в nanoCAD и бесплатном просмоторщике (скриншот клиента) Отображение проблемного *.dwg-файла в nanoCAD и бесплатном просмоторщике (скриншот клиента)

Пытаюсь взглянуть на чертеж сбоку (команда ViewСтандартные видыСпереди): бах — поле чертежа превращается в белый экран, курсор на нем не отображается. Все понятно: выбило видеоподсистему у nanoCAD. Возвращаюсь в вид сверху (команда ViewСтандартные видыСверху). Закрываю документ.

Смотрим в AutoCAD

Ради интереса смотрим в AutoCAD 2015. Загружаем: вроде показывает больше. Смотрим сбоку: программа отображает вертикальную полосу, координаты в строке состояния не воспроизводятся. Но если панорамировать, то можно выхватить координаты в строке состояния (рис. 2) — на минуточку: там -1.284e+81 (то есть единица с 81 нулем)!

Исследуя документ, можно заметить, что САПР оперирует очень большими числами Исследуя документ, можно заметить, что САПР оперирует очень большими числами

Закрываю документ — все ясно. Диагноз: в файле z-координаты разбросаны случайным образом по огромному диапазону. AutoCAD такие файлы как-то отображает (все ли?), nanoCAD честно показывает только разумные координаты, намекая на проблемность документа.

Исправляем в nanoCAD

*.dwg-документ явно испорчен, пользователь обычно в таких случаях говорит: «А что я? Я ничего — просто открыл». Виновных, конечно, не найти, остается исправлять…

В nanoCAD Plus 6.0 мы ввели команду ПРОВГЕОМ, которая позволяет обнулить координаты: заходим в ФайлУтилитыПроверка геометрии, выбираем опцию Проверка z-координаты, затем — Исправлять ошибкиДа с допуском по умолчанию (1e+20), затем Enter… Что происходит?

Программа проходит по всем объектам и, если у них z-координата выбивается из указанного диапазона, переносит объект целиком вверх или вниз на выбившуюся z-координату. Это приводит к тому, что геометрия объекта не меняется, но сам объект возвращается «из космоса на землю». Даже после такой простейшей операции данные в чертеже тут же проявляются. Кроме того, появляется возможность взглянуть на чертеж сбоку — вот и визуализация проблемного *.dwg (рис. 3).

Визуализация проблемного *.dwg-файла сбоку Визуализация проблемного *.dwg-файла сбоку

Еще красиво посмотреть на это в 3D (рис. 4).

Визуализация проблемного *.dwg-файла в 3D Визуализация проблемного *.dwg-файла в 3D

Теперь объекты разбросаны по z-высоте «всего лишь» в диапазоне плюс-минус 1e+20 (то есть единица с 20 нулями). Понятно, что на таком файле не работают ни привязки, ни обрезка, ни поиск контура для штриховки, причем ни в AutoCAD, ни в nanoCAD — нигде. Что ж, повторяю операцию ПРОВГЕОМ сначала с допуском в 1000, потом в 100, затем в 10, и, наконец, в 0 — и вуаля, чертеж исправлен полностью (рис. 5). (forum.nanocad.ru/index.php?app=core&module=attach&section=attach&attach_id=5455).

Исправленный *.dwg-файл Исправленный *.dwg-файл

Еще чуть-чуть о тонкостях

Умные люди скажут, что в AutoCAD есть похожая команда FLATTEN (из Express Tools). Да, конечно, есть, но… FLATTEN меняет геометрию чертежа, делая проекцию геометрии на нулевую плоскость — этим она и опасна. Например, если в документе были 3D-объекты (к примеру, линия, один конец которой лежит на высоте 100, а второй — на 3000), FLATTEN полностью разрушит 3D-представление модели (то есть опустит концы точек на нулевую плоскость), а ПРОВГЕОМ перенесет в нулевую плоскость только те объекты, которые выходят за указанный диапазон! На примере с линией — у нее один конец будет лежать на нуле, а второй — на 2900. Таким образом, чертеж с 3D-данными не будет разрушен. Есть разница, и ее нужно понимать.

Кроме того, я прошелся по *.dwg-документу утилитой Проверка документа (AUDIT) — очень часто она исправляет ошибки базы данных. И еще можно воспользоваться инструментом Очистка документа (PURGE): в текущем документе куча неиспользуемых слоев, типов линий, блоков и прочего. Но все это уже на усмотрение пользователя.

Заключение

Ну вот… кофе таки остыл…