天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 6|回复: 0

acedSSGet()函数用法详解

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
大多数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,说明所使用的选择条件,如下:

表示码 意义
NULL 单点选择(如果指定了pt1)或用户选择(如果pt1也为NULL)
# 非几何选择(all、last、previous)
:$ 提供提示文字
. 用户拾取方式
:? 其他回调函数
A All选择方式
B Box选择方式
C Crossing选择方式
CP Crossing Polygon选择方式
:D 可以重复,即可以重复选择一个实体,并加入选择集中
:E 在aperture中的所有实体
F Fence选择方式
G Groups选择
I 如果存在RICKFIRST集、则用该集
:K    关键字回调函数
L Last选择方式
M 多重选择方式
P Previous选择方式
:S 强制单个实体对象被选择
W Window选择方式
WP Window Polygon选择方式
X 用于筛选程序搜索整个图形数据库


紧跟着的两个参数用于指定与某些选择方式有关的可选择的点。当不使用他们时,应该取NULL值。如果第四个参数entmask不是NULL,则它指向一个缓冲区表,用于存放用筛选选择方式的结果。第五个参数ss是选择集的识别名字。
下列是调用acedSSGet()的例子:

1  ads_point pt1,pt2,pt3,pt4;
2  struct  resbuf  * pointlist;
3  ads_name ssname;
4  pt1[x] = pt1[y] = pt1[z] = 0.0 ;
5  pt2[x] = pt2[y] = 5.0 ;pt2[z] = 0.0 ;
6  // 如果有的话,获取当前RICKFIRST选择集,没有则提供用户选择一个
7  acedSSGet(NULL,NULL,NULL,NULL,ssname);
8  // 如果有的话,获取当前RICKFIRST选择集
9  acedSSGet(“I”,NULL,NULL,NULL,ssname);
10  // 使用最近使用过的选择集
11  acedSSGet(“P”,NULL,NULL,NULL,ssname);
12  // 选择最后加入到数据库中的对象
13  acedSSGet(“L”,NULL,NULL,NULL,ssname);
14  // 选择通过点(5,5)的实体
15  acedSSGet(NULL,pt2,NULL,NULL,ssname);
16  // 选择从点(0,0)到点(5,5)的窗口中的实体
17  acedSSGet(“W”,pt1,pt2,NULL,ssname);
18
19  // 选择指定多边形包围的实体
20  pt3[x] = 10.0 ;pt3[y] = 5.0 ;pt3[z] = 0.0 ;
21  pt4[x] = 5.0 ;pt4[y] = pt4[z] = 0.0 ;
22  pointlist = acutBuildlist(RTPOINT,pt1, RTPOINT,pt2, RTPOINT,pt3, RTPOINT,pt4, 0 );
23  acedSSGet(“WP”,pointlist,NULL,NULL,ssname);
24
25  // 选择选择从点(0,0)到点(5,5)的窗口内交叉的实体
26  acedSSGet(“C”,pointlist,NULL,NULL,ssname);
27
28  acutRelRb(pointlist);
29
30  // 选择与指定栅栏交叉的实体
31  pt4[y] = 15.0 ;pt4[z] = 0.0 ;
32  pointlist = acutBuildlist(RTPOINT,pt1, RTPOINT,pt2, RTPOINT,pt3, RTPOINT,pt4, 0 );
33  acedSSGet(“F”,pointlist,NULL,NULL,ssname);
34  acutRelRb(pointlist);




对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域指定要匹配的值。下面是相应的例子:

ExpandedBlockStart.gif 代码
struct  resbuf eb1,eb2,eb3;
char  sbuf1[ 10 ],sbuf2[ 10 ];
ads_name ssname1,ssname2;
eb1.restype = 0 ;  // 实体名
strcpy(sbuf1,”CIRCLE”);
eb1.resval.restring = sbuf1;
eb1.rbnext = NULL;  // 无其他内容
// 检索所有圆
acedSSGet(“X”,NULL,NULL, & eb1,ssname1);

eb2.restype = 8 ; // 层名
strcpy(sbuf2,”FLOOR3”);
eb2.resval.rstring = sbuf2;
eb2.rbnext = NULL;
// 检索在图层FLOOR3上的所有实体
acedSSGet(“X”,NULL,NULL, & eb2,ssname2);




注意: 在每个缓冲区中指定的resval必须属于合适的类型,比如:名字类型是字符串(resval.rstring);标高和厚度是双精度浮点型(resval.rreal);颜色、属性和标志值是短整型(resval.rint);拉伸向量是三维的点(resval.rpoint),等等。
如果entmask指定了多个参数,那么只有匹配所有指定条件的实体才能被包含在选择集里。就象下面的例子:
1  eb2.restype = 62 ; // 实体颜色
2  eb3.resval.rint = 1 ; // 红色
3  eb3.rbnext = NULL;
4  eb1.rbnext =& eb2; // 增加另外两个条件
5  eb2.rbnext =& eb3; // 建立链表
6  // 检索在图层FLOOR3层上所有红色的圆
7  acedSSGet(“X”,NULL,NULL, & eb1,ssname1);


除非表中包括关系和条件操作符,否则实体的所有域都要被测试。
如果在数据库中没有实体与指定的筛选条件匹配,函数acedSSGet()将返回RTERROR。
前面关于acedSSGet()的例子用的是“X”选项,它扫描整个图形数据库;如果筛选表与其他选项(如用户选择、窗口选择等)联合使用,筛选条件只能在被选中的实体上起作用。请看下面的一组例子:
筛选用户选择的实体:
1  eb1.restype = 0 ; // 实体类型组
2  strcpy(sbuf1,”TEXT”);
3  eb1.resval.rstring = sbuf1; // 类型为TEXE
4  eb1.rbnext = NULL;
5
6  // 让用户生成选择集,但该选择集中只能有TEXT实体
7  acedSSGet(NULL,NULL,NULL, & eb1,ssname1);
筛选前一个选择集:

1  eb1.restype = 0 ; // 实体类型组
2  strcpy(sbuf1,”LINE”);
3  eb1.resval.rsting = sbuf1; // 类型为LINE.
4  Eb1.rbnext = NULL;
5  // 选择在上一个选择集中符合条件的实体
6  acedSSGet(“P”,NULL,NULL, & eb1,ssname1);


在选择窗口内筛选实体:

1  eb1.restype = 8 ; // 层
2  strcpy(sbuf1,”FLOOR8”);
3  eb1.resval.rstring = sbuf1; // 层名
4  eb1.rbnext = NULL;
5  // 选择在窗口内并在FLOOR8层上的实体
6  acedSSGet( " W " , pt1, pt2,  & eb1, ssname1);


注意:某些组码在不同的实体里有不同的含义,并且不是所有的组码都存在于所有的实体内。如果在筛选程序中指定一个特定的组码,不包含该组码的实体将被排除在acedSSGet()所返回的选择集之外。



筛选表中的通配符
筛选表中指定的符号可以包括通配符。由函数acedSSGet()织别的通配符与函数acutWcMatch()织别的通配符完全一样。
例如,下面的程序代码可以检索一个名为K2的匿名块:

1  eb2.restype = 2 ; // 块名
2  strcpy(sbuf1,” * K2”);
3  eb2.resval.rstring = sbuf1; // 匿名块名
4  eb2.rbnext = NULL;
5  // 选择匿名块*K2的块插入引用
6  acedSSGet(“X”,NULL,NULL, & eb2,ssname1);




筛选扩展数据
扩展数据是字符串、数据、三维点、距离、层名,或者是其他附加在对象上得数据,特别是由外部应用程序附加到对象上得数据。
扩展数据大小为16KB。
通过指定,我们可以为一个特殊的应用程序使用-3组码在筛选表中指定扩展数据来检索扩展数据。例如:,函数acedSSGet()返回一个以指定名字注册的带扩展数据的实体。acedSSGet()不检索每个扩展数据项(组码的范围为1000—2000)。
下面程序用于选择所有带有扩展数据的圆(Circle),应用程序为这些扩展数据注册的一个标志符(ID)为“APPNAME”。



1  eb1.restype = 0 ; // 实体类型
2  strcpy(sbuf1,”CIRCLE”);
3  eb1.resval.rstring = sbuf1; // 实体为CIRCLE
4  eb1.rbnext =& eb2;
5  eb2.restype =- 3 ; // 扩展数据
6  eb2.rbnext =& eb3;
7  eb3.restype = 1001 ;
8  strcpy(sbuf2,”APPNAME”);
9  eb3.resval.rstring = sbuf2; // APPNAME应用程序
10  eb3.rbnext = NULL;
11  // 选择注册到APPNAME应用程序中的圆的扩展数据
12  acedSSGet(“X”,NULL,NULL, & eb1,ssname1);


如果不止一个应用程序名包含在表中,则acedSSGet()在选择集中所包含实体,必须对所有指定的应用程序都有扩展数据。比如,下面的程序选择带有注册到“APP1”和“APP2”中的扩展数据的圆。

1  eb1.restype = 0 ; // 实体类型
2  strcpy(sbuf1,”CIRCLE”);
3  eb1.resval.rstring = sbuf1; // 圆
4  eb1.rbnext =& eb2;
5
6  eb2.restype =- 3 ; // 扩展数据
7  eb2.rbnext =& eb3;
8  eb3.restype = 1001 ;
9  strcpy(sbuf2,”APP1”);
10  eb2.resval.restring = sbuf2; // 应用程序APP1
11  eb2.rbnext =& eb4;
12  eb4.restype = 1001 ; // 扩展数据
13  strcpy(sbuf3,”APP2”);
14  eb4.resval.rstring = sbuf3; // 应用程序APP2
15  eb4.rbnext = NULL;
16  // 选择注册应用程序APP1和APP2的圆扩展数据
17  acedSSGet(“X”,NULL,NULL, & eb1,ssname1);


下面的程序与上面的作用相同。

1  eb1.restype = 0 ;
2  strcpy(sbuf1,”CIRCLE”);
3  eb1.resval.rstring = sbuf1;
4  eb1.rbnext =& eb2;
5
6  eb2.restype =- 3 ;
7  eb2.rbnext =& eb3;
8  eb3.restype = 1001 ;
9  strcpy(sbuf2,”APP[ 12 ]”); // ”APP[12]”
10  eb3.resval.rstring = sbuf2;
11  eb3.rbnext = NULL;
12  // 选择注册到APP1和APP2的圆的扩展数据
13  acedSSGet(“X”,NULL,NULL, & eb1,ssname1);




关系检测

除非用户另外指定,在一个筛选表中的每一项与实体之间,有一个隐含的等量(equals)检测,对于数字量(整数、实数值、点和向量),通过在筛选表中包括关系操作符,用户可指定另外一些关系,关系操作符当做一个特殊的组(即-4组)传递,其值是一个在筛选表中将被应用于下一组检测的字符串。
下面的程序可以挑选半径大于等于2。0的圆:

1  eb3.restype = 40 ; // 半径
2  eb3.resval.rreal = 2.0 ;
3  eb3.rbnext = NULL;
4
5  eb2.restype =- 4 ; // 筛选操作
6  strcpy(sbuf1,” >= ”);
7  eb2.resval.rstring =& eb3;
8
9  eb1.restype = 0 ; // 实体类型
10  strcpy(sbuf2,”CIRCLE”);
11  eb1.resval.rstring = sbuf2; // 圆
12  eb1.rbnext =& eb2;
13
14  // 选择半径大于等于2。0的圆
15  acedSSGet(“X”,NULL,NULL, & eb1,ssname1);




