ObjectARX, AutoCAD. Среда программирования библиотеки C++


         

Списки Фильтра Набора Выбора - часть 2


Если entmask определяет больше чем одно свойство, примитив включен в выбор, устанавливают только, если это соответствует всем указанным условиям{*состояниям*}, как показано в следующем примере:

eb3.restype = 62; // Entity color

eb3.resval.rint = 1; // Request red entities.

eb3.rbnext = NULL; // Last property in list

eb1.rbnext = &eb2; // Add the two properties

eb2.rbnext = &eb3; // to form a list.

// Retrieve all red circles on layer FLOOR3.

acedSSGet("X", NULL, NULL, &eb1, ssname1);

Примитив проверен против всех полей, указанных в списке фильтрации, если список не содержит относительные или условные операторы, как описано в “ Относительные Испытания ” на странице 207 и “ Фильтрация Условного выражения ” на странице 208.

AcedSSGet () функциональные возвращения RTERROR, если никакие примитивы в базе данных не соответствуют{*согласовывают*} указанным критериям фильтрации.

Предыдущий acedSSGet () примеры используют опцию “X”, которая просматривает полную базу данных рисунка. Если списки фильтра используются вместе с другими опциями (выбор пользователя, окно, и т.д), фильтр применяется только к примитивам, первоначально выбранным.

Следующее - пример фильтрации выбранных пользователем примитивов.

eb1.restype = 0; // Entity type group

strcpy(sbuf1, "TEXT");

eb1.resval.rstring = sbuf1; // Entity type is text.

eb1.rbnext = NULL;

// Ask the user to generally select entities, but include

// only text entities in the selection set returned.

acedSSGet(NULL, NULL, NULL, &eb1, ssname1);

Следующий пример демонстрирует фильтрацию предыдущего набора выборов.

eb1.restype = 0; // Entity type group

strcpy(sbuf1, "LINE");

eb1.resval.rstring = sbuf1; // Entity type is line.

eb1.rbnext = NULL;

// Select all the lines in the previously created selection set.

acedSSGet("P", NULL, NULL, &eb1, ssname1);

eb1.restype = 8; // Layer

strcpy(sbuf1, "FLOOR9");

eb1.resval.rstring = sbuf1; // Layer name

eb1.rbnext = NULL;

// Select all the entities within the window that are also on the layer FLOOR9.

acedSSGet("W", pt1, pt2, &eb1, ssname1);

ОБРАТИТЕ ВНИМАНИЕ, что  значение некоторых кодов группы может отличиться от примитива до примитива, и не, все коды группы присутствуют во всех примитивах. Если специфический код группы определен в фильтре, примитивы, которые не содержат тот код группы,  исключены из наборов выбора, которые acedSSGet () возвращается.

 




Содержание  Назад  Вперед