C# CAD操作之定位实体位置(视图操作缩放)

工具帮助类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;




///


/// 
/// desc:视图操作类,缩放
/// auth:LYK
/// date:2017/12/11 10:36:26
///
///



namespace CadTool
{
    public static class ViewTableTools
    {
        ///
        /// 实现视图的比例缩放
        ///

        ///
        /// 缩放比例
        public static void ZoomScaled(this Editor ed, double scale)
        {
            //得到当前视图
            //ViewTableRecord view = ed.GetCurrentView();
            ////修改视图的宽度和高度
            //view.Width /= scale;
            //view.Height /= scale;
            ////更新当前视图
            //ed.SetCurrentView(view);
            acadApplication.ZoomScaled(scale, AcZoomScaleType.acZoomScaledRelative);
        }


        private static AcadApplication acadApplication = (AcadApplication)Application.AcadApplication;
        ///
        /// 实现视图的窗口缩放
        ///

        ///
        /// 窗口角点
        /// 窗口角点
        public static void ZoomWindow(this Editor ed, Point3d pt1, Point3d pt2)
        {
            double[] doubles1 = new double[3] { pt1.X, pt1.Y, pt1.Z };
            double[] doubles2 = new double[3] { pt2.X, pt2.Y, pt2.Z };
            //参数要求是双精度的数组
            acadApplication.ZoomWindow(doubles1, doubles2);
            //创建一临时的直线用于获取两点表示的范围
            //using (Line line = new Line(pt1, pt2))
            //{
            //    ////获取两点表示的范围
            //    //Extents3d extents = new Extents3d(line.GeomExtents.MinPoint, line.GeomExtents.MaxPoint);
            //    ////获取范围内的最小值点及最大值点
            //    //Point2d minPt = new Point2d(extents.MinPoint.X, extents.MinPoint.Y);
            //    //Point2d maxPt = new Point2d(extents.MaxPoint.X, extents.MaxPoint.Y);
            //    ////得到当前视图
            //    //ViewTableRecord view = new ViewTableRecord();


            //    ////设置视图的中心点、高度和宽度
            //    //view.CenterPoint = minPt + (maxPt - minPt) / 2;
            //    ////view.Height = maxPt.Y - minPt.Y;
            //    ////view.Width = maxPt.X - minPt.X;
            //    //view.Height = maxPt.Y - minPt.Y + 10;
            //    //view.Width = maxPt.X - minPt.X + 10;
            //    ////更新当前视图
            //    ////ed.SetCurrentView(view);


            //}
        }
        ///
        /// 根据图形边界显示视图
        ///

        ///
        public static void ZoomExtens(this Editor ed)
        {
            acadApplication.ZoomExtents();
            //Database db = ed.Document.Database;
            ////更新当前模型空间的范围
            //db.UpdateExt(true);
            ////根据当前图形的界限范围对视图进行缩放
            //if (db.Extmax.X < db.Extmin.X)
            //{
            //    Plane plane = new Plane();
            //    Point3d pt1 = new Point3d(plane, db.Limmin);
            //    Point3d pt2 = new Point3d(plane, db.Limmax);
            //    ed.ZoomWindow(pt1, pt2);
            //}
            //else
            //{
            //    ed.ZoomWindow(db.Extmin, db.Extmax);
            //}
        }
        ///
        /// 根据对象的范围显示视图
        ///

        ///
        /// 实体ID
        public static void ZoomObject(this Editor editor, ObjectId objectId)
        {
            Database db = editor.Document.Database;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取实体对象
                Entity entity = trans.GetObject(objectId, OpenMode.ForRead) as Entity;
                if (entity == null)
                {
                    return;
                }
                //根据实体的范围对视图进行缩放
                Extents3d extents3 = entity.GeomExtents;
                extents3.TransformBy(editor.CurrentUserCoordinateSystem.Inverse());
                editor.ZoomWindow(extents3.MinPoint, extents3.MaxPoint);
                trans.Commit();
            }
        }
    }
}



使用方法:

 ViewTableTools.ZoomObject(editor, objectId);

你可能感兴趣的:(C#,CAD)