明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2438|回复: 9

请教:如何查找CAD中的空白部分?

[复制链接]
发表于 2003-9-18 15:43:00 | 显示全部楼层 |阅读模式
我希望能够通过VB/VBA在CAD中查找到空白部分(任意一处),然后在此处插入文字或图片。我有一个想法不知道能否实现,具体如下:定义一个AcadSelectionSet,给定大小(如:32*32),再根据从上到下,从左到右的规则进行遍历。但不知道具体怎么实现。请各位前辈指点。谢谢。
发表于 2003-9-18 22:32:00 | 显示全部楼层
可行,但首先要取决于你需要的文字宽度及高度。这样你可以直接使用该宽度和高度来查找空白处,如果不符合再向右移动一定距离再查找,完后再向下一定距离再查找。
 楼主| 发表于 2003-9-18 22:48:00 | 显示全部楼层
能不能给点关于AcadSelectionSet的例子,请不要贴出AutoCAD帮助上的例子。谢谢。
发表于 2003-9-18 22:54:00 | 显示全部楼层
选择集的例子有很多,在论坛上都可以找到。
首先是新建一个选择集,注意名称不要与现有的名称重复(这里需要判断)。如果重复则会出错,也可以利用出错来判断是否重复,重复则使用该选择集,但要清除选择集中的对象。
然后就可以使用Select方法来用两个点获取点区域内的对象,注意对象选择时屏幕也应移动该处,不然会选择不到对象,因为选择方法中除是整图全选外其它方法都只能选择到屏幕范围内的对象。
我想这样的说明你还需要一个例子吗?我想就不必要吧,你还是自己想想怎么写出来。
发表于 2003-9-18 23:15:00 | 显示全部楼层
选择集方面去看看教程,帖子,很多的!
 楼主| 发表于 2003-9-19 13:00:00 | 显示全部楼层
谢谢两位的回复。我以前没有做过AutoCAD的二次开发,AutoCAD也没有用过。我的代码是这样写的:
    Dim oSSet As AcadSelectionSet
    Dim corn1(2) As Double, corn2(2) As Double
   
    corn1(0) = 0
    corn1(1) = 0
    corn1(2) = 0
   
    '这儿我设成32,32,0后发现整个图都被选定了,是不是坐标系有问题?我期望的是32 pixel*32 pixel
    corn2(0) = 1
    corn2(1) = 1
    corn2(2) = 0
   
    Set oSSet = oDoc.SelectionSets.Add("Select")
    oSSet.Select acSelectionSetCrossing, corn1, corn2
    oSSet.Highlight True
   
    MsgBox oSSet.Count
   
    oSSet.Clear
    oSSet.Delete
请问如何知道当前图纸的高和宽?如果可以的话,还请给出例子,谢谢。
 楼主| 发表于 2003-9-22 14:02:00 | 显示全部楼层
前辈们帮帮忙呀,为什么我定义的SelectionSet无法选中实体呀?明明是有一条直线的嘛。叩谢!!!
发表于 2003-9-22 14:16:00 | 显示全部楼层
默认的是单位是英制的,12英寸*9英寸。
选择集所使用的坐标单位是图纸单位,也即当前系统所使用的单位,而不是像素。
选择集只选择看得见的实体,并且它的显示部分在一半以上。也就是说实体的大部分在当前窗口可见时才能被选择。
 楼主| 发表于 2003-9-22 21:22:00 | 显示全部楼层
版主,怎样使用目标实体存在于当前窗口呢?
发表于 2007-7-13 10:56:00 | 显示全部楼层

试了风魔飘香的方法,确实可行

只是程序效率很低

For x = 0 To 15
For y = 0 To 15

225个循环用了6秒时间

For x = 0 To 15
For y = 0 To 15
zx(0) = Pnt1(0) + x * txtheight / 3 - txtlong / 2: zx(1) = Pnt1(1) + y * txtheight / 3 - txtheight
ys(0) = zx(0) + txtlong: ys(1) = zx(1) + 2 * txtheight
oSSet.Select acSelectionSetCrossing, zx, ys
If oSSet.Count = 0 Then

Set textObj = ThisDrawing.ModelSpace.AddText(num, cp, txtheight * 0.75)
end if
oSSet.Clear
Next
Next

请问怎样才能提高寻找的效率呢????

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-21 03:15 , Processed in 0.159234 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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