Тема: Фильтрация в наборе

Привет всем!
Как выбрать из чертежа (например все линии)
находящиеся на разных слоях используя
acedSSGet() функцию. Используя связный список
struct resbuf для построения фильтра ничего не
дает, но для одного layera все работает нормально!
Стоит добавить еще resbuf c rb.restype = 8
возвращается код ошибки.
Может быть кто-то встречался с подобной
проблемой?
Спасибо

Re: Фильтрация в наборе

Выбрать все отрезки на слое "ABC" и "DFE"

struct resbuf eb1;
ads_name ss;
eb1 = ads_buildlist(
          -4, "<and",
               RTDXF0, "LINE",
               -4, "<or",
                    8, "ABC",
                    8, "DFE",
               -4, "or>",
          -4, "and>",
          0);
ads_ssget("_X", NULL, NULL, &eb1, ss);

Re: Фильтрация в наборе

Уважаемый Игорь!
Я Вам очень благодарен за
толковый совет!
Спасибо!
BSH

Re: Фильтрация в наборе

Conditional Filtering при помощи группы "-4" - вещь хорошая. Иногда помогает очень сильно, но в подобном примере (выбрать все отрезки на слое "HOUSE" и на всех слоях, начинающихся со слова "STREET") может проще будет следующее (без контроля ошибок):

struct resbuf *psRB;
ads_name enSS;
psRB = ads_buildlist(RTDXF0, "LINE", 8, "HOUSE,STREET*", RTNONE);
ads_ssget("_X", NULL, NULL, psRB, enSS);
ads_ssfree(psRB);

При этом хочу тоже выразить Игорю респект, т.к. даже очень многие профи в ADS не знают о существовании Conditional Filtering в ads_ssget (нет у них времени на чтение :)
Гена

Re: Фильтрация в наборе

> Гена,
прежде чем критиковать в чем-то безымянных профи надо самому быть внимательнее. Функция ads_ssfree не предназначена для освобождения памяти, отведенной под список. Для этого используется ads_relrb.