|
|||||||||||||||||||||||||
- Информация раздела AutoLISP. Рекомендуем [Компьютер | Рефераты] |
Проектирование Проектирование |
Работа с примитивами. Доступ к базе данных чертежа Любой создаваемый в Автокаде чертеж состоит из примитивов, геометрическое описание которых хранится в специальном формате (формате Автокада) в файле чертежа (расширение .dwg). Для оперирования примитивами необходимо в программе на Автолиспе сначала найти имя примитива в базе данных Автокада. Попробуем извлечь это имя из ГБД при помощи Автолиспа. Получение информации о примитивах Взятие имени последнего созданного примитива: (entlast) Имя примитива необходимо сохранить в переменной с помощью оператора присваивания setq. Введите в командной строке: Command: (setq ENAME (entlast)) Тем самым мы присвоили переменной ENAME имя последнего примитива (в данном случае отрезка). Имена примитивов в Автокаде - шестнадцатеричные величины; имя примитива может быть, например, таким: 60000А14. Используя это имя, вы можете при помощи функции ENTGET получить доступ к данным, связанным с примитивом: Доступ к данным: (entget имя) Данные о примитиве выдаются списком, поэтому должны быть записаны в переменную, которую потом можно анализировать: (setq EDATA (ENTGET ENAME)) В результате выполнения команды вы получите сообщение, содержащее в своей структуре всю информацию о примитиве. Начиная от его имени и заканчивая слоем и цветом: ((-1 . <Имя примитива: 60000020>) (О . "LINE") (8 . "О") (10 1.0 2.0 0.0) (11 6.0 6.0 0.0)) Не все примитивы столь легко читаемы. DXF-коды Список состоит из кодов формата DXF (Drawing exchange Format - формат
обмена рисунками). Каждый подсписок имеет две части. Первая - код DXF,
вторая - данные. Целое число 0, например, представляет собой код типа
примитива. Код 8 говорит о том, что следующее за ним число - номер слоя.
Код 10 - начальная точка примитива, код 11 - конечная и т.п. Отметим,
что набор кодов DXF различен для примитивов разных типов. Однако сами
коды относятся ко всем примитивам - имя примитива, например, всегда хранится
в подсписке с кодом DXF -1. ( (-1 . <Имя примитива: 60000020>) Пользуясь кодами DXF, можно извлечь из списка EDATA любую информацию о примитиве. Создать свой список для описание примитива в DXF-формате можно при помощи оператора (cons код значение) ; получится список вида Наборы примитивов Из Автолиспа также можно работать с наборами примитивов: предоставлять пользователю возможность заносить примитивы в набор и затем их модифицировать. Набор формируется функцией ssget: (ssget режим точка1 точка2 <фильтр>) Необязательный аргумент режим - строка, которая указывает способ выбора примитива. Возможны следующие значения режима: Режим: "Р" выбирается текущий набор; Точка: (ssget< точка >) - Здесь выбираются примитивы, проходящие через < точку >. Фильтры: (ssget "х" < фильтр >) - Здесь
<фильтр> - список, элементами которого
являются одна или несколько точечных пар. Каждая точечная пара строится
по следующей форме: ; Выбирает по одному объекты чертежа: После того, как Вы определили необходимый Вам набор примитивов, можно использовать его во всех функциях модифицирования чертежа - Copy, move, erase, etc... Например: Выполнение последовательности функций (setq sdel (ssget "X" '((6 . "CENTER"))))
Работа с наборами/списками примитивов (sslength список_сформированный_ssget) - определение длины списка Выдает длину списка = количество элементов. (ssname список_сформированный_ssget номер) - извлечение элемента списка В результате мы извлекаем имя примитива из списка, и оно уже может обрабатываться оператором entget для извлечения данных. Пример: ; Выводим на экран подряд все типы примитивов из списка
aa Из Автолиспа можно непосредственно модифицировать данные о существующих
примитивах. Однако для добавления нового примитива необходимо использовать
команды отрисовки или редактирования Автокада. Это ограничение связано
с желанием защитить ГБД от неграмотного программиста: неправильно пользуясь
командами Автокада, вы не сможете испортить саму ГБД - самое большее,
что вы испортите, это свой чертеж. (assoc элементсписка сложныйсписок) - извлечение элемента Извлекает из сложногосписка элемент списка по ключу элементсписка. Если элементсписка не найден, ASSOC возвращает nil. Например: Исходный список: goods ((1 "car" "volvo")(2
"price" 80000)) (subst новыйэлемент старыйэлемент список) - замена элемента Возвращает копию исходного списка с заменой всех найденных подсписков, идентичных старомуэлементу, на новыйэлемент. Если вхождений не обнаружено, SUBST возвращает копию старого списка (не nil!): (subst '(2 "price" 100000) '(2 "price"
80000) goods) Используя эту технику, попробуем извлечь из списка EDATA имя примитива: Команда: (assoc 0 EDATA) В приведенном выше примере мы фактически сказали Автолиспу: "Возврати мне подсписок с DXF-кодом 0. Автолисп просмотрел DXF-список примитива, нашел подсписок с кодом 0 и возвратил его. Разумеется, целиком. Полученный по коду подсписок все еще содержит DXF-код, который необходимо убрать: первый элемент списка, уже "отработал" свое и больше не понадобится. Для этой цели лучше всего использовать функцию CDR: Команда: (cdr (assoc О EDATA)) Извлекая из DXF-списков нужную информацию, можно программно обрабатывать ее и затем, внеся изменения в DXF-список примитива при помощи функции SUBST, модифицировать ГБД при помощи функции ENTMOD: (entmod список) Эта функция преобразует список в формат, возвращаемый функцией ENTGET,
и обновляет информацию в ГБД. Следует иметь в виду, что функция ENTMOD
не всесильна. Во-первых, нельзя изменить тип примитива (если вы хотите
сделать это, вам остаётся только удалить его с помощью функции ENTDEL
и создать новый примитив с помощью функции COMMAND).
Во-вторых, все объекты, на которые ссылается список данных, должны быть
известны Автокаду к тому моменту, когда вызывается функция ENTMOD
(гарнитура шрифта, типы линий, имена форм и блоков и пр.). Исключением
из этого правила является слой - если определённого в списке слоя нет,
будет создан новый. Целые значения автоматически преобразуются в значения
с плавающей точкой (entupd список) Обновляет изображение примитива на экране Чтобы быть в курсе всех событий, получения необходимой и интересной информации, подпишись на рассылку "Создание САПР на базе продуктов Autodesk"
|
||
BESTHOSTING - хостинг от 6 уе за 1000 Мб места на диске, домен - бесплатно! |
Домой | AutoCAD | Autodesk Inventor | Разное | Студенту | Скачать | Контакты | Каталог |
(с) 2004 Калугин Сергей Сергеевич |