乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 31|回复: 0

[例程]使用尺寸--角度标注

[复制链接]

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2002-5-28 20:56:00 | 显示全部楼层 |阅读模式
Public Sub Use3PDimAngle()
    Dim DimPointAngularObj As AcadDim3PointAngular
    Dim AngleVertex As Variant
    Dim FirstPoint As Variant, SecondPoint As Variant
    Dim TextPoint As Variant
   
    ' Define the new Dim3PointAngular object
    'AngleVertex(0) = 0: AngleVertex(1) = 0: AngleVertex(2) = 0
    'FirstPoint(0) = 50: FirstPoint(1) = 50: FirstPoint(2) = 0
    'SecondPoint(0) = 50: SecondPoint(1) = 100: SecondPoint(2) = 0
    'TextPoint(0) = 150: TextPoint(1) = 150: TextPoint(2) = 0
    AngleVertex = ThisDrawing.Utility.GetPoint(, "选择第1个点:")
    FirstPoint = ThisDrawing.Utility.GetPoint(, "选择第2个点:")
    SecondPoint = ThisDrawing.Utility.GetPoint(, "选择第3个点:")
    'TextPoint = ThisDrawing.Utility.GetPoint(SecondPoint, "选择文字位置:")
   
    ' Create the new Dim3PointAngular object in model space
    Set DimPointAngularObj = ThisDrawing.ModelSpace.AddDim3PointAngular(AngleVertex, FirstPoint, SecondPoint, TextPoint)
    'ZoomAll
   
    'MsgBox "A Dim3PointAngular object has been created."

End Sub
Public Sub DimAngular()
    Dim entObj1 As AcadEntity
    Dim pickPnt1 As Variant
    Dim oldOSMODE As Integer
   
    '选择被标注多义线的第1个标注边
    ThisDrawing.Utility.GetEntity entObj1, pickPnt1, "选择被标注对象:"
    If StrComp(entObj1.ObjectName, "AcDbPolyline", 1)  0 Then
        MsgBox "选择的图元不是多义线,程序将退出!"
        Exit Sub
    End If
   
    Dim vetexCount As Integer               '多义线顶点数
    Dim sVetex As Variant                   '始顶点坐标
    Dim eVetex As Variant                   '终顶点坐标
    '先求出顶点的元素数
    vetexCount = UBound(entObj1.Coordinates)
    '求顶点个数
    vetexCount = (vetexCount + 1) / 2
    '准备判断第1个顶点和最后一个顶点是否重合
    sVetex = entObj1.Coordinate(0)
    eVetex = entObj1.Coordinate(vetexCount - 1)
    '求多义线非自动闭合时的实际顶点个数
    If sVetex(0) = eVetex(0) And sVetex(1) = eVetex(1) Then
        vetexCount = vetexCount - 1
    End If
   
    oldOSMODE = ThisDrawing.GetVariable("OSMODE")
    ThisDrawing.SetVariable "OSMODE", 512
    Dim dimPnt1 As Variant, dimPnt2 As Variant
    dimPnt1 = ThisDrawing.Utility.GetPoint(, "选择第一个标注点:")
    dimPnt2 = ThisDrawing.Utility.GetPoint(, "选择第二个标注点:")
   
'------------------------------------------------------------------
    Dim I As Integer, J As Integer
    Dim lineObj1 As AcadLine
    Dim lineObj2 As AcadLine
    Dim sPnt(0 To 2) As Double
    Dim ePnt(0 To 2) As Double
    Dim X As String, Y As String
   
    On Error Resume Next
    '判断第一条临时直线的交点落在多义线的哪条边上
    For I = 0 To vetexCount - 2
        sVetex = entObj1.Coordinate(I)
        eVetex = entObj1.Coordinate(I + 1)
        Y = (dimPnt1(1) - sVetex(1)) / (eVetex(1) - sVetex(1))
        X = (dimPnt1(0) - sVetex(0)) / (eVetex(0) - sVetex(0))
        'MsgBox "X1 = " & X & Chr(13) & "Y1 = " & Y
        If StrComp(X, Y, 1) = 0 Then
            sPnt(0) = sVetex(0): sPnt(1) = sVetex(1): sPnt(2) = 0
            ePnt(0) = eVetex(0): ePnt(1) = eVetex(1): ePnt(2) = 0
            Set lineObj1 = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)
            lineObj1.Visible = False
            GoTo lineMark1
        End If
    Next
   
    sVetex = entObj1.Coordinate(0)
    eVetex = entObj1.Coordinate(vetexCount - 1)
    Y = (dimPnt1(1) - sVetex(1)) / (eVetex(1) - sVetex(1))
    X = (dimPnt1(0) - sVetex(0)) / (eVetex(0) - sVetex(0))
    'MsgBox "X1 = " & X & Chr(13) & "Y1 = " & Y
    If StrComp(X, Y, 1) = 0 Then
        sPnt(0) = sVetex(0): sPnt(1) = sVetex(1): sPnt(2) = 0
        ePnt(0) = eVetex(0): ePnt(1) = eVetex(1): ePnt(2) = 0
        Set lineObj1 = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)
        lineObj1.Visible = False
    End If
   
