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


         

Списки AutoLISP - часть 2


ПРЕДУПРЕЖДЕНИЕ! AcutBuildList () функция не проверяет правильно построенный список AutoLISP. Например, если RTLB и коды RTLE не сбалансированы, эта ошибка не обнаружена. Если список хорошо не сформирован, AutoLISP может терпеть неудачу. Исключение кода RTLE, как гарантируют,  будет фатальной ошибкой.

Следующий типовой кодовый фрагмент создает вложенный список, чтобы возвратиться AutoLISP:

res_list = acutBuildList(

RTLB, // Begin sublist.

RTSHORT, 1,

RTSHORT, 2,

RTSHORT, 3,

RTLE, // End sublist.

RTSHORT, 4,

RTSHORT, 5,

0);

if (res_list == NULL) {

acdbFail("Couldn’t create list\n");

return BAD;

}

acedRetList(res_list);

acutRelRb(res_list);

The list that this example returns to AutoLISP has the following form:

((1 2 3) 4 5)

The following code fragment constructs a dotted pair to return to AutoLISP:

res_list = acutBuildList(

RTLB, // Begin dotted pair.

RTSTR, "Sample",

RTDOTE,

RTSTR, "Strings",

RTLE, // End dotted pair.

0);

if (res_list == NULL) {

acdbFail("Couldn’t create list\n");

return BAD;

}

acedRetList(res_list);

acutRelRb(res_list);

Список, который этот пример возвращается AutoLISP, имеет следующую форму:

((“Sample” . “Strings”))

ОБРАТИТЕ ВНИМАНИЕ В AutoLISP, кодах группы DXF связери точечных пар и значениях. В ObjectARX-приложении это ненужно, потому что единственный{*отдельный*} буфер результатов содержит, и код группы (в его restype поле) и значении (в его resval поле). В то время как ObjectARX обеспечивает коды типа строительства списка как удобство, большинство ObjectARX-приложений не требует их.




Содержание  Назад  Вперед