鉄筋カプラーは、隣接する鉄筋の接合に使用されます。
カプラーを使用すると、2 つの隣接する鉄筋を接合したり、単独の鉄筋の末端に取り付けることができます。カプラーは RebarCoupler クラスによって表されます。静的な Create () メソッドは、新しいカプラーの作成に使用できます。
|
コード領域: 鉄筋カプラーを作成 |
private RebarCoupler CreateCoupler(Document doc, List<Rebar> bars)
{
RebarCoupler coupler = null;
// if we have at least 2 bars, create a coupler between them
if (bars.Count > 1)
{
// get a type id for the Coupler
ElementId defaultTypeId = doc.GetDefaultFamilyTypeId(new ElementId(BuiltInCategory.OST_Coupler));
if (defaultTypeId != ElementId.InvalidElementId)
{
// Specify the rebar and ends to couple
RebarReinforcementData rebarData1 = RebarReinforcementData.Create(bars[0].Id, 0);
RebarReinforcementData rebarData2 = RebarReinforcementData.Create(bars[1].Id, 1);
RebarCouplerError error;
coupler = RebarCoupler.Create(doc, defaultTypeId, rebarData1, rebarData2, out error);
if (error != RebarCouplerError.ValidationSuccessfuly)
{
TaskDialog.Show("Revit", "Create Coupler failed: " + error.ToString());
}
// Use a coupler to cap the other end of the first bar
RebarReinforcementData rebarData = RebarReinforcementData.Create(bars[0].Id, 1);
RebarCoupler.Create(doc, defaultTypeId, rebarData, null, out error);
if (error != RebarCouplerError.ValidationSuccessfuly)
{
TaskDialog.Show("Revit", "Create Coupler failed: " + error.ToString());
}
}
}
return coupler;
}
|
カプラーが作成できない場合は、RebarCouplerError 列挙値が返されます。作成に失敗する原因としては、鉄筋が接触していない、鉄筋セット同士のレイアウトが異なっている、鉄筋の直径がカプラーに適合していないなどの可能性があります。
CouplerLinkTwoBars() メソッドは、カプラーが 2 本の鉄筋を接合している場合は true を返し、1 本の鉄筋だけに取り付けられている場合は false を返します。
Rebar クラスに用意されている GetCouplerId() メソッドを使用すると、鉄筋のいずれかの末端にアタッチされたカプラーの ID を取得することができます。
1 つの位置ポイントまたは(鉄筋セットの場合は)複数の位置ポイントを取得するには、GetPointsForPlacement() メソッドを呼び出します。このメソッドは、1 つまたは複数のカプラーが配置される場所を示す XYZ 点のリストを返します。GetCouplerPositionTransform() メソッドは、セット内の指定されたインデックスでカプラーの相対位置を表す変換を返します。インデックスは、0 とカプラーの数量 - 1 の間である必要があります。GetCouplerQuantity() は、セット内のカプラーの数量を返します。
RebarCoupler は、Revit API によって番号付けを制御することができる要素カテゴリの 1 つです。NumberingSchema クラスと NumberingSchemaType クラスは、カプラー要素に番号やタグを付ける目的でカプラー要素の整理方法を設定するために使用できます。各 NumberingSchema は、特定のタイプの要素の番号付けをコントロールします。また、NumberingSchema のインスタンスも要素であり、各 Revit ドキュメント内に常時いずれかのタイプのうち 1 つのみが存在します。すべての組み込みの番号付けスキーマのうちで、使用可能なタイプが NumberingSchemaTypes クラスに列挙されます。
特定のスキーマ(NumberingSchemaTypes.StructuralNumberingSchemas.Rebar など)に属している要素(RebarCoupler など)が、順番に整理され、番号付けされます。順番は、同じ番号付けパーティションを共有する要素の集合です。パーティションは、それぞれの Partition パラメータ(NUMBER_PARTITION_PARAM)の値によって設定されます。番号付けの順番には少なくとも 1 つの要素が含まれている必要があります。すなわち、(同じ番号付けスキーマの)他の要素と異なるパーティション パラメータの値を持つ要素がある場合に、順番が作られることになります。最後の要素が除外されると(削除された、または別の順番に移動された)、空になった順番は存在しなくなります。
鉄筋の端部処理は、鉄筋にアタッチされたカプラーに由来します。カプラーの両端の処理タイプは、カプラー ファミリ タイプによって指定されます。
オーバーロードした EndTreatmentType.Create() メソッドは、新しい EndTreatmentType を作成するのに使用できます。この場合、端部処理名の文字列を指定することも、指定しないこともできます。CreateDefaultEndTreatmentType() メソッドは、既定の名前を持つ新しい EndTreatmentType を作成します。
RebarCoupler の端部処理タイプにアクセスするには、鉄筋カプラー タイプを表す FamilySymbol のために、BuiltInParameter の COUPLER_MAIN_ENDTREATMENT を使用して End Treatment 1 を設定し、COUPLER_COUPLED_ENDTREATMENT を使用して End Treatment 2 を設定します。下記の例では、新しい EndTreatmentType を作成し、それをカプラー タイプの End Treatment 1 に割り当てます。既存の EndTreatmentType も使用することができます。
|
コード領域: RebarCoupler の EndTreatmentType を変更 |
private void NewEndTreatmentForCouplerType(Document doc, ElementId couplerTypeId)
{
EndTreatmentType treatmentType = EndTreatmentType.Create(doc, "Custom");
FamilySymbol couplerType = doc.GetElement(couplerTypeId) as FamilySymbol;
Parameter param = couplerType.get_Parameter(BuiltInParameter.COUPLER_MAIN_ENDTREATMENT);
param.Set(treatmentType.Id);
}
|
指定の処理を両端に施した形状を定義するには、端部処理を RebarShape で定義するとよいでしょう。RebarShape の端部処理は、形状の認識に使用されます。ReinforcementSettings.RebarShapeDefinesEndTreatments プロパティが true に設定されている場合は、ユーザが仕様にしたがって形状を定義し、カプラーを鉄筋に取り付けると、適切な RebarShape が自動的に検索されます。なお、このプロパティを設定できるのは、鉄筋または配筋がドキュメントに追加される前に限られます。
|
コード領域: RebarShape の EndTreatmentType を設定 |
private bool SetEndTreatmentType(Document doc, RebarShape rebarShape)
{
bool set = false;
// check if end treatments are defined by rebar shape
ReinforcementSettings settings = ReinforcementSettings.GetReinforcementSettings(doc);
if (!settings.RebarShapeDefinesEndTreatments)
{
try
{
// can only be changed if document contains no rebars, area reinforcement or path reinforcement
settings.RebarShapeDefinesEndTreatments = true;
}
catch (Exception e)
{
// cannot change the settings value
TaskDialog.Show("Revit", e.Message);
}
}
if (settings.RebarShapeDefinesEndTreatments)
{
EndTreatmentType treatmentType = EndTreatmentType.Create(doc, "Flame Cut");
rebarShape.SetEndTreatmentTypeId(treatmentType.Id, 0);
ElementId treatmentTypeId = EndTreatmentType.CreateDefaultEndTreatmentType(doc);
rebarShape.SetEndTreatmentTypeId(treatmentTypeId, 1);
set = true;
}
return set;
}
|
RebarShape クラスには、鉄筋に端部処理を施すかどうかを決定するメソッドや、RebarShape の両端の EndTreatmentType を取得、設定するメソッドが複数用意されています。
なお、次のメソッドは、RebarShape に端部処理を適用しないことを要求します。
また、鉄筋の両端に適用される処理の ID を取得するメソッドとしての Rebar クラスも上記に含まれます。端部処理はアタッチされたカプラーに基づきます。したがって、Rebar には、カプラーにアタッチされていない端部の EndTreatmentTypeId は存在しません。
|
コード領域: Rebar の端部処理を取得 |
private void ListEndTreatments(Document doc, List<Rebar> bars)
{
StringBuilder info = new StringBuilder();
for (int n = 0; n < bars.Count; n++)
{
// get end treatment for both ends of bar
for (int i = 0; i < 2; i++)
{
ElementId treatmentTypeId = bars[n].GetEndTreatmentTypeId(i);
if (treatmentTypeId != ElementId.InvalidElementId)
{
EndTreatmentType treatmentType = doc.GetElement(treatmentTypeId) as EndTreatmentType;
info.AppendLine(string.Format("End treatment for bar {0} end {1}: {2}", n, i, treatmentType.EndTreatment));
}
}
}
TaskDialog.Show("Revit", info.ToString());
}
|