鉄筋コンテナは 1 つのホスト内の鉄筋の集合を表す要素です。この要素は API を使用した場合にのみ作成することができます。
RebarContainer 要素の使用には次のようなメリットがあります。
各 RebarContainer には RebarContainerItem オブジェクトのコレクションが含まれます(最初に作成したときは空です)。RebarContainerItem で用意されているプロパティとメソッドは、Rebar 要素のプロパティとメソッドに似たものです。
Document (この中に新しい RebarContainer を作成する)を必要とする静的メソッド RebarContainer.Create()、新しい RebarContainer をホストするホスト Element、新しい RebarContainer に割り当てられる RebarContainerType の ElementId を使用します。
新しい RebarContainer オブジェクトを作成したら、RebarContainer オブジェクトで次のいずれかのメソッドを呼び出して RebarContainerItems で埋めることができます。
コンテナ項目を作成する際には、通常、曲線が存在する平面の法線を指定するように求められます。さらに、配置方法を複数の鉄筋に対して設定した場合、この法線によって複数の鉄筋を作成する際の鉄筋の向きが設定されます。たとえば、FixedNumber 配置方法に RebarContainerItem を設定すると、RebarContainerItem を作成する際に、指定した平面に垂直な線に沿って追加の鉄筋が分配されます。つまり、Normal は配置方法が適用された RebarContainerItems の分配の向きとしても使用されます。
|
コード領域: 鉄筋コンテナを作成 |
void AddItemsToRebarContainer(RebarContainer container, FamilyInstance beam, RebarBarType barType, RebarHookType hookType)
{
// Define the rebar geometry information - Line rebar
LocationCurve location = beam.Location as LocationCurve;
XYZ origin = location.Curve.GetEndPoint(0);
// create rebar along the length of the beam
XYZ rebarLineEnd = location.Curve.GetEndPoint(1);
Line line = Line.CreateBound(origin, rebarLineEnd);
XYZ normal = new XYZ(1, 0, 0);
Curve rebarLine = line.CreateOffset(0.5, normal);
// Create the line rebar
IList<Curve> curves = new List<Curve>();
curves.Add(rebarLine);
RebarContainerItem item = container.AppendItemFromCurves(RebarStyle.Standard, barType, hookType, hookType, normal, curves, RebarHookOrientation.Right, RebarHookOrientation.Left,
true, true);
if (null != item)
{
// set specific layout for new rebar as fixed number, with 10 bars, distribution path length of 1.5'
// with bars of the bar set on the same side of the rebar plane as indicated by normal
// and both first and last bar in the set are shown
item.SetLayoutAsFixedNumber(10, 1.5, true, true, true);
}
}
|
RebarContainer は ICollection から派生しているため、ICollection オブジェクトと同様に、RebarContainerItems が繰り返されます。
RebarContainer に特定の RebarContainerItem があるかどうかを照会するには、メソッド RebarContainer.Contains()を使用します。
RebarContainer には、個々の項目を削除するメソッド、すべての項目を消去するメソッド、コンテナ内の RebarContainerItems の数を返すメソッドがあります。
鉄筋コンテナにはタイプがあります。これらのタイプは鉄筋コンテナに含まれる個々の RebarContainerItems に対しては意味を持ちませんが、コンテナのパラメータへのアクセスをタイプ レベルで提供します。タイプは新しい RebarContainer を作成する際に必要となる引数です。目的のタイプがデータベースにない場合は、RebarContainerType の ElementId を取得するための静的メソッド RebarContainerType.CreateDefaultRebarContainerType()を呼び出して、既定を取得します。
RebarContainer には RebarContainerItems のさまざまな構成が個別に含まれることがあるため、可能な場合は、含まれる RebarContainerItem メンバーから全体の RebarContainer パラメータが派生します。すべての RebarContainerItems にパラメータが存在し、それが RebarContainer 内のすべての RebarContainerItems で同一の場合は、RebarContainer パラメータにこの値が表示されます。値が異なる、または Container 内の一部の RebarContainerItems に値が存在しない場合は、値なしでパラメータが表示されます。
この値の管理を許可し、RebarContainer 全体で必要なパラメータを指定するには、メソッド GetParametersManager()を呼び出して、RebarContainer から RebarContainerParameterManager を要求します。このメソッドは RebarContainer のパラメータの変更に使用できるオブジェクトを返します。たとえば、長さが異なる複数の RebarContainerItems を持つ RebarContainer の TotalLength の場合、TotalLength には空のパラメータが表示されます。RebarContainerParametersManager ではメソッド AddOverride()を呼び出すことができます。このメソッドは 4 つのオーバーロードを持ち、パラメータの 4 つの値タイプ(ElementId、Double、Integer、String)の値を変更できます。パラメータの優先設定を追加する前に、パラメータが RebarContainer パラメータであるかどうかを判断するには、IsRebarContainerParameter()メソッドを使用します。
さらに、メソッド AddSharedParameterAsOverride()を呼び出して共有パラメータの ID を渡すと、共有パラメータを優先設定として RebarContainer に追加できます。このメソッドを呼び出す前に、RebarContainer にパラメータがまだ追加されていないことを確認します。
メソッド RemoveOverride()を呼び出すと優先設定を削除でき、ClearOverrides()を呼び出すとすべての優先設定を削除できます。
メソッド SetOverriddenParameterModifiable()を呼び出すと個々の優先設定パラメータを変更可能パラメータに設定でき、メソッド SetOverriddenParameterReadonly()を呼び出すと個々の優先設定パラメータを読み取り専用に設定できます。さらに、その設定を照会するには IsOverriddenParameterModifiable()メソッドを使用します。
最後に、RebarContainer パラメータが変更されているかどうかを確認するには、メソッド IsParameterOverridden()を呼び出し、該当するパラメータの ElementId を渡します。
|
コード領域: RebarContainer パラメータの管理 |
// Override the value for A and set the parameter to modifiable for the given rebar container
void ManageParameters(RebarContainer container)
{
RebarContainerParameterManager paramManager = container.GetParametersManager();
Parameter aParam = container.LookupParameter("A");
if (aParam != null)
{
paramManager.AddOverride(aParam.Id, 0.4);
paramManager.SetOverriddenParameterModifiable(aParam.Id);
}
}
|
鉄筋コンテナの項目には、Rebar 要素と同様のプロパティが多数あります。これらはモデル化された鉄筋の非常に軽量な表現であり、UI と同様な操作が可能ですが、Element から派生した Rebar クラスとは異なり、RebarContainerItem は System.Object から直接派生します。
RebarContainerItem オブジェクトで使用できるクラス メソッドを呼び出すことで、RebarContainerItem で表される RebarContainerItem を再設定できます。
これらのメソッドは、最初に RebarContainerItem を作成するために RebarContainer で使用したメソッドと同様のメソッドであり、RebarContainer の RebarContainerItem を変更するために使用できる引数と同じ引数またはほぼ同じ引数を持ちます。
クラス プロパティ BarTypeId を使用して RebarBarType ID を照会できます。RebarContainerItem に異なる RebarBarType を適用するには、RebarContainerItem で SetFrom メソッド(SetFromCurves()、SetFromRebar()など)を使用する必要があります。
さらに、get/set クラス プロパティ BarsOnNormalSide を使用すると、セット内の追加の鉄筋の拡大方向をコントロールすることもできます。