@jhdempsey, thanks to report.
There was a mistake in the operations order.
This one seems to work as expected.
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
[assembly: CommandClass(typeof(ViewSample.CommandMethods))]
namespace ViewSample
{
public class CommandMethods
{
enum ViewDirection { Top, Bottom, Front, Back, Left, Right, SeIso, SwIso, NeIso, NwIso }
private void SetView(ViewDirection vDir)
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
Vector3d viewDir;
switch (vDir)
{
case ViewDirection.Top:
default:
viewDir = Vector3d.ZAxis; break;
case ViewDirection.Bottom:
viewDir = Vector3d.ZAxis.Negate(); break;
case ViewDirection.Front:
viewDir = Vector3d.YAxis.Negate(); break;
case ViewDirection.Back:
viewDir = Vector3d.YAxis; break;
case ViewDirection.Left:
viewDir = Vector3d.XAxis.Negate(); break;
case ViewDirection.Right:
viewDir = Vector3d.XAxis; break;
case ViewDirection.SeIso:
viewDir = new Vector3d(1.0, -1.0, 1.0); break;
case ViewDirection.SwIso:
viewDir = new Vector3d(-1.0, -1.0, 1.0); break;
case ViewDirection.NeIso:
viewDir = new Vector3d(1.0, 1.0, 1.0); break;
case ViewDirection.NwIso:
viewDir = new Vector3d(-1.0, 1.0, 1.0); break;
}
using (var view = ed.GetCurrentView())
{
view.ViewDirection = viewDir;
ed.SetCurrentView(view);
db.UpdateExt(true);
var viewTransform =
Matrix3d.WorldToPlane(viewDir) *
Matrix3d.Displacement(view.Target.GetAsVector().Negate()) *
Matrix3d.Rotation(view.ViewTwist, view.ViewDirection, view.Target);
var extents = db.TileMode ?
new Extents3d(db.Extmin, db.Extmax) :
(int)Application.GetSystemVariable("CVPORT") == 1 ?
new Extents3d(db.Pextmin, db.Pextmax) :
new Extents3d(db.Extmin, db.Extmax);
extents.TransformBy(viewTransform);
view.Width = (extents.MaxPoint.X - extents.MinPoint.X) * 1.2;
view.Height = (extents.MaxPoint.Y - extents.MinPoint.Y) * 1.2;
view.CenterPoint = new Point2d(
(extents.MinPoint.X + extents.MaxPoint.X) / 2.0,
(extents.MinPoint.Y + extents.MaxPoint.Y) / 2.0);
ed.SetCurrentView(view);
}
}
[CommandMethod("0")]
public void ViewBottom()
{
SetView(ViewDirection.Bottom);
}
[CommandMethod("1")]
public void ViewSouthWestIso()
{
SetView(ViewDirection.SwIso);
}
[CommandMethod("2")]
public void ViewFront()
{
SetView(ViewDirection.Front);
}
[CommandMethod("3")]
public void ViewSeIso()
{
SetView(ViewDirection.SeIso);
}
[CommandMethod("4")]
public void ViewLeft()
{
SetView(ViewDirection.Left);
}
[CommandMethod("5")]
public void ViewTop()
{
SetView(ViewDirection.Top);
}
[CommandMethod("6")]
public void ViewSouthEastIso()
{
SetView(ViewDirection.Right);
}
[CommandMethod("7")]
public void ViewNorthWestIso()
{
SetView(ViewDirection.NwIso);
}
[CommandMethod("8")]
public void ViewBack()
{
SetView(ViewDirection.Back);
}
[CommandMethod("9")]
public void ViewNorthEastIso()
{
SetView(ViewDirection.NeIso);
}
}
}