Функции Имени Примитива
Чтобы работать на примитиве, ObjectARX-приложение должно получить его имя для использования в последующем, вызывает{*звонит*} к функциям данных примитива или функциям набора выбора.
Функции acedEntSel (), acedNEntSelP (), и acedNEntSel () возвращение не только имя примитива но и дополнительная информация для использования приложения. Функции entsel требуют пользователей AutoCAD (или приложение) чтобы выбрать примитив, определяя точку на графическом экране; все другие функции имени примитива могут восстановить{*отыскивать*} примитив, даже если это не видимо на экране или находится на закрепляемом уровне. Подобно acedGetxxx () функции, Вы можете иметь acedEntSel (), acedNEntSelP (), и acedNEntSel () возвращают ключевое слово вместо точки, предшествуя им с запросом к acedInitGet ().
Если запрос к acedEntSel (), acedNEntSelP (), или acedNEntSel () возвращает RTERROR, и Вы хотите знать, определил ли пользователь точку, которая не имела никакого примитива или нажал ли пользователь ВОЗВРАЩЕНИЕ, Вы можете осматривать значение ERRNO системной переменной. Если пользователь определил, пустая точка, ERRNO равняется 7 (OL_ENTSELPICK). Если пользователь нажал ВОЗВРАЩЕНИЕ, ERRNO равняется 52 (OL_ENTSELNULL). (Вы можете использовать символические названия{*имена*}, если ваша программа включает файл заголовка.)
ПРИМЕЧАНИЕ Вы должно осмотреть ERRNO немедленно после acedEntSel (), acedNEntSelP (), или acedNEntSel () возвращения. Последующий запрос ObjectARX может изменять{*заменять*} значение ERRNO.
AcdbEntNext () функция восстанавливает{*отыскивает*} названия{*имена*} примитива последовательно. Если его первый параметр - NULL, это возвращает имя первого примитива в базе данных рисунка; если его первый параметр - имя примитива в текущем рисунке, это возвращает имя преуспевающего примитива.
Следующий типовой кодовый фрагмент иллюстрирует, как acedSSAdd () может использоваться вместе с acdbEntNext () чтобы создать наборы выбора и добавлять членов к существующему набору.
Ads_name ss, e1, e2;
// Set e1 to the name of first entity.
if (acdbEntNext(NULL, e1) != RTNORM) {
acdbFail("No entities in drawing\n");
return BAD;
}
// Set ss to a null selection set.
acedSSAdd(NULL, NULL, ss);
// Return the selection set ss with entity name e1 added.
if (acedSSAdd(e1, ss, ss) != RTNORM) {
acdbFail("Unable to add entity to selection set\n");
return BAD;
}
// Get the entity following e1.
if (acdbEntNext(e1, e2) != RTNORM) {
acdbFail("Not enough entities in drawing\n");
return BAD;
}
// Add e2 to selection set ss
if (acedSSAdd(e2, ss, ss) != RTNORM) {
acdbFail("Unable to add entity to selection set\n");
return BAD;
}
Следующий типовой кодовый фрагмент использует acdbEntNext () чтобы “идти” через базу данных, один примитив одновременно.
ads_name ent0, ent1;
struct resbuf *entdata;
if (acdbEntNext(NULL, ent0) != RTNORM) {
acdbFail("Drawing is empty\n");
return BAD;
}
do {
// Get entity’s definition data.
entdata = acdbEntGet(ent0);
if (entdata == NULL) {
acdbFail("Failed to get entity\n");
return BAD;
}
.
. // Process new entity.
.
if (acedUsrBrk() == TRUE) {
acdbFail("User break\n");
return BAD;
}
acutRelRb(entdata); // Release the list.
ads_name_set(ent0, ent1); // Bump the name.
} while (acdbEntNext(ent1, ent0) == RTNORM);
ПРИМЕЧАНИЕ Вы можете также пройти базу данных, “наталкиваясь” одиночная переменная в acdbEntNext () запрос (типа acdbEntNext (ent0, ent0)), но если Вы делаете, значение переменной, больше не определено однажды цикл концы.
AcdbEntLast () функция отыскивает имя последнего примитива в базе данных. Последний примитив - наиболее недавно созданный основной примитив, так что acdbEntLast () может быть вызван, чтобы получить имя примитива, который только что был создан посредством запроса к acedCommand (), acedCmd (), или acdbEntMake ().
AcedEntSel () функция запрашивает пользователя AutoCAD выбирать примитив, определяя точку на графическом экране; acedEntSel () возвращает, и имя примитива и значение указанной точки. Некоторые операции примитива требуют знания точки, которой примитив был выбран. Примеры от набора существующих команд AutoCAD включают ПЕРЕРЫВ, ВЫРЕЗКУ, ПРОСТИРАЮТСЯ, и OSNAP.