我试图编写一个简单的脚本来提示两个点并在它们之间画线。它完全正常,直到部分" promptForPoint(promptMsgEnd)"如果用户在命令期间取消(命中ESC),则整个程序会因致命异常而崩溃。我对瞬态图形的处理方法是否合理正确?如何正确处理用户取消?
IntegerCollection ints = new IntegerCollection(new int[] { });
TransientManager ctm = TransientManager.CurrentTransientManager;
Line l = new Line(startPoint, new Point3d(startPoint.X + 0.00000001, startPoint.Y, startPoint.Z));
ctm.AddTransient(l, TransientDrawingMode.DirectShortTerm, 128, ints);
//handle event - pointer movement
PointMonitorEventHandler handler =
delegate (object sender, PointMonitorEventArgs e)
{
l.EndPoint = e.Context.RawPoint;
ctm.UpdateTransient(l, ints);
};
//add handler for visual
_editor.PointMonitor += handler;
//prompt for point
ppr = promptForPoint(promptMsgEnd);
//remove handler and erase
_editor.PointMonitor -= handler;
ctm.EraseTransient(l, ints);
答案 0 :(得分:0)
看起来方法还可以 - 问题是TransientManager,如果用户取消程序,需要使用“使用”块进行处理。
using (TransientManager ctm = TransientManager.CurrentTransientManager)
{
//code here
}