大家好,欢迎来到IT知识分享网。
在 AutoCAD 中,有多种方法将直线 acadLine 转换为轻量多段线 acadLWPolyline。
本文提供 AutoCAD VBA 代码实现方法。
只需要两个 Sub 过程:1)选择集创建;2)对象类型转换过程。
Option Explicit --------------------------------------------------------------------------------------- Public Sub LineToPLines() ' 对象转换主过程 Dim Objt As Object Dim SeleObjts As AcadSelectionSet Call CreateSelectionSet(SeleObjts, "SeleObjts") SeleObjts.SelectOnScreen Dim nLine As Long Dim Lines() As AcadLine Dim i As Long Dim PLine As AcadLWPolyline ' 下面开始转换 begin to transformer ..... Dim Layer As AcadLayer: Set Layer = ThisDraw.Layers.Add("OCE PLines") For Each Objt In SeleObjts If TypeOf Objt Is AcadLine Then nLine = nLine + 1: ReDim Preserve Lines(1 To nLine): Set Lines(nLine) = Objt End If Next Objt Set SeleObjts = Nothing Dim pt(3) As Double For i = 1 To UBound(Lines) pt(0) = Lines(i).StartPoint(0): pt(2) = Lines(i).EndPoint(0) pt(1) = Lines(i).StartPoint(1): pt(3) = Lines(i).EndPoint(1) Set PLine = ThisDraw.ModelSpace.AddLightWeightPolyline(pt) PLine.ConstantWidth = 300 PLine.Layer = "OCE PLines" Next i MsgBox "Lines are kept; New PLines are in OCE PLines Layer --- by Oceanable 2024.01.01" + Chr(10) + "原直线仍然保留;新创建的 PL 线都放在 OCE PLines 图层中!" End Sub --------------------------------------------------------------------------------------- Public Sub CreateSelectionSet(SeleObjts As AcadSelectionSet, Name As String) On Error Resume Next If Not IsNull(ThisDrawing.SelectionSets.Item(Name)) Then Set SeleObjts = ThisDrawing.SelectionSets.Item(Name) SeleObjts.Delete End If Set SeleObjts = ThisDrawing.SelectionSets.Add(Name) End Sub
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136546.html