EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 499|回复: 1
打印 上一主题 下一主题

如何编程读取墙的轮廓线

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-15 12:46:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

解决思路:

Revit API没有直接提供接口读取墙的轮廓线。读取这个数据可以通过读取墙的几何信息(Geometry属性)获得代表这个墙的Solid,然后从这个solid中遍历solid中的所以后面找到墙的侧面(应该有两个),(判断依据是根据侧面的法向量与Wall.Orientation 向量平行) 这个方法从Revit2012(不含2012)之前的版本可以用。

在Revit2012中提供了一个更直接的方法来获取墙,板,屋顶的侧面和上,下表面。传入目标对象即可返回其指定的面。

  • HostObjectUtils.GetTopFaces()
  • HostObjectUtils.GetBottomFaces()
  • HostObjectUtils.GetSideFaces()

返回侧面后,如果墙上有门窗洞口等,那么在这个侧面中会有多个EdgeArray, 找到外包的这个EdgeArray。它可以代表墙的轮廓线。如果需要获得基于墙中心的轮廓线,平移下这个EdgeArray即可。


难点分析:

这个思路的难点在于如何从多个EdgeArray中找到最大的那个外包EdgeArray,这是一个纯几何问题,网上这类代码和算法应该不少。

这里推荐一个简单方法。分别找出这些EdgeArray对象中的最长的Edge,然后比较那个具有最长Edge的EdgeArray,它就是最外面的那个EdgeArray


叶雄进

转载本文请说明出处:http://blog.csdn.net/joexiongjin/article/details/7275096


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

4

主题

864

帖子

1390

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1390
2F
发表于 2014-2-20 14:11:28 | 只看该作者
路过!!! 不发表意见……
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-25 10:00

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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