МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Государственное образовательное учреждение
высшего профессионального образования
Сибирский государственный аэрокосмический университет
Имени академика М.Ф. Решетнёва
(СибГАУ)
Факультет машиноведения и мехатроники
Кафедра Технология машиностроения
Специальность 151001 – технология машиностроения
ЛАБОРАТОРНАЯ РАБОТА
«Изменение свойств примитивов»
Разработал студент группы БМЕ 11-01:
Сапичев В. В.
Проверил:
Сысоев А. С.
Красноярск 2012
Цель работы: изучение способов формирования списков, в которых будут содержаться все данные о примитиве, и способов обработки списков для выделения, анализа и модификации полученных данных.
Задачи:изучить способы формирования списков, в которых будут содержаться все данные о примитиве, и способов обработки списков для выделения, анализа и модификации полученных данных в AutoLISP.
Ход работы:
Работая с командной строки ACAD’а и используя функции AutoLISP’а, выполним следующие действия:
1. Создадим примитив – отрезок:
Command: LINE
From point: 1,2
To point: 6,6
To point: RETURN
Command: (setq a (entget (entlast)))
2. При помощи функции entnext выбираем примитив и записываем его имя в переменную E1:
(SETQ E1 (ENTNEXT))
3. Поместите в переменную EL данные примитива E1 в виде структурированного списка:
(SETQ EL (ENTGET E1))
4. Расшифруйте элементы структурированного списка. Кода параметров можно просмотреть в справочной системе AutoCAD: DXF Reference -> DXF Format -> Group Codes in Numerical Order.
((-1 . <Имя объекта: 7ffff705a10>) - APP: entity name. The name changes each time a drawing is opened. It is never saved (fixed)
(0 . "LINE") - Text string indicating the entity type (fixed)
(330 . <Имя объекта: 7ffff7039f0>) - Soft-pointer handle; arbitrary soft pointers to other objects within same DXF file or drawing. Translated during INSERT and XREF operations
(5 . "219") - Entity handle; text string of up to 16 hexadecimal digits (fixed)
(100 . "AcDbEntity") - Entity handle; text string of up to 16 hexadecimal digits (fixed)
(67 . 0) - Space—that is, model or paper space (fixed)
(410 . "Model") - Строка
(8 . "СлойОтрезка") – Имя слоя
(62 . 1) – Номер цвета
(6 . "Continuous") - Имя типа линии
(370 . 25) - Lineweight enum value (AcDb::LineWeight). Stored and moved around as a 16-bit integer. Custom non-entity objects may use the full range, but entity classes only use 371-379 DXF group codes in their representation, because AutoCAD and AutoLISP both always assume a 370 group code is the entity's lineweight. This allows 370 to behave like other “common” entity fields
(100 . "AcDbLine") - Subclass data marker (with derived class name as a string). Required for all objects and entity classes that are derived from another concrete class. The subclass data marker segregates data defined by different classes in the inheritance chain for the same object.
This is in addition to the requirement for DXF names for each distinct concrete class derived from ObjectARX (see Subclass Markers)
(10 0.0 0.0 0.0) - Primary point; this is the start point of a line or text entity, center of a circle, and so on
DXF: X value of the primary point (followed by Y and Z value codes 20 and 30)
APP: 3D point (list of three reals)
(11 100.0 10.0 0.0) - Other points
DXF: X value of other points (followed by Y value codes 21-28 and Z value codes 31-38)
APP: 3D point (list of three reals)
(210 0.0 0.0 1.0)) - Extrusion direction (fixed)
DXF: X value of extrusion direction
APP: 3D extrusion direction vector
5. Выберем элемент структурированного списка – конечная точка и запишем значение в переменную EM:
(SETQ EM (ASSOC 11 EL))
6. Запишем в переменную PM значение (например, 100)
(SETQ PM 100)
7. Заменим в структурированном списке EL элемент EM на элемент PM:
(SETQ EL (SUBST
(SUBST PM (NTH 2 (ASSOC 11 EL)) ; - новый элемент, заменяем второй
; элемент списка конечной точки
; (11 100.0 50.0 0.0) на значение PM
(ASSOC 11 EL)) ; - список
(ASSOC 11 EL) ; - старый элемент
EL)) ; - список
8. Зафиксируем изменение расположения элемента в базе данных чертежа
(ENTMOD EL)
9. Создадим функцию, изменяющую длину и ориентацию выбранного примитива в соответствии с вводом пользователя.
(Defun C:MODPRIM()
(Setq EN (car (entsel)))
(setq EL (entget EN))
(setq EM (assoc 10 EL))
(setq EP (assoc 11 EL))
(setq ptA (getpoint “\Please, write new start point:”)
ptB (getpoint “\Please, write new end point:”))
(setq ptAX (car ptA)
ptAY (cadr ptA)
ptBX (car ptB)
ptBY (cadr ptB)
)
(setq EL (subst
(subst ptAX (NTH 1 EM) EM)
EM
EL)
)
(entmod EL)
(setq EL (subst
(subst ptAY (NTH 2 EM) EM)
EM
EL))
(entmod EL)
(setq EL (subst
(subst ptBX (NTH 1 EP) EP)
EP
EL))
(entmod EL)
(setq EL (subst
(subst ptBY (NTH 2 EP) EP)
EP
EL))
(entmod EL)
)
10. Создадим функцию, которая подсчитывает и возвращает количество примитивов в текущем чертеже.
(sslength E1)
11. Создадим функцию, которая удаляет все примитивы с указанного слоя.
(ssdel) ;возвращает набор SS, из которого удалили примитив E1
12. Создадим функцию переноса примитивов нужного типа в другой слой.
(DEFUN C:CNGLAY (/cmd entn ent)
(SETVAR "CMDECHO" 0)
(SETQ found NIL)
(SETQ oldlyr (STRCASE (GETSTRINO
"\n Введите старое имя слоя:"))
newlyr (STRCASE (OETSTRING
"\n Введите новое имя слоя:")))
(PRINC "\n Ведется поиск примитивов на слое")
(SETQ entn (ENTNEXT))
(WHILE (/=entn nil)
(SETQ ent (ENTGET entn))
(IF ( = (CDR (ASSOC 8 ent) oldlyr)
(PROGN
(COMMAND "CHANGE" entn""
"p" "LA" newlyr"")
(SETQ found t)))
(SETQ entn (ENTNEXT entn)))
(IF (NOT found)
(PRINC (STRCAT "\n На слое" oldlyr" нет примитивов")) )
(SETVAR "CMDECHO" 1))
Вывод:В ходе выполнения данной лабораторной работы мы изучили различные способы формирования списков, в которых будут содержаться все данные о примитиве, и способов обработки списков для выделения, анализа и модификации полученных данных в среде AutoLISP.