许多 ObjectARX 函数返回上表中定义的类型代码。但是,在处理实体的函数的结果中,该字段包含 DXF 组代码,这些代码在AutoCAD 自定义指南中进行了描述。例如,在实体列表中,afield of 10 表示一个点,而 aof 41 表示实际值。restyperestyperestype AutoCAD 图形由具有以下组件的数据库对象的结构化容器组成:
数据库对象是没有图层、线型、颜色或任何其他几何或图形属性的对象,实体派生自对象并具有几何和图形属性。 由于 DXF 代码始终小于 2,000,并且结果类型代码始终较大,因此应用程序可以轻松确定结果缓冲区列表何时包含结果值(例如,返回者)或包含实体定义数据(返回者和其他实体函数)。acedGetArgs()acdbEntGet() 下图显示了检索的圆的结果缓冲区格式:acdbEntGet() ![]() 下面的示例代码片段显示了一个函数,该函数传递了 DXF 组代码和关联的实体,并返回相应的类型代码。类型代码指示可以表示数据的数据类型:指示双精度浮点值,指示 an 等。实体的类型(例如,普通实体,如圆、块定义或表条目,如视口)由此函数附带的类型定义指示:dxftype()RTREALRT3DPOINTads_point #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;
}
应用程序获取结果缓冲区列表(调用),表示视区符号表中的条目,以及以下 C 语句调用:rbdxftype() ctype = dxftype(rb->restype, ET_VPORT, &inxdata); 假设等于 10。then返回,指示实体是一个二维点,其坐标(类型)为 inand。rb->restypedxftype()RTPOINTads_realrb->resval.rpoint[X]rb->resval.rpoint[Y] |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-10-29 09:41
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.