Проснувшись с утра и налив чашечку кофе, заглянул в свой любимый на forum.nanocad.ru и обнаружил мольбу о помощи — мол, nanoCAD не отображает чертеж из AutoCAD. Точнее отображает, но не всё — «кто уже боролся с подобным явлением, подскажите рецепт»… Подозревая в чем дело, отложил кофе в сторону и загрузил DWG-чертеж для исследования.
Кому интересно чуть-чуть утренней нудности, добро пожаловать под Хабракат...
Смотрим в nanoCAD
Итак, дан DWG чертеж неизвестного происхождения, который плохо отображается в nanoCAD (можно взять на форуме: forum.nanocad.ru/index.php?app=core&module=attach§ion=attach&attach_id=5451). Надо выяснить почему не все отображается и что с этим делать…
Первым делом загружаю nanoCAD Plus 6.0, нажимаю на открыть и поднимаю чертеж. Грузится быстро, отображается явно не все:
Пытаюсь взглянуть на чертеж сбоку (команда view, стандартные виды, спереди): бах, поле чертежа превращается в белый экран, курсор на нем не отображается. Все понятно — выбило видеоподсистему у nanoCAD. Возвращаюсь обратно в вид сверху (команда view, стандартные виды, сверху). Закрываю документ.
Смотрим в AutoCAD
Ради интереса смотрим в AutoCAD 2015. Загружаем, вроде показывает больше. Смотрим сбоку: программа отображает вертикальную полосу, координаты в строке состояния не отображаются. Но если панаромировать, то можно выхватить координаты в строке состояния — на минуточку там -1.284e+81 (т.е. единица с 81 нулем!):
Закрываю документ — все ясно. Диагноз: в файле z-координаты разбросаны случайным образом по огромному диапазону. AutoCAD такие файлы как-то отображает (все ли?), nanoCAD честно показывает только разумные координаты, намекая на проблемность документа.
Исправляем в nanoCAD
DWG-документ явно испорчен, пользователь обычно в таких случаях говорит: «А что я? Я ничего — просто открыл». Виновных, конечно, не найти; остается исправлять…
В nanoCAD Plus 6.0 мы ввели команду ПРОВГЕОМ, которая позволяет обнулить координаты: заходим в ФайлУтилитыПроверка геометрии, выбираем опцию «Проверка z-координаты», затем «Исправлять ошибки = Да» с допуском по умолчанию (1e+20), Enter… Что происходит?
Программа проходит по всем объектам и, если у них z-координата выбивается из указанного диапазона, переносит объект целиком вверх или вниз на выбившую z-координату. Это приводит к тому, что геометрия объекта не меняется, но сам объект возвращается из космоса на землю. Даже после такой простейшей операции данные в чертеже тут же проявляются. Плюс появляется возможность взглянуть на чертеж сбоку — вот и визуализация проблемного DWG:
Теперь объекты разбросаны по z-высоте «всего лишь» в диапазоне плюс-минус 1e+20 (т.е. единица с 20 нулями). Понятно, что на таком файле не работают ни привязки, ни обрезка — причем ни в AutoCAD, ни в nanoCAD — нигде. Что ж повторяю операцию ПРОВГЕОМ сначала с допуском в 1000, потом в 100, потом в 10, потом в 0 — и вуаля, чертеж исправлен полностью (http://forum.nanocad.ru/index.php?app=core&module=attach§ion=attach&attach_id=5455).
Еще чуть-чуть о тонкостях
Умные люди говорят, что в AutoCAD есть похожая команда FLATTEN (из ExpressTools). Да, есть, но… FLATTEN меняет геометрию чертежа, делая проекцию геометрии на нулевую плоскость — этим она и опасна. Например, если в документе были 3D объекты (к примеру линия, один конец которой лежит на высоте 100, а второй на 3000), flatten полностью разрушит 3D представление модели (т.е. опустит концы точек на нулевую плоскость), а ПРОВГЕОМ перенесёт в нулевую плоскость только те объекты, которые выходят за указанный диапазон! На примере с линией — у нее один конец будет лежать на нуле, а второй конец — на 2900. Таким образом, чертеж с 3D данными не будет разрушен. Есть разница и ее нужно понимать.
Плюс я еще прошелся по DWG-документу утилитой «Проверка документа» (AUDIT) — очень часто она исправляет ошибки базы данных. И еще можно воспользоваться «Очисткой документа» (PURGE) — в текущем документе куча неиспользуемых слоев, типов линий, блоков и прочего. Но все это уже на усмотрение пользователя.
Заключение
Ну, вот… кофе таки остыл…
Автор: dows