乐筑天下

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

练手示例:给每个直线顶点加序号

[复制链接]

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2008-6-25 12:12:00 | 显示全部楼层 |阅读模式
这是一个练手的小示例。有兴趣的各位大侠可以引伸到零件标注号等小程序,还有其它的什么要求,大家都提出来,玩玩.

                               
登录/注册后可看大图

  1. Function CreatSelectionSet(InputEntityObjectName As Variant, Pt1 As Variant, Pt2 As Variant) As AcadSelectionSet
  2.    
  3.    On Error Resume Next
  4.    Dim SSet As AcadSelectionSet
  5.    If Not IsNull(ThisDrawing.SelectionSets.Item("SelectEntity")) Then
  6.      Set CreatSelectionSet = ThisDrawing.SelectionSets.Item("SelectEntity")
  7.      CreatSelectionSet.Delete
  8.    End If
  9.    Set CreatSelectionSet = ThisDrawing.SelectionSets.Add("SelectEntity")
  10.    'Pt1 = ThisDrawing.Utility.GetPoint(, "Input First Point")
  11.    'Pt2 = ThisDrawing.Utility.GetPoint(Pt1, "Input First Point")
  12.    
  13.    Dim gpCode(0) As Integer
  14.    Dim dataValue(0) As Variant
  15.    'ReDim dataValue(UBound(InputEntityObjectName)) As Variant
  16.    gpCode(0) = 0
  17.    
  18.    For ii = 0 To UBound(InputEntityObjectName)
  19.      dataValue(ii) = InputEntityObjectName(ii)
  20.    Next ii
  21.    CreatSelectionSet.Select acSelectionSetWindow, Pt1, Pt2, gpCode, dataValue
  22. End Function
  23. Sub ReadTable()
  24.    Dim Pt1(0 To 2) As Double, Pt2(0 To 2) As Double
  25.    Dim SSet As AcadSelectionSet
  26.    Dim InputEntityObjectName As Variant
  27.    Pt1(0) = 2850: Pt1(1) = 2660: Pt1(2) = 0
  28.    Pt2(0) = -10: Pt2(1) = -10: Pt2(2) = 0
  29.    InputEntityObjectName = Array("Line", "Text", "Dimension")
  30.    
  31.    Set SSet = CreatSelectionSet(InputEntityObjectName, Pt1, Pt2)
  32.    Debug.Print SSet.Count
  33.    Dim Ent As AcadEntity, DrawingText As AcadText
  34.    Dim DrawingLine As AcadLine, DrawingCircle As AcadCircle
  35.    ii = 1
  36.     Dim alignmentPoint(0 To 2) As Double
  37.     alignmentPoint(0) = 5: alignmentPoint(1) = 3: alignmentPoint(2) = 0
  38.    
  39.    For Each DrawingLine In SSet
  40.       With ThisDrawing.ModelSpace
  41.         Set DrawingCircle = .AddCircle(DrawingLine.EndPoint, 35)
  42.         Set DrawingText = .AddText(ii, alignmentPoint, 30)
  43.         With DrawingText
  44.           '.HorizontalAlignment = acHorizontalAlignmentFit
  45.           .Alignment = acAlignmentMiddleCenter
  46.           .TextAlignmentPoint = DrawingLine.EndPoint
  47.          
  48.         End With
  49.       End With
  50.       ii = ii + 1
  51.    Next
  52. End Sub
方法1
  1. Sub ll()
  2.   Dim LineData As AcadLine, ArcData As AcadArc
  3.   Dim DrawingText As AcadText, DrawingCircle As AcadCircle
  4.   Close #1
  5.   Open "D:\ls.txt" For Output As #1
  6.   
  7.   Write #1, "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", "m10", "m11", "m12"
  8.   
  9.   Dim Ent As AcadEntity
  10.   ii = 1
  11.   For Each Ent In ThisDrawing.ModelSpace
  12.             
  13.    
  14.     m1 = Ent.ObjectName
  15.     m2 = Ent.ObjectID
  16.     Select Case Ent.ObjectName
  17.       Case "AcDbLine"
  18.         Set LineData = Ent
  19.         
  20.         With LineData
  21.           Set DrawingCircle = ThisDrawing.ModelSpace.AddCircle(.StartPoint, 35)
  22.          
  23.           Set DrawingText = ThisDrawing.ModelSpace.AddText(ii, .EndPoint, 30)
  24.           With DrawingText
  25.             .Alignment = acAlignmentMiddleCenter
  26.             .TextAlignmentPoint = LineData.StartPoint
  27.             ii = ii + 1
  28.           End With
  29.          
  30.           m3 = Round(.StartPoint(0), 5)
  31.           m4 = Round(.StartPoint(1), 5)
  32.           m5 = Round(.StartPoint(2), 5)
  33.           m6 = Round(.EndPoint(0), 5)
  34.           m7 = Round(.EndPoint(1), 5)
  35.           m8 = Round(.EndPoint(2), 5)
  36.          
  37.         End With
  38.     End Select
  39.     Write #1, m1, m2, m3, m4, m6, m7, m8
  40.    
  41.   Next Ent
  42.   
  43.   Close #1
  44. End Sub

