这段代码根据垂直点之间的间距沿多条直线放置一个块“holden”,只是简单地划分为间隔,您可以修改以使用固定的间隔距离。一个良好的起点。也可以在这里搜索batterticks
对于那些感兴趣的人来说,它可以用来检查汽车是否在十字路口触底。
- Sub draw_vehicle()
- Dim CAR As String
- Dim arcobj As AcadArc
- Dim oPoly As AcadEntity
- Dim blkobj As AcadEntity
- Dim retVal As Variant
- Dim snapPt As Variant
- Dim oCoords As Variant
- Dim blpnt1() As Variant
- ReDim blpnt1(100)
- Dim blpnt2() As Variant
- ReDim blpnt2(100)
- Dim vertPt(0 To 2) As Double
- Dim Pt1(0 To 2) As Double
- Dim Pt2(0 To 2) As Double
- Dim newPt(0 To 2) As Double
- Dim iCnt, w, x, y, z As Integer
- Dim cRad, interval, blkangle As Double
- Dim circObj As AcadCircle
- Dim lineObj As AcadLine
- On Error GoTo Something_Wrong
- For Each Item In ThisDrawing.Blocks
- If Item.Name = "holden" Then GoTo continue_on
- Next Item
- ' exits out of program
- GoTo Exit_out
- continue_on:
- w = 1
- ThisDrawing.Utility.GetEntity oPoly, snapPt, vbCr & "Select polyline :"
- If oPoly.ObjectName = "AcDbPolyline" Then
- oCoords = oPoly.Coordinates
- Else: MsgBox "This object is not a polyline!"
- Exit Sub
- End If
- interval = CDbl(InputBox("Enter interval:", , 1#))
- If interval < 1 Then
- interval = 1
- End If
- For iCnt = 0 To UBound(oCoords) - 2 Step 2
- Pt1(0) = oCoords(iCnt): Pt1(1) = oCoords(iCnt + 1): Pt1(2) = 0#
- newPt(0) = Pt1(0)
- newPt(1) = Pt1(1)
- newPt(2) = 0#
- iCnt = iCnt + 2
- Pt2(0) = oCoords(iCnt): Pt2(1) = oCoords(iCnt + 1): Pt2(2) = 0#
- x = (Pt1(0) - Pt2(0)) / interval
- y = (Pt1(1) - Pt2(1)) / interval
- 'reset back 2 values
- iCnt = iCnt - 2
- cRad = 2.8
- startang = 4.712
- endang = 1.57
- CAR = "HOLDEN"
- For z = 1 To interval
- vertPt(0) = newPt(0) - x
- vertPt(1) = newPt(1) - y
- vertPt(2) = 0#
- 'blpnt1(w) = vertPt
- Set arcobj = ThisDrawing.ModelSpace.AddArc(vertPt, cRad, endang, startang)
- retval2 = arcobj.IntersectWith(oPoly, acExtendOtherEntity)
- arcobj.Delete
- Set arcobj = Nothing
- blkangle = ThisDrawing.Utility.AngleFromXAxis(retval2, vertPt)
- Set blkobj = ThisDrawing.ModelSpace.InsertBlock(vertPt, CAR, 1#, 1#, 1#, blkangle)
- Set blkobj = Nothing
- w = w + 1
- newPt(0) = newPt(0) - x
- newPt(1) = newPt(1) - y
- Next z
- Next iCnt
- Something_Wrong:
- MsgBox Err.Description
- Exit_out:
- End Sub
|