123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /* ==============================================================================
- * 功能描述: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
- {
- /// <summary>
- /// PhaseUtil
- /// </summary>
- public static class PhaseUtil
- {
- public readonly static string UseablePhaseName = "阶段1";
- /// <summary>
- /// 获取系统使用的阶段Id
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static ElementId GetUsePhaseId(this Document doc)
- {
- var phase = GetUsePhase(doc);
- if (phase == null)
- {
- return ElementId.InvalidElementId;
- }
- return phase.Id;
- }
- /// <summary>
- /// 获取系统使用的阶段
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static Phase GetUsePhase(this Document doc)
- {
- var elements = doc.GetElements<Phase>(BuiltInCategory.OST_Phases);
- foreach (var element in elements)
- {
- var tempName = element.Name.Replace(" ", "").Trim();
- if (UseablePhaseName == tempName)
- {
- return element;
- }
- }
- return null;
- }
- /// <summary>
- /// 获取视图的阶段Id
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- 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); ;
- }
- /// <summary>
- /// 获取视图使用的阶段
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 获取系统指定阶段下的空间模型
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static List<Space> GetUseSpaces(this Document doc)
- {
- var useId = GetUsePhaseId(doc);
- if (useId == null || useId == ElementId.InvalidElementId)
- {
- return new List<Space>();
- }
- var spaces = doc.GetElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).OfType<Space>();
- return spaces.Where(s => s.GetCurrentPhaseId() == useId && s.Area > 0.001).ToList();
- }
- /// <summary>
- /// 获取系统指定阶段下的空间模型
- /// </summary>
- /// <param name="collector"></param>
- /// <returns></returns>
- public static List<Space> GetUseSpaces(this FilteredElementCollector collector)
- {
- var sourceSpaces = collector.Clone().FilterElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).OfType<Space>().ToList();
- if (!sourceSpaces.Any())
- {
- return sourceSpaces;
- }
- var doc = sourceSpaces[0].Document;
- var useId = GetUsePhaseId(doc);
- if (useId == null || useId == ElementId.InvalidElementId)
- {
- return new List<Space>();
- }
- return
- sourceSpaces.Where(s => s.IsSpace())
- .ToList(); // sourceSpaces.Where(s => s.GetCurrentPhaseId() == useId && s.Area > 0.001).ToList();
- }
- /// <summary>
- /// 判断是否是阶段1的空间
- /// </summary>
- /// <param name="space"></param>
- /// <returns></returns>
- public static bool IsPhase1Space(this Space space)
- {
- var doc = space.Document;
- var useId = GetUsePhaseId(doc);
- return space.GetCurrentPhaseId() == useId;
- }
- /// <summary>
- /// 空间标高是否是当前使用视图标高
- /// </summary>
- /// <param name="space"></param>
- /// <returns></returns>
- 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;
- }
- }
- }
|