回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
4
发表于 2008-6-25 14:13:00 | 显示全部楼层
取每个端点的坐标,并输出!

                               
登录/注册后可看大图

回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2008-6-29 09:20:00 | 显示全部楼层
以下程序将点送到Excel
  1. Sub ll()
  2.    ThisDrawing.ActiveTextStyle.fontFile = "c:\windows\fonts\SIMHEI.TTF"
  3.    Dim xlsSheet As Worksheet
  4.    Set xlsSheet = ReturnXlsSheet(1)
  5.    xlsSheet.Range("a:z").ClearContents
  6.    
  7.   
  8.    Dim LineData As AcadLine, ArcData As AcadArc
  9.    Dim DrawingText As AcadText, DrawingCircle As AcadCircle
  10.    Close #1
  11.    Open "D:\ls.txt" For Output As #1
  12.    
  13.    Write #1, "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", "m10", "m11", "m12"
  14.    
  15.    Dim Ent As AcadEntity
  16.    'Debug.Print ThisDrawing.ModelSpace.Count
  17.    For ii = 1 To ThisDrawing.ModelSpace.Count
  18.      'm1 = Ent.ObjectName
  19.      Set Ent = ThisDrawing.ModelSpace.Item(ii - 1)
  20.      Debug.Print ii, Ent.ObjectName, Ent.Handle
  21.      m2 = Ent.ObjectID
  22.      Select Case Ent.ObjectName
  23.        Case "AcDbLine"
  24.          Set LineData = Ent
  25.          With LineData
  26.            'Set DrawingCircle = ThisDrawing.ModelSpace.AddCircle(.StartPoint, 35)
  27.            m1 = "第" & ii & "点"
  28.      If ii = 1 Then
  29.            m3 = Round(.StartPoint(0), 2)
  30.            m4 = Round(.StartPoint(1), 2)
  31.      Else
  32.        m3 = "=c" & ii - 1 & "+ i" & ii - 1
  33.        m4 = "=d" & ii - 1 & "+ j" & ii - 1
  34.      End If
  35.            m5 = Round(.StartPoint(2), 2)
  36.            'm6 = Round(.EndPoint(0), 2)
  37.     If ii = ThisDrawing.ModelSpace.Count Then
  38.            m6 = "=c1"
  39.            m7 = "=d1"
  40.    Else
  41.            m6 = "=c" & ii & "+ i" & ii
  42.            'm7 = Round(.EndPoint(1), 2)
  43.            m7 = "=d" & ii & "+ j" & ii
  44.    
  45.    End If
  46.            m8 = Round(.EndPoint(2), 2)
  47.            m9 = .Delta(0)
  48.            m10 = .Delta(1)
  49.            m11 = .Delta(2)
  50.            ttt = "第" & ii & "点 " & "(" & m3 & "," & m4 & ")"
  51.            
  52.            'Set DrawingText = ThisDrawing.ModelSpace.AddText(ttt, .EndPoint, 10)
  53.            With DrawingText
  54.             ' .Alignment = acAlignmentMiddleCenter
  55.             ' .TextAlignmentPoint = LineData.StartPoint
  56.             
  57.              'ii = ii + 1
  58.            End With
  59.            
  60.          End With
  61.      End Select
  62.      Write #1, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11 ', m12
  63.      
  64.      With xlsSheet
  65.        .Cells(ii, 1) = m1
  66.        .Cells(ii, 2) = m2
  67.        .Cells(ii, 3) = m3
  68.        .Cells(ii, 4) = m4
  69.        .Cells(ii, 5) = m5
  70.        .Cells(ii, 6) = m6
  71.        .Cells(ii, 7) = m7
  72.        .Cells(ii, 8) = m8
  73.        .Cells(ii, 9) = m9
  74.        .Cells(ii, 10) = m10
  75.        .Cells(ii, 11) = m11
  76.      End With
  77.    Next ii
  78.    
  79.    Close #1
  80. End SubFunction ReturnXlsSheet(InputSheetNum As Integer) As Worksheet
  81.      Dim xlApp As Object     ' This Line ,Not set Excel , run Excel
  82.      ' 发生错误时跳到下一个语句继续执行
  83.      On Error Resume Next
  84.      ' 连接Excel应用程序
  85.      Set xlApp = GetObject(, "Excel.Application")
  86.      
  87.      If Err.Number  0 Then
  88.          Set xlApp = CreateObject("Excel.Application")
  89.          xlApp.Visible = True
  90.          xlApp.Workbooks.Add
  91.      End If
  92.      ' 返回当前活动的工作表
  93.      Set ReturnXlsSheet = xlApp.Sheets(InputSheetNum)
  94. End Function
  95. Sub gggg()
  96.    Dim xlsSheet As Worksheet
  97.    Set xlsSheet = ReturnXlsSheet(1)
  98.    Dim pp(0 To 2) As Double, ppp(0 To 2) As Double
  99.    Dim ll As AcadLine
  100.    For ii = 1 To 8
  101.      For jj = 0 To 2
  102.        pp(jj) = xlsSheet.Cells(ii, jj + 3)
  103.        ppp(jj) = xlsSheet.Cells(ii, jj + 6)
  104.      Next jj
  105.      Set ll = ThisDrawing.ModelSpace.AddLine(pp, ppp)
  106.      ll.color = ii
  107.    Next ii
  108.    
  109. End Sub
  110. Sub ls()
  111.    Dim xlsSheet As Worksheet
  112.    Set xlsSheet = ReturnXlsSheet(1)
  113.    xlsSheet.Range("a:z").ClearContents
  114.   
  115.   Dim EntCount As Integer
  116.   Dim Ent As AcadEntity, lineObj As AcadLine
  117.   EntCount = ThisDrawing.ModelSpace.Count
  118.   Dim mm() As Long
  119.   Dim Num As Integer
  120.   ReDim mm(EntCount - 2) As Long
  121.   Dim BaseStartPoint As Variant, BaseEndPoint As Variant
  122.   Num = 0
  123.   For ii = 0 To EntCount - 1
  124.     Set lineObj = ThisDrawing.ModelSpace(ii)
  125.     With lineObj
  126.       If .color = 200 Then
  127.         baseentity = .ObjectID
  128.         If .StartPoint(0)  mm(jj) Then
  129.         mmm(Num) = mm(jj)
  130.         Num = Num + 1
  131.       End If
  132.     Next jj
  133.     Dim llss As Variant
  134.     llss = InputPointData(BaseEndPoint, mmm)
  135.     BaseEndPoint = llss(1)
  136.         For jj = 0 To 2
  137.           With xlsSheet
  138.             .Cells(nn, jj + 1) = llss(0)(jj)
  139.             .Cells(nn, jj + 1 + 3) = llss(1)(jj)
  140.             .Cells(nn, 7) = "第" & nn - 1 & "点"
  141.           End With
  142.         Next jj
  143.    
  144.     nn = nn + 1
  145.   Next ii
  146. End Sub
  147. Function InputPointData(InputPoint, InputArray) As Variant()
  148.   Dim Ent As AcadEntity, lineObj As AcadLine
  149.   Dim pp(1) As Variant, ppp(0 To 2) As Variant
  150.   For ii = 0 To UBound(InputArray)
  151.     Set lineObj = ThisDrawing.ObjectIdToObject(InputArray(ii))
  152.     If InputPoint(0) = lineObj.EndPoint(0) _
  153.        And InputPoint(1) = lineObj.EndPoint(1) _
  154.        And InputPoint(2) = lineObj.EndPoint(2) Then
  155.       
  156.        pp(0) = lineObj.EndPoint
  157.        pp(1) = lineObj.StartPoint
  158.       
  159.        InputPointData = pp
  160.        Exit Function
  161.     End If
  162.     If InputPoint(0) = lineObj.StartPoint(0) _
  163.       And InputPoint(1) = lineObj.StartPoint(1) _
  164.       And InputPoint(2) = lineObj.StartPoint(2) Then
  165.       
  166.          pp(0) = lineObj.StartPoint
  167.          pp(1) = lineObj.EndPoint
  168.          InputPointData = pp
  169.          Exit Function
  170.     End If
  171.   Next ii
  172. End Function
  173. Function InputEntityReturnType(InputChar As Long, InputArray As Variant)
  174.   Dim Ent As AcadEntity, Ent1 As AcadEntity
  175.   Dim pp()
  176.   ReDim pp(UBound(InputArray) - 1)
  177.   Dim BaseCount As Integer
  178.   Set Ent = ThisDrawing.ObjectIdToObject(InputChar)
  179.   BaseCount = 0
  180.   For ii = 0 To UBound(InputArray)
  181.     Set Ent1 = ThisDrawing.ObjectIdToObject(InputArray(ii))
  182.     pp(BaseCount) = Ent.IntersectWith(Ent1, acExtendNone)
  183.     BaseCount = BaseCount + 1
  184.   Next ii
  185. End Function
  186. Sub DrawingCircle()
  187.    Dim xlsSheet As Worksheet
  188.    Set xlsSheet = ReturnXlsSheet(1)
  189.    Dim pp(0 To 2) As Double, ppp(0 To 2) As Double
  190.    Dim ll As AcadLine
  191.    Dim DefineCircle As AcadCircle, TextObj As AcadText
  192.    For ii = 2 To 6
  193.      For jj = 0 To 2
  194.        pp(jj) = xlsSheet.Cells(ii, jj + 1)
  195.        ppp(jj) = xlsSheet.Cells(ii, jj + 4)
  196.      Next jj
  197.      Set DefineCircle = ThisDrawing.ModelSpace.AddCircle(pp, 25)
  198.      Set TextObj = ThisDrawing.ModelSpace.AddText(ii - 1, pp, 20)
  199.      
  200.      With TextObj
  201.         .Alignment = acAlignmentMiddleCenter
  202.         .TextAlignmentPoint = DefineCircle.Center
  203.      End With
  204.      DefineCircle.color = ii
  205.    Next ii
  206.    
  207. End Sub
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-4 08:58 , Processed in 0.427389 second(s), 59 queries .

© 2020-2025 乐筑天下

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