转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/7474247
作者: 叶雄进
2012.4.18
在Revit里面,构件之间会有互相相交的关系,彼此会相切。也可以用Revit的命令功能(Join Geometry或Unjoin Geometry)来实现构件几何相切或解除相切。
这样的相切对于构建的几何形状是有影响的。很多时候开发者需要获取原先的未切割状态下的几何体。在Revit 2012中开始为FamilyInstance 类提供了GetOriginalGeometry() 函数来获取族实例的几何体。比如当墙与柱子相交后,柱子被墙给切了。这时候可以调用上面的函数获取柱子没有切割下的几何体。
那么对于墙来说,墙与其他墙连接时,墙的几何体发上变化,如何获取此时墙的原始几何体呢?
一个办法是解除所有的墙与墙的连接。Revit提供了二个函数用于墙连接的操作:
WallUtils.AllowWallJoinAtEnd() , WallUtils.DisallowWallJoinAtEnd().
然后再获取没有连接情况下的墙的几何体。这个操作有两个问题1. 改变了模型; 2. 据客户报告,可能使会发生错误。(因为没有模型和代码,尚未得知具体原因)
这里我想出另个办法.
Revit 2012 提供了几何体创建函数: GeometryCreationUtilities 类下面的几个几何体创建函数。
CreateBlendGeometry
CreateExtrusionGeometry
CreateRevolvedGeometry
CreateSweptBlendGeometry
CreateSweptGeometry
大多数墙是一个横截面相同的拉伸体。所以我们可以获取墙的起始端横截面。(通过HostObjectUtils.GetSideFaces(),然后遍历出起始端的面)
以及墙的基线 Wall.Location. 就可以拉伸出墙实体。
我尚未测试可行性,但是理论上应该是完全可行。
希望有帮助!