![]() |
【转帖】不打开实体取得实体的类型和图层 - 精华帖集合
不打开实体取得实体的类型和图层 - 精华帖集合
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优势 用迭代器比较好 为了未来 |
所有的时间均为北京时间。 现在的时间是 02:17 PM. |