zhangyuekai
2024-08-17 2ea53b9fbd3fc318f1c02c1888c22aec5abab8ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Plumbing;
using HStation.RevitDev.RevitDataExport.Common;
using System;
using System.Linq;
 
namespace HStation.RevitDev.RevitDataExport.Utility
{
    public static class FamilyInstanceExtense
    {
        public static bool IsPipeHat(this FamilyInstance fi)
        {
            if (fi == null) return false;
 
            MEPModel mEPModel = fi.MEPModel;
            ConnectorSet connectors = mEPModel.ConnectorManager?.Connectors;
            if (connectors == null) return false;
 
            if (connectors.Size == 1)
            {
                var iterator = connectors.GetEnumerator();
                iterator.MoveNext();
                Connector connector = iterator.Current as Connector;
                if (connector == null) { return false; }
                return true;
            }
            return false;
        }
 
        public static bool IsWanTou(this FamilyInstance fi)
        {
            if (fi == null) return false;
 
            MEPModel mEPModel = fi.MEPModel;
            ConnectorSet connectors = mEPModel.ConnectorManager?.Connectors;
            if (connectors == null) return false;
 
            if (connectors.Size == 2)
            {
                var iterator = connectors.GetEnumerator();
                iterator.MoveNext();
                Connector connector1 = iterator.Current as Connector;
                if (connector1 == null) { return false; }
                double radius1 = connector1.Radius;
 
                iterator.MoveNext();
                Connector connector2 = iterator.Current as Connector;
                if (connector2 == null) { return false; }
                double radius2 = connector2.Radius;
                if (Math.Abs(radius1 - radius2) < double.Epsilon)
                {
                    return true;
                }
            }
            return false;
        }
 
        public static bool IsConverter(this FamilyInstance fi)
        {
            if (fi == null) return false;
 
            MEPModel mEPModel = fi.MEPModel;
            ConnectorSet connectors = mEPModel.ConnectorManager?.Connectors;
            if (connectors == null) return false;
 
            if (connectors.Size == 2)
            {
                var iterator = connectors.GetEnumerator();
                iterator.MoveNext();
                Connector connector1 = iterator.Current as Connector;
                if (connector1 == null) { return false; }
                double radius1 = connector1.Radius;
 
                iterator.MoveNext();
                Connector connector2 = iterator.Current as Connector;
                if (connector2 == null) { return false; }
                double radius2 = connector2.Radius;
                if (Math.Abs(radius1 - radius2) > double.Epsilon)
                {
                    return true;
                }
            }
            return false;
        }
 
        public static bool IsSanTong(this FamilyInstance fi)
        {
            if (fi == null) return false;
 
            MEPModel mEPModel = fi.MEPModel;
            var connectors = mEPModel.ConnectorManager?.Connectors;
            if (connectors == null) return false;
 
            if (connectors.Size != 3)
            {
                return false;
            }
            return true;
        }
 
        public static bool IsSiTong(this FamilyInstance fi)
        {
            if (fi == null) return false;
 
            MEPModel mEPModel = fi.MEPModel;
            var connectors = mEPModel.ConnectorManager?.Connectors;
 
            if (connectors == null) return false;
            if (connectors.Size != 4) return false;
            return true;
        }
 
        public static bool ConnectWithPumpSystem(this FamilyInstance fi)
        {
            if (fi == null) return false;
 
            MEPModel mEPModel = fi.MEPModel;
            var connectors = mEPModel.ConnectorManager?.Connectors;
            if (connectors == null) return false;
 
            foreach (Connector connector in connectors)
            {
                var allRefs = connector.AllRefs;
                foreach (Connector connectedElement in allRefs)
                {
                    if (connectedElement.Owner is Pipe pipe)
                    {
                        if (GlobalResource.RevitModels.Contains(pipe.Id.IntegerValue.ToString()))
                        {
                            return true;
                        }
                    }
                }
            }
 
            return false;
        }
    }
}