明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1270|回复: 4

新手求教,前期绑定怎么改为后期帮定,感谢!

[复制链接]
发表于 2013-7-20 11:13:29 | 显示全部楼层 |阅读模式
Dim acadapp As Object        '只知道改这一句

'_______________________________________________________

Private Sub 加载()
    On Error Resume Next
    Set acadapp = GetObject(, "AutoCAD.application")
    If Err Then
        Err.Clear
        MsgBox "请先运行AutoCAD后再继续", 0, "错误"
        End
    End If
    acadapp.Visible = True
End Sub

'_______________________________________________________

Private Function 画多线段(颜色 As String) As AcadLWPolyline         '编译出错:用户定义类型未定义
    On Error Resume Next
    Dim 第1段数组(3) As Double
    Dim 第1点, 下一点

    '画第1段线
    第1点 = acadapp.ActiveDocument.Utility.GetPoint(, vbCrLf + "输入点:")
    下一点 = acadapp.ActiveDocument.Utility.GetPoint(第1点, vbCrLf + "输入下一点/或结束:")
    Text3.Text = TypeName(下一点)

    第1段数组(0) = 第1点(0): 第1段数组(1) = 第1点(1)
    第1段数组(2) = 下一点(0): 第1段数组(3) = 下一点(1)
    Set 画多线段 = acadapp.ActiveDocument.ModelSpace.AddLightWeightPolyline(第1段数组)
    Call 改变颜色(画多线段, 颜色)

    '依次添加顶点
    Dim 新点数组(1) As Double
    Dim i As Integer
    i = 2
    Do
        If Err Then Exit Do
        下一点 = acadapp.ActiveDocument.Utility.GetPoint(下一点, vbCrLf + "输入下一点/或结

束:")
        新点数组(0) = 下一点(0): 新点数组(1) = 下一点(1)
        画多线段.AddVertex i, 新点数组
        i = i + 1
    Loop

End Function

'_______________________________________________________

Private Sub Command1_Click()        '量取长度
    Call 加载

    '激活 AutoCAD 窗口
    AppActivate acadapp.Caption

    Text1.Text = 画多线段(acRed).Length

End Sub

最后还有一个问题:为什么我执行量取长度后,如果画第1点后取消,它便自己画出第1点与原点(0,0,0)的连线,并计算其长度,怎么改函数使其画第1点后取消,便是画线,这个问题困扰我很久了,总是没解决,感谢不尽啊!


发表于 2013-7-20 21:05:15 | 显示全部楼层
本帖最后由 yshf 于 2013-7-20 21:10 编辑

Private Function 画多线段(颜色 As String) As AcadLWPolyline 改为
      Private Function 画多线段(颜色 As String) As object
还有不要引用auto CAD库

应该是选取所有点完毕后,再判断点数是否大于等于2,最后再画多段线和量取长度。
 楼主| 发表于 2013-7-22 10:45:25 | 显示全部楼层
yshf 发表于 2013-7-20 21:05
Private Function 画多线段(颜色 As String) As AcadLWPolyline 改为
      Private Function 画多线段(颜 ...

首先谢谢这位大哥的解答,后期绑定这样改可以用了,但是关于画多线段问题,如果在选取所有点后判断点数的话,是不能实时看见一条已画点与下一个点之间的橡皮筋(活动的线)的,可偏偏这一点是要实现的,不知要怎么办
发表于 2013-7-22 22:27:13 | 显示全部楼层
本帖最后由 yshf 于 2013-7-22 22:49 编辑

试用以下函数(注意:在VB中则将ThisDrawing修改为acadapp.ActiveDocument):
  1. Public Function AddPline(Col)
  2.     '画多段线,并返回其长度
  3.     Dim p1 As Variant
  4.     Dim p2 As Variant
  5.     Dim n As Integer
  6.     Dim m As Integer
  7.     Dim pt() As Double
  8.     Dim Ent As AcadLWPolyline  '在VB中改为 Dim Ent As Object
  9.     Dim Pdbz As Boolean
  10.     Dim Fhz
  11.    
  12.     On Error Resume Next
  13.    
  14.     p1 = ThisDrawing.Utility.GetPoint(, vbCrLf + "第1点:")
  15.     p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "下一点<或结束>:")
  16.    
  17.     If TypeName(p2) = "Empty" Then
  18.        'MsgBox "只有输入一点,不能画多段线"
  19.        Fhz = "只有输入一点,不能画多段线"
  20.     Else
  21.        n = 2: m = 2 * n - 1
  22.        ReDim Preserve pt(m)
  23.       
  24.        pt(0) = p1(0): pt(1) = p1(1)
  25.        pt(m - 1) = p2(0): pt(m) = p2(1)
  26.       
  27.        Set Ent = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt)
  28.        Ent.color = Col
  29.        Ent.Update
  30.       
  31.        Pdbz = True
  32.       
  33.        Do While Pdbz = True
  34.           p1 = p2: p2 = Empty
  35.           p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "下一点<或结束>:")
  36.          
  37.           If TypeName(p2) = "Empty" Then
  38.              Pdbz = False
  39.              Exit Do
  40.           Else
  41.          
  42.              n = n + 1: m = n * 2 - 1
  43.              ReDim Preserve pt(m)
  44.             
  45.              pt(m - 1) = p2(0): pt(m) = p2(1)
  46.              Ent.Coordinates = pt
  47.              Ent.Update
  48.           End If
  49.        Loop
  50.        Fhz = Ent.Length
  51.       
  52.     End If
  53.    
  54.     AddPline = Fhz
  55. End Function
 楼主| 发表于 2013-7-31 18:07:36 | 显示全部楼层
yshf 发表于 2013-7-22 22:27
试用以下函数(注意:在VB中则将ThisDrawing修改为acadapp.ActiveDocument):

还没测试,但是无论如何都要感谢您,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:21 , Processed in 0.151923 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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