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



         

Сложные примитивы


Сложный примитив (ломаная линия или блок) должен быть создан множителем, вызывает к acdbEntMake(), используя отдельный запрос каждый подпримитив. Когда acdbEntMake() сначала получает начальный компонент для сложного примитива, это создает временный файл,  чтобы собрать данные определения (и расширенные данные, если есть). Каждый последующий acdbEntMake() запрос добавляет новый подпримитив к файлу. Когда определение сложного примитива закончено (то есть когда acdbEntMake() получает соответствующий Seqend или Endblk подпримитив), примитив проверен для последовательности, и если допустимо, это добавлено к рисунку.

Файл удален, когда сложный примитив закончен или когда его создание отменено.

Следующий пример содержит пять, вызывает acdbEntMake () которые создают одиночный сложный примитив, ломаную линию. Ломаная линия имеет linetype ПОДЧЕРКНУТОГО ШТРИХОВОЙ ЛИНИЕЙ и цвет СИНИХ. Это имеет три вершина, расположенные в (1,1,0) координатах, (4,6,0), и (3,2,0). Все другие необязательные данные определения принимают значения по умолчанию.

int status;

struct resbuf *entlist, result;

ads_point newpt;

entlist = acutBuildList(

RTDXF0, "POLYLINE",// Entity type

62, 5, // Color (blue)

6, "dashed",// Linetype

66, 1, // Vertices follow.

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) {

acutPrintf ("%d",status);

acedGetVar ("ERRNO", &result);

acutPrintf ("ERRNO == %d, result.resval.rint);

acdbFail("Unable to start polyline\n");

return BAD;

}

newpt[X] = 1.0;

newpt[Y] = 1.0;

newpt[Z] = 0.0; // The polyline is planar

entlist = acutBuildList(

RTDXF0, "VERTEX", // Entity type

62, 5, // Color (blue)

6, "dashed", // Linetype

10, newpt, // Start point

0);

if (entlist == NULL) {

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




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