CAD.net Zoom
视图缩放的几个方法:
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq; namespace Autodesk.AutoCAD.EditorInput { public static class ExtensionMethods { public static Matrix3d EyeToWorld(this ViewTableRecord view) { if (view == null) throw new ArgumentNullException("view"); return Matrix3d.Rotation(-view.ViewTwist, view.ViewDirection, view.Target) * Matrix3d.Displacement(view.Target - Point3d.Origin) * Matrix3d.PlaneToWorld(view.ViewDirection); } public static Matrix3d WorldToEye(this ViewTableRecord view) { return view.EyeToWorld().Inverse(); } public static void Zoom(this Editor ed, Extents3d ext) { if (ed == null) throw new ArgumentNullException("ed"); using (ViewTableRecord view = ed.GetCurrentView()) { ext.TransformBy(view.WorldToEye()); view.Width = ext.MaxPoint.X - ext.MinPoint.X; view.Height = ext.MaxPoint.Y - ext.MinPoint.Y; view.CenterPoint = new Point2d( (ext.MaxPoint.X + ext.MinPoint.X) / 2.0, (ext.MaxPoint.Y + ext.MinPoint.Y) / 2.0); ed.SetCurrentView(view); } } public static void ZoomCenter(this Editor ed, Point3d center, double scale = 1.0) { if (ed == null) throw new ArgumentNullException("ed"); using (ViewTableRecord view = ed.GetCurrentView()) { center = center.TransformBy(view.WorldToEye()); view.Height /= scale; view.Width /= scale; view.CenterPoint = new Point2d(center.X, center.Y); ed.SetCurrentView(view); } } public static void ZoomExtents(this Editor ed) { if (ed == null) throw new ArgumentNullException("ed"); Database db = ed.Document.Database; db.UpdateExt(false); Extents3d ext = (short)Application.GetSystemVariable("cvport") == 1 ? new Extents3d(db.Pextmin, db.Pextmax) : new Extents3d(db.Extmin, db.Extmax); ed.Zoom(ext); } public static void ZoomObjects(this Editor ed, IEnumerable<ObjectId> ids) { if (ed == null) throw new ArgumentNullException("ed"); using (Transaction tr = ed.Document.TransactionManager.StartTransaction()) { Extents3d ext = ids .Where(id => id.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(Entity)))) .Select(id => ((Entity)tr.GetObject(id, OpenMode.ForRead)).GeometricExtents) .Aggregate((e1, e2) => { e1.AddExtents(e2); return e1; }); ed.Zoom(ext); tr.Commit(); } } public static void ZoomScale(this Editor ed, double scale) { if (ed == null) throw new ArgumentNullException("ed"); using (ViewTableRecord view = ed.GetCurrentView()) { view.Width /= scale; view.Height /= scale; ed.SetCurrentView(view); } } public static void ZoomWindow(this Editor ed, Point3d p1, Point3d p2) { using (Line line = new Line(p1, p2)) { ed.Zoom(line.GeometricExtents); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界