明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1728|回复: 1

VB编程,对话框使用acedGetXXX函数和ACAD交互

[复制链接]
发表于 2009-9-17 13:13:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-9-17 22:36:51 编辑

VB编程,非模态窗口中,如何中断当前原有的GETXXX命令,并重新运行另一GETXXXX
如下图

使用了功能:
  1. Private Sub Form_Load()
  2. Dim obj_Acad As Object, obj_Doc As Object, obj_ModelSpace As Object, obj_Util As Object
  3. Set obj_Acad = GetObject(, "AutoCAD.application")
  4. If Err Then
  5.    Err.Clear
  6.    On Error Resume Next
  7.    Set obj_Acad = CreateObject("autocad.application")
  8.    If Err Then
  9.       Err.Clear
  10.       MsgBox "不能运行AutoCAD,请检查是否安装!", vbOKOnly, "警告!"
  11.       Exit Function
  12.       End If
  13. End If
  14. obj_Acad.Visible = True
  15. Set obj_Doc = obj_Acad.ActiveDocument
  16. Set obj_Util = obj_Doc.Utility
  17. Set obj_ModelSpace = obj_Doc.ModelSpace
  18. End Sub
  19. '获取点按钮
  20. Private Sub Getpoint_Click()
  21.             Dim pt As Variant
  22.             Do While CAD.Getpoint(pt, vbCrLf & "获取点<退出>:")
  23.                If IsNull(pt) Then
  24.                     'lop1 = False
  25.                 Else
  26.                     CAD.Addcircle pt, 100
  27.                 End If
  28.             Loop
  29. End Sub
  30. Public Function Getpoint(ByRef rePnt As Variant, ByRef inputString As String, Optional Msg As String, Optional pt As Variant) As Boolean
  31. 'On Error Resume Next
  32. ActiveDoc
  33. rePnt = obj_Util.Getpoint(, Msg)
  34. If Err Then
  35.          If Err.Number = -2145320928 Then
  36.              'Dim inputString As String
  37.              Err.Clear
  38.              inputString = ThisDrawing.Utility.GetInput
  39.              'GetPoint = True
  40.          Else
  41.          Getpoint = False
  42.              MsgBox "getpoint错误: " & Err.Description
  43.              Err.Clear
  44.          End If
  45.     Else
  46.         ' Display point coordinates
  47.         'MsgBox "The WCS of the point is: " & reVal(0) & ", " & reVal(1) & ", " & reVal(2), , "GetInput Example"
  48.         Getpoint = True
  49.     End If
  50. End Function
  51. Public Function GetEntity0(ByRef Retobj As Variant, ByRef inputString As String, Optional Msg As String = "") As Boolean
  52. On Error Resume Next
  53. Dim Point As Variant
  54. ActiveDoc
  55. obj_Util.GetEntity Retobj, Point, Msg
  56. If Err Then
  57.          If Err.Number = -2145320928 Then
  58.          ' One of the keywords was entered
  59.              Err.Clear
  60.              inputString = ThisDrawing.Utility.GetInput
  61.          Else
  62.              MsgBox "GetEntity0错误: " & Err.Description
  63.              Err.Clear
  64.              GetEntity0 = False
  65.          End If
  66.     Else
  67.         GetEntity0 = True
  68.     End If
  69. End Function
  70. Public Function Addcircle(ByRef Center As Variant, ByVal Radius As Double) As Object
  71. Dim obj_circle As Object       '定义圆对象
  72. Dim newstr As String
  73. On Error Resume Next
  74. If Not boo Then
  75.   MsgBox "请先生成autocad程序对象", vbOKOnly, "autocad程序对象?"
  76.   Exit Function
  77.   End If
  78. Set obj_circle = obj_ModelSpace.Addcircle(Center, Radius)
  79. Set Addcircle = obj_circle
  80. End Function
*.Utility.GetPoint(, "Enter a point: ")
*.Utility.GetDistance(, "Enter distance: ")

想达到效果:
1、在非模态状态下,本来是使用getpoint的,但还是getpoint的命令状态下,就按获取距离按钮,这时就取消原命令而运行GetDistance

2、在非模态状态下,本来是使用GetDistance的,但还是GetDistance的命令状态下,就按获取点按钮,这时就取消原命令而运行getpoint

本意是想取消原命令,但实际却变成嵌套了,即运行完GetDistance后,还会要求选取一个点。
如何取消当前的命令呢(getXXXXX)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-6-9 17:08:00 | 显示全部楼层

多谢分享,学习过程中.

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

本版积分规则

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

GMT+8, 2024-11-25 22:51 , Processed in 0.155117 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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