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



         

DXF Коды Группы - часть 2


#define ET_NORM 1 // Normal entity

#define ET_TBL 2 // Table

#define ET_VPORT 3 // Table numbers

#define ET_LTYPE 4

#define ET_LAYER 5

#define ET_STYLE 6

#define ET_VIEW 7

#define ET_UCS 8

#define ET_BLOCK 9

// Get basic C-language type from AutoCAD DXF group code (RTREAL,

// RTANG are doubles, RTPOINT double[2], RT3DPOINT double[3],

// RTENAME long[2]). The etype argument is one of the ET_

// definitions.

//

// Returns RTNONE if grpcode isn’t one of the known group codes.

// Also, sets "inxdata" argument to TRUE if DXF group is in XDATA.

short dxftype(short grpcode, short etype, int *inxdata)

{

short rbtype = RTNONE;

*inxdata = FALSE;

if (grpcode >= 1000) { // Extended data (XDATA) groups

*inxdata = TRUE;

if (grpcode == 1071)

rbtype = RTLONG; // Special XDATA case

else

grpcode %= 1000; // All other XDATA groups match.

} // regular DXF code ranges

if (grpcode <= 49) {

if (grpcode >= 20) // 20 to 49

rbtype = RTREAL;

else if (grpcode >= 10) { // 10 to 19

if (etype == ET_VIEW) // Special table cases

rbtype = RTPOINT;

else if (etype == ET_VPORT && grpcode <= 15)

rbtype = RTPOINT;

else // Normal point

rbtype = RT3DPOINT; // 10: start point, 11: endpoint

}

else if (grpcode >= 0) // 0 to 9

rbtype = RTSTR; // Group 1004 in XDATA is binary

else if (grpcode >= -2)

// -1 = start of normal entity -2 = sequence end, etc.

rbtype = RTENAME;

else if (grpcode == -3)

rbtype = RTSHORT; // Extended data (XDATA) sentinel

}

else {

if (grpcode <= 59) // 50 to 59

rbtype = RTANG; // double

else if (grpcode <= 79) // 60 to 79

rbtype = RTSHORT;

else if (grpcode < 210)

;

else if (grpcode <= 239) // 210 to 239

rbtype = RT3DPOINT;

else if (grpcode == 999) // Comment

rbtype = RTSTR;

}

return rbtype;

}

Приложение получает список буфера результата (вызвал rb), представляя вход в таблице идентификаторов области просмотра, и следующая инструкция C вызывает dxftype ():

Ctype = dxftype (rb-

> restype, ET_VPORT, &inxdata);

Предположим, что rb- >restype равняется 10. Тогда dxftype() возвращает RTPOINT, указывая, что примитив является двумерной точкой, чьи координаты (типа ads_real) находятся в rb->resval.rpoint [X] и rb->resval.rpoint [Y].




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