博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ObjectARX_选择集
阅读量:6904 次
发布时间:2019-06-27

本文共 3933 字,大约阅读时间需要 13 分钟。

hot3.png

acedEntSel 函数只能选择一个实体,有时候不能满足用户的需求,而选择集允许用户同时选择多个图形对象,也提供了丰富的手段用来选择符合特定条件的实体。

头文件<acedads.h>

(1)创建选择集

acedSSGet 函数的定义形式为:

int acedSSGet (const char *str,const void *pt1,const void *pt2,const struct resbuf *entmask,ads_name ss);

第一个参数:str:创建选择集的方法; 第二个参数:pt1:第三个参数:pt2:为相关的创建方式提供了点参数,如果不需要指定可以输入 NULL 作为参数值;第四个参数:entmask:选择实体的过滤条件;第五个参数:ss:选择集的图元名。

头文件:<acedads.h>

具体用法如例:

//图形中所有的圆struct resbuf rb;char sbuf[10];  // 存储字符串的缓冲区ads_name ssname;rb.restype = 0;  // 实体名strcpy(sbuf, "CIRCLE");rb.resval.rstring = sbuf;rb.rbnext = NULL; // 不需要设置其他的属性acedSSGet("X", NULL, NULL, &rb, ssname);acedSSFree(ssname);// 选择0图层上的所有直线struct resbuf *rb; // 结果缓冲区链表 ads_name ssname; rb = acutBuildList(RTDXF0, "LINE", 8, "0",RTNONE);acedSSGet("X", NULL, NULL, rb, ssname);acutRelRb(rb);//释放结果缓存区链表acedSSFree(ssname);

结果缓冲区resbuf:

