不打开实体取得实体的类型和图层 - 精华帖集合
www.dimcax.com
不打开实体取得实体的类型和图层
, , ,
以下代码可以不打开实体,而是通过实体的dxf码判断实体的类型和图层,
用来来判断用户选择的实体是否是要求的类型,并且在要求的图层.
在arx里面 resbuf 用处很广,呵呵,下次给大家演示通过resbuf建立选择集
其中函数 struct resbuf *dxf( struct resbuf *edata, short dxf_code )
用来取得 resbuf 链表中,dxf码为指定值的项
// 选取"jmd"图层类型为"arc,polyline,circle"的实体,选择结果不是,则提示退出
void test()
{
ads_name ent;
if ( pickentity( _t("\n选择要拉直的2d曲线: "), _t("arc,polyline,circle"), _t("jmd"), ent ) )
{
dosomething();
}
}
int pickentity( tchar *promptstr, tchar *enttype, tchar *entlayer, ads_name resent )
{
int f1=0,f2=0;
ads_point pt;
struct resbuf *edata, *rb;
while( ads_entsel( promptstr, resent, pt ) == rtnorm )
{
edata = ads_entget( resent );
if ( enttype != null && enttype[0] != '\0' )
{
rb = dxf( edata, 0 );
f1 = iskeywordinstring( rb->resval.rstring, enttype );
}
if ( entlayer != null && entlayer[0] != '\0' )
{
rb = dxf( edata, 8 );
f2 = iskeywordinstring( rb->resval.rstring, entlayer );
}
ads_relrb( edata );
if ( !f1 && !f2 )
return 1;
else
ads_printf(_t( "\n\n***** 请重新选择物体 *****" ));
}
return 0;
}
int iskeywordinstring( tchar *keyword, tchar *inputstr )
{
tchar *pc1, *pc2;
int fret = 1;
pc1 = pc2 = inputstr;
while( *pc1 != '\0' && fret != 0 )
{
while( *pc2 != ',' && *pc2 != ';' && *pc2 != '|' && *pc2 != ' ' && *pc2 != '\0' )
pc2++;
fret = memcmp( keyword, pc1, (pc2-pc1)*sizeof(tchar) );
if ( *pc2 != '\0' )
pc2 = pc2 + 1;
pc1 = pc2;
}
return fret;
}
struct resbuf *dxf( struct resbuf *edata, short dxf_code )
{
struct resbuf *p;
p = edata;
while( p != null )
{
if ( p->restype == dxf_code )
break;
p = p->rbnext;
}
return p;
}
复制代码
虽然我不懂c++
我也来顶一顶,支持一下忽悠兄
支持一下忽悠兄
楼主只是利用ads的一套函数来实现此功能。
是一种思路,但是这样编程就体现不出arx的优势了
支持创新,但更要体现arx优势
用迭代器比较好
为了未来