Доступ к таблицам идентификаторов
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.
}
}