zhangyk-c
2024-07-30 e5b04afb7062a908c700f66a1a33aaa5eb98b7bb
HStation.RevitDev/RevitDataExport/Utility/DocumentUtil.cs
@@ -3,7 +3,7 @@
using Autodesk.Revit.DB.Events;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.UI;
using HStation.RevitDev.Model.Enum;
using HStation.RevitDev.Model.ModelEnum;
using HStation.RevitDev.RevitDataExport.Common;
using System;
using System.Collections.Generic;
@@ -41,7 +41,6 @@
                    if (elem is Pipe)
                    {
                        GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                        TaskDialog.Show("提示", "增加管道:" + id.IntegerValue.ToString());
                        AddManualCreated(elem);
                    }
                }
@@ -54,33 +53,26 @@
                    if (elem is FamilyInstance)
                    {
                        GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                        TaskDialog.Show("提示", "增加族实例:" + id.IntegerValue.ToString());
                        AddManualCreated(elem);
                    }
                }
            }
            else
            {
                bool isPumpSystemElement = false;
                foreach (var id in addedIds)
                {
                    var elem = doc.GetElement(id);
                    if (elem is Pipe pipe) //直接点击水泵的连接件创建管道
                    if (IsConnectedWithPumpSystem(doc, id))
                    {
                        if (pipe.ConnectWithPumpSystem())
                        {
                            GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                            TaskDialog.Show("提示", "增加管道:" + id.IntegerValue.ToString());
                            AddManualCreated(elem);
                        }
                        isPumpSystemElement = true;
                    }
                    else if (elem is FamilyInstance fi)
                }
                if (isPumpSystemElement)
                {
                    foreach (var id in addedIds)
                    {
                        if (fi.ConnectWithPumpSystem()) //直接点击管道连接点创建管道时,Revit会自动创建弯头,都需要加入到缓存
                        {
                            GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                            TaskDialog.Show("提示", "增加管道:" + id.IntegerValue.ToString());
                            AddManualCreated(elem);
                        }
                        AddToPumpSystem(doc, id);
                    }
                }
            }
@@ -103,22 +95,63 @@
            }
        }
        private static bool IsConnectedWithPumpSystem(Document doc, ElementId id)
        {
            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);
                    return true;
                }
            }
            else if (elem is FamilyInstance fi)
            {
                if (fi.ConnectWithPumpSystem()) //直接点击管道连接点创建管道时,Revit会自动创建弯头,都需要加入到缓存
                {
                    //GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                    //TaskDialog.Show("提示", "增加族实例:" + id.IntegerValue.ToString());
                    //AddManualCreated(elem);
                    return true;
                }
            }
            return false;
        }
        private static void AddToPumpSystem(Document doc, ElementId id)
        {
            var elem = doc.GetElement(id);
            if (elem is Pipe)
            {
                GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                AddToMap(elem, RevitType.RFT_Pipe);
            }
            else if (elem is FamilyInstance fi)
            {
                GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                AddAutoCreated(fi);
            }
            return;
        }
        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);
                AddToMap(fi, RevitType.RFT_Elbow);
            }
            else if (fi.IsSanTong())
            {
                AddToMap(fi, RevitFamilyType.RFT_ThreeJoint);
                AddToMap(fi, RevitType.RFT_ThreeJoint);
            }
            else if (fi.IsSiTong())
            {
                AddToMap(fi, RevitFamilyType.RFT_FourJoint);
                AddToMap(fi, RevitType.RFT_FourJoint);
            }
            else
            {
@@ -129,20 +162,34 @@
        private static void AddManualCreated(Element elem)
        {
            if (!GlobalResource.InstanceMap.ContainsKey(GlobalResource.RevitFamilyType))
            var id = elem.Id.IntegerValue.ToString();
            if (!GlobalResource.RevitModels.ContainsKey(GlobalResource.RevitFamilyType))
            {
                GlobalResource.InstanceMap.Add(GlobalResource.RevitFamilyType, new List<string>());
                GlobalResource.RevitModels.Add(GlobalResource.RevitFamilyType, new List<string>());
                GlobalResource.RevitModels[GlobalResource.RevitFamilyType].Add(id);
                TaskDialog.Show("提示", "增加族实例:" + id);
            }
            GlobalResource.InstanceMap[GlobalResource.RevitFamilyType].Add(elem.Id.IntegerValue.ToString());
            else if(!GlobalResource.RevitModels[GlobalResource.RevitFamilyType].Contains(id))
            {
                GlobalResource.RevitModels[GlobalResource.RevitFamilyType].Add(id);
                TaskDialog.Show("提示", "增加族实例:" + id);
            }
        }
        private static void AddToMap(Element elem, RevitFamilyType revitType)
        private static void AddToMap(Element elem, RevitType revitType)
        {
            if (!GlobalResource.InstanceMap.ContainsKey(revitType))
            var id = elem.Id.IntegerValue.ToString();
            if (!GlobalResource.RevitModels.ContainsKey(revitType))
            {
                GlobalResource.InstanceMap.Add(revitType, new List<string>());
                GlobalResource.RevitModels.Add(revitType, new List<string>());
                GlobalResource.RevitModels[revitType].Add(id);
                TaskDialog.Show("提示", "增加族实例:" + id);
            }
            GlobalResource.InstanceMap[revitType].Add(elem.Id.IntegerValue.ToString());
            else if (!GlobalResource.RevitModels[revitType].Contains(id))
            {
                GlobalResource.RevitModels[revitType].Add(id);
                TaskDialog.Show("提示", "增加族实例:" + id);
            }
        }
    }
}