您的位置:首页 > 其它

关于Geometry下Point3d实例返回值是否为空的判断方法

2010-10-28 14:09 169 查看
问题说明:

在c#中,定义一个Geometry.point3d,然后用ed.getpoint 方法获取CAD文档屏幕上的点.如果我在获取时不想选点,也不输入坐标.以下面实例化一个点Point3d TmpPt为例:PromptPointOptions promptPtOp = new PromptPointOptions(prompt);

PromptPointResult resPt;
resPt = ed.GetPoint(promptPtOp);

//实例化一个点Point3d TmpPt

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的值在返回时就算不输入还是会返回为 TmpPt.X=0,TmpPt.Y=0,TmpPt.Z=0.

如果我在实例化point3d过后,在使用时,如果取消了选择点,我要怎么才能判断这个实例的值为null呢?不可能x,y,z均为0就表示为空吧?因为用户有可能就选择0,0,0为坐标。所以,我觉得应该在调用getpoint方法后再作一个判断,判断返回的值到底是用户输入的0,0,0,还是程序的默认值0,0,0。 我的解决方法如下:

封装GetPoint类,然后在自己的方法WDGetpoint中加入一个参数 out bool isNull =false 表示是否输入了坐标值 true表示没有输入值

/// <summary>
/// AutoCAD中屏幕中选择一个点
/// </summary>
/// <param name="prompt">在输入时的提示</param>
/// <param name="isNull">表示是否输入了坐标值 true表示没有输入值</param>
/// <returns>返回选择的点坐标,坐标为一个数组 如果不输入isNull=true 否则为false</returns>
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("选择一个点:",out isNull );

if(isNull==true)

{

ed.WriteMessage("没有输入点/n");

return; //没有输入点,return退出本方法。
}

else

{

ed.WriteMessage("/n点坐标 X={0} Y={1} Z={2}",pt.X,pt.Y,pt.Z);

}

}

也就是在实例中先判断isnull返回的值,然后再进行下面的步骤.这就可以解决用户到底输入点没有的问题了。 这是我现在想到的我认为最好方法,也不知还有没有更好的方法或是我不知道的属性来判断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: