qq1254582201 发表于 2021-4-30 00:36:45

选取对象,wblock 后设定viewtablerecord居中显示

本帖最后由 qq1254582201 于 2021-6-10 15:06 编辑

public static class Extension
    {
      public static void ZoomExtents(this Database db)
      {
            if (db == null)
                throw new ArgumentNullException("db");

            if (db.TileMode)
                acedVports2VportTableRecords();
            else
                db.TileMode = true;
            db.UpdateExt(false);
            using (var tr = db.TransactionManager.StartOpenCloseTransaction())
            {
                var view = (ViewportTableRecord)tr.GetObject(db.CurrentViewportTableRecordId, OpenMode.ForWrite);
                var ratio = view.Width / view.Height;
                var ext = new Extents3d(db.Extmin, db.Extmax);
                ext.TransformBy(view.WorldToEye());
                var lg = ext.MaxPoint.X - ext.MinPoint.X;
                var ht = ext.MaxPoint.Y - ext.MinPoint.Y;
                if (lg / ht < ratio)
                {
                  view.Height = ht;
                  view.Width = ht * ratio;
                }
                else
                {
                  view.Height = lg / ratio;
                  view.Width = lg;
                }
                view.CenterPoint = new Point2d(
                  (ext.MaxPoint.X + ext.MinPoint.X) / 2.0,
                  (ext.MaxPoint.Y + ext.MinPoint.Y) / 2.0);
                tr.Commit();
            }

      }

      public static Matrix3d WorldToEye(this AbstractViewTableRecord view)
      {
            if (view == null)
                throw new ArgumentNullException("view");
            return
                Matrix3d.WorldToPlane(view.ViewDirection) *
                Matrix3d.Displacement(view.Target.GetAsVector().Negate()) *
                Matrix3d.Rotation(view.ViewTwist, view.ViewDirection, view.Target);
      }

      
    }

666SHUN 发表于 2021-4-30 09:04:02

楼主,这是可以做块预览那种吗
页: [1]
查看完整版本: 选取对象,wblock 后设定viewtablerecord居中显示