- // © Andrey Bushman, 2014 
- // Тестирование метода ViewportTableRecord.SetUcsToWorld(). 
- // Обсуждение здесь: http://adn-cis.org/forum/index.php?topic=559.0 
- using System; 
- using cad = Autodesk.AutoCAD.ApplicationServices.Application; 
- using Ap = Autodesk.AutoCAD.ApplicationServices; 
- using Db = Autodesk.AutoCAD.DatabaseServices; 
- using Ed = Autodesk.AutoCAD.EditorInput; 
- using Gm = Autodesk.AutoCAD.Geometry; 
- using Rt = Autodesk.AutoCAD.Runtime; 
-   
- [assembly: Rt.CommandClass(typeof(AndreyBushman.Samples.TestClass))] 
-   
- namespace AndreyBushman.Samples { 
-   
-         public sealed class TestClass { 
-   
-                 [Rt.CommandMethod("test", Rt.CommandFlags.Session)] 
-                 public static void Test() { 
-                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor; 
-                         // Предполагается, что DWG присутствует, в нём один лист (он же текущий) 
-                         // и на этом листе текущим является единственный видовой экран. 
-                         const String path = @"C:\test\test.dwg"; 
-                         Db.Database prevDb = Db.HostApplicationServices.WorkingDatabase; 
-                         Db.Database db = new Db.Database(false, true); 
-                         db.ReadDwgFile(path, System.IO.FileShare.ReadWrite, true, null); 
-                         db.CloseInput(true); 
-                         Db.HostApplicationServices.WorkingDatabase = db; 
-                         using (Db.Transaction tr = db.TransactionManager.StartTransaction()) { 
-                                 Db.ViewportTable vt = (Db.ViewportTable)tr.GetObject(db.ViewportTableId, 
-                                         Db.OpenMode.ForRead); 
-                                 Db.ViewportTableRecord vtr = (Db.ViewportTableRecord)tr.GetObject( 
-                                         vt[Db.SymbolUtilityServices.ViewportActiveName], Db.OpenMode.ForWrite); 
-   
-                                 Db.Layout layout = tr.GetObject(Db.LayoutManager.Current.GetLayoutId( 
-                                         Db.LayoutManager.Current.CurrentLayout), Db.OpenMode.ForWrite) as Db.Layout; 
-                                 layout.LayoutName += "+"; 
-   
-                                 // Для одного и того же файла я получаю здесь то 2, то 1 в разных сеансах работы. Почему? 
-                                 Int16 cvportIndex = (Int16)cad.GetSystemVariable("CVPORT"); 
-                                 // Здесь количество элементов всегда 2 
-                                 Db.ObjectIdCollection ids = layout.GetViewports(); 
-   
-                                 Db.Viewport vp = tr.GetObject(ids[1], // пока задал 1 вместо cvportIndex 
-                                         Db.OpenMode.ForWrite) as Db.Viewport; 
-   
-                                 Boolean vpLocked = vp.Locked; 
-                                 vp.Locked = false; 
-                                 // Меняю цвет видового экрана, с которым работаю 
-                                 vp.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Red); 
-                                 vp.SetUcsToWorld(); // это работает 
-                                 vp.Locked = vpLocked; 
-   
-                                 // vtr.SetUcsToWorld(); // это не работает  
-   
-                                 ed.WriteMessage("Current layout name: {0}\n", Db.LayoutManager.Current.CurrentLayout); 
-                                 ed.WriteMessage("Current viewport name: {0}\n", Db.SymbolUtilityServices.ViewportActiveName); 
-   
-                                 tr.Commit(); 
-                         } 
-                         Db.HostApplicationServices.WorkingDatabase = prevDb; 
-                         db.SaveAs(path, Db.DwgVersion.Current); 
-                 } 
-         } 
- }