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

Доступ к таблицам идентификаторов


AcdbTblNext() функция последовательно просматривает входы таблицы идентификаторов, и acdbTblSearch () функция возвращает определенные входы. Названия{*имена*} Таблицы определены строками. Допустимыеимена - “LAYER”, “LTYPE”, “VIEW”, “STYLE”, “BLOCK”, “UCS”, “VPORT”, and “APPID”. Обе из этих функций возвращают входы как списки буфера результата с кодами группы DXF.

Первый запрос к acdbTblNext() возвращает первый вход в указанной таблице.

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

В следующем примере, функция getblock() возвращает первый блок (если любой) в текущем рисунке, и вызывает printdxf() функцией, чтобы отобразить содержание того блока в формате списка.

void getblock()

{

struct resbuf *bl, *rb;

bl = acdbTblNext("BLOCK", 1); // First entry

acutPrintf("\nResults from getblock():\n");

// Print items in the list as "assoc" items.

for (rb = bl; rb != NULL; rb = rb->rbnext)

printdxf(rb);

// Release the acdbTblNext list.



acutRelRb(bl);

}

Входы, отысканные в таблице БЛОКОВ, содержат группа  -2, которая содержит имя первого примитива на блочном определении. В рисунке к одиночному блоку по имени ПОЛЕ, запрос к getblock () печатает следующий (значение имени изменяется от сеанса до сеанса):

Результаты от getblock ():

(0 . "BLOCK")

(2 . "BOX")

(70 . 0)

(10 9.0 2.0 0.0)

(-2 . <Entity name: 40000126>)

Первый параметр к acdbTblSearch () - строка, которая называет таблицу, но второй параметр - строка, которая называет специфический символ в таблице. Если символ найден, acdbTblSearch () возвращает его данные. Эта функция имеет третий параметр, setnext, который может использоваться, чтобы координировать операции с acdbTblNext (). Если setnext нулевой, acdbTblSearch () запрос не имеет никакого эффекта на acdbTblNext (), но если setnext отличный от нуля, следующий запрос к acdbTblNext () возвращает вход таблицы, который следует за входом, найденным acdbTblSearch ().


Setnext опция особенно полезна, когда имеющий дело с VPORT таблицей идентификаторов, потому что все области просмотра в специфической конфигурации области просмотра имеют то же самое имя (типа *ACTIVE).

Имейте в виду, что, если к  VPORT таблице идентификаторов обращаются, когда TILEMODE выключен, изменения{*замены*} не имеют никакого видимого эффекта, пока TILEMODE не поворачивает обратно на. (TILEMODE установлен или командой SETVAR или,  вводя ее имя непосредственно.) Не путают VPORT таблицу идентификаторов с примитивами области просмотра.

Чтобы находить и обрабатывать каждую область просмотра в конфигурации, названной 4VIEW, Вы могли бы использовать следующий код:

struct resbuf *v, *rb;

v = acdbTblSearch("VPORT", "4VIEW", 1);

while (v != NULL} {

for (rb = v; rb != NULL; rb = rb->rbnext)

if (rb->restype == 2)

if (strcmp(rb->resval.rstring, "4VIEW") == 0) {

.// Process the VPORT entry

.

.

acutRelRb(v);

// Get the next table entry.

v = acdbTblNext("VPORT", 0);

} else {

acutRelRb(v);

v = NULL; // Break out of the while loop.

break; // Break out of the for loop.

}

}


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