/* ============================================================================== * 功能描述:PhaseUtil * 创 建 者:Garrett * 创建日期:2019/10/18 16:25:14 * ==============================================================================*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Mechanical; using SAGA.RevitUtils; using SAGA.RevitUtils.Extends; namespace Saga.PlugIn.ModelCheck { /// /// PhaseUtil /// public static class PhaseUtil { public readonly static string UseablePhaseName = "阶段1"; /// /// 获取系统使用的阶段Id /// /// /// public static ElementId GetUsePhaseId(this Document doc) { var phase = GetUsePhase(doc); if (phase == null) { return ElementId.InvalidElementId; } return phase.Id; } /// /// 获取系统使用的阶段 /// /// /// public static Phase GetUsePhase(this Document doc) { var elements = doc.GetElements(BuiltInCategory.OST_Phases); foreach (var element in elements) { var tempName = element.Name.Replace(" ", "").Trim(); if (UseablePhaseName == tempName) { return element; } } return null; } /// /// 获取视图的阶段Id /// /// /// public static ElementId GetUsePhaseId(this View view) { var doc = view.Document; //Parameter para = view.GetParameter(BuiltInParameter.VIEW_PHASE); //ElementId phaseId = para.AsElementId(); return GetUsePhaseId(doc); ; } /// /// 获取视图使用的阶段 /// /// /// public static Phase GetUsePhase(this View view) { var doc = view.Document; return doc.GetElement(GetUsePhaseId(view)) as Phase; } public static void ValidateUsePhase(Phase phase) { if (phase == null) { throw new Exception("操纵视图不存在,名称为“阶段1”的选项"); } } public static ElementId GetCurrentPhaseId(this Space space) { return space.GetParameterElementId(BuiltInParameter.ROOM_PHASE_ID) ?? ElementId.InvalidElementId; } /// /// 获取系统指定阶段下的空间模型 /// /// /// public static List GetUseSpaces(this Document doc) { var useId = GetUsePhaseId(doc); if (useId == null || useId == ElementId.InvalidElementId) { return new List(); } var spaces = doc.GetElements(BuiltInCategory.OST_MEPSpaces).OfType(); return spaces.Where(s => s.GetCurrentPhaseId() == useId && s.Area > 0.001).ToList(); } /// /// 获取系统指定阶段下的空间模型 /// /// /// public static List GetUseSpaces(this FilteredElementCollector collector) { var sourceSpaces = collector.Clone().FilterElements(BuiltInCategory.OST_MEPSpaces).OfType().ToList(); if (!sourceSpaces.Any()) { return sourceSpaces; } var doc = sourceSpaces[0].Document; var useId = GetUsePhaseId(doc); if (useId == null || useId == ElementId.InvalidElementId) { return new List(); } return sourceSpaces.Where(s => s.IsSpace()) .ToList(); // sourceSpaces.Where(s => s.GetCurrentPhaseId() == useId && s.Area > 0.001).ToList(); } /// /// 判断是否是阶段1的空间 /// /// /// public static bool IsPhase1Space(this Space space) { var doc = space.Document; var useId = GetUsePhaseId(doc); return space.GetCurrentPhaseId() == useId; } /// /// 空间标高是否是当前使用视图标高 /// /// /// public static bool IsViewLevel(this Space space) { var doc = space.Document; var useViewId = doc.GetUseView(); if (useViewId == null) { return false; } return space.Level?.Id == useViewId.GenLevel?.Id; } } }