跟命令行输入 “zoom” 空格 “ e ” 相比,此方法无动态缩放过程,速度更快。效果如下:
public static void 快速居中()
{
var view = Z.ed.GetCurrentView();
double xxx = (Z.db.Extmin.X + Z.db.Extmax.X) / 2 ;
double yyy = (Z.db.Extmin.Y + Z.db.Extmax.Y) / 2;
view .CenterPoint = new Point2d(xxx,yyy);
view.Height = Z.db.Extmax.Y - Z.db.Extmin.Y;
view.Width = Z.db.Extmax.X - Z.db.Extmin.X;
Z.ed.SetCurrentView(view);
}
public static class EditorExtension
{
public static void Zoom(this Editor ed, Extents3d ext)
{
if (ed == null)
throw new ArgumentNullException("ed");
using (ViewTableRecord view = ed.GetCurrentView())
{
Matrix3d worldToEye = Matrix3d.WorldToPlane(view.ViewDirection) *
Matrix3d.Displacement(Point3d.Origin - view.Target) *
Matrix3d.Rotation(view.ViewTwist, view.ViewDirection, view.Target);
ext.TransformBy(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 ZoomExtents(this Editor 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);
}
}