下面的代码还记录了PLINE的图层特性。一些事情被重新安排为新的财产序列。我还修复了errorhandler部分。
注意:这个例程无法描述地记录了所有闭合的pline。“选定”Pline需要修改代码。
鉴于这是一个基于“导师”的网站,也许你应该告诉我如何记录普林斯线型。查看这两个代码示例是如何更改的,以及在Excel中的效果。现在将线型(.linetype)添加到列表中。如果有任何问题,请随时提问。
- Option Explicit
- Sub PutPLProps2XL()
- If ClosedPLSS Then
- Dim objSS As AcadSelectionSet
- Dim entEntity As AcadEntity
- Dim objExcel As Excel.Application
- Dim objRange As Excel.Range
- Dim entLWPoly As AcadLWPolyline
- Dim ent2DPoly As AcadPolyline
- Dim intCount As Integer
- On Error GoTo errhandler
- Set objExcel = GetObject(, "Excel.Application")
- On Error GoTo 0
- Set objRange = objExcel.ActiveWorkbook.ActiveSheet.Range("A1")
- objRange.value = "Layer"
- objRange.Offset(0, 1).value = "Pline Type"
- objRange.Offset(0, 2).value = "Length"
- objRange.Offset(0, 3).value = "Area"
- Set objSS = ThisDrawing.SelectionSets.Item("TempSSet")
- For intCount = 0 To objSS.count - 1
- Set entEntity = objSS.Item(intCount)
- If entEntity.ObjectName = "AcDbPolyline" Then
- Set entLWPoly = entEntity
- objRange.Offset(intCount + 1, 0).value = entLWPoly.Layer
- objRange.Offset(intCount + 1, 1).value = "LWPolyline"
- objRange.Offset(intCount + 1, 2).value = entLWPoly.Length
- objRange.Offset(intCount + 1, 3).value = entLWPoly.Area
- Else
- Set ent2DPoly = entEntity
- objRange.Offset(intCount + 1, 0).value = ent2DPoly.Layer
- objRange.Offset(intCount + 1, 1).value = "2DPolyline"
- objRange.Offset(intCount + 1, 2).value = ent2DPoly.Length
- objRange.Offset(intCount + 1, 3).value = ent2DPoly.Area
- End If
- Next
- End If
- Set objExcel = Nothing
- Exit Sub
- errhandler:
- Err.Clear
- Set objExcel = CreateObject("Excel.Application")
- With objExcel
- .Workbooks.Add
- .Visible = True
- .WindowState = xlMinimized
- End With
- Resume Next
- End Sub
- Function ClosedPLSS() As Boolean
- Dim intCode(19) As Integer
- Dim varData(19) As Variant
- ClosedPLSS = False
- intCode(0) = -4: varData(0) = "<Or"
- intCode(1) = -4: varData(1) = "<And"
- intCode(2) = 0: varData(2) = "POLYLINE" 'or closed PLINES's
- intCode(3) = -4: varData(3) = "&="
- intCode(4) = 70: varData(4) = 1
- intCode(5) = -4: varData(5) = "&"
- intCode(6) = 70: varData(6) = 135
- intCode(7) = -4: varData(7) = "<Not"
- intCode( = -4: varData( = "&="
- intCode(9) = 70: varData(9) = 8
- intCode(10) = -4: varData(10) = "Not>"
- intCode(11) = -4: varData(11) = "And>"
-
- intCode(12) = -4: varData(12) = "<And"
- intCode(13) = 0: varData(13) = "LWPOLYLINE" 'or closed LWP's
- intCode(14) = -4: varData(14) = "&="
- intCode(15) = 70: varData(15) = 1
- intCode(16) = -4: varData(16) = "&"
- intCode(17) = 70: varData(17) = 129
- intCode(18) = -4: varData(18) = "And>"
- intCode(19) = -4: varData(19) = "Or>"
-
- If FilteredSS(intCode, varData) > 0 Then ClosedPLSS = True
- End Function
- Private Sub SSPrep()
- Dim SSS As AcadSelectionSets
- 'choose a selection set name for temporary storage and
- 'ensure that it does not currently exist
- On Error Resume Next
- Set SSS = ThisDrawing.SelectionSets
- If SSS.count > 0 Then
- SSS.Item("TempSSet").Delete
- End If
- End Sub
- Function FilteredSS(Optional grpCode As Variant, Optional dataVal As Variant) As Integer
- Dim TempObjSS As AcadSelectionSet
- SSPrep
- Set TempObjSS = ThisDrawing.SelectionSets.Add("TempSSet")
- 'generate selection set
- TempObjSS.Select acSelectionSetAll, , , grpCode, dataVal
- FilteredSS = TempObjSS.count
- End Function
|