Атрибут преобразовать в текст в автокаде
Как-то раз по одному из объектов получил от архитекторов чертежи. Сделал подоснову. При вставке по внешней ссылке номера помещений пропали. Оказалось, что номера помещений были сделаны блоками. Блоки были взорваны и вместо текста были атрибуты.
Т.к. в чертеже отображается тэг атрибута, а не его значение, то атрибуты имели разные тэги, но пустые значения. По вставке по внешней ссылке вместо тэгов атрибутов отображаются их значения (в AutoCAD внешняя ссылка и блок ведут себя во многом одинаково). Значения атрибутов не были заполнены и, как результат, номера помещений пропали.
Хотелось схватиться за голову, но проблему это бы не решило. Надо было искать выход из ситуации.
Если заменять атрибуты текстом вручную, то это очень трудоёмко:
- Вставить текст,
- Заполнить текст,
- Удалить атрибут.
И так несколько сотен раз.
Если сделать из атрибута блок и потом его взорвать командой _burst, то мы получим пустые тексты, т.к. атрибуты не содержат значений. Но я выбрал именно этот вариант, так как для меня он оказался менее трудоёмкий.
Таким образом, алгоритм по преобразованию атрибутов в окончательном виде выглядел так:
- Выделить все атрибуты;
- Сделать блок, состоящий из выделенных атрибутов;
- Присвоить значениям атрибутов имя их тэга;
- Взорвать блок при помощи команды _burst.
Наиболее трудоёмкой по времени процедурой в этом алгоритме является заполнение значений атрибутов названиями тэгов. Чтобы не выполнять эту процедуру вручную, я написал небольшую программу. Написание и тестирование программы заняло у меня около 20 минут. Остальные манипуляции по преобразованию заняли еще 10 минут (таким образом я обработал 5 чертежей). Итого вся процедура заняла не более получаса.
При ручной замене атрибутов на текст это потребовало бы гораздо больше времени (около 50 помещений на этаже, 5 этажей в здании).
В итоге написание программы оказалось втройне правильным решением, т.к. я не один раз сэкономил таким образом время. Через некоторое время пришла обновлённая архитектура и процедуру пришлось повторять. Но на этот раз я потратил на это уже не более 10 минут.
А потом архитектура обновилась еще раз
Поделитесь в комментариях к статье с какими трудностями столкнулись вы и как успешно их преодолели. А если не преодолели, то всё равно поделитесь, может я смогу вам чем-то помочь.
11.5. Express Tools 2004
Если вы при инсталляции системы AutoCAD выбрали и установку Express Tools 2004, то в строке меню у вас должно появиться падающее меню Express (Экспресс), которое дает доступ к дополнительным возможностям. После установки AutoCAD вы можете доустановить Express Tools, запустив повторную инсталляцию с диска и выбрав Step 5. Install Supplemental Tools. AutoCAD Express Tools (Шаг 5. Установка дополнительных средств. AutoCAD Express Tools). Если меню Express (Экспресс) у вас не появилось, то попробуйте команды EXPRESSTOOLS и EXPRESSMENU.
На рис. 11.32 приведен внешний вид падающего меню Express (Экспресс). Фирма Autodesk периодически на своем сайте обновляет Express Tools для разных версий AutoCAD. Следует отметить, что Express Tools 2004 не могут быть установлены в AutoCAD 2002 и в более ранних версиях системы.
Рис. 11.32. Падающее меню Express
Кроме падающего меню, при установке Express Tools (сокращенно ET) в системе появляются четыре панели, показанные на рис. 11.33.
Рис. 11.33. Панели инструментов Express Tools
Перечислим функции Express Tools в том порядке, в каком они расположены в виде двенадцати подменю в падающем меню Express (Экспресс) (см. рис. 11.32).
11.5.1. Подменю Layers
Подменю Layers (Слои) имеет следующие пункты (для тех операций, которым соответствуют кнопки панели инструментов ET: Layers (ET: Слои), рядом с переводом приведены пиктограммы этих кнопок):
- Layer Manager (Диспетчер слоев, ) — позволяет сохранять и восстанавливать свойства слоев;
- Layer Walk (Просмотр слоев, ) — показывает объекты только тех слоев, которые отмечены в диалоговом окне;
- Layer Match (Слой по образцу, ) — переносит объекты на слой указанного примитива;
- Change to Current Layer (На текущий слой, ) — переносит объекты на текущий слой;
- Copy Objects to New Layer (На новый слой, ) — переносит объекты на другой слой, с возможностью создания этого слоя;
- Layer Isolate (Изоляция слоя, ) — выключение всех слоев, кроме слоев выбранных объектов;
- Isolate Layer to Current Viewport (Изоляция слоя в видовом экране) — замораживание в текущем видовом экране пространства листа;
- Layer Off (Выключение слоя, ) — выключение слоев выбранных объектов;
- Turn All Layers On (Включение всех слоев) — включает все слои;
- Layer Freeze (Замораживание слоя, ) — замораживает слои выбранных объектов;
- Thaw All Layers (Размораживание всех слоев) — размораживает все слои;
- Layer Lock (Блокировка слоя, ) — блокирует слой выбранного объекта;
- Layer Unlock (Разблокировка слоя, ) — разблокирует слой выбранного объекта;
- Layer Merge (Перенос со слоя на слой) — переносит все объекты с одного слоя на другой, с удалением первого слоя;
- Layer Delete (Удаление слоя) — стирает все объекты на выбранном слое и удаляет слой.
11.5.2. Подменю Blocks
Подменю Blocks (Блоки) имеет такие пункты (для тех операций, которым соответствуют кнопки панели инструментов ET: Blocks (ET: Блоки), рядом с переводом приведены пиктограммы этих кнопок):
- List Xref/Block Properties (Свойства объекта из вхождения, ) — показывает свойства примитива, входящего в состав блока или внешней ссылки;
- Copy Nested Objects (Копирование объектов из вхождения, ) — копирует примитивы, входящие в состав блоков или внешних ссылок;
- Trim to Nested Objects (Обрезка объектами из вхождения, ) — выполняет обрезку, используя в качестве режущих объектов примитивы, входящих в состав блоков или внешних ссылок;
- Extend to Nested Objects (Продление до объекта из вхождения, ) — выполняет продление, используя в качестве граничного объекта примитив, входящий в состав блока или внешней ссылки;
- Explode Attributes to Text (Расчленение с преобразованием атрибутов в текст, ) — расчленяет вхождения блоков или внешних ссылок, заменяя атрибуты на их значения, преобразованные в текстовые примитивы;
- Convert Shape to Block (Преобразование формы в блок) — заменяет вставленную в рисунок форму на вхождение блока, для которого создается описание;
- Export Attribute Information (Экспорт атрибутов) — выполняет экспорт значений атрибутов в текстовый файл, в котором значения разделяются символом табуляции;
- Import Attribute Information (Импорт атрибутов) — выполняет замену значений атрибутов вхождений блоков, импортируя их из текстового файла, в котором значений разделяются символом табуляции;
- Convert block to xref (Преобразование блока во внешнюю ссылку) — заменяет вхождения блока на внешнюю ссылку на указываемый файл;
- Replace block with another block (Замена одного блока другим) — заменяет все вхождения одного блока на вхождения другого блока.
11.5.3. Подменю Text
- Remote Text (Внешний текст) — вставляет текст из внешнего TXT-файла, с возможностью использования выражений языка DIESEL, применяемого в макросах меню;
- Text Fit (Сжатие текста, ) — сжатие текста за счет изменения ширины букв;
- Text Mask (Маскирование текста, ) — создание маски в виде прямоугольного объекта вокруг текстового примитива, для того чтобы под текстом не были видны другие примитивы рисунка;
- Unmask Text (Демаскирование текста) — отказ от ранее созданной маски текстового примитива;
- Explode Text (Расчленение текста, ) — преобразование текстового примитива в полилинии;
- Convert Text to Mtext (Преобразование текста в мультитекст) — заменяет выбранный однострочный текст из одной или нескольких строк на многострочный текст;
- Arc-Aligned Text (Размещение текста по дуге, ) — позволяет создать или отредактировать специальный текстовый примитив, выровненный вдоль дуги окружности;
- Justify Text (Выравнивание текста) — изменяет способ выравнивания текста, или мультитекста, или описания атрибута, с сохранением внешнего вида примитива;
- Rotate Text (Поворот текста) — изменяет наклон текста, или мультитекста, или описания атрибута, с целью преобразования к наиболее читаемому виду;
- Enclose Text with Object (Обводка текста) — строит дополнительный объект (круг, полилинию в форме овала или полилинию в форме прямоугольника) вокруг текста, мультитекста или описания атрибута;
- Automatic Text Numbering (Автоматическая нумерация текста) — изменяет текстовые примитивы, дополняя их номерами;
- Change Text Case (Изменение регистра текста) — изменяет текстовые примитивы, преобразуя текст к нужному регистру.
11.5.4. Подменю Layout tools
- Change Space (Смена пространства) — копирует в листе объект из одного пространства в другое, с сохранением внешнего вида;
- Align Space (Выравнивание в пространстве) — изменяет вид и масштаб видового экрана в листе так, чтобы две точки, указанные в пространстве модели, преобразовались в две точки, указанные в пространстве листа;
- Synchronize Viewports (Сихронизация видовых экранов) — изменяет масштаб видовых экранов на масштаб основного видового экрана;
- List Viewport Size (Масштаб видового экрана) — выводит знаменатель масштаба видового экрана;
- Merge Layout (Слияние листов) — перенос видовых экранов из нескольких листов в один.
11.5.5. Подменю Dimension
- Leader Tools (Сервис выносок) — имеет три подпункта:
- Attach Leader to Annotation (Присоединение выноски к надписи) — создает связь выноски с объектом (мультитекстом, допуском или блоком); при перемещении объекта конец выноски будет следовать за ним;
- Detach Leader from Annotation (Отсоединение выноски от надписи) — разрывает связь между выноской и объектом надписи;
- Global Attach Leader to Annotation (Глобальное присоединение выноски к надписи) — создает связи между выбранными выносками и указанными объектами надписей (мультитекстами, допусками и блоками);
11.5.6. Подменю Selection tools
Следующее подменю падающего меню Express (Экспресс) — Selection tools (Сервис выбора). Это подменю имеет два пункта:
- Get Selection Set (Создание набора) — создает текущий набор выбора, запрашивая имя слоя и тип объектов;
- Fast Select (Быстрый выбор, кнопка панели ET: Standard (ET: Стандартная)) — создает набор из примитивов, пересекающих данный объект.
11.5.7. Подменю Modify
Следующее подменю — Modify (Редактирование). Оно имеет такие пункты (там где имеются, после перевода приведены пиктограммы кнопок и названия панелей, на которых эти кнопки расположены):
- Multiple Object Stretch (Множественное растягивание объектов, кнопка панели ET: Standard (ET: Стандартная)) — выполняет операцию одновременного растягивания объектов;
- Move/Copy/Rotate (Перенос/Копирование/Поворот, кнопка панели ET: Standard (ET: Стандартная)) — выполняет операции переноса, копирования, поворота и масштабирования объектов в рамках одной команды;
- Extended Clip (Расширенная подрезка, кнопка панели ET: Blocks (ET: Блоки)) — выполняет подрезку вхождений блоков, внешних ссылок, пятен и растровых изображений границами, полученными аппроксимацией окружностей, дуг, эллипсов, полилиний, текстов, мультитекстов или описаний атрибутов;
- Convert Shape to Block (Преобразование формы в блок) — заменяет вставленную в рисунок форму на вхождение блока, для которого создается описание (повтор одноименного пункта подменю Blocks (Блоки));
- Multiple Copy (Множественное копирование, кнопка панели ET: Standard (ET: Стандартная)) — копирует объекты, предлагая дополнительные возможности вставки копий аналогично работе команд DIVIDE (РАЗДЕЛИТЬ) и MEASURE (РАЗМЕТИТЬ);
- Extended Offset (Расширенное подобие) — создает подобные (параллельные) объекты, предлагая дополнительные возможности: множественное построение, удаление исходного примитива, задание слоя нового объекта.
11.5.8. Подменю Draw
Восьмое подменю падающего меню Express (Экспресс) — Draw (Рисование). Оно имеет два пункта (в скобках после перевода приведены пиктограммы соответствующих кнопок панели инструментов ET: Standard (ET: Стандартная)):
- Break-line Symbol (Обозначение разрыва, ) — построение линии разрыва со вставкой знака разрыва из стандартного или пользовательского DWG-файла;
- Super Hatch (Суперштриховка, ) — создание суперштриховки из растровых изображений, внешних ссылок, блоков и пятен.
11.5.9. Подменю File tools
Девятое подменю — File tools (Сервис операций над файлами). Оно имеет следующие пункты:
- Move Backup Files (Перемещение BAK-файлов) — изменяет путь для размещения BAK-файлов;
- Convert PLT to DWG (Преобразование PLT в DWG) — вставляет в текущий рисунок содержимое PLT-файлов, сформированных в формате HPGL;
- Edit Image (Редактирование изображения) — вызывает внешнюю программу редактирования растровых изображений;
- Redefine Path (Переопределение путей) — модифицирует пути для вставленных растровых изображений, внешних ссылок, шрифтов, форм и примитивов RTEXT (внешних текстов);
- Update Drawing Property Data (Обновление свойств рисунка) — изменяет данные, отображаемые в окне свойств рисунка, по шаблону;
- Save All Drawings (Сохранение всех рисунков) — сохранение всех открытых рисунков без их закрытия; для неименованных рисунков запрашивается имя;
- Close All Drawings (Закрытие всех рисунков) — закрывает все рисунки и предлагает сохранение для измененных рисунков;
- Quick Exit (Быстрый выход) — закрывает все рисунки, предлагая сохранение для измененных рисунков, и выходит из AutoCAD;
- Revert to Original (Переоткрытие) — закрывает текущий рисунок, предлагая сохранение при наличии изменений, и снова открывает его.
11.5.10. Подменю Web tools
В десятом подменю (Web tools (Сервис Web)) три пункта:
- Show URLs (Показ URL, кнопка панели инструментов ET: Standard (ET: Стандартная)) — показывает список использованных в рисунке адресов сети Интернет в формате URL (Universal Resource Locator);
- Change URLs (Изменение URL) — редактирование URL-адресов;
- Find and Replace URLs (Поиск и замена URL) — ищет и заменяет в рисунке одни URL-адреса на другие.
11.5.11. Подменю Tools
Следующее подменю падающего меню Express (Экспресс) — Tools (Сервис). Это подменю содержит следующие пункты:
AutoCAD 2008: конвертирование данных из старых таблиц в новый табличный формат.
Если вы перешли на AutoCAD 2008 с более ранней версии AutoCAD, перед вами может возникнуть задача преобразования таблиц, сделанные до введения команды в AutoCAD команды Table. Простейшим способом является использование метода извлечения данных в команды Table. Конечно это достаточно мощный инструмент, но когда данные находятся в форме линий, полилиний, текста, и mtext, получить данные в пригодном для использования формате довольно трудоёмко. Решением стало написание утилиты MAKETABLE.LSP, который позволяет пользователю выбирать линии, полилиний, и любой тип текста и преобразовывать их в табличный объект AutoCAD, который заменяет первоначальные данные.
Утилита называется MAKETABLE.LSP и ее можно скачать здесь. Ниже дано описание ее принципов работы и использования.
Как использовать MAKETABLE.LSP
Используйте средство Appload, выбрав пункт Load Application в меню Tools, а затем выбрав MAKETABLE.LSP в меню просмотра.
Чтобы загрузить программу, введите MTB в командной строке, затем у вас будет запрошено выбрать окном по двум точкам исходную таблицу. После этого, таблица, состоящая из линий, полилиний и текста будет автоматически преобразована в табличный объект AutoCAD, который будет содержать оригинальные данные и заголовки. На рисунках 1 и 2 показана таблица до и после преобразования.
Рис. 1. Таблица, состоящая из линий, полилиний и текста
Рис. 2. Таблица, сконвертированная в табличный формат AutoCADПрограмма работает с большинством типов таблиц, которые могут содержать любое числом строк и столбцов и любой тип текста. Работоспособность программы сохраняется даже если есть линии, нарисованные точно одна над другой, или есть полилинии, используемые произвольно - например, как разделители для строк или столбцов. В новой таблице текст форматируется по центру ячеек, за исключением текста в столбце Description (если он существует), который форматируется по левому краю.
Описание программы.
После моих стандартных функций обработки ошибок и системных переменных, текст программы содержит функцию GETOLDTABLE, которая использует методы VLA-GETPOINT и VLA-GETCORNER чтобы установить две по диагонали противоположных точки, которые используются, чтобы выбрать объекты таблицы. Точки фактически используются дважды: один раз, чтобы выбирать все полилинии, которые могут существовать и второй раз, чтобы выделить все линии и текстовые объекты. Все найденные полилинии разбиваются с помощью метода VLA-EXPLODE. GETOLDTABLE заканчивает свою работу созданием наборов линий и текстовых объектов, а затем управление передается функции MAKETABLE, куда эти наборы передаются как аргумент.
MAKETABLE собирает линии и текст в отдельных списках вызывая функции GET-LINES и GET-TEXT. В дальнейшем линии разделяются на горизонтальные и вертикальные с помощью функции GET-ROWSCOLS до того, как они будут отсортированы в списки строк и столбцов. В случае, если присутствуют сдвоенные линии, списки строк и столбцов обрабатываются функцией DO-DUPES прежде, чем быть они будут отсортированы снова. Текстовые объекты собираются в списки многострочного и однострочного текста с помощью функции GET-TXTMTXT. Параметры для метода VLA-ADDTABLE - число строк и столбцов и высоты строки и ширины столбцов. Табличный же объект создается как пустая таблица следующим кодом:
По умолчанию, таблица имеет шапку и заглавие, и я решил удалить слияние для строки заголовка, и разместить табличный объект на том же слое, как и исходные текстовые объекты. Для заполнения же ячеек таблицы используется вызов функции POPULATE-TABLE, как показано ниже:
Одна из наиболее интересных функций следует за вышеупомянутой DO-DUPES, и написана не смотря на то, что существует прекрасная функция Visual LISP VL-REMOVE, которая и предназначена для удаления любого элемента (и его дубликатов) из списка. К сожалению, в нашем случае метод не работал последовательно на списках точек, так как их координаты не были достаточно точны, даже если учитывать, что линии были точно на вершине друг друга в пределах 13 десятичных разрядов! Поэтому, затратив много времени на выяснение, почему двойные линии не удалялись, я вынужден был написать свою собственную версию удаляющегося метода (MYVL-REMOVE):
Решением является введение допуска в процедуру сравнения, а затем удалять равный элемент из списка, обозначенный в листинге как ITEM2. Этот метод гарантирует удаление одного дублированного элемента за один раз, но так как он проверяет все элементы в списке, то таким образом может обработать любое число дубликатов. Я обычно определяю глобальные переменные звездочками в начале и конце, но в случае переменной FUZZ не следовал этому формату. Фактически, везде в этой программе, я не определял местные и глобальные переменные вообще, кроме тех, которых передаются как параметры. Программирование таким образом может быть опасным, но я решил инициализировать списки и счетчики в отдельных функциях вместо этого.
Функция POPULATE-TABLE за один раз берет каждый текстовый объект из текстового списка, и использует его точку вставки для определения, где (в какой строке и столбце) он должен быть размещен в новой таблице. Это является разумным подходом для таблиц, которые не полностью заполнены текстом, так как пустые ячейки просто не рассматриваются. Все текстовые объекты - заголовки располагаются в строке 0 (самой верхней строке), и это естественно облегчает работу с ними. Столбцы для текста заголовка были определены по расположению слитых ячеек. Все остальные текстовые объекты размещены с помощью метода VL-SETTEXT, устанавливаются такие параметры ячейки как высота, ширина колонки, стиль и высота текста. Фрагмент кода, который делает это:
Сначала создается пустая таблица, затем форматируются ячейки и добавляется текст. Каждый раз, когда это осуществляется, таблица автоматически регенерируется, и по моему мнению для ускорения черчения следует воздержаться от регенерации до того момента, пока все ячейки не будут заполнены. Регенерация определяется как true или false, и следующий код из функции MAKETABLE показывает, как это было сделано:
Последняя строка этой функции стирает весь набор линий и текста, который составляет первоначальную таблицу.
Читайте также: