应用ActiveX Automation技术进行AutoCad的开发(3…
2008-02-23 06:52:32来源:互联网 阅读 ()
For Each obj In tempset ‘遍历选择集中的实体
If obj.EntityName="AcDbLine" And obj.Layer="wall" Then
obj.HighLight(True) '亮显实体
End IF
Next
这种选择方式给用户较大的自由,但不能保证选择集内包含所有我们期望的实体,若要精确过滤出所需实体,应该给选择集加入条件。
②使用过滤器(Filter)筛选实体
Dim actualCode(3) As String
Dim actualValue(3) As String
Dim groupcode As Variant
Dim groupValue As Variant
Dim extminpt(2) As Double
Dim extmaxpt(2) As Double
Dim tsset As Object
Dim tobj As Object
actualCode(0) = -4
actualValue(0) = "
actualCode(1) = 8 '保证 Layer是"wall"
actualValue(1) = "wall"
actualCode(2) = 100
actualValue(2) = "AcDbLine" '所选实体为直线
actualCode(3) = -4
actualValue(3) = "AND>"
extminpt(0) = 0
extminpt(1) = 0
extminpt(2) = 0
extmaxpt(0) = 800
extmaxpt(1) = 400
extmaxpt(2) = 0 ‘设选择集涉及区域的左上点与右下点坐标
groupcode = actualCode
groupValue = actualValue
Set tsset = acaddoc.SelectionSets.Add("SS2")
tsset.Select acSelectionSetAll, extminpt, extmaxpt, groupcode,_ groupValue ‘加了过滤器的选择集
For Each tobj In tsset
tobj.HighLight(True) 'tobj一定满足既是直线,又在层"wall"上
Nexe
上述变量中groupcode是组码,groupValue是组码下的值。只要找出相应的组码及其下的值,配合条件(And Or Not等,组码为-4)的使用,便可以构造出任意的过滤器,迅速获取所需实体的集合。
7.SendKeys的妙用
AutoCad的ActiveX虽然强大,但不是所有问题都可以通过它解决。要在VB中使用AutoCad对象没有的方法,就须用到VB中的过程SendKeys。通过SendKeys把AutoCad的命令行如同批处理一样送到AutoCad中自动执行,在效果上与使用对象的方法是相同的。另外,还可以使用简单的AutoLisp语言增强AutoCad命令行的功能。下例是执行break命令而编写的过程。其中的(handent"***")是从Lisp语言中借来的,可以直接在命令行通过实体句柄(Handle)来确定实体。
SendKeys "{esc}", True
SendKeys "{esc}", True ‘避免以前命令的干扰
SendKeys "_break" & "{enter}", True
SendKeys "{(}" & "handent" & """" & wallhandle & """" & "{)}" & "{enter}", True ‘选择要断开的实体(wallhandle为其句柄)
SendKeys Format(cood1(0)) & "," & Format(cood1(1)) & "{enter}", True
SendKeys Format(cood2(0)) & "," & Format(cood2(1)) & "{enter}", True ‘cood1与cood2是实体上断开点的坐标
三、 最终的补充说明
1. 尽量采用迭代的方法遍历集合
如前所述,对CAD的编程中涉及大量的集合操作,下面的代码段与迭代法效果相同,但效率较低。
Dim I As Integer
For I=0 To sset.Count-1
sset(I).HighLight(True)
Next I
在创建自己的集合时,关键字尽量采用Handle值,以便查找,并可通过HandletoObject方法将Handle值转化为实体(Object)
2. 采用AutoCad r14.01版
Autodesk公司在r14版中加入了ActiveX Automation,但尚不完善。在随后推出的14.01版中,Autodesk公司解决了r14版的不少错误,使得应用程序运行更为流畅、稳定。如果要进行AutoCad的ActiveX编程,建议采用VB5.0和AutoCad r14.01。
3. 关于ActiveX的资源
国内有不少介绍ActiveX编程及AutoCad的资料,但迄今还未发现有完整讨论AutoCad的ActiveX编程的书籍,目前最容易得到的资料就是Autodesk公司编写的随机帮助,其中有一章“ActiveX Automation",有全部对象的方法、属性说明。
此处推荐几个有关网址:
Autodesk公司主页:www.autodesk.com
CadOnline杂志:www.cadonline.com
一个专门探讨AutoCad的ActiveX编程的个人主页:
http://ourworld.compuserve.com/homepages/tonyt/
另外,Autodesk公司的新闻组也是个很好的资源,我在编程中遇到的许多问题都是在新闻组中得到解决的。
news://autodesk.autocad.customization.vba
以上是我在做项目中得到的一点经验和感受的总结,希望与大家共享,文中的代码在VB5.0、AutoCad r14.01中调试通过。由于时间仓促,错误和不足再所难免,还望不吝指正。
上一篇: 用Visual Basic实现多画面播放功能
下一篇: 用VB编写FLASH动画播放器
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:用VB5.0开发通信软件的技巧
下一篇:利用API播放声音文件
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
