// © Andrey Bushman, 2014
// Тестирование метода ViewportTableRecord.SetUcsToWorld().
// Обсуждение здесь: http://adn-cis.org/forum/index.php?topic=559.0
using System;
using cad = Autodesk.AutoCAD.ApplicationServices.Application;
using App = 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() {
const String path = @"C:\test\test.dwg"; // Предполагается, что 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);
vtr.UcsFollowMode = true; // допустим, пусть разворачивает вид параллельно UCS (хотя мне это и не надо)
vtr.SetUcsToWorld(); // не сработало: не назначена WCS
vtr.SetViewDirection(Db.OrthographicView.TopView); // пробовал даже так
tr.Commit();
}
Db.HostApplicationServices.WorkingDatabase = prevDb;
db.SaveAs(path, Db.DwgVersion.Current);
}
}
}