経路設定時の優先指定は、RoutingPreferenceManager クラスからアクセスできます。このクラスのインスタンスは、MEPCurveType クラスのプロパティから使用できます。現在は、PipeType と DuctType のみが 経路設定時の優先指定をサポートしています。
RoutingPreferenceManager はセグメント タイプとサイズのすべての規則およびユーザ選択基準に基づいた継手タイプを管理します。RoutingPreferenceRule クラスは 1 つのセグメントまたは継手基本設定を管理し、このクラスのインスタンスを RoutingPreferenceManager に追加することができます。各経路設定時の優先指定の規則は、どのようなタイプの経路項目を管理しているかによってグループ化されます。タイプは RoutingPreferenceRuleGroupType で表され、これらのオプションが含まれます。
| メンバー名 | 説明 |
| 未設定 | 未設定のグループ タイプ(既定の初期値) |
| セグメント | セグメント タイプ(例: パイプストック) |
| エルボ | エルボ タイプ |
| ジャンクション | 接合タイプ(拾い出し、T 型、Y 型、タップなど) |
| クロス | クロス タイプ |
| レデューサ | レデューサタイプ(複数形状レデューサには独自のグループがある場合があることに注意してください) |
| ユニオン | 2 つのセグメントを接続するユニオンのタイプ |
| MechanicalJoints | 継手と継手、セグメントと継手、またはセグメントとセグメントを接続する機械継手タイプ |
| TransitionsRectangularToRound | 角丸型 |
| TransitionsRectangularToOval | 角楕円型 |
| TransitionsOvalToRound | 円楕円型 |
各経路設定時の優先指定には、1 つまたは複数の選択基準があり、RoutingCriterionBase クラス、および作成元タイプ PrimarySizeCriterion によって表されます。PrimarySizeCriterion は、最小および最大サイズの拘束に基づいて継手とセグメントを選択します。
RoutingConditions クラスは、RoutingCondition インスタンスの集合を保持します。RoutingCondition クラスは、最小径または最大径などの経路基準を満たしているかどうかを判断する場合に入力として使用される経路情報を表します。RoutingPreferencesManager.GetMEPPartId()メソッドは、RoutingPreferenceRuleGroupType および RoutingConditions に基づいて継手またはセグメント ID を取得します。
次の例では、ドキュメントのすべてのパイプ タイプを取得し、それぞれに経路設定時の優先指定マネージャを取得し、経路設定時の優先指定マネージャの規則に基づいて、各セグメントのサイズを取得します。
|
コードの領域: 経路設定時の優先指定を使用 |
private List<double> GetAvailablePipeSegmentSizesFromDocument(Document document)
{
System.Collections.Generic.HashSet<double> sizes = new HashSet<double>();
FilteredElementCollector collectorPipeType = new FilteredElementCollector(document);
collectorPipeType.OfClass(typeof(PipeType));
IEnumerable<PipeType> pipeTypes = collectorPipeType.ToElements().Cast<PipeType>();
foreach (PipeType pipeType in pipeTypes)
{
RoutingPreferenceManager rpm = pipeType.RoutingPreferenceManager;
int segmentCount = rpm.GetNumberOfRules(RoutingPreferenceRuleGroupType.Segments);
for (int index = 0; index != segmentCount; ++index)
{
RoutingPreferenceRule segmentRule = rpm.GetRule(RoutingPreferenceRuleGroupType.Segments, index);
Segment segment = document.GetElement(segmentRule.MEPPartId) as Segment;
foreach (MEPSize size in segment.GetSizes())
{
sizes.Add(size.NominalDiameter); //Use a hash-set to remove duplicate sizes among Segments and PipeTypes.
}
}
}
List<double> sizesSorted = sizes.ToList();
sizesSorted.Sort();
return sizesSorted;
}
|