Community
Public Class Test <CommandMethod("GetUCS", CommandFlags.NoTileMode)> _ Public Sub GetUCS() Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurdb As Database = acDoc.Database Dim ed As Editor = acDoc.Editor() Dim peo As New PromptEntityOptions("Select a viewport : ") peo.SetRejectMessage("Select a viewport.") peo.AddAllowedClass(GetType(Autodesk.AutoCAD.DatabaseServices.Viewport), True) Dim per As PromptEntityResult = ed.GetEntity(peo) Dim vpId As ObjectId = per.ObjectId Dim acadDoc As AcadDocument = Autodesk.AutoCAD.ApplicationServices.DocumentExtension.GetAcadDocument(acDoc) ed.SwitchToModelSpace() Using tr As Transaction = acCurdb.TransactionManager.StartTransaction() Dim vp As Autodesk.AutoCAD.DatabaseServices.Viewport = TryCast(tr.GetObject(vpId, OpenMode.ForRead), Autodesk.AutoCAD.DatabaseServices.Viewport) 'Setting the chosen viewport active acadDoc.ActivePViewport = vp.AcadObject 'I just want to read the x-axis vector to know whether the viewport has been rotated or not Dim curXdir As Vector3d = acCurdb.Ucsxdir ed.WriteMessage(vbLf & curXdir.ToString) tr.Commit() End Using ed.SwitchToPaperSpace() End Sub End Class
Hi
Here is some C# code that set a viewport UCS, I would assume the same code works as well to retrieve the current UCS:
[CommandMethod("SetViewportUcs")] public void SetViewportUcs() { Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; AcadPViewport acadViewport = null; AcadDocument acadDoc = doc.GetAcadDocument() as AcadDocument; acadDoc.ActiveLayout = acadDoc.Layouts.Item("Layout1"); //Reference the ViewPort object on Layout (the ActiveLayout) if (acadDoc.PaperSpace.Item(1).ObjectName == "AcDbViewport") { acadViewport = acadDoc.PaperSpace.Item(1) as AcadPViewport; } //Make sure the Viewport is displayed and on acadViewport.Display(true); acadViewport.ViewportOn = true; //Before making a pViewport active the mspace property needs //to be True for a floating viewport acadDoc.MSpace = true; acadDoc.ActivePViewport = acadViewport; acadDoc.Regen(AcRegenType.acActiveViewport); Matrix3d newUcsMat = Matrix3d.AlignCoordinateSystem( new Point3d(0, 0, 0), new Vector3d(1, 0, 0), new Vector3d(0, 1, 0), new Vector3d(0, 0, 1), new Point3d(0, 0, 0), new Vector3d(0, 1, 0), new Vector3d(-1, 0, 0), new Vector3d(0, 0, 1)); ed.CurrentUserCoordinateSystem = newUcsMat; }
Regards,
Philippe.