乐筑天下

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

[编程交流] VBA-沿Lin的多块

[复制链接]

21

主题

146

帖子

127

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2022-7-6 17:15:46 | 显示全部楼层 |阅读模式
请有人告诉我,我应该如何开始生产VBA宏,将由一个窗体操作,允许我选择一个多段线,直线或三维多段线;然后选择一个块;最后选择要插入所选直线、多边形、3dpoly等的块之间的间距。
 
我可能会遇到的一个问题是,我只需要将间距设为X坐标,而需要忽略Z坐标。
 
这张图是一个平面图,就像我上面说的,它有一些轮廓,我需要完全忽略,因此上面的观点。
 
理想情况下,我只想被推到正确的方向上,自己会尽可能多地尝试编写代码(从其他线程来看,我可能需要专家们的更多帮助)。
 
提前谢谢。
回复

使用道具 举报

0

主题

132

帖子

198

银币

限制会员

铜币
-21
发表于 2022-7-6 17:48:40 | 显示全部楼层
你开始宏的任何部分了吗?我们能看看吗?
回复

使用道具 举报

21

主题

146

帖子

127

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2022-7-6 17:58:05 | 显示全部楼层
不,我现在还没有开始,只要我复制一个三维多边形并删除其Z坐标,measure命令似乎可以完成所有这些。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 18:19:07 | 显示全部楼层
这段代码根据垂直点之间的间距沿多条直线放置一个块“holden”,只是简单地划分为间隔,您可以修改以使用固定的间隔距离。一个良好的起点。也可以在这里搜索batterticks
 
对于那些感兴趣的人来说,它可以用来检查汽车是否在十字路口触底。
 
  1. Sub draw_vehicle()
  2. Dim CAR As String
  3. Dim arcobj As AcadArc
  4. Dim oPoly As AcadEntity
  5. Dim blkobj As AcadEntity
  6. Dim retVal As Variant
  7. Dim snapPt As Variant
  8. Dim oCoords As Variant
  9. Dim blpnt1() As Variant
  10. ReDim blpnt1(100)
  11. Dim blpnt2() As Variant
  12. ReDim blpnt2(100)
  13. Dim vertPt(0 To 2) As Double
  14. Dim Pt1(0 To 2) As Double
  15. Dim Pt2(0 To 2) As Double
  16. Dim newPt(0 To 2) As Double
  17. Dim iCnt, w, x, y, z As Integer
  18. Dim cRad, interval, blkangle As Double
  19. Dim circObj As AcadCircle
  20. Dim lineObj As AcadLine
  21. On Error GoTo Something_Wrong
  22. For Each Item In ThisDrawing.Blocks
  23. If Item.Name = "holden" Then GoTo continue_on
  24. Next Item
  25. ' exits out of program
  26. GoTo Exit_out
  27. continue_on:
  28. w = 1
  29. ThisDrawing.Utility.GetEntity oPoly, snapPt, vbCr & "Select polyline :"
  30. If oPoly.ObjectName = "AcDbPolyline" Then
  31. oCoords = oPoly.Coordinates
  32. Else: MsgBox "This object is not a polyline!"
  33. Exit Sub
  34. End If
  35. interval = CDbl(InputBox("Enter interval:", , 1#))
  36. If interval < 1 Then
  37. interval = 1
  38. End If
  39. For iCnt = 0 To UBound(oCoords) - 2 Step 2
  40. Pt1(0) = oCoords(iCnt): Pt1(1) = oCoords(iCnt + 1): Pt1(2) = 0#
  41. newPt(0) = Pt1(0)
  42. newPt(1) = Pt1(1)
  43. newPt(2) = 0#
  44. iCnt = iCnt + 2
  45. Pt2(0) = oCoords(iCnt): Pt2(1) = oCoords(iCnt + 1): Pt2(2) = 0#
  46. x = (Pt1(0) - Pt2(0)) / interval
  47. y = (Pt1(1) - Pt2(1)) / interval
  48. 'reset back 2 values
  49. iCnt = iCnt - 2
  50. cRad = 2.8
  51. startang = 4.712
  52. endang = 1.57
  53. CAR = "HOLDEN"
  54. For z = 1 To interval
  55. vertPt(0) = newPt(0) - x
  56. vertPt(1) = newPt(1) - y
  57. vertPt(2) = 0#
  58. 'blpnt1(w) = vertPt
  59. Set arcobj = ThisDrawing.ModelSpace.AddArc(vertPt, cRad, endang, startang)
  60. retval2 = arcobj.IntersectWith(oPoly, acExtendOtherEntity)
  61. arcobj.Delete
  62. Set arcobj = Nothing
  63. blkangle = ThisDrawing.Utility.AngleFromXAxis(retval2, vertPt)
  64. Set blkobj = ThisDrawing.ModelSpace.InsertBlock(vertPt, CAR, 1#, 1#, 1#, blkangle)
  65. Set blkobj = Nothing
  66. w = w + 1
  67. newPt(0) = newPt(0) - x
  68. newPt(1) = newPt(1) - y
  69. Next z
  70. Next iCnt
  71. Something_Wrong:
  72. MsgBox Err.Description
  73. Exit_out:
  74. End Sub
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 16:10 , Processed in 0.618965 second(s), 60 queries .

© 2020-2025 乐筑天下

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