Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Лекция 14. Функции доступа к примитивам AutoCAD




Функция entlast

Извлекает последний неудаленный основной примитив рисунка. Синтаксис

Функции:

(entlast)

Функция возвращает nil, если в рисунке нет неудаленных примитивов (например когда вы только что создали новый рисунок). Иначе возвращается последний основной примитив в следующем виде: <Entity name: 7ef8bf68> (<Имя объекта: 7ef8bf68>).

Фактически полученное имя примитива определяет адрес в базе данных рисунка по которому начинается информация о примитиве.

Полученное значение для дальнейшего использования следует сохранить в переменной, например:

(setq eela (entlast))

Функция entnext

Вычисляет следующий примитив (подпримитив).

(entnext [<примитив>])

В качестве единственного аргумента функции entnext может выступать ранее полученный примитив текущего рисунка. Если функция вызывается без аргумента, то она возвращает первый неудаленный примитив в базе рисунка.

При наличии аргумента функция возвращает следующий примитив либо nil, ее ли в качестве аргумента указан последний примитив рисунка (т. е. последыш- графический объект базы рисунка).

Пример:

· (setq el (entnext)) возвращает первый неудаленный примитив рисунка

· (setq е2 (entnext el)) возвращает примитив, следующий за el

· (setq е3 (entnext е2)) возвращает примитив, следующий за е2

Функция entlast возвращает последний основной примитив. Это означает, что если последним созданным графическим объектом рисунка является сложный объект (например, полилиния типа POLYLINE), то вслед за ним в базе рисунка следуют подпримитивы, т. е. вершины (имя примитива— VERTEX), а завершается перечисление подпримитивов полилинии примитивом SEQEND.

 

Функция entsel

Функция entsel предлагает пользователю указать один объект, выдавая запрос, текст которого задан в качестве аргумента.

(entsel [<запрос>])

Аргумент <запрос> — любая строка текста.

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

Пример:

(setq esl (entsel "Выберите объект: ")) возвращает

(<Entity name: 7ef66fa0> (475.13 248.759 0.0))

Указанный пользователем объект фигурирует в качестве первого элемента списка, являющегося возвращаемым значением, и может быть извлечен из такого списка, например, с помощью функции саг.

 



Функция entdel

Позволяет удалять неудаленные основные примитивы и восстанавливать примитивы, ранее удаленные в данном сеансе редактирования.

(entdel <примитив>)

Функция возвращает имя удаляемого (восстанавливаемого) примитива. Следует иметь в виду, что при операции сохранения рисунка все примитивы, помеченные как удаленные, из рисунка стираются и уже больше не могут быть восстановлены.

Пример использования функции entdal:

;строим отрезок для манипуляций

(command "_.LINE" '(16.0 66.1) '(250.3 145.9) "")

(setq kl (entdel (entlast)))

; Только что нарисованный отрезок удален

(entdel kl)

; Удаленный примитив восстановлен

 

Функция entget

Получает список с характеристиками примитива и является основным инструментом извлечения информации о геометрии и свойствах.

(entget <примитив> [<приложения>])

Здесь аргумент <примитив>— это имя примитива для получения его данных, аргумент <приложения> – это список с именами приложений, с помощью которых к примитиву привязаны расширенные данные.

Предположим, в рисунке первым объектом является отрезок (тип примитива — LINE). Тогда выражение

(setq le (entget (entnext)))

должно вернуть примерно такой список:

