Фильтр команды "ssget"
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Фильтр команды "ssget"

Фильтр команды "ssget"

Ответ
Поиск в этой теме
Непрочитано 28.04.2008, 17:47 #1
Фильтр команды "ssget"
Mazai
 
Москва
Регистрация: 04.04.2008
Сообщений: 97

Здраствуйте.
У меня вопрос - можно ли одним запросом с помощью команды "SSGET" сформировать набор, в котором одновременно отбирались бы примитивы типа "LINE" и "LWPOLYLINE". Или в этой команде отбор примитивов возможен только по одному типу? Если это так, то как ещё можно это сделать? (как сформировать два набора, потом их объеденить и отсортировать - я знаю - получается много лишних действий)
Просмотров: 11404
 
Непрочитано 28.04.2008, 18:06
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Код:
[Выделить все]
 
(ssget "_X" '((0 . "LINE,LWPOLYLINE")))
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 29.04.2008, 09:16
#3
Mazai


 
Регистрация: 04.04.2008
Москва
Сообщений: 97


Спасибо!
Mazai вне форума  
 
Непрочитано 11.08.2008, 19:28
#4
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Когдато давно я уже задавал этот вопрос и мне ответили , но не могу найти сейчас.
Там есть фильтры с кодом -4, если не ошибаюсь, под которым идут логические OR NOT AND. Забыл как их формировать. Справка AutoCAD 2008 RUS пишет, что данный раздел отсутствует.
Если у кого в справке есть этот раздел скиньте пожалуйста сюда.
Или хотябы напишите как правильно формируется открывающий и закрывающий список.
Нужно срочно.
Заранее благодарен.
mmax вне форума  
 
Непрочитано 11.08.2008, 21:20
1 | #5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


Лови:
Вложения
Тип файла: pdf ssget_filter.pdf (12.8 Кб, 633 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.08.2008, 21:20
#6
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


Logical Grouping of Filter Tests

You can also test groups by creating nested Boolean expressions that use the logical grouping operators shown in the following table:

Grouping operators for selection set filter lists

The grouping operators are specified by –4 groups, like the relational operators. They are paired and must be balanced correctly in the filter list or the ssget call will fail. An example of grouping operators in a filter list follows:

(ssget "X"

’(
(-4 . "<OR")
(-4 . "<AND")
(0 . "CIRCLE")
(40 . 1.0)
(-4 . "AND>")
(-4 . "<AND")
(0 . "LINE")
(8 . "ABC")
(-4 . "AND>")
(-4 . "OR>")
)
)
This code selects all circles with a radius of 1.0 plus all lines on layer "ABC". The grouping operators are not case-sensitive; for example, you can specify "and>", "<or", instead of "AND>", "<OR".

Grouping operators are not allowed within the –3 group. Multiple application names specified in a –3 group use an implied AND operator. If you want to test for extended data using other grouping operators, specify separate –3 groups and group them as desired. To select all circles having extended data for either application "APP1" or "APP2" but not both, enter the following:

(ssget "X"
’((0 . "CIRCLE")
(-4 . "<XOR")
(-3 ("APP1"))
(-3 ("APP2"))
(-4 . "XOR>")
)
)
You can simplify the coding of frequently used grouping operators by setting them equal to a symbol. The previous example could be rewritten as follows (notice that in this example you must explicitly quote each list):

(setq <xor ’(-4 . "<XOR")
xor> ’(-4 . "XOR>") )
(ssget "X"
(list
’(0 . "CIRCLE")
<xor
’(-3 ("APP1"))
’(-3 ("APP2"))
xor>
)
)
As you can see, this method may not be sensible for short pieces of code but can be beneficial in larger applications.
Donhuan вне форума  
 
Непрочитано 11.08.2008, 22:32
#7
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Спасибо.
Может вопрос уже не по теме, но почему у меня отсутствуют элементы справки, жму ссылки внизу а там вот такое:
Миниатюры
Нажмите на изображение для увеличения
Название: ssget.jpg
Просмотров: 224
Размер:	73.8 Кб
ID:	9207  
mmax вне форума  
 
Непрочитано 12.08.2008, 06:20
#8
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Да просто потому что разработчики справки в ссылке опечатку сделали. Или заготовили ссылку, а нужную страницу не написали. Или написали, да удалили, может быть нечаянно. Понедельник день тяжелый не только у нас.
ShaggyDoc вне форума  
 
Непрочитано 12.08.2008, 08:12
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


Скорее всего, это глюк локализации.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.02.2013, 17:21
#10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Помогите, пожалуйста, разобраться.
У Полещука в книге "AutoLISP и Visual LISP в среде AutoCAD" написано:
Цитата:
(ssget '(125.4 58.1)) создает набор из всех примитивов, проходящих через точку (125.4 58.1)
В приложенном файле через точку (0.0 0.0) проходит ТРИ примитива "LWPOLYLINE", но
Код:
[Выделить все]
(sslength (ssget '(0.0 0.0)))
возвращает "1".
Что не так?
Вложения
Тип файла: dwg
DWG 2007
Чертеж1.dwg (92.3 Кб, 2345 просмотров)
skkkk вне форума  
 
Непрочитано 12.02.2013, 20:16
1 | #11
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Пробуй такой вариант
Код:
[Выделить все]
(setq pt (list 0 0 0) fuzz 0.001); <-- set epsilon to your suit,eg: 0.000001, etc.
(setq ss (ssget	"x"
		(list (cons -4 "<or")
		      (cons -4 ">,>,>")
		      (cons 10
			    (mapcar '+ (list fuzz fuzz fuzz) pt))
		      (cons -4 "<,<,<")
		      (cons 10
			    (mapcar '+ (list fuzz fuzz fuzz) pt))
		      (cons -4 "or>"))))
Олег (jr.) вне форума  
 
Непрочитано 12.02.2013, 22:04
#12
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Олег (jr.), спасибо, сработало. Это ж как надо начать думать, чтоб до такого додуматься?
Интересно, почему не работает вариант Полещука?
skkkk вне форума  
 
Непрочитано 12.02.2013, 23:09
#13
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от skkkk Посмотреть сообщение
Это ж как надо начать думать, чтоб до такого додуматься
Я не думаю мне нечем
Олег (jr.) вне форума  
 
Непрочитано 13.02.2013, 10:37
#14
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
Интересно, почему не работает вариант Полещука?
http://forum.dwg.ru/showpost.php?p=460622&postcount=10
Do$ вне форума  
 
Непрочитано 17.02.2013, 18:29
#15
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Олег (jr.), а как в твоем варианте выбрать ТОЛЬКО полилинии, проходящие через точку pt?
Do$, не пойму, причем тут погрешность и числа с плавающей запятой? В варианте Полещука выбирается тот примитив, который является самым новым в порядке прорисовки, т.е. самый "верхний". Если его убрать за объекты, выбирается другой примитив, проходящий через эту точку.
skkkk вне форума  
 
Непрочитано 18.02.2013, 08:57
1 | #16
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
(sslength (ssget "_C" pt pt))
Ну а дальше из набора выбирай полилинии
__________________
Никогда не спорьте с дураками - они опустят Вас до своего уровня и победят за счет опыта
CB вне форума  
 
Непрочитано 18.02.2013, 11:09
#17
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
Do$, не пойму, причем тут погрешность и числа с плавающей запятой?
Я предположил, что из-за этого не выбирается. Получается, что оказался не прав.
Do$ вне форума  
 
Непрочитано 18.02.2013, 15:56
#18
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от CB Посмотреть сообщение
Код:
[Выделить все]
(sslength (ssget "_C" pt pt))
Ну а дальше из набора выбирай полилинии
Ну тогда уж (хотя это всё извращение):
Код:
[Выделить все]
 (setq delta 1e-4) ;; устанавливаем некую погрешность
(ssget "_C" (mapcar '- pt (list delta delta delta)) (mapcar '+ pt (list delta delta delta)) '(0 . "*POLYLINE"))
И точка должна быть видна на экране.
Александр Ривилис вне форума  
 
Непрочитано 18.02.2013, 17:13
#19
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от skkkk Посмотреть сообщение
Олег (jr.), а как в твоем варианте выбрать ТОЛЬКО полилинии, проходящие через точку pt?
Так должно выбирать что нужно
Код:
[Выделить все]
(setq pt (list 0 0 0) fuzz 0.001); <-- set epsilon to your suit,eg 0.000001 etc
(setq ss (ssget	"_X"
		(list (cons -4 "<and")
		      (cons 0 "lwpolyline")
		      (cons -4 "<or")
		      (cons -4 ">,>,>")
		      (cons 10
			    (mapcar '- (list fuzz fuzz fuzz) pt))
		      (cons -4 "<,<,<")
		      (cons 10
			    (mapcar '+ (list fuzz fuzz fuzz) pt))
		      (cons -4 "or>")
		      (cons -4 "and>"))))

Последний раз редактировалось Олег (jr.), 18.02.2013 в 20:45.
Олег (jr.) вне форума  
 
Непрочитано 18.02.2013, 19:23
1 | #20
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Так должно выбирать что нужно
Не должно. Так в лучшем случае будет выбирать если точка рядом с вершиной полилинии. Это если не считать ошибку в знаках у mapcar.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Фильтр команды "ssget"



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего нужны фильтры слоев?Как ими пользоваться? Aysulu AutoCAD 43 17.04.2019 10:59
Изменение полей (fields) RomanM AutoCAD 20 24.08.2016 22:39
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Отображение GRID при выполнении команды PAN REALTIME MAX-MAX AutoCAD 10 29.06.2009 18:43
Прозрачные команды Vova AutoCAD 17 21.06.2006 05:33