Hi,
This one works whatever the view direction.
public static void ZoomExtents(this Editor ed, Database db)
{
using (ViewTableRecord view = ed.GetCurrentView())
{
Extents3d extents = new Extents3d(db.Extmin, db.Extmax);
Matrix3d WCS2DCS =
Matrix3d.Rotation(-view.ViewTwist, view.ViewDirection, view.Target) *
Matrix3d.Displacement(view.Target - Point3d.Origin) *
Matrix3d.PlaneToWorld(view.ViewDirection);
extents.TransformBy(WCS2DCS.Inverse());
Point2d center = new Point2d(
(extents.MinPoint.X + extents.MaxPoint.X) / 2.0,
(extents.MinPoint.Y + extents.MaxPoint.Y) / 2.0);
view.Height = (extents.MaxPoint.Y - extents.MinPoint.Y);
view.Width = (extents.MaxPoint.X - extents.MinPoint.X);
view.CenterPoint = center;
ed.SetCurrentView(view);
db.UpdateExt(true);
}
}
[CommandMethod("ze")]
public void ZoomExtentsCmd()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
doc.Editor.ZoomExtents(doc.Database);
}