乐筑天下

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

[编程交流] 1条路径上有2个点

[复制链接]

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 06:44:41 | 显示全部楼层 |阅读模式
你好
 
我尝试了几种方法让2个点(圆环,见下图)跟随绘图路径(多段线)。我用arraypath等试过了。
它不起作用,我也没有找到任何解决这个问题的方法。有人能帮我吗?我使用Autocad 2013。
 
两个圆必须始终遵循多段线路径,且圆之间的距离相同。就像火车或有轨电车一样。用户必须能够输入必须复制的对象之间的特定距离,并且用户还必须能够选择必须复制的次数。
 
请问,有人知道解决方案吗?
 
Thx提前。
 
074443gu6kid114kdr4x8d.jpg
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-6 06:53:55 | 显示全部楼层
measure命令
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 06:58:05 | 显示全部楼层
 
我也试过了,但没用。总是有一个圆不遵循路径。
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-6 07:01:18 | 显示全部楼层
执行,但插入块或AutoCAD点(点)。做得很好。
 
 
您尝试使用的附图
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:08:46 | 显示全部楼层
 
我本以为该测度将沿曲线给出相等的长度,但不是OP所要求的,即相等的弦长。
 
我可能会使用一个合适的块,并将其旋转以实现所需的对齐。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:11:17 | 显示全部楼层
有一种方法可以将一个块放置在pline上,第一个插入点是圆的中心点,第二个旋转点是计算出来的,块旋转到这个角度,代码在VBA中,但我现在要在VL中做,变量crad是中心之间的距离,试图制作一个称为“holden”的块
 
  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. If ThisDrawing.ActiveSpace = acModelSpace Then
  23. Set Thisspace = ThisDrawing.ModelSpace
  24. Else: Set Thisspace = ThisDrawing.PaperSpace
  25. End If
  26. For Each Item In ThisDrawing.Blocks
  27. If Item.Name = "holden" Then GoTo continue_on
  28. Next Item
  29. ' insert holden block
  30. InsertBlock "p:\Autodesk\vba\holdencar.dwg", 0
  31. continue_on:
  32. w = 1
  33. ThisDrawing.Utility.GetEntity oPoly, snapPt, vbCr & "Select polyline :"
  34. If oPoly.ObjectName = "AcDbPolyline" Then
  35. oCoords = oPoly.Coordinates
  36. Else: MsgBox "This object is not a polyline! Please do again"
  37. Exit Sub
  38. End If
  39. interval = CDbl(InputBox("Enter interval:", , 1#))
  40. If interval < 1 Then
  41. interval = 1
  42. End If
  43. For iCnt = 0 To UBound(oCoords) - 2 Step 2
  44. Pt1(0) = oCoords(iCnt): Pt1(1) = oCoords(iCnt + 1): Pt1(2) = 0#
  45. newPt(0) = Pt1(0)
  46. newPt(1) = Pt1(1)
  47. newPt(2) = 0#
  48. iCnt = iCnt + 2
  49. Pt2(0) = oCoords(iCnt): Pt2(1) = oCoords(iCnt + 1): Pt2(2) = 0#
  50. x = (Pt1(0) - Pt2(0)) / interval
  51. y = (Pt1(1) - Pt2(1)) / interval
  52. 'reset back 2 values
  53. iCnt = iCnt - 2
  54. cRad = 3.05
  55. startang = 4.71239
  56. endang = 1.570796
  57. CAR = "HOLDEN"
  58. For z = 1 To interval
  59. vertPt(0) = newPt(0) - x
  60. vertPt(1) = newPt(1) - y
  61. vertPt(2) = 0#
  62. 'blpnt1(w) = vertPt
  63. 'Set arcobj = ThisDrawing.ModelSpace.AddArc(vertPt, cRad, endang, startang)
  64. Set arcobj = Thisspace.AddArc(vertPt, cRad, endang, startang)
  65. retval2 = arcobj.IntersectWith(oPoly, acExtendOtherEntity)
  66. arcobj.Delete
  67. Set arcobj = Nothing
  68. blkangle = ThisDrawing.Utility.AngleFromXAxis(retval2, vertPt)
  69. 'Set blkobj = ThisDrawing.ModelSpace.InsertBlock(vertPt, CAR, 1#, 1#, 1#, blkangle)
  70. Set blkobj = Thisspace.InsertBlock(vertPt, CAR, 1#, 1#, 1#, blkangle)
  71. Set blkobj = Nothing
  72. w = w + 1
  73. newPt(0) = newPt(0) - x
  74. newPt(1) = newPt(1) - y
  75. Next z
  76. Next iCnt
  77. GoTo Exit_out
  78. Something_Wrong:
  79. MsgBox Err.Description
  80. Exit_out:
  81. End Sub
  82. Private Sub InsertBlock1()
  83.    '****************************************
  84.    '*** Code from VisibleVisual.com ********
  85.    '****************************************
  86.    InsertBlock "p:\Autodesk\vbaholden.dwg", 0
  87.    'Change the 0 to another value (in degrees) to rotate the block'
  88.    End Sub
  89.    Function InsertBlock(ByVal blockpath As String, ByVal rotation As Double)
  90.    Dim blockobj As AcadBlockReference
  91.    Dim insertionPnt As Variant
  92.    Dim prompt1 As String
  93.    'set rotation Angle
  94.    rotateAngle = rotation
  95.    'rotateAngle = rotation * 3.141592 / 180#
  96.    'Prompt is used to show instructions in the command bar
  97.    prompt1 = vbCrLf & "Enter block insert point: "
  98.    'ThisDrawing.ActiveSpace = acModelSpace
  99.    insertionPnt = ThisDrawing.Utility.GetPoint(, prompt1)
  100.    Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, blockpath, 1#, 1#, 1#, rotateAngle)
  101.    'Change Modelspace into Paperspace to insert the block into Paperspace
  102.    End Function
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 07:15:54 | 显示全部楼层
 
您好,在autocadfile下面
 
2分/秒。图纸
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 07:22:12 | 显示全部楼层
 
这就是我现在正在做的。但有时它不止一个街区,需要很多时间,有时你跳错了线。
因此,使用lisproutine(如果可能的话)不会出错
回复

使用道具 举报

7

主题

30

帖子

23

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 07:27:04 | 显示全部楼层
 
Thx,但我不知道如何启动或如何在Autocad上运行VBA程序。不管怎样,我希望你能在VL取得成功
这是autocadfile 2pointspath。图纸
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-6 07:33:59 | 显示全部楼层
您的问题更复杂,因为您必须将块“TEMP”(在x和y方向上的长度不同)与插入点和计算点对齐,距离等于块的长度。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:02 , Processed in 0.381117 second(s), 75 queries .

© 2020-2025 乐筑天下

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