jiangfei200809 发表于 2012-7-20 16:03:47

根据一点获其所在取闭合区域面积

前期在研究CAD的时候,想弄一个点击一个闭合区域内一点就获取这个区域的方法,后来尝试了使用boundary命令,可以实现。
现在把C#代码贴上来,希望对大家有用。
其中一个重要的环节就是调用CAD命令,这个借用了论坛里面一个高手的代码,不好意思忘了高手名字了。反正能够跳过boundary的回车控制。
代码如下:

      public void BoundaryCAD()
      {
            PromptPointOptions pPointOptions = new PromptPointOptions("\n 选择一个点");
            PromptPointResult pPointResult = pDocument.Editor.GetPoint(pPointOptions);
            if (pPointResult.Status == PromptStatus.OK)
            {
                Point3d point3d = pPointResult.Value;

                InvokeArx.Command(true, "_Boundary", point3d, "\0");

                PromptSelectionResult pResult=pDocument.Editor.SelectLast();
                SelectionSet pSelectionSet = pResult.Value;
                using (Transaction tran = pDatabase.TransactionManager.StartTransaction())
                {
                  foreach (ObjectId pObjectId in pSelectionSet.GetObjectIds())
                  {
                        Entity pEntity = tran.GetObject(pObjectId,OpenMode.ForWrite) as Entity;
                        if ((pEntity as Polyline) != null)
                        {
                            Polyline pPolyline = pEntity as Polyline;
                            pDocument.Editor.WriteMessage("\n当前区域面积是:" + pPolyline.Area.ToString());
                        }
                      pEntity.Erase(true);
                  }
                  tran.Commit();
                }
            }
      }效果图如下:

那个高手的类我放在附件里,


雪山飞狐_lzh 发表于 2012-7-20 17:07:38

Cad2011版本 这个问题可以直接代码解决 桌子提供了一个新函数解决这个问题 名字我忘了。。。
不过这个函数有点鸡肋 必须范围可见

jiangfei200809 发表于 2012-7-20 17:11:33

雪山飞狐_lzh 发表于 2012-7-20 17:07 static/image/common/back.gif
Cad2011版本 这个问题可以直接代码解决 桌子提供了一个新函数解决这个问题 名字我忘了。。。
不过这个函数 ...

是哈 2011是提供了那个函数的 不过以前版本没有...现在做的是2007的开发

chmenf087 发表于 2012-7-21 13:02:45

boundary的内部实现就是用xray旋转扫略实现范围的选择

bingfengxuanlan 发表于 2012-7-30 14:45:43

楼主,你好,计算这个图中的面积试一试,还要手动输入Yes/No,而且不能算出面积,是怎么回事啊

bingfengxuanlan 发表于 2012-7-30 14:48:37

本帖最后由 bingfengxuanlan 于 2012-7-30 16:32 编辑

雪山飞狐_lzh 发表于 2012-7-20 17:07 http://bbs.mjtd.com/static/image/common/back.gif
Cad2011版本 这个问题可以直接代码解决 桌子提供了一个新函数解决这个问题 名字我忘了。。。
不过这个函数 ...

飞狐,你好,如果用楼主所给的代码,会出现(指定内部点或 [高级选项(A)]: 无法导出多段线边界。是否创建面域?? <Y>),而且得不到面域的面积,如果想不用输入Y,直接计算面积的话,请问这个如何解决呢,图上传到附件中了,谢谢

雪山飞狐_lzh 发表于 2012-7-31 08:43:25

确保你的区域是闭合的

bingfengxuanlan 发表于 2012-7-31 08:45:08

bingfengxuanlan 发表于 2012-7-30 14:45 static/image/common/back.gif
楼主,你好,计算这个图中的面积试一试,还要手动输入Yes/No,而且不能算出面积,是怎么回事啊

这个已经解决啦,修改下代码就行了

      public void BoundaryCAD()
      {
            PromptPointOptions pPointOptions = new PromptPointOptions("\n 选择一个点");
            PromptPointResult pPointResult = pDocument.Editor.GetPoint(pPointOptions);
            if (pPointResult.Status == PromptStatus.OK)
            {
                Point3d point3d = pPointResult.Value;
                InvokeArx.Command(true, "-Boundary", point3d, "","","\0");
                PromptSelectionResult pResult=pDocument.Editor.SelectLast();
                SelectionSet pSelectionSet = pResult.Value;
                using (Transaction tran = pDatabase.TransactionManager.StartTransaction())
                {
                  foreach (ObjectId pObjectId in pSelectionSet.GetObjectIds())
                  {
                        Entity pEntity = tran.GetObject(pObjectId,OpenMode.ForWrite) as Entity;
                        if ((pEntity as Polyline) != null)
                        {
                            Polyline pPolyline = pEntity as Polyline;
                            pDocument.Editor.WriteMessage("\n当前区域面积是:" + pPolyline.Area.ToString());
                        }
                     else if((pEntity as Region)!=null)
                        {
                            Region pRegion=pEntity as Region;
                           pDocument.Editor.WriteMessage("\n当前区域面积是:" + pRegion.Area.ToString());
                         }
                      pEntity.Erase(true);
                  }
                  tran.Commit();
                }
            }
      }

jiangfei200809 发表于 2012-7-31 14:44:56

bingfengxuanlan 发表于 2012-7-30 14:45 static/image/common/back.gif
楼主,你好,计算这个图中的面积试一试,还要手动输入Yes/No,而且不能算出面积,是怎么回事啊

不好意思哈 你的图比我电脑CAD版本高 我猜要不是你区域没有闭合 要么你的区域是面状的 8L的帖子应该可以解决吧

wyqzm 发表于 2014-3-23 16:28:19

应该加入判断图形不封闭的情况
页: [1]
查看完整版本: 根据一点获其所在取闭合区域面积