lineMark1:
    For I = 0 To vetexCount - 2
        sVetex = entObj1.Coordinate(I)
        eVetex = entObj1.Coordinate(I + 1)
        Y = (dimPnt2(1) - sVetex(1)) / (eVetex(1) - sVetex(1))
        X = (dimPnt2(0) - sVetex(0)) / (eVetex(0) - sVetex(0))
        'MsgBox "X2 = " & X & Chr(13) & "Y2 = " & Y
        If StrComp(X, Y, 1) = 0 Then
            sPnt(0) = sVetex(0): sPnt(1) = sVetex(1): sPnt(2) = 0
            ePnt(0) = eVetex(0): ePnt(1) = eVetex(1): ePnt(2) = 0
            Set lineObj2 = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)
            lineObj2.Visible = False
            GoTo lineMark2
        End If
    Next
   
    sVetex = entObj1.Coordinate(0)
    eVetex = entObj1.Coordinate(vetexCount - 1)
    Y = (dimPnt2(1) - sVetex(1)) / (eVetex(1) - sVetex(1))
    X = (dimPnt2(0) - sVetex(0)) / (eVetex(0) - sVetex(0))
    'MsgBox "X2 = " & X & Chr(13) & "Y2 = " & Y
    If StrComp(X, Y, 1) = 0 Then
        sPnt(0) = sVetex(0): sPnt(1) = sVetex(1): sPnt(2) = 0
        ePnt(0) = eVetex(0): ePnt(1) = eVetex(1): ePnt(2) = 0
        Set lineObj2 = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)
        lineObj2.Visible = False
    End If
   
'----------------------------------------------------------------
lineMark2:
    Dim dimObj As AcadDimAngular
    Dim insectVert As Variant
    Dim angVert(0 To 2) As Double
    Dim FirstPoint(0 To 2) As Double
    Dim SecondPoint(0 To 2) As Double
    Dim TextPoint As Variant
   
    '求第二和第三条临时直线的交点,此交点
    '就是要标注的2条边的角度标注的标注顶点
    insectVert = lineObj1.IntersectWith(lineObj2, acExtendBoth)
   
    '删除已不用的临时线
    lineObj1.Delete
    lineObj2.Delete
   
    ThisDrawing.SetVariable "OSMODE", oldOSMODE
   
    On Error Resume Next
    '确定角度标注的顶点
    angVert(0) = insectVert(0)
    angVert(1) = insectVert(1)
    angVert(2) = insectVert(2)
    '确定第一条标注边上的标注点
    FirstPoint(0) = dimPnt1(0)
    FirstPoint(1) = dimPnt1(1)
    FirstPoint(2) = dimPnt1(2)
    '确定第二条标注边上的标注点
    SecondPoint(0) = dimPnt2(0)
    SecondPoint(1) = dimPnt2(1)
    SecondPoint(2) = dimPnt2(2)
    '确定标注文字的位置
    TextPoint = ThisDrawing.Utility.GetPoint(SecondPoint, "选择标注文字位置:")
   
    '创建角度尺寸标注对象
    Set dimObj = ThisDrawing.ModelSpace.AddDimAngular(angVert, FirstPoint, SecondPoint, TextPoint)
   
    'ZoomAll
   
End Sub
Public Sub Add5PointDimAngular()
    Dim dPnt1 As Variant, dPnt2 As Variant
    Dim dPnt3 As Variant, dPnt4 As Variant
    Dim oldOSMODE As Integer
   
    '保存原目标捕捉的设定
    oldOSMODE = ThisDrawing.GetVariable("OSMODE")
    '设定自动捕捉图元对象上的最近点
    ThisDrawing.SetVariable "OSMODE", 512
   
    '选择第1条尺寸界线上的第1个标注点
    dPnt1 = ThisDrawing.Utility.GetPoint(, "选择界线1标注点1:")
    '选择第1条尺寸界线上的第2个标注点
    dPnt2 = ThisDrawing.Utility.GetPoint(dPnt1, "选择界线1标注点2:")
    '选择第2条尺寸界线上的第1个标注点
    dPnt3 = ThisDrawing.Utility.GetPoint(, "选择界线2标注点1:")
    '选择第2条尺寸界线上的第2个标注点
    dPnt4 = ThisDrawing.Utility.GetPoint(dPnt3, "选择界线2标注点2:")
   
    Dim lineObj1 As AcadLine, lineObj2 As AcadLine
    Dim insectPnt As Variant
   
    '创建第1条临时尺寸界线
    Set lineObj1 = ThisDrawing.ModelSpace.AddLine(dPnt1, dPnt2)
    lineObj1.Visible = False        '将其设为不可见
    '创建第2条临时尺寸界线
    Set lineObj2 = ThisDrawing.ModelSpace.AddLine(dPnt3, dPnt4)
    lineObj2.Visible = False
    '求出2条临时尺寸界线的交点,即标注顶点angVert
    insectPnt = lineObj1.IntersectWith(lineObj2, acExtendBoth)
   
    '恢复原来的目标捕捉设定
    ThisDrawing.SetVariable "OSMODE", oldOSMODE
   
    '删除2条临时尺寸界线
    lineObj1.Delete
    lineObj2.Delete
   
'--------------------------------------------------------------
    Dim dimObj As AcadDimAngular
    Dim TextPoint As Variant
    '选定标注文字的显示位置
    TextPoint = ThisDrawing.Utility.GetPoint(dPnt4, "选择标注文字位置:")
   
    '用dPnt1点作为FirstPoint点,dPnt3点作为SecondPoint点
    Set dimObj = ThisDrawing.ModelSpace.AddDimAngular(insectPnt, dPnt1, dPnt3, TextPoint)
   
    dimObj.AngleFormat = acRadians
   
End Sub
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 06:44 , Processed in 0.138114 second(s), 54 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表