using Autodesk.Revit.DB;
|
using Autodesk.Revit.DB.Plumbing;
|
using Autodesk.Revit.UI;
|
using HStation.RevitDev.RevitDataExport.Common;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
namespace HStation.RevitDev.RevitDataExport.Utility
|
{
|
public class SystemCheckUtils
|
{
|
public static void SystemCheck(ExternalCommandData data)
|
{
|
UIDocument uidoc = data.Application.ActiveUIDocument;
|
Document doc = uidoc.Document;
|
List<ElementId> ids = new List<ElementId>();
|
foreach (var id in GlobalResource.RevitModels.GetIds())
|
{
|
var element = doc.GetElement(new ElementId(int.Parse(id)));
|
if (element == null) { continue; }
|
|
bool checkResult = CheckElement(element);
|
|
if (!checkResult)
|
{
|
ids.Add(new ElementId(int.Parse(id)));
|
}
|
}
|
uidoc.Selection.SetElementIds(ids);
|
}
|
|
private static bool CheckElement(Element element)
|
{
|
//管道两端都必须有节点构件连接
|
if (element is Pipe pipe)
|
{
|
var connectors = pipe.ConnectorManager.Connectors;
|
foreach (Connector connector in connectors)
|
{
|
var connectElems = connector.GetConnectorElements();
|
if (connectElems.Count < 1)
|
{
|
return false;
|
}
|
|
var fi = connectElems[0] as FamilyInstance;
|
if (fi == null) { return false; }
|
|
foreach (var elem in connectElems)
|
{
|
var id = elem.Id.IntegerValue.ToString();
|
if (!GlobalResource.RevitModels.Contains(id))
|
{
|
return false;
|
}
|
}
|
}
|
return true;
|
}
|
|
//节点不能连接节点
|
else if (element is FamilyInstance fi)
|
{
|
var mepModel = fi.MEPModel;
|
if (mepModel == null) { return true; }
|
|
ConnectorSet connectors = mepModel.ConnectorManager?.Connectors;
|
if (connectors == null) { return true; }
|
|
foreach(Connector connector in connectors)
|
{
|
var connectElems = connector.GetConnectorElements();
|
foreach (var connectElem in connectElems)
|
{
|
if (connectElem is FamilyInstance)
|
{
|
return false;
|
}
|
}
|
}
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
}
|