Тема: Функция acedSSGet
Доброе время суток.
Подскажите (кто знает) как настроить множественный фильтр для функции acedSSGet (чтобы можно было выбирать объекты нескольких типов и.т.д.).
У меня не получается (работает только первый тип).
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → Функция acedSSGet
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Доброе время суток.
Подскажите (кто знает) как настроить множественный фильтр для функции acedSSGet (чтобы можно было выбирать объекты нескольких типов и.т.д.).
У меня не получается (работает только первый тип).
Там ведь, вроде, есть логичесгие <AND ... AND>.
В ARX использовать не приходилось, но в Lisp точно работало.
Не работает там AND
Там его даже писать то некуда.
В функцию передаётся указатель на структуру resbuf в которой и пишется фильтр, да вот множественный фильтр не создаётся...
... struct resbuf *pRb = NULL; pRb = acutBuildList( -4, "<or", RTDXF0, "LWPOLYLINE", RTDXF0, "TEXT", -4, "or>", RTNONE ); ads_name ss; acedSSGet ("X", NULL, NULL, pRb, ss); acutRelRb(pRb); long len; acedSSLength(ss, &len); ... // Plug & Play :) // должны выбраться все "облегченные" // полилинии и текст (обыкновенный)
Удачи!
Что-то тут ошибка закралась. :)
Должно быть
pRb = acutBuildList( -4, "<or" RTDXF0, "LWPOLYLINE", RTDXF0, "TEXT", -4, "or>", RTNONE );
Большое спасибо.
Всё работает, но я не понимаю, что это за магическая цифра -4 и почему именно такой порядок задания параметров (с использованием "<or") ?
И главное странно, что в описании acedSSGet вообще нет никаких связей с acutBuildList, и примеры там написаны совсем по-другому....
Для понимания магической цифры -4 (а также -1, -2, -3...) следует познакомиться с DXF Reference.
И ещё такой вопрос: как проверить текущее выделение (какую букву поставить в acedSSGet) ?
"X" - это выбор всех объектов с пропуском через фильтр, NULL - предлагает выбирать, а если я хочу использовать заранее выделенные объекты (но не предыдущее выделение)?
И вообще цифра -4 в acdb.h определена как kDxfUndo, а в category.h - PROPCAT_Position
И всё.
Как же это понимать ?
В Lispе для (ssget) есть вариант "I" (Implied selection) - выбор при помощи ручек.
Давайте разбираться по порядку. :)
> И главное странно, что в описании acedSSGet вообще нет
> никаких связей с acutBuildList
1. Для задания фильтра в acedSSGet используется список структур resbuf. Таким образом совершенно не важно каким способом этот список сформирован (при помощи acutBuildList или как-то иначе). Просто, на мой взгляд, для такого рода задач она подходит как нельзя лучше.
Давайте разбираться по порядку. (продолжение)
> И ещё такой вопрос: как проверить текущее выделение
> (какую букву поставить в acedSSGet) ?
2. К сожелению (насколько мне известно) данная функция не применяется для этой задачи, а жаль т.к. фильтровать объекты в ней достаточно удобно.
Здесь можно использовать функцию "acedSSGetFirst", которая возвращает списки выбранных и выбранных с "ручками" объектов.
Давайте разбираться по порядку. (продолжение)
> и примеры там написаны совсем по-другому....
Не очень понятно какие смотрелись примеры. :)
Если в ObjectARX Developer's Guide, то надо смотреть внимательнее :). Приведу пример
"For numeric groups (integers, real values, points, and vectors), you can specify other relations by including relational operators in the filter list. Relational operators are passed as a special -4 group, whose value is a string that indicates the test to be applied to the next group in the filter list. "
Удачи!!!
Ну с этим вроде всё понятно.
За разъяснения спасибо.
Вот только остался один невыясненный вопрос: есть ли у магической цифры -4 определение ? Я нашёл только kDxfUndo и PROPCAT_Position, но по смыслу оба эти определения не подходят к данной функции....
Если есть, то где конкретнее искать информацию ?
> есть
ли у магической цифры -4 определение
Кроме "kDxfUndo" я не видел. :)
Вообще со списками resbuf очень много "оговорок", "условностей" и "непонятностей"...
Ой! Как все это занимательно. :)
Занимательно это только тогда, когда знаешь все эти оговорки, условности и неприятности.
Где можно прочитать про эти оговорки, условности и неприятности ?
Откуда то ведь появилась эта цифра -4 и строки "<or" и "or>"...
???
Я ведь привел источник знаний и вдохновений
ObjectARX Developer's Guide. Другого не дано. Есть конечно (теперь уже) четыре книги на amazon.com. Но это уже совсем другая история...
В вышеприведённом источнике знаний я нашёл описание работы acutBuildList и многое другое, но вот о цифре -4 нет там ничего.
Как я понял -4 - это некий тип дынных (предшествующий управляющей строчке, например "<or"). Это из Lisp'а что ли ?
Книжки на amazon.ru мне не по карману.
> AndreyV
Андрей, в обсуждении этой темы есть цитата из руководства разработчика, где явно и недвусмысленно описывается способ использования "логических скобок" с кодом -4. См. сообщение > Michael (2003-07-25 09:44:51)
> AndreyV
...
>Книжки на amazon.ru мне не по карману.
Сейчас соберусь с мыслями и попробуем организовать тему. Т.к. все книги мне тоже не по карману. :) и :(
Да и те, что есть, были подарком.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → Функция acedSSGet
Форум работает на PunBB, при поддержке Informer Technologies, Inc