struct resbuf {  struct resbuf * rbnext;//链表指针  short restype;//数据类型码或XDF组码  union ads_u_val resval;数据};

第二个参数:restype:数据类型码

联合体ads_u_val:

union ads_u_val {  ads_real rreal;  ads_real rpoint[3];  short rint;  ACHAR * rstring;  __int64 rlname[2];  __int64 mnLongPtr;  long rlong;  __int64 mnInt64;  struct ads_binary rbinary;  unsigned char ihandle[8];};

acutBuildList(创建结果缓存区链表)的参数成对组成,第一个参数标识过滤器的类型(例如对象) ,第二个参数指定要过滤的值(例如圆) 。(0:对象类型(字符串) ,例如“Line” 、 “Arc”等(在标准的 DXF 组码中,0 用于表示实体类型,但是在 acutBuildList 函数中 0 也可以用于表示结束链表,因此用 RTDXF0 来代替 0。)。1:图元的主文字值(字符串) ,例如文字、属性的字符串内容。2:对象名(字符串) ,例如属性标记、块名等。8:图层名 。10:主要点(直线或文字图元的起点、圆的圆心等) ,用三个实数的数组来表示三维点。60:对象可见性(整数) ,0 表示可见,1 表示不可见。62: 颜色编号 (整数) , 可取 0~256 的整数值, 其中 0 表示 ByBlock, 256 表示 ByLayer。67:模型/图纸空间标识符(整数) ,0(默认)表示在模型空间,1 表示在图纸空间。1000:扩展数据中的 ASCII 字符串,最多可以包含 255 个字节。1001:扩展数据的注册应用程序名,最多可以包含 31 个字节的 ASCII 字符串。1003:扩展数据图层名。)

选择集的具体用法:

void ZffCHAP5SelectEnt(){ads_point pt1, pt2, pt3, pt4;struct resbuf *pointlist; // 结果缓冲区链表ads_name ssname;  // 选择集的图元名pt1[X] = pt1[Y] = pt1[Z] = 0.0;pt2[X] = pt2[Y] = 5.0; pt2[Z] = 0.0;// 如果已经选择到了实体,就获得当前的PICKFIRST选择集// 否则提示用户选择实体acedSSGet(NULL, NULL, NULL, NULL, ssname);// 如果存在,就获得当前的PickFirst选择集acedSSGet("I", NULL, NULL, NULL, ssname);// 选择最近创建的选择集acedSSGet("P", NULL, NULL, NULL, ssname);// 选择最后一次创建的可见实体acedSSGet("L", NULL, NULL, NULL, ssname);// 选择通过点(5,5)的所有实体acedSSGet(NULL, pt2, NULL, NULL, ssname);// 选择位于角点(0,0)和(5,5)组成的窗口内所有的实体acedSSGet("W", pt1, pt2, NULL, ssname);// 选择被指定的多边形包围的所有实体pt3[X] = 10.0;pt3[Y] = 5.0; pt3[Z] = 0.0;pt4[X] = 5.0; pt4[Y] = pt4[Z] = 0.0;pointlist = acutBuildList(RTPOINT, pt1, RTPOINT, pt2,RTPOINT, pt3, RTPOINT, pt4, 0);acedSSGet("WP", pointlist, NULL, NULL, ssname);// 选择与角点(0,0)和(5,5)组成的区域相交的所有实体acedSSGet("C", pt1, pt2, NULL, ssname);// 选择与指定多边形区域相交的所有实体acedSSGet("CP", pointlist, NULL, NULL, ssname);acutRelRb(pointlist);// 选择与选择栏相交的所有对象pt4[Y] = 15.0; pt4[Z] = 0.0;pointlist = acutBuildList(RTPOINT, pt1, RTPOINT, pt2,RTPOINT, pt3, RTPOINT, pt4, 0);acedSSGet("F", pointlist, NULL, NULL, ssname);acutRelRb(pointlist);acedSSFree(ssname);}

(2)添加到已经存在的选择集

acedSSAdd 函数的定义形式为:

int acedSSAdd(const ads_name ename, const ads_name sname, ads_name result);

第一个参数:ename:要添加到选择集的实体的图元名;第二个参数:sname:选择集的图元名;第三个参数:result:被创建或者更新的选择集。(1.如果 ename 和 sname 都是空指针,则创建一个未包含任何成员的选择集。2.如果 ename 指向一个有效的实体,但 sname 是空指针,则创建一个选择集,该选择集仅包含一个成员 ename。3.如果 ename 指向有效的实体,且 sname 指向有效的选择集,则将 ename 所指向的实体添加到 sname 所指向的选择集中。)

(3)删除选择集

acedSSDel 函数的定义形式为:

int acedSSDel(const ads_name ename, const ads_name ss);

第一个参数:ename:要从选择集中删除的实体;第二个参数:所操作的选择集。

(4)获取选择集中实体个数

acedSSLength函数的定义形式为:

int acedSSLength(const ads_name sname, long * len);

第一个参数:sname:选择集的图元名,第二个参数:len:选择集中含有的实体个数.

(5)获取选择集特定位置的实体

acedSSName函数的定义形式为:

int acedSSName(const ads_name ss, long i, ads_name entres);

第一个参数:ss:选择集的图元名,第二个参数:i:实体在选择集中的位置,第三个参数:entres:实体名

具体用法如例:

ads_name ssname;ads_name ent;long len = 0;//获取选择集acedSSGet(NULL,NULL,NULL,NULL,ssname);//获取选择集的长度if(RTNORM == acedSSLength(ssname,&len)){//遍历选择集for(int i = 0; i < len; i++){//获取实体名acedSSName(ssname,i,ent);//其他处理ent函数}}//释放选择集acedSSFree(ssname);

 

转载于:https://my.oschina.net/u/2930533/blog/1619810

你可能感兴趣的文章
JavaScript知识架构学习路径(一)- 变量篇
查看>>
正则表达式
查看>>
20050425:公测啊,晚点再说
查看>>
Windows Azure媒体服务使得伦敦奥运会的云端传输成为可能
查看>>
错误:媒体集有 2 个媒体簇,但只提供了 1 个 sql2005 备份错误。
查看>>
软件运行过慢?系统打开特别慢?连系统都装不了?可能是硬盘坏了
查看>>
Mongo的安全验证
查看>>
thinkphp Class 'PDO' not found 错误
查看>>
(实用篇)PHP ftp上传文件操作类
查看>>
Lucene5.x 中文 同义词
查看>>
ASCII码、Unicode码 转中文
查看>>
矩阵的相似对角化
查看>>
java常用类--与用户互动
查看>>
innobackupex 备份数据搭建 MySQL Slave
查看>>
CentOS 6.5安装KVM虚拟化
查看>>
centos6构建XFS文件系统
查看>>
服务器硬件监控之Check_openmanage
查看>>
获取免费Windows Store开发者账户方法
查看>>
程序员杂记系列
查看>>
参加“北向峰会”后对SOC之感言
查看>>