风魔飘香 发表于 2003-9-18 15:43:00

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

我希望能够通过VB/VBA在CAD中查找到空白部分(任意一处),然后在此处插入文字或图片。我有一个想法不知道能否实现,具体如下:定义一个AcadSelectionSet,给定大小(如:32*32),再根据从上到下,从左到右的规则进行遍历。但不知道具体怎么实现。请各位前辈指点。谢谢。

mccad 发表于 2003-9-18 22:32:00

可行,但首先要取决于你需要的文字宽度及高度。这样你可以直接使用该宽度和高度来查找空白处,如果不符合再向右移动一定距离再查找,完后再向下一定距离再查找。

风魔飘香 发表于 2003-9-18 22:48:00

能不能给点关于AcadSelectionSet的例子,请不要贴出AutoCAD帮助上的例子。谢谢。

mccad 发表于 2003-9-18 22:54:00

选择集的例子有很多,在论坛上都可以找到。
首先是新建一个选择集,注意名称不要与现有的名称重复(这里需要判断)。如果重复则会出错,也可以利用出错来判断是否重复,重复则使用该选择集,但要清除选择集中的对象。
然后就可以使用Select方法来用两个点获取点区域内的对象,注意对象选择时屏幕也应移动该处,不然会选择不到对象,因为选择方法中除是整图全选外其它方法都只能选择到屏幕范围内的对象。
我想这样的说明你还需要一个例子吗?我想就不必要吧,你还是自己想想怎么写出来。

myfreemind 发表于 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无法选中实体呀?明明是有一条直线的嘛。叩谢!!!

efan2000 发表于 2003-9-22 14:16:00

默认的是单位是英制的,12英寸*9英寸。
选择集所使用的坐标单位是图纸单位,也即当前系统所使用的单位,而不是像素。
选择集只选择看得见的实体,并且它的显示部分在一半以上。也就是说实体的大部分在当前窗口可见时才能被选择。

风魔飘香 发表于 2003-9-22 21:22:00

版主,怎样使用目标实体存在于当前窗口呢?

sody 发表于 2007-7-13 10:56:00

<p>试了<strong><font face="Verdana" color="#61b713">风魔飘香的方法,确实可行</font></strong></p><p><strong><font face="Verdana" color="#61b713">只是程序效率很低</font></strong></p><p><strong><font face="Verdana" color="#61b713">For x = 0 To 15<br/>For y = 0 To 15</font></strong></p><p><strong><font face="Verdana" color="#61b713">225个循环用了6秒时间</font></strong></p><p>For x = 0 To 15<br/>For y = 0 To 15<br/>zx(0) = Pnt1(0) + x * txtheight / 3 - txtlong / 2: zx(1) = Pnt1(1) + y * txtheight / 3 - txtheight<br/>ys(0) = zx(0) + txtlong: ys(1) = zx(1) + 2 * txtheight<br/>oSSet.Select acSelectionSetCrossing, zx, ys<br/>If oSSet.Count = 0 Then</p><p>Set textObj = ThisDrawing.ModelSpace.AddText(num, cp, txtheight * 0.75)<br/>end if<br/>oSSet.Clear<br/>Next<br/>Next</p><p>请问怎样才能提高寻找的效率呢????</p>
页: [1]
查看完整版本: 请教:如何查找CAD中的空白部分?