[讨论]GE下的疑问
在c#中,定义一个Geometry.point3d,然后用ed.getpoint 方法获取CAD文档屏幕上的点.如果我在获取时不想选点,也不输入坐标.如下:
PromptPointOptions promptPtOp = new PromptPointOptions(prompt);
PromptPointResult resPt;
resPt = ed.GetPoint(promptPtOp);
Point3d TmpPt;
//正常输入情况下
if (resPt.Status == PromptStatus.OK)
{
//正常输入可以得到值。
TmpPt = resPt.Value;
}
//如果
else if (resPt.Status == PromptStatus.Cancel)//用户取消
{
//ed.WriteMessage("用户按了取消ESC键/n");
//调试用
ed.WriteMessage("null\n");
}
在正常选择情况下TmpPt可以得到一个值,那么在用户按了ESC或其他取消键(鼠标右键后),由于point3d的X,Y,Z三个坐标是double类型
它的X,Y,Z的值还是会为0。
如果我在实例化point3d过后,在使用时,如果取消了选择点,我要怎么才能判断这个实例的值为null呢?不可能x,y,z均为0就表示为空吧?因为
用户有可能就选择0,0,0为坐标呢。不知各位看客是怎么判断的?
小弟是个新手,也许对于你们来说问的简单,但如果你知道,还是请指点一下。谢谢!由于我的乐筑天下币只有一个,所以就不加分了。
只能根据resPt.Status去判断,OK就是选中了,Cancel就是取消了 但就算是取消了,在return TmpPt 时, 还是返回了TmpPt.x=0 ,TmpPt.y=0,TmpPt.z=0。在point3d里面也有一个类似于resPt.Status的属性吗? 暂时解决了这个问题,处理方法如下面代码:
//封装GetPoint类,然后在自己的类中加入一个参数 out bool isNull =false表示是否输入了坐标值 true表示没有输入值
///
/// AutoCAD中屏幕中选择一个点
///
/// 在输入时的提示
/// 表示是否输入了坐标值 true表示没有输入值
/// 返回选择的点坐标,坐标为一个数组 如果不输入isNull=true 否则为false
public static Point3d WDGetpoint(string prompt, out bool isNull)
{
PromptPointOptions promptPtOp = new PromptPointOptions(prompt);
promptPtOp.AllowNone = true;
PromptPointResult resPt;
resPt = ed.GetPoint(promptPtOp);
Point3d TmpPt;
isNull = true;//初始化为true 表示返回的值为null
//判断用户输入
if (resPt.Status == PromptStatus.OK)//正常输入
{
//得到正确的坐标值。
TmpPt = resPt.Value;
isNull = false; //返回值不为null
}
else if (resPt.Status == PromptStatus.Cancel)//用户取消
{
//调试用
ed.WriteMessage("null\n");
}
else if (resPt.Status == PromptStatus.None)
{
//调试用
ed.WriteMessage("null\n");
}
return TmpPt;
}
//方法调用
void test()
{
Point3d pt=WDGetpoint("选择一个点:",outisNull );
if(isNull==true)
{
ed.WriteMessage("没有输入点\n");
return;
}
else
{
ed.WriteMessage("\n点坐标 X={0} Y={1}Z={2}",pt.X,pt.Y,pt.Z);
}
}
也就是先判断isnull的值,然后再进行下面的步骤.这就可以解决返回0的结果了。这是我现在想到的我认为最好方法,也不知还有没有更好的方法或是我不知道的属性。
//正常输入情况下
if (resPt.Status == PromptStatus.OK)
{
Point3d TmpPt; // TmpPt定义在这里呢?如果不点OK,就不存在这个点,是不是相当于NULL
//正常输入可以得到值。
TmpPt = resPt.Value;
}
页:
[1]