火焰 发表于 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点后取消,便是画线,这个问题困扰我很久了,总是没解决,感谢不尽啊!


yshf 发表于 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 static/image/common/back.gif
Private Function 画多线段(颜色 As String) As AcadLWPolyline 改为
      Private Function 画多线段(颜 ...

首先谢谢这位大哥的解答,后期绑定这样改可以用了,但是关于画多线段问题,如果在选取所有点后判断点数的话,是不能实时看见一条已画点与下一个点之间的橡皮筋(活动的线)的,可偏偏这一点是要实现的,不知要怎么办

yshf 发表于 2013-7-22 22:27:13

本帖最后由 yshf 于 2013-7-22 22:49 编辑

试用以下函数(注意:在VB中则将ThisDrawing修改为acadapp.ActiveDocument):Public Function AddPline(Col)
    '画多段线,并返回其长度
    Dim p1 As Variant
    Dim p2 As Variant
    Dim n As Integer
    Dim m As Integer
    Dim pt() As Double
    Dim Ent As AcadLWPolyline'在VB中改为 Dim Ent As Object
    Dim Pdbz As Boolean
    Dim Fhz
   
    On Error Resume Next
   
    p1 = ThisDrawing.Utility.GetPoint(, vbCrLf + "第1点:")
    p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "下一点<或结束>:")
   
    If TypeName(p2) = "Empty" Then
       'MsgBox "只有输入一点,不能画多段线"
       Fhz = "只有输入一点,不能画多段线"
    Else
       n = 2: m = 2 * n - 1
       ReDim Preserve pt(m)
      
       pt(0) = p1(0): pt(1) = p1(1)
       pt(m - 1) = p2(0): pt(m) = p2(1)
      
       Set Ent = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt)
       Ent.color = Col
       Ent.Update
      
       Pdbz = True
      
       Do While Pdbz = True
          p1 = p2: p2 = Empty
          p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "下一点<或结束>:")
         
          If TypeName(p2) = "Empty" Then
             Pdbz = False
             Exit Do
          Else
         
             n = n + 1: m = n * 2 - 1
             ReDim Preserve pt(m)
            
             pt(m - 1) = p2(0): pt(m) = p2(1)
             Ent.Coordinates = pt
             Ent.Update
          End If
       Loop
       Fhz = Ent.Length
      
    End If
   
    AddPline = Fhz
End Function

火焰 发表于 2013-7-31 18:07:36

yshf 发表于 2013-7-22 22:27 static/image/common/back.gif
试用以下函数(注意:在VB中则将ThisDrawing修改为acadapp.ActiveDocument):

还没测试,但是无论如何都要感谢您,谢谢!
页: [1]
查看完整版本: 新手求教,前期绑定怎么改为后期帮定,感谢!