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

       

Функции Имени Примитива


Чтобы работать на примитиве, 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.


Содержание раздела