明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1704|回复: 4

[运行时] [讨论]GE下的疑问

[复制链接]
发表于 2010-6-12 12:55 | 显示全部楼层 |阅读模式

      在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为坐标呢。不知各位看客是怎么判断的?

      小弟是个新手,也许对于你们来说问的简单,但如果你知道,还是请指点一下。谢谢!由于我的明经币只有一个,所以就不加分了。

 

发表于 2010-6-12 12:58 | 显示全部楼层
只能根据resPt.Status去判断,OK就是选中了,Cancel就是取消了
 楼主| 发表于 2010-6-12 13:03 | 显示全部楼层
但就算是取消了,在return TmpPt 时, 还是返回了TmpPt.x=0 ,TmpPt.y=0,TmpPt.z=0。在point3d里面也有一个类似于resPt.Status的属性吗?
 楼主| 发表于 2010-6-12 16:07 | 显示全部楼层

暂时解决了这个问题,处理方法如下面代码:

//封装GetPoint类,然后在自己的类中加入一个参数   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;
    }

else

   {

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

  }

}

也就是先判断isnull的值,然后再进行下面的步骤.这就可以解决返回0的结果了。  这是我现在想到的我认为最好方法,也不知还有没有更好的方法或是我不知道的属性。

 

发表于 2014-9-30 16:26 | 显示全部楼层
        
        //正常输入情况下
        if (resPt.Status == PromptStatus.OK)
            {            
                  Point3d TmpPt; // TmpPt定义在这里呢?如果不点OK,就不存在这个点,是不是相当于NULL
                //正常输入可以得到值。
              TmpPt = resPt.Value;
            }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-9 01:09 , Processed in 0.341943 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表