((-1 . <Entity nаmе: 7ef66fa0>) (0 . "LINE")

(330 . <Entity nаmе: 7ef66cf8>) (5 . "ЕС")

(100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")

(100 . "AcDbLine") (10 214.31 409.132 0.0)

(11 608.276 172.218 0.0) (210 0.0 0.0 1.0))

В этом списке элементами являются точечные пары и списки, причем и в тех и в других первыми элементами выступают целые числа, называемые DXF-кодами. Под соответствующим кодом в точечных парах и списках находятся данные определенного типа:



· код-1 указывает имя примитива (<Entity name: 7ef66fa0>);

· код 0 — тип примитива ("LINE");

· код 5 — метку (внутренний номер примитива в рисунке);

· код 8 — имя слоя ("0");

· код 10 — координаты начальной точки (214.31 409.132 0.0);

· код 11 – координаты конечной точки (608.276 172.218 0.0);

· код 210— направление вектора нормали к плоскости, в которой создан примитив;

· код 410 — имя вкладки пространства модели или листа.

Остальные коды, не имеющие принципиального значения, здесь не рассматриваются. С помощью функции assoc можно из списка с характеристиками объект; извлечь нужную точечную пару, а затем функцией cdr получить данные необходимого DXF-кода.

 

Продолжим пример с отрезком:

(cdr (assoc 0 le)) возвращает "LINE" (тип примитива)

(cdr (assoc 8 le)) возвращает "0" (имя слоя)

(cdr (assoc 10 le) ) возвращает (214.31 409.132 0.0)

(cdr (assoc 11 le)) возвращает (608.276 172.218 0.0)

Кроме того, по коду 62 можно было бы извлечь номер цвета примитива, по коду 6 имя типа линий, по коду 48 – собственный масштаб типа линий, по коду 311 - вес линий (умноженный на 100). В рассмотренном выше списке le точечных пар с такими DXF-кодами нет, поэтому для них действуют значения по умолчанию: ByLayer (ПоСлою) или 1.

 

Функция entmake

Создает новый примитив по списку, структура которого аналогична структуре списка, возвращаемого функцией entget. Возможно построение примитива с Расширенными данными. Функция entmake не может создать примитив типа VIEWPORT, но применима к объектам символьных таблиц. Entmake <список»

Аргумент <список> — это список, описывающий примитив (кроме точечной пары с DXF-кодом -1). По такому списку можно воссоздать в рисунке примитив с помощью функции entmake.

Возвращаемое значение — аргумент <список> или nil, если создание объекта щ возможно.

Пример:

· (entmake '( (0 . "CIRCLE") (10 500.0 0.0 0.0) (40 . 50.0))) создает новый примитив— окружность с центром в точке (500 0 0) и радиусом 50; остальные свойства (слой, цвет и т. д.), данные о которых отсутствуют в списк, берутся по умолчанию; возвращаемое значение – ((0 . "CIRCLE") (10 500 0.0 0.0) (40 . 50.0))

· (entmake '((0 . "LAYER") (100 . "AcDbSymbolTableRecord")
(100 . "AcDbLayerTableRecord") (2 . "MyNew") (70 . 0) (62 . 1) (6 . "Continuous"))) создает новый объект в таблице слоев— слой с наименованием MyNew, цветом 1 и типом линий CONTINUOUS

 

Функция entmod

Функция entmod похожа на функцию entmake, но получает в качестве аргумента список, который содержит точечную пару с DXF-кодом -1 (т. е. существующий рисунке примитив) и модифицирует примитив в соответствии с новым списков (в списке могут изменяться любые данные, кроме имени примитива, типа примь тива и метки, т. е. точечных пар с кодами -1, 0 и 5):

(entmod <список>)

Функция entmod изменяет примитив в базе рисунка и возвращает значение аргумента <список> при успешном завершении или nil— при невозможности выпо нить изменение. Данная функция не работает с примитивом VIEWPORT.

;Выбираем отрезок с цветом ByLayer (ПоСлою)

(setq le (car (entsel)))

;для отрезка возвращается список примерно такого вида:

'((,i . <Entity name:,7ef66fa0>) (0 . "LINE")

(330 . <Entity name: 7ef66cf8>) (5 . "EC")

(100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")

(100 . "AcDbLine") (10 214.31 409.132 0.0)

(11 608.276 172.218 0.0) (210 0.0 0.0 1.0))

;В списке нет точечной пары с DXF-кодом 62

;(это означает, что цвет имеет значение ByLayer (ПоСлою))

(setq le (append le (list (cons 62 1))))

;К списку добавлена точечная пара для красного цвета

; (entmod le)

; Цвет отрезка изменился на красный

Если бы в данном примере список с данными отрезка уже содержал точечную пару с DXF-кодом 62, то изменение цвета пришлось бы выполнить заменой значения, например:

(setq le (subst (cons 62 5) (assoc 62 le) le) ) возвращает список, в кoтopom точечная пара цвета заменена на точечную пару с синим цветом (номер 5) (entmod le) изменяет цвет отрезка на синий

Функция entupd

Перерисовывает примитив на экране с учетом изменений, внесенных, например, Функцией entmod.

(entupd <примитив>)

Аргумент <примитив> — это имя примитива в том виде, в котором оно выводится, например, функцией entlast.

Возвращаемое значение — имя примитива или nil (при ошибке). Пример:

(entupd (entlast)) перерисовывает последний примитив

 

 

Наборы

Следующая группа функций — это функции, работающие с наборами объектов.

Набор— это временное множество, в которое входят имена основных примитивов Рисунка (они собираются по какому-то условию или признаку-фильтру). Неосновные примитивы (составные части блока или вершины полилинии) не могут входить в набор.

Имя набора обычно сохраняется в какой-нибудь переменной, чтобы затем можно было извлечь из набора нужные примитивы для анализа или операций редактирования.

Наборы уничтожаются при закрытии рисунка.

 

Количество одновременно открытых наборов в рисунке не должно превышать 128. В ранних версиях системы AutoCAD количество наборов, которые могуч быть одновременно открыты, было меньше (например, в 10-й версии оно равнялось всего шести).

Для того чтобы закрыть ненужный набор, переменной, в которой хранится имя этого набора, следует присвоить значение nil.

Функция ssget

Функция ssget формирует набор по запросу или признаку.

(ssget [<метод>] [<точка1> [<точка2>]] [<список>] [<фильтр>])

Аргумент <метод> — это текстовая строка, принимающая одно из значений, характеризующих метод выбора примитивов (для возможности использования и в локализованной версии системы AutoCAD все перечисляемые строки должны спереди дополняться символом подчеркивания).

К основным значениям относятся следующие:

· "Х" — выбор всех примитивов рисунка, включая объекты на замороженных слоях и вне видимой части экрана, с учетом возможного аргумента <фильтр>;

· "А" — выбор всех примитивов рисунка, включая объекты на замороженных слоях и вне видимой части экрана;

· "I" — текущий набор из объектов, отмеченных с помощью ручек;

· "Р" — последний сформированный ранее набор;

· "W" — выбор рамкой;

· "WP" — выбор многоугольником;

· "С" — выбор секущей рамкой;

· "СР" — выбор секущим многоугольником;

· "F" — выбор секущей линией;

· "L" — выбор последнего видимого примитива.

Дополнительные значения (как правило, являются установками каких-то особен-0 ностей выбора):

· ": D" — разрешение на повторное включение примитивов в набор;

· ": А" — отмена разрешения на повторное включение примитивов в набор; ^

· ":L"— запрещение выбора примитивов на блокированных слоях;

Аргумент <точка1> при отсутствии аргумента <точка2> определяет дополнительное условие для добавления в набор: включаемый примитив должен проходить через точку, заданную аргументом <точка1>. Если заданы оба аргумента <точка1> и <точка2>, то определяемые ими точки являются углами простой или секущей рамки (когда в качестве метода выбора применяются рамки, т. е. "W" или "С").

Аргумент <список> представляет собой список, элементами которого являются точки, используемые в методах "F", "WP", "СР".

Аргумент <фильтр>— это список со структурой, аналогичной структуре списка, возвращаемого функцией entget, что позволяет оставить только те примйтивы, которые удовлетворяют дополнительным признакам (например, определенному Цвету, слою, весу и т. д.).

Возвращаемое значение функции ssget— имя созданного набора (или nil, если создать набор невозможно). Имя набора возвращается в следующем виде:

Selection set: 2>

Фактически имя набора — это адрес в базе данных рисунка, по которому начинается информация об объектах, включенных в набор. Примеры:

· (ssget ' (125.4 58.1)) создает набор из всех примитивов, проходящих черс точку (125.4 58.1)

· (ssget "_С" '(14.3 -5.2) '(27.6 106.1)) создает набор из примитивов, выбраемых секущей рамкой с углами в точках (14.3 -5.2) и
(27.6 106.1)

· (ssget "_F" '((1.0 0.0) (2.0 1.0) (10.0 1.0) (12.0 0.0))) создает набор из примитивов, пересекаемых ломаной линией, имеющей четыре вершины

· (ssget "_Х" (list (cons 0 "LWPOLYLINE") (cons 8 "SET"))) создает набор из всех примитивов типа LWPOLYLINE, размещенных на слое SET

· (ssget "_Х" '((0 . "LWPOLYLINE")(8 . "SET, ACR, BELL"))) создает набор из всех примитивов типа LWPOLYLINE, размещенных на слоях SET, ACR и BELL

· (ssget "_Х" ' ((0 . "*LINE"))) создает набор из всех примитивов рисунка, являющихся объектами типа *LINE (т. е. LINE, SPLINE, POLYLINE, LWPOLYLINE)

· (ssget "_X" ' ((8 . "СТЕНА[1-3]"))) создает набор из всех примитивов рисунка на слоях СТЕНА 1, СТЕНА2, СТЕНA3

В рисунке одновременно может быть открыто не более 128 наборов. При достижении такого предела функция ssget отказывается создавать следующие наборы и возвращает для них nil. Чтобы удалить ненужные наборы, следует присвоить значение nil переменным, хранящим имена этих наборов.

Функция ssadd

Добавляет примитив в набор.

(ssadd [<примитив> [<набор>]])

Аргументы: <примитив> – примитив, <набор> — набор.

Возвращаемое значение — набор.

Если аргумент <набор> опущен, а аргумент <примитив> задан, то создается новый набор из одного примитива. Если оба аргумента опущены, то создается новый пустой набор (но его значение не равно nil).

Пример работы с функцией ssadd

; Строим вспомогательный отрезок

(command "_.LINE" '(14.0 79.2) '(35.1 81.3) "")

(setq ssl (ssadd)); создает пустой набор

(ssadd (entlast) ssl)

; В набор ssl добавлен последний примитив (типа LINE)

 

Функция ssdel

Удаляет примитив из набора.

(ssdel <примитив> <набор>)

Аргументы: <примитив>— удаляемый примитив, <набор>— набор, из которого нужно выполнить удаление. ^

Возвращаемое значение— набор, если операция удаления выполнена, или nil, если примитив не содержится в наборе и удалить его нельзя.

Пример (продолжение примера для ssadd ):

(ssdei (entlast) ssi) удаляет из набора ssi последний примитив (типа LINE) и возвращает <Selection set: 4>

 

Функция sslength

Вычисляет длину набора, т. е. количество содержащихся в нем примитивов.

(sslength <набор>)

Аргумент <набор> — набор. Возвращаемое значение — целое число.

Примеры:

· (sslength (ssadd)) возвращает 0, т. к. функция ssadd создала пустой набор

· (sslength (ssget "_L")) возвращает 1, т.к. функция ssget создала набор из одного примитива (последнего видимого примитива рисунка)

 

Функция ssmemb

Проверяет, входит ли примитив в набор.

(ssmemb <примитив> <набор>)

Аргументы: <примитив> — примитив, <набор> — набор.

Возвращается примитив (значение аргумента <примитив>), если он входит в рас-сматриваемый набор, или nil — если не входит.

Примеры:

· (setq nabor (ssget "_L")) создает набор из последнего примитива и возвращает Selection set: 7>

· (ssmemb (entlast) nabor) возвращает примитив (например, <Entity name: 7ef7c010>), т. к. Последний примитив содержится в наборе nabor

 

Функция ssname

Извлекает примитив из набора по порядковому номеру.

(ssname <набор> <номер>)

Аргумент <набор> — набор. Аргумент <номер> определяет номер элемента в наборе Значение должно быть либо целым числом от 0 до 32767, либо целым числом вещественной форме больше 32767.0. Нумерация примитивов в наборе начинася с нуля.

Возвращаемое значение — примитив или nil, если примитива с данным номере- в наборе нет.

Примеры:

· (ssname nabor 0) возвращает имя примитива (например, <Entity nаmе 7ef7c010>)

· (ssname nabor l) возвращает nil, т. к. в наборе nabor содержится только одиь объект

 


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.025 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал