明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2271|回复: 7

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

[复制链接]
发表于 2004-4-22 08:21:00 | 显示全部楼层 |阅读模式
我最近在做毕业设计时,有点麻烦,不知那位大侠可以帮我。我将不胜感谢。


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


                 我附上 我的程序原文件,望指点。谢谢
发表于 2004-4-22 21:26:00 | 显示全部楼层
第一次定义的选择集没有做清空,所以第二次运行时就连第一次的选择集都用上了。
 楼主| 发表于 2004-4-25 07:33:00 | 显示全部楼层
不是没有清空,而是定义之后,选择集是空的,我用F8单步运行,一直显示是空的,选择后还是空的,不知为什么?
发表于 2004-4-25 07:47:00 | 显示全部楼层
  1. Sub mi()
  2.        Dim ss As AcadSelectionSet
  3.        On Error Resume Next
  4.        ThisDrawing.SelectionSets("mccad").Delete
  5.        Set ss = ThisDrawing.SelectionSets.Add("mccad")
  6.          
  7.        ThisDrawing.Utility.Prompt vbCr & "请选择镜像的对象:"
  8.        ss.SelectOnScreen
  9.       
  10.        Dim pnt1, pnt2
  11.        pnt1 = ThisDrawing.Utility.GetPoint(, vbCr & "指定镜像线的第一点:")
  12.        pnt2 = ThisDrawing.Utility.GetPoint(pnt1, vbCr & "指定镜像线的第二点:")
  13.       
  14.        Dim ent As AcadEntity
  15.        If ss.Count > 0 Then
  16.                For Each ent In ss
  17.                        ent.Mirror pnt1, pnt2
  18.                Next
  19.        End If
  20.       
  21. End Sub
 楼主| 发表于 2004-4-27 09:44:00 | 显示全部楼层
谢谢你的回复, 我用的是全部由程序自己进行, 所以上面的方法还是不可用.


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


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


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

发表于 2004-4-27 21:31:00 | 显示全部楼层
E过来吧,没有代码,靠说是说不清楚的。
发表于 2004-4-27 22:02:00 | 显示全部楼层
对于程序生成的对象,在对象生成的时候就可以取得对象,而不需要再经过选择集来选定。如你程序中绘制活塞图中的一段就可以这样写:
   
  1. '画图
  2.      Dim varLines(20) As AcadEntity
  3.        Set varLines(0) = AddLine(ImPoint(0), ImPoint(1))
  4.        Set varLines(1) = AddLine(ImPoint(1), ImPoint(2))
  5.        Set varLines(2) = AddLine(ImPoint(2), ImPoint(3))
  6.        Set varLines(3) = AddLine(ImPoint(3), ImPoint(4))
  7.        Set varLines(4) = AddLine(ImPoint(4), ImPoint(5))
  8.        Set varLines(5) = AddLine(ImPoint(5), ImPoint(6))
  9.        Set varLines(6) = AddLine(ImPoint(6), ImPoint(7))
  10.        Set varLines(7) = AddLine(ImPoint(7), ImPoint(8))
  11.        Set varLines(8) = AddLine(ImPoint(8), ImPoint(9))
  12.        Set varLines(9) = AddLine(ImPoint(9), ImPoint(10))
  13.        Set varLines(10) = AddLine(ImPoint(10), ImPoint(11))
  14.        Set varLines(11) = AddLine(ImPoint(11), ImPoint(12))
  15.        Set varLines(12) = AddLine(ImPoint(15), ImPoint(14))
  16.        Set varLines(13) = AddLine(ImPoint(13), ImPoint(15))
  17.        Set varLines(14) = AddLine(ImPoint(15), ImPoint(17))
  18.        Set varLines(15) = AddLine(ImPoint(16), ImPoint(17))
  19.        Set varLines(16) = AddLine(ImPoint(17), ImPoint(18))
  20.        Set varLines(17) = AddLine(ImPoint(10), ImPoint(19))
  21.        Set varLines(18) = AddLine(ImPoint(19), ImPoint(20))
  22.        Set varLines(19) = AddLine(ImPoint(20), ImPoint(21))
  23.    '切换到虚线 图层
  24.            For Each objLayer In ThisDrawing.Layers
  25.              If objLayer.name = "虚线" Then
  26.                ThisDrawing.ActiveLayer = objLayer
  27.              End If
  28.            Next
  29.          Set varLines(20) = AddLine(ImPoint(13), ImPoint(18))
  30.    '切换到0 图层
  31.            For Each objLayer In ThisDrawing.Layers
  32.              If objLayer.name = "0" Then
  33.                ThisDrawing.ActiveLayer = objLayer
  34.              End If
  35.            Next
  36.       
  37. ' 镜像
  38.        Dim i As Integer
  39.        For i = 0 To 20
  40.                varLines(i).Mirror ImPoint(0), ImPoint(12)
  41.        Next i
  42.        End
可以看到,这里用了一个varLine数组来保存生成的直线,这样在最后就可以使用该数组来镜像这样对象。
另外,你的程序好多是重复的内容,如生成图框其它都是一样,只是名称不同,所以将其做为一个函数最好,不然这样给人感觉很乱。
 楼主| 发表于 2004-4-28 09:55:00 | 显示全部楼层
真不知道怎么感谢您,我为这个问题,整整忙了两周,我都快放弃了, 学校老师没有人懂这方面 .         真是非常感谢


                                 可以告诉我,您一般什么时候在线吗?         我的毕业设计需要您的指点.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 06:34 , Processed in 0.136903 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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