using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
namespace Test
{
public class MyCommands
{
[CommandMethod("TestPointInContour")]
public void TestPointInContour()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
ObjectId viewportObjId = ObjectId.Null;
PromptEntityOptions opt = new PromptEntityOptions("\nВыберите видовой экран: ");
opt.SetRejectMessage("\nВыбран не видовой экран.\n");
opt.AddAllowedClass(typeof(Viewport), true);
// Следующие строки позволяют выбрать непрямоугольный видовой экран
opt.AddAllowedClass(typeof(Circle), true);
opt.AddAllowedClass(typeof(Polyline), true);
opt.AddAllowedClass(typeof(Polyline2d), true);
opt.AddAllowedClass(typeof(Polyline3d), true);
opt.AddAllowedClass(typeof(Ellipse), true);
opt.AddAllowedClass(typeof(Autodesk.AutoCAD.DatabaseServices.Region), true);
opt.AddAllowedClass(typeof(Spline), true);
opt.AddAllowedClass(typeof(Face), true);
PromptEntityResult viewportResult = ed.GetEntity(opt);
if (viewportResult.Status == PromptStatus.OK)
{
using (Entity ent = viewportResult.ObjectId.GetObject(OpenMode.ForRead) as Entity)// ТУТ ФАТАЛИТ!!
//System.NullReferenceException:
//"Object reference not set to an instance of an object."
// с using, с транзакцией и без
{
// Это прямоугольный видовой экран
if (ent.GetType() == typeof(Viewport))
{
viewportObjId = viewportResult.ObjectId;
}
else if (true)
{
// Видовой экран непрямоугольный - пытаемся получить его из его "подрезки"
ObjectId vpId = LayoutManager.Current.GetNonRectangularViewportIdFromClipId(viewportResult.ObjectId);
if (vpId != ObjectId.Null)
{
viewportObjId = vpId;
}
}
}
}
}
}
}