查看单个帖子
旧 2009-04-29, 05:05 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】[转帖]acedssget()函数用法详解 - 精华帖集合

[转帖]acedssget()函数用法详解 - 精华帖集合
www.dimcax.com
[转帖]acedssget()函数用法详解
, ,
大多数objectarx函数在处理选择集和实体时,都用名字来识别选择集或实体,该名字用一个长整型对来表示的,并对autocad来维护。在objectarx中,该名字的类型为ads_name。
在对选择集或实体进行操作之前,objectarx应用程序必须通过调用一个返回其名字的库函数来得到选择集或实体名字。
注意:选择集和实体的名字是不稳定的,它们仅仅在autocad当前图形工作时有效。如果从autocad退出或切换到另一个图形时其值就会丢失。
对于选择集来说,它也是与当前图有关联的,所以其名字的不稳定性不会影响选择集。但是对于实体就不一样了,因为它是被存放在图形数据库中的,名字的不稳定性要影响到对实体的操作。应用程序必须在下一次对同一图文件中的同一实体进行操作,可以使用实体句柄,重新获取其实体名。
选择集的处理
objectarx函数对选择集的处理类似于autolisp。acedssget()函数提供大多数创建选择集方法。它一般通过以下三种方法之一创建选择集:
(1)、提供让用户选择对象。
(2)、象交互式应用autocad一样,利用rickfirst定义、crossing、crossing polygon、fence、last、previous、window、window polygon等匹配条件的方式来选择实体对象,也可以通过指定一个单独点或fence点来选择。
(3)、使用一系列属性和条件筛选当前图数据库来选择实体对象。
该函数原型为:
int acedssget(const chat *str,const void *pt1,const void *pt2,const struct resbuf *entmask,ads_name ss);
acedssget()的第一个参数str,说明所使用的选择条件,如下:
对acedssget()的补充函数是acedssfree(),它能在应用程序用完选择集后释放选择集。选择集是按名字来被使用的。对上面程序段中定义的ads_name,在这里使用为:
acedssfree(ssname);
注意:autocad不能同时打开多于128个选择集,包括运行中的objectarx和autolisp应用程序打开选择集的总和。在不同的系统有可能有所不同。如果超过上限,autocad拒绝创建选择集。因此在不用选择集时,应尽快用acedssfree()释放。
选择集筛选表
当acedssget()函数的entmask参数明确记录了实体的范围值列表时,acedssget()扫描被选择的实体,同时建立一个包含主实体名的选择集,这些实体与筛选条件相匹配。比如,使用这种方法,用户可以得到一个给定的选择集,这个选择集包括给定的层、类型、颜色的所有实体。
筛选表可以与任何的选择项联合使用。如果用“x”选择方式,意味着建立一个仅使用筛选表的选择集。在autocad以前的版本中,如果用“x”选项,acedssget()将扫描全部图形数据库。
注意:要是仅仅筛选表指定为“x”,而参数entmask是nulll,则acedssget()选择所有在数据库中的实体。
参数entmask必须是一个结果缓冲区表。每一个缓冲区指定一个检查参数和匹配的值;缓冲区的restype段是一个dxf组码,它指定要查询的参数的种类,而缓冲区的restype域指定要匹配的值。下面是相应的例子:
筛选扩展数据
扩展数据是字符串、数据、三维点、距离、层名,或者是其他附加在对象上得数据,特别是由外部应用程序附加到对象上得数据。
扩展数据大小为16kb。
通过指定,我们可以为一个特殊的应用程序使用-3组码在筛选表中指定扩展数据来检索扩展数据。例如:,函数acedssget()返回一个以指定名字注册的带扩展数据的实体。acedssget()不检索每个扩展数据项(组码的范围为1000—2000)。
下面程序用于选择所有带有扩展数据的圆(circle),应用程序为这些扩展数据注册的一个标志符(id)为“appname”。
条件筛选
条件操作符也可由-4组指定,但它们必须是配对的。下面的的程序用来挑选半径为1。0的圆,并且在“abc”层上的所有直线:
好文,一定要顶!
一定要顶
研究一下先
果然是好东西
fff
比我强多啦!
kk

1111
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)