wdxbf 发表于 2004-4-22 08:21:00

谁可以帮我(关于VBA在CAD 中的选择集的使用)

我最近在做毕业设计时,有点麻烦,不知那位大侠可以帮我。我将不胜感谢。


       我在用cad中自带的vba编程序时,定义的选择集,可在不知为什么就是不能选择对象,我对选择集中的对象做镜像,第一遍运行根本没反应,可如果再运行一边,就会镜像出另一半,这是怎么回事?(我用的是CAD2004中文版)。


               我附上 我的程序原文件,望指点。谢谢

mccad 发表于 2004-4-22 21:26:00

第一次定义的选择集没有做清空,所以第二次运行时就连第一次的选择集都用上了。

wdxbf 发表于 2004-4-25 07:33:00

不是没有清空,而是定义之后,选择集是空的,我用F8单步运行,一直显示是空的,选择后还是空的,不知为什么?

mccad 发表于 2004-4-25 07:47:00

Sub mi()
       Dim ss As AcadSelectionSet
       On Error Resume Next
       ThisDrawing.SelectionSets("mccad").Delete
       Set ss = ThisDrawing.SelectionSets.Add("mccad")
         
       ThisDrawing.Utility.Prompt vbCr & "请选择镜像的对象:"
       ss.SelectOnScreen
      
       Dim pnt1, pnt2
       pnt1 = ThisDrawing.Utility.GetPoint(, vbCr & "指定镜像线的第一点:")
       pnt2 = ThisDrawing.Utility.GetPoint(pnt1, vbCr & "指定镜像线的第二点:")
      
       Dim ent As AcadEntity
       If ss.Count > 0 Then
               For Each ent In ss
                     ent.Mirror pnt1, pnt2
               Next
       End If
      
End Sub

wdxbf 发表于 2004-4-27 09:44:00

谢谢你的回复, 我用的是全部由程序自己进行, 所以上面的方法还是不可用.


       我是买了 您出的<< AutoCAD2004 VBA精彩开发实例 >>自学的.


               好多东西我还是不太明白,       我是设计了一个界面,然后在其中控件的代码中添加了所有程序, 我单步运行过程中,图形上无法显示已经用命令画的线, 在运行到定义的选择集时,创建成功,可是选择后,还是空,       有的我改变了 过滤参数的名称后,如果再运行一边,可以镜相出来,可如果不该,就不行了,不知道为什么?


                       我想把原代码 给您发E-mail中,还望您能指点.       

mccad 发表于 2004-4-27 21:31:00

E过来吧,没有代码,靠说是说不清楚的。

mccad 发表于 2004-4-27 22:02:00

对于程序生成的对象,在对象生成的时候就可以取得对象,而不需要再经过选择集来选定。如你程序中绘制活塞图中的一段就可以这样写:
    '画图
   Dim varLines(20) As AcadEntity
       Set varLines(0) = AddLine(ImPoint(0), ImPoint(1))
       Set varLines(1) = AddLine(ImPoint(1), ImPoint(2))
       Set varLines(2) = AddLine(ImPoint(2), ImPoint(3))
       Set varLines(3) = AddLine(ImPoint(3), ImPoint(4))
       Set varLines(4) = AddLine(ImPoint(4), ImPoint(5))
       Set varLines(5) = AddLine(ImPoint(5), ImPoint(6))
       Set varLines(6) = AddLine(ImPoint(6), ImPoint(7))
       Set varLines(7) = AddLine(ImPoint(7), ImPoint(8))
       Set varLines(8) = AddLine(ImPoint(8), ImPoint(9))
       Set varLines(9) = AddLine(ImPoint(9), ImPoint(10))
       Set varLines(10) = AddLine(ImPoint(10), ImPoint(11))
       Set varLines(11) = AddLine(ImPoint(11), ImPoint(12))
       Set varLines(12) = AddLine(ImPoint(15), ImPoint(14))
       Set varLines(13) = AddLine(ImPoint(13), ImPoint(15))
       Set varLines(14) = AddLine(ImPoint(15), ImPoint(17))
       Set varLines(15) = AddLine(ImPoint(16), ImPoint(17))
       Set varLines(16) = AddLine(ImPoint(17), ImPoint(18))
       Set varLines(17) = AddLine(ImPoint(10), ImPoint(19))
       Set varLines(18) = AddLine(ImPoint(19), ImPoint(20))
       Set varLines(19) = AddLine(ImPoint(20), ImPoint(21))
   '切换到虚线 图层
         For Each objLayer In ThisDrawing.Layers
             If objLayer.name = "虚线" Then
               ThisDrawing.ActiveLayer = objLayer
             End If
         Next
         Set varLines(20) = AddLine(ImPoint(13), ImPoint(18))
   '切换到0 图层
         For Each objLayer In ThisDrawing.Layers
             If objLayer.name = "0" Then
               ThisDrawing.ActiveLayer = objLayer
             End If
         Next
      
' 镜像
       Dim i As Integer
       For i = 0 To 20
               varLines(i).Mirror ImPoint(0), ImPoint(12)
       Next i
       End可以看到,这里用了一个varLine数组来保存生成的直线,这样在最后就可以使用该数组来镜像这样对象。
另外,你的程序好多是重复的内容,如生成图框其它都是一样,只是名称不同,所以将其做为一个函数最好,不然这样给人感觉很乱。

wdxbf 发表于 2004-4-28 09:55:00

真不知道怎么感谢您,我为这个问题,整整忙了两周,我都快放弃了, 学校老师没有人懂这方面 .       真是非常感谢


                               可以告诉我,您一般什么时候在线吗?       我的毕业设计需要您的指点.
页: [1]
查看完整版本: 谁可以帮我(关于VBA在CAD 中的选择集的使用)