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

问题说明:

 在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返回的值,然后再进行下面的步骤.这就可以解决用户到底输入点没有的问题了。  这是我现在想到的我认为最好方法,也不知还有没有更好的方法或是我不知道的属性来判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值