// 面层对象的选择 /// <summary> /// 从整个文档中的指定集合中搜索面层对象 /// </summary> /// <param name="doc"></param> /// <param name="elementIds"> 如果其值为null,则表示搜索集合为整个文档中的所有单元 </param> /// <returns></returns> private IList <WallFace> faceLookup(Document doc, ICollection <ElementId> elementIds) { List <WallFace> faces = new List <WallFace>(); FilteredElementCollector coll; coll = (elementIds == null) ? new FilteredElementCollector(doc) : new FilteredElementCollector(doc, elementIds); // 首先判断类型 coll.OfClass(typeof(DirectShape)); // 判断单元的类别是否是指定的类别集合中的一个 List <Element> faceCategoryElems = coll.Where(ele => CategoryIds.Contains(ele.Category.Id)).ToList(); // 再判断参数中是否有标识参数 Parameter pa; string tag; foreach (Element ele in faceCategoryElems) { WallFace wf; if (!WallFace.IsWallFace(ele, out wf)) { continue; } // 满足所有过滤条件 faces.Add(wf); } return(faces); }
public bool AllowElement(Element element) { _elem = element; // if (_excludeFaceElement) // 不选择面层对象 { WallFace wf; if (WallFace.IsWallFace(element, out wf)) { return(false); } return(true); } return(true); }
// 根据指定的类别与类型来进行面层对象的过滤 /// <summary> /// 从整个文档中的指定集合中 按指定的过滤选项 搜索面层对象 /// </summary> /// <param name="doc"></param> /// <param name="elementIds"> 如果其值为null,则表示过滤集合为整个文档中的所有单元 </param> /// <returns></returns> private IList <ElementId> Filterfaces(Document doc, ICollection <ElementId> elementIds, FaceOptions opt) { List <ElementId> faces = new List <ElementId>(); FilteredElementCollector coll; coll = (elementIds == null) ? new FilteredElementCollector(doc) : new FilteredElementCollector(doc, elementIds); // 首先判断类型 与 过滤指定的类别 coll.OfClass(typeof(DirectShape)).OfCategoryId(opt.CategoryId); // 跟据参数值进行过滤 string tag; foreach (Element ele in coll) { WallFace wallface; if (!WallFace.IsWallFace(ele as DirectShape, out wallface)) { continue; } // 2. 过滤面层类型,如“防水” bool hasType = wallface.GetFaceType(out tag); if (!hasType || tag == null || !tag.Equals(opt.FaceType, StringComparison.OrdinalIgnoreCase)) { continue; } // 满足所有过滤条件 faces.Add(ele.Id); } return(faces); }