条件筛选

条件操作符也可由-4组指定,但它们必须是配对的。下面的的程序用来挑选半径为1。0的圆,并且在“ABC”层上的所有直线:

1  struct  resbuf *  prb;
prb  =  acutBuildList(
- 4 ,  " <or " , - 4 ,  
" <and " , RTDXF0,     " CIRCLE " ,  40 ,  1.0 ,  
- 4 , " and> " ,
- 4 ,  " <and " ,
RTDXF0,      " LINE " ,  8 ,  " ABC " ,  
- 4 ,  " and> " ,  - 4 ,  " or> " ,  0 );
2  acedSSGet( " X " , NULL, NULL, prb, ssname1);


条件操作符不是大小写敏感的,可以使用小写形式。

用于检测扩展数据的条件表达式只能包含-3组。为了选择带有寄存于“APP1”和“APP2”其中之一的扩展数据的所有圆,可以用以下程序来实现:

1  prb  =  acutBuildList( - 4 ,  " <xor " ,  - 3 ,  " APP1 " ,  - 3 ,  " APP2 " ,      - 4 ,  " xor> " ,  0 );
2  acedSSGet( " X " , NULL, NULL, prb, ssname1);

 

 

 

 

acedSSGet()函数用法详解

该用户从未签到

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-7-28 09:28:43 | 显示全部楼层
  法拉利膜材作为一种高性能的建筑材料,在建筑、汽车及广告等多个领域有着广泛的应用。以下是对法拉利膜材型号、特点及优点的详细分析:
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223041uiqmeujen4jjj6zv.jpg[/img]
[b]一、法拉利膜材型号[/b]
法拉利膜材有多种型号,包括但不限于以下几种:1302 S2 Flexlight Advanced:这是一种高性能IV型柔性复合膜材,以其卓越的透光性、耐久性和易维护性而受到青睐。942、1202 S2、1002 S2、902 S2、1212 S2、912 S2:这些型号同样属于法拉利膜材系列,各自具有不同的特性和适用范围,但具体特点需根据具体型号进一步分析。需要注意的是,法拉利膜材的型号可能随着产品更新换代而有所变化,具体型号及其特性请参考最新产品资料。
[img=860,1255]http://www.mjgou.com/data/attachment/forum/202403/13/223254bbblwlbvbvsbwlsl.jpg[/img]
[b]二、法拉利膜材特点[/b]
法拉利膜材的特点主要体现在以下几个方面:
1、高强度与耐用性:法拉利膜材采用高强度材料制成,具有良好的抗拉强度和撕裂强度,能够承受较大的外力作用而不易破损。耐用性强,能够在恶劣气候条件下保持稳定的性能,延长使用寿命。
2、透光性与美观性:部分型号如1302 S2 Flexlight Advanced具有高透光性,能够在保持室内光线充足的同时,提供清晰的视野。膜材表面平整光滑,色彩丰富多样,能够满足不同建筑和装饰需求,提升整体美观性。
3、轻质与灵活性:法拉利膜材重量较轻,便于运输和安装,能够降低施工成本和时间。膜材具有一定的柔韧性,能够适应各种复杂形状和结构的设计要求。
4、环保与可回收性:法拉利膜材符合环保要求,部分材料可回收利用,减少了对环境的影响。
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223128owhn0099rrds5h5y.jpg[/img]
[b]三、法拉利膜材优点[/b]
法拉利膜材的优点主要体现在以下几个方面:
1、提升建筑性能:高强度与耐用性使得法拉利膜材能够提升建筑的稳定性和安全性,延长使用寿命。透光性与美观性使得建筑内部光线充足、视野开阔,同时提升整体美观度。
2、降低施工成本:轻质特性使得运输和安装成本降低,施工效率提高。膜材的柔韧性使得施工更加灵活多变,能够适应各种复杂地形和结构要求。
3、节能环保:部分材料可回收利用,符合环保要求,减少了对环境的影响。良好的透光性能够减少室内照明需求,降低能耗。
4、广泛应用领域:
法拉利膜材不仅适用于建筑领域(如体育设施、商业设施、文化设施、交通设施等),还广泛应用于汽车及广告领域(如高档车辆贴膜保护和装饰、广告招贴等),展现出其多功能的特性。

