Revit 编程获取墙侧面的两种方法


读了叶老师“”如何编程读取墙的轮廓线“的文章(http://blog.csdn.net/joexiongjin/article/details/7275096),我写了几行代码实现其中获取墙侧面的部分。 另外,我试了一下,也可以通过HostObjectUtils.GetSideFaces达到同样的目的。

第一种方法:

通过墙的几何信息获得墙的solid,然后遍历solid的所有表面,找到其法向量与Wall.Orientation平行的表面。

public List<PlanarFace> GetWallFaces(Wall wall)
{
Options opt = new Options();
opt.ComputeReferences = true;
opt.DetailLevel = Autodesk.Revit.DB.DetailLevels.Medium;
GeometryElement ge = wall.get_Geometry(opt);
List<PlanarFace> lstpf = new List<PlanarFace>();
foreach (GeometryObject obj in ge.Objects)
{
Solid solid = obj as Solid;
if (solid != null)
{
foreach (Face face in solid.Faces)
{
PlanarFace pf = face as PlanarFace;
if (pf != null)
{
if (pf.Normal.CrossProduct(wall.Orientation).IsZeroLength())
{
lstpf.Add(pf);
}
}
}
return lstpf;
}
}
return null;
}


第二种方法:

利用HostObjectUtils类的静态方法GetSideFaces 

public PlanarFace GetWallSideFace(Wall wall, ShellLayerType slt)
{
Reference reference = HostObjectUtils.GetSideFaces(wall, slt)[0];
PlanarFace face =
wall.GetGeometryObjectFromReference(reference) as PlanarFace;
return face;
}


参数 ShellLayerType 是枚举类型,其可取值为 ShellLayerType.Interior 或者ShellLayerType.Exteiror。顺便说一下,HostObjectUtils 还提供了 GetBottomFaces, Get TopFaces 方法。


转载本文请注明出处: http://blog.csdn.net/tpecnoc/article/details/7397259


智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告