根据一点获其所在取闭合区域面积
前期在研究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();
}
}
}效果图如下:
那个高手的类我放在附件里,
Cad2011版本 这个问题可以直接代码解决 桌子提供了一个新函数解决这个问题 名字我忘了。。。
不过这个函数有点鸡肋 必须范围可见 雪山飞狐_lzh 发表于 2012-7-20 17:07 static/image/common/back.gif
Cad2011版本 这个问题可以直接代码解决 桌子提供了一个新函数解决这个问题 名字我忘了。。。
不过这个函数 ...
是哈 2011是提供了那个函数的 不过以前版本没有...现在做的是2007的开发 boundary的内部实现就是用xray旋转扫略实现范围的选择 楼主,你好,计算这个图中的面积试一试,还要手动输入Yes/No,而且不能算出面积,是怎么回事啊 本帖最后由 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,直接计算面积的话,请问这个如何解决呢,图上传到附件中了,谢谢 确保你的区域是闭合的 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();
}
}
}
bingfengxuanlan 发表于 2012-7-30 14:45 static/image/common/back.gif
楼主,你好,计算这个图中的面积试一试,还要手动输入Yes/No,而且不能算出面积,是怎么回事啊
不好意思哈 你的图比我电脑CAD版本高 我猜要不是你区域没有闭合 要么你的区域是面状的 8L的帖子应该可以解决吧 应该加入判断图形不封闭的情况
页:
[1]