综上所述,法拉利膜材以其高强度、耐用性、透光性、美观性、轻质灵活性以及环保可回收性等优点,在建筑、汽车及广告等多个领域发挥着重要作用。具体型号的选择应根据实际需求和应用场景进行综合考虑。
[url=http://www.mjgou.com/forum-17-1.html][size=60757][color=Red]法拉利膜材中国代理商 - 膜结构网[/color][/size][/url]
acedSSGet()函数用法详解

该用户从未签到

主题

0

回帖

2

积分

新手上路

积分
2
发表于 2024-8-6 10:42:43 | 显示全部楼层
泰克斯膜材作为一种高性能的纺织材料,在建筑、户外用品等多个领域有着广泛的应用。以下是对泰克斯膜材的详细分析:
[b]一、公司背景与实力[/b]
成立与发展:泰克斯膜材品牌成立于1990年代初期,总部位于中国广东省佛山市。公司自成立以来,逐步发展成为国内外知名的纺织品品牌,产品远销世界各地,深受客户好评。
产品线:泰克斯膜材主要致力于研究、开发、生产和销售各种功能性纺织材料,包括帐篷、遮阳篷、雨衣、冲锋衣等户外用品以及家居纺织品。
技术创新:泰克斯膜材拥有一支专业的技术研发团队,不断创新和优化生产工艺,为客户提供高品质、高性能的产品。
[b]二、产品特点[/b]
高性能材料:泰克斯膜材选用优质的原料,如涤纶、氨纶等,确保产品的耐用性。同时,通过特殊工艺处理,膜材具备出色的物理和化学性能。
自洁能力:泰克斯膜材具有卓越的自洁能力,雨水冲刷即可保持膜材表面的清洁,减少维护成本。
防污性:膜材表面经过特殊处理,具有良好的防污性能,能够有效抵抗污渍的附着。
透光性与节能性:泰克斯膜材对自然光的透射率较高,同时具有良好的隔热性能,有助于节省能源。
温控性:膜材还能提供舒适的温控效果,适应不同气候条件下的使用需求。
[b]三、技术应用[/b]
泰克斯膜材在技术应用方面也具有显著优势。例如,部分产品采用了新型氟化物涂层(如PVDF)技术,这种技术通过超亲水性和氧化分解作用大幅提升有机物的分解能力,从而保持膜材表面的清洁和性能稳定。这种技术的引入不仅提高了膜材的自洁性和耐久性,还延长了产品的使用寿命。
[b]四、应用领域[/b]
泰克斯膜材广泛应用于建筑、户外用品、家居装饰等多个领域。在建筑领域,它可用作膜结构建筑的覆盖材料;在户外用品方面,它则是帐篷、遮阳篷等产品的理想选择;在家居装饰领域,泰克斯膜材以其独特的性能和美观的外观受到消费者的青睐。
[b]五、市场前景与发展趋势[/b]
随着科技的进步和人们对高品质生活的追求,泰克斯膜材的市场前景十分广阔。未来,泰克斯膜材将继续发挥其技术优势和产品优势,不断拓展新的应用领域和市场空间。同时,公司也将继续加大研发投入和技术创新力度,推出更多符合市场需求的高性能膜材产品。
综上所述,泰克斯膜材以其卓越的性能和广泛的应用领域在市场上占据重要地位。随着技术的不断进步和市场的不断发展,泰克斯膜材的应用前景将更加广阔。

 

 

 

 

acedSSGet()函数用法详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 13:37 , Processed in 0.152293 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表