/* ==============================================================================
* 功能描述: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;
}
}
}