读了叶老师“”如何编程读取墙的轮廓线“的文章(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;
}
转载本文请注明出处: http://blog.csdn.net/tpecnoc/article/details/7397259
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。