using Autodesk.Revit.ApplicationServices;
|
using Autodesk.Revit.DB;
|
using Autodesk.Revit.DB.Events;
|
using Autodesk.Revit.DB.Plumbing;
|
using Autodesk.Revit.UI;
|
using HStation.RevitDev.Model.Enum;
|
using HStation.RevitDev.RevitDataExport.Common;
|
using System;
|
using System.Collections.Generic;
|
|
namespace HStation.RevitDev.RevitDataExport.Utility
|
{
|
public class DocumentUtil
|
{
|
public static void RegistDocumentEvent(Application app)
|
{
|
app.DocumentChanged -= App_DocumentChanged;
|
app.DocumentChanged += App_DocumentChanged;
|
}
|
|
private static void App_DocumentChanged(object sender, DocumentChangedEventArgs e)
|
{
|
var doc = e.GetDocument();
|
|
var addedIds = e.GetAddedElementIds();
|
var removeIds = e.GetDeletedElementIds();
|
var modifiedIds = e.GetModifiedElementIds();
|
|
bool instancePlacing = GlobalResource.InstancePlacing;
|
bool pipePlacing = GlobalResource.PipePlacing;
|
|
if (pipePlacing)
|
{
|
foreach (var id in addedIds)
|
{
|
var elem = doc.GetElement(id);
|
if (elem is FamilyInstance fi)
|
{
|
AddAutoCreated(fi);
|
}
|
if (elem is Pipe)
|
{
|
GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
|
TaskDialog.Show("提示", "增加管道:" + id.IntegerValue.ToString());
|
AddManualCreated(elem);
|
}
|
}
|
}
|
else if (instancePlacing)
|
{
|
foreach (var id in addedIds)
|
{
|
var elem = doc.GetElement(id);
|
if (elem is FamilyInstance)
|
{
|
GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
|
TaskDialog.Show("提示", "增加族实例:" + id.IntegerValue.ToString());
|
AddManualCreated(elem);
|
}
|
}
|
}
|
else
|
{
|
foreach (var id in addedIds)
|
{
|
var elem = doc.GetElement(id);
|
if (elem is Pipe pipe) //直接点击水泵的连接件创建管道
|
{
|
if (pipe.ConnectWithPumpSystem())
|
{
|
GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
|
TaskDialog.Show("提示", "增加管道:" + id.IntegerValue.ToString());
|
AddManualCreated(elem);
|
}
|
}
|
else if (elem is FamilyInstance fi)
|
{
|
if (fi.ConnectWithPumpSystem()) //直接点击管道连接点创建管道时,Revit会自动创建弯头,都需要加入到缓存
|
{
|
GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
|
TaskDialog.Show("提示", "增加管道:" + id.IntegerValue.ToString());
|
AddManualCreated(elem);
|
}
|
}
|
}
|
}
|
|
foreach (var id in removeIds)
|
{
|
if (GlobalResource.ElementIds.Contains(id.IntegerValue.ToString()))
|
{
|
GlobalResource.ElementIds.Remove(id.IntegerValue.ToString());
|
TaskDialog.Show("提示", "删除元素:" + id.IntegerValue.ToString());
|
}
|
}
|
|
foreach (var id in modifiedIds)
|
{
|
if (GlobalResource.ElementIds.Contains(id.IntegerValue.ToString()))
|
{
|
|
}
|
}
|
}
|
|
private static void AddAutoCreated(FamilyInstance fi)
|
{
|
var id = fi.Id;
|
GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
|
TaskDialog.Show("提示", "增加族实例:" + id.IntegerValue.ToString());
|
if (fi.IsWanTou())
|
{
|
AddToMap(fi, RevitFamilyType.RFT_Elbow);
|
}
|
else if (fi.IsSanTong())
|
{
|
AddToMap(fi, RevitFamilyType.RFT_ThreeJoint);
|
}
|
else if (fi.IsSiTong())
|
{
|
AddToMap(fi, RevitFamilyType.RFT_FourJoint);
|
}
|
else
|
{
|
TaskDialog.Show("警告", $"未知类型被添加!id:{fi.Id.IntegerValue}");
|
//报错
|
}
|
}
|
|
private static void AddManualCreated(Element elem)
|
{
|
if (!GlobalResource.InstanceMap.ContainsKey(GlobalResource.RevitFamilyType))
|
{
|
GlobalResource.InstanceMap.Add(GlobalResource.RevitFamilyType, new List<string>());
|
}
|
GlobalResource.InstanceMap[GlobalResource.RevitFamilyType].Add(elem.Id.IntegerValue.ToString());
|
}
|
|
private static void AddToMap(Element elem, RevitFamilyType revitType)
|
{
|
if (!GlobalResource.InstanceMap.ContainsKey(revitType))
|
{
|
GlobalResource.InstanceMap.Add(revitType, new List<string>());
|
}
|
GlobalResource.InstanceMap[revitType].Add(elem.Id.IntegerValue.ToString());
|
}
|
}
|
}
|