将屏幕缩放到所选择的对象

这篇博客介绍了如何利用AutoCAD的内部Utils模块中的ZoomObjects函数,通过True参数实现对选定对象的缩放操作。内容涉及到.NET编程和CAD应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AutoCAD.Internal.Utils.ZoomObjects(True) ‘Z O


Imports ZwSoft.ZwCAD.Runtime

Imports ZwSoft.ZwCAD.DatabaseServices
Imports ZwSoft.ZwCAD.Geometry
Imports ZwSoft.ZwCAD.EditorInput
Imports ZwSoft.ZwCAD.ApplicationServices


Public Class Commands
    <CommandMethod("ZoomToObjects")> _
    Public Shared Sub ZoomToObjects()
        Dim ZcDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim ZcDb As Database = ZcDoc.Database
        Dim ZcEd As Editor = ZcDoc.Editor


        Dim result As PromptSelectionResult = ZcEd.GetSelection()
        Dim entExt As Extents3d = Nothing
        Dim entMaxpoints As Point2dCollection = New Point2dCollection
        Dim entMinpoints As Point2dCollection = New Point2dCollection


        If result.Status = PromptStatus.OK AndAlso result.Value.Count > 0 Then
            Dim ids As ObjectId() = result.Value.GetObjectIds()
            Using lockDocument As DocumentLock = ZcDoc.LockDocument
                Using ZcTrans As Transaction = ZcDb.TransactionManager.StartTransaction()
                    For Each id As ObjectId In ids
                        Dim ent As Entity = ZcTrans.GetObject(id, OpenMode.ForRead)
                        entExt = ent.Bounds.GetValueOrDefault()
                        entMaxpoints.Add(New Point2d(entExt.MaxPoint.X, entExt.MaxPoint.Y))
                        entMinpoints.Add(New Point2d(entExt.MinPoint.X, entExt.MinPoint.Y))
                    Next
                End Using
            End Using


            Dim minPt As Point2d = New Point2d
            Dim maxPt As Point2d = New Point2d


            If ids.Count > 1 Then
                MinOrMaxPt(entMinpoints, "min", minPt)
                MinOrMaxPt(entMaxpoints, "max", maxPt)
            Else
                minPt = entMinpoints(0)
                maxPt = entMaxpoints(0)
            End If


            Dim NewView As ViewTableRecord = New ViewTableRecord()
            NewView.CenterPoint = minPt + ((maxPt - minPt) / 2.0)
            NewView.Height = maxPt.Y - minPt.Y
            NewView.Width = maxPt.X - minPt.X
            ZcEd.SetCurrentView(NewView)


        End If
    End Sub


    Private Shared Sub MinOrMaxPt(ByVal pts As Point2dCollection, ByVal flag As String, ByRef Pt As Point2d)
        Dim temMinX As Double = pts(0).X, temMinY As Double = pts(0).Y
        Dim temMaxX As Double = pts(0).X, temMaxY As Double = pts(0).Y


        If flag = "min" Then
            For Each subPt As Point2d In pts
                If subPt.X < temMinX Then
                    temMinX = subPt.X
                End If


                If subPt.Y < temMinY Then
                    temMinY = subPt.Y
                End If
            Next
            Pt = New Point2d(temMinX, temMinY)
        ElseIf flag = "max" Then
            For Each subPt As Point2d In pts
                If subPt.X > temMaxX Then
                    temMaxX = subPt.X
                End If


                If subPt.Y > temMaxY Then
                    temMaxY = subPt.Y
                End If
            Next
            Pt = New Point2d(temMaxX, temMaxY)
        End If
    End Sub


End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值