Thứ Ba, 17 tháng 12, 2024

Zoom vào đối tượng ObjectId trong AutoCAD | ZoomHightLight Lập trình AutoCAD dotNet

Ứng dụng được phát triển/Sưu tầm bởi đội ngũ AutoLISP Thật là đơn giản
   

Tác giả: hmc@lisp.vn
Thông tin thêm: 👉👉👉

Hàm ZoomHighlight 

1 Thêm hàm ZoomHighlight

Lưu mã sau
Code:
public static void ZoomHighlight(ObjectId id)
        {
            // Lấy tài liệu hiện hành
            Document doc = AcadApp.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;

            using (Transaction tr = doc.TransactionManager.StartTransaction())
            {
                try
                {
                    // Lấy đối tượng từ ObjectId
                    Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity;
                    if (ent != null)
                    {
                        // Lấy giới hạn hình học của đối tượng
                        Extents3d extents = ent.GeometricExtents;
                                               
                        Point3d minPoint = extents.MinPoint;
                        Point3d maxPoint = extents.MaxPoint;

                        Point2d center = new Point2d(
                            (minPoint.X + maxPoint.X) / 2.0,
                            (minPoint.Y + maxPoint.Y) / 2.0
                        );

                        double height = maxPoint.Y - minPoint.Y;
                        double width = maxPoint.X - minPoint.X;
                        var cview = ed.GetCurrentView();
                        ed.WriteMessage("\n Chiều cao của view trước zoom: " + cview.Height);
                        // Tính tỷ lệ khung hình của viewport hiện tại
                        double aspectRatio = cview.Width / cview.Height;

                        // Điều chỉnh chiều cao và chiều rộng để phù hợp với khung nhìn
                        if (height * aspectRatio < width)
                        {
                            height = width / aspectRatio;
                        }
                        // đặt scale nếu muốn zoom nhỏ hơn object một ít
                        double scale = 1.5;
                       

                        cview.CenterPoint = center;
                        cview.Height = height * scale;
                        cview.Width = height * aspectRatio * scale;
                        // Thiết lập view cho editor
                        ed.SetCurrentView(cview);
                        ent.Highlight();
                        ed.WriteMessage("\n Chiều cao của view sau zoom: " + cview.Height);
                    }
                    else
                    {
                        ed.WriteMessage("\nKhông thể lấy đối tượng từ ObjectId.");
                    }

                    tr.Commit();
                }
                catch (System.Exception ex)
                {
                    ed.WriteMessage($"\nLỗi: {ex.Message}");
                    //Tác giả: hmc@lisp.vn
                }
            }
        }
Tác giả: hmc@lisp.vn

Cách sử dụng 

2 Thêm class MyCommands.cs

Code:
        [CommandMethod("ZoomHighlight")]
        public static void GiongblockCMD()
        {
            Document doc = AcadApp.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            using (DocumentLock lk = doc.LockDocument())
            {
                PromptEntityOptions peo = new PromptEntityOptions("\nPick object");
                peo.SetRejectMessage("Please pick object");                
                var per = ed.GetEntity(peo);
                if (per.Status != PromptStatus.OK)
                { return; }

                var id = per.ObjectId;

                ZoomHighlight(id);
                //Tác giả: hmc@lisp.vn
            }
        }
Tác giả: hmc@lisp.vn

Nhóm AutoCAD dotNet


Link tham gia nhóm Zalo: http://dnz.lisp.vn


---------------------------------------------------------------------------------------------
Ứng dụng được phát triển bởi đội ngũ AutoLISP Thật là đơn giản - Tác giả ứng dụng in D2P

    

Mọi thông tin xin liên hệ Fanpage AutoLISP Thật là đơn giản!
Cảm ơn bạn đã theo dõi!

Không có nhận xét nào:

Đăng nhận xét

Tìm dimstyle textstyle blockdef trong Database | Search Dimstyle Textstyle BlockTableRecord in AutoCAD dotNet | Lập trình AutoCAD dotNet

Ứng dụng được phát triển/Sưu tầm bởi đội ngũ AutoLISP Thật là đơn giản     Thông tin thêm: 👉👉👉