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


Анонимные Блоки - часть 2


entlist = acutBuildList(

RTDXF0, "INSERT",

2, newblkname, // From acedGetInput

10, basept,

0 );

if (entlist == NULL) {

acdbFail("Unable to create result buffer list\n");

return BAD;

}

status = acdbEntMake(entlist);

acutRelRb(entlist); // Release acdbEntMake buffer.

if (status != RTNORM) {

acdbFail("Unable to insert anonymous block\n");

return BAD;

}

 

Функции Данных Примитива и Графический Экран

Изменяется к рисунку, сделанному функциями данных примитива,  отражен на графическом экране, при условии, что удаляемый примитив, восстановлен, изменяется, или сделан, находится в области и находится на уровне, который является в настоящее время видимым. Имеется одно исключение: когда acdbEntMod() изменяет подпримитив, это не модифицирует изображение сложного примитива. Причина должна быть ясна. Если, например, приложение должно было изменить 100 вершин сложной ломаной линии с 100 выполняемый с помощью итераций, вызывает acdbEntMod(), время, требуемое, чтобы повторно вычислять и восстановить изображение полной ломаной линии, поскольку каждая вершина была изменена, будет неприемлемо медленно. Вместо этого, приложение может исполнять ряд модификаций подпримитива и затем восстанавливать изображение полного примитива с одиночным запросом к acdbEntUpd () функция.

В следующем примере, первый примитив в текущем рисунке - ломаная линия с несколькими вершиной. Следующий код изменяет вторую вершину ломаной линии и затем восстанавливает его отображаемое изображение.

 

ads_name e1, e2;

struct resbuf *ed, *cb;

if (acdbEntNext(NULL, e1) != RTNORM) {

acutPrintf("\nNo entities found. Empty drawing.");

return BAD;

}

acdbEntNext(e1, e2);

if ((ed = acdbEntGet(e2)) != NULL) {

for (cb = ed; cb != NULL; cb = cb->rbnext)

if (cb->restype == 10) { // Start point DXF code

cb->resval.rpoint[X] = 1.0;// Change coordinates.

cb->resval.rpoint[Y] = 2.0;

if (acdbEntMod(ed) != RTNORM) { // Move vertex.

acutPrintf("\nBad vertex modification.");

acutRelRb(ed);

return BAD;

} else {

acdbEntUpd(e1); // Regen the polyline.

acutRelRb(ed);

return GOOD; // Indicate success.

}

}

acutRelRb(ed);

}

return BAD; // Indicate failure.

 

Параметр acdbEntUpd() может определить или основной примитив или - tity; в любом случае, acdbEntUpd() восстанавливает полный примитив. Хотя его первичное использование - для сложных примитивов, acdbEntUpd() может восстанавливать любой примитив в текущем рисунке.

 

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

 




Начало  Назад  Вперед



Книжный магазин