读了叶老师“”如何编程读取墙的轮廓线“的文章(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