using Autodesk.Revit.DB;
|
using Autodesk.Revit.DB.Plumbing;
|
using Autodesk.Revit.UI;
|
using DevExpress.Internal.WinApi.Windows.UI.Notifications;
|
using HStation.RevitDev.RevitDataExport.Common;
|
using HStation.RevitDev.RevitDataExport.Entity;
|
using HStation.RevitDev.RevitDataExport.Forms;
|
using System;
|
using System.Collections.Generic;
|
using System.Diagnostics;
|
using System.Linq;
|
using System.Windows.Forms;
|
|
namespace HStation.RevitDev.RevitDataExport.Utility
|
{
|
public class SystemCheckUtils
|
{
|
public static Dictionary<CheckResultType, List<ElementId>> SystemCheck(ExternalCommandData data)
|
{
|
UIDocument uidoc = data.Application.ActiveUIDocument;
|
Document doc = uidoc.Document;
|
|
Dictionary<CheckResultType, List<ElementId>> retDict = new Dictionary<CheckResultType, List<ElementId>>();
|
var ids = new List<ElementId>();
|
|
foreach (var id in GlobalResource.RevitModels.GetIds())
|
{
|
var elemId = new ElementId(int.Parse(id));
|
var element = doc.GetElement(elemId);
|
if (element == null) { continue; }
|
|
bool checkResult = CheckElement(element, out CheckResultType errorType);
|
|
if (!checkResult)
|
{
|
ids.Add(new ElementId(int.Parse(id)));
|
if (!retDict.ContainsKey(errorType))
|
{
|
retDict.Add(errorType, new List<ElementId>());
|
}
|
retDict[errorType].Add(elemId);
|
}
|
}
|
//uidoc.Selection.SetElementIds(ids);
|
|
return retDict;
|
}
|
|
internal static void ShowCheckResult(UIApplication m_uiapp, List<CheckResultViewModel> checkResult)
|
{
|
var revitHandle = Process.GetCurrentProcess().MainWindowHandle;
|
Form_SystemCheckResult result = new Form_SystemCheckResult(m_uiapp, checkResult);
|
result.Show(new WindowHandle(revitHandle));
|
}
|
|
private static bool CheckElement(Element element, out CheckResultType errorType)
|
{
|
errorType = CheckResultType.CRT_Unknown;
|
|
//管道两端都必须有节点构件连接
|
if (element is Pipe pipe)
|
{
|
var connectors = pipe.ConnectorManager.Connectors;
|
foreach (Autodesk.Revit.DB.Connector connector in connectors)
|
{
|
var connectElems = connector.GetConnectorElements();
|
if (connectElems.Count < 1)
|
{
|
errorType = CheckResultType.CRT_PipeConnectorOpen;
|
return false;
|
}
|
|
var fi = connectElems[0] as FamilyInstance;
|
if (fi == null)
|
{
|
errorType = CheckResultType.CRT_Unknown;
|
return false;
|
}
|
|
foreach (var elem in connectElems)
|
{
|
var id = elem.Id.IntegerValue.ToString();
|
if (!GlobalResource.RevitModels.Contains(id))
|
{
|
errorType = CheckResultType.CRT_PipeConnectorOpen;
|
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(Autodesk.Revit.DB.Connector connector in connectors)
|
{
|
var connectElems = connector.GetConnectorElements();
|
foreach (var connectElem in connectElems)
|
{
|
if (connectElem is FamilyInstance)
|
{
|
errorType = CheckResultType.CRT_NodeConnectNode;
|
return false;
|
}
|
}
|
}
|
return true;
|
}
|
else
|
{
|
errorType = CheckResultType.CRT_Unknown;
|
return false;
|
}
|
}
|
}
|
}
|