Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.ApplicationServices
Namespace GroupExtents
Public Shared Class TransactionExtensions
' A simple extension method that aggregates the extents of any entities
' passed in (via their ObjectIds)
<System.Runtime.CompilerServices.Extension> _
Public Shared Function GetExtents(tr As Transaction, ids As ObjectId()) As Extents3d
Dim ext As New Extents3d()
For Each id As Object In ids
Dim ent As Object = TryCast(tr.GetObject(id, OpenMode.ForRead), Entity)
If ent IsNot Nothing Then
ext.AddExtents(ent.GeometricExtents)
End If
Next
Return ext
End Function
End Class
Public Class Commands
<CommandMethod("GE")> _
Public Sub GroupExtents()
Dim doc As Object = Application.DocumentManager.MdiActiveDocument
Dim db As Object = doc.Database
Dim ed As Object = doc.Editor
Using tr As Object = db.TransactionManager.StartTransaction()
' Get the group dictionary from the drawing
Dim gd As DBDictionary = CType(tr.GetObject(db.GroupDictionaryId, OpenMode.ForRead), DBDictionary)
If gd.Count = 0 Then
ed.WriteMessage(vbLf & "No groups found in drawing.")
Else
' List the groups in the drawing with an index
Dim groupNames As New List(Of String)(gd.Count)
ed.WriteMessage(vbLf & "Groups:")
Dim i As Integer = 0
For Each entry As Object In gd
i += 1
ed.WriteMessage(vbLf & "{0}. {1}", i, entry.Key)
groupNames.Add(entry.Key)
Next
' Ask the user to select a group number
Dim pio As New PromptIntegerOptions(vbLf & "Enter group index")
pio.AllowNegative = False
pio.AllowZero = False
pio.DefaultValue = 1
pio.LowerLimit = 1
pio.UpperLimit = i
Dim pir As Object = ed.GetInteger(pio)
If pir.Status = PromptStatus.OK Then
' Get the selected group
Dim grp As Object = TryCast(tr.GetObject(CType(gd(groupNames(pir.Value - 1)), ObjectId), OpenMode.ForRead), Group)
If grp IsNot Nothing Then
' Call our extension method to get the extents of the group's
' referenced objects
Dim ext As Object = tr.GetExtents(grp.GetAllEntityIds())
' Print the information for the user
ed.WriteMessage(vbLf & "Group's extents are from {0} to {1}.", ext.MinPoint, ext.MaxPoint)
End If
End If
End If
' Commit the transaction
tr.Commit()
End Using
End Sub
End Class
End Namespace
|
暂时没有评论
发表评论 - 不要忘了输入验证码哦! |