窓、ドア、開口部などを含んだ壁のプロファイルを取得するためのメソッドは用意されていませんが、壁の側面を取得して、その面のエッジループを取得することができます。外側と内側のエッジループを識別することができます。
以下にサンプルコードを記載いたします。
このコードでは壁の外側の面を HostObjectUtils.GetSideFaces メソッドで取得し、壁のジオメトリを形成するエッジループを CurveLoop として取得しています。そして IFC 関連のアドイン用に用意されたExporterIFCUtilsクラスのSortCurveLoopsメソッドを使用しています。
このメソッドは CurveLoop に含まれる曲線ループをソートして、外側のエッジループである曲線ループを配列の最初に配置します。そして、窓、ドア、開口部などによる内側のループをその後に配置しています。
ExporterIFCUtilsクラス は IFC 関連のアドインでなくとも RevitAPIIFC.dll を参照追加することで利用できます。
そして、次に IsCounterclockwise メソッドを使用して各ループの方向が時計回りまたは反時計回りかを判定しています。外側のループは常に反時計回りとなります。
従って、SortCurveLoops メソッドでソートをしなくとも IsCounterclockwise メソッドで判定することで外側のループを見つけることができます。
このサンプルでは見つけた各エッジのループに対してモデル線分を作成しています。そして外側のループのモデル線分の色を赤に上書き設定しています。
Reference r = uidoc.Selection.PickObject(ObjectType.Element, "Select a wall");
Element e = uidoc.Document.GetElement(r);
Wall wall = e as Wall;
using (Transaction tx = new Transaction(doc))
{
tx.Start("Wall Profile");
// Get the exteranl wall face for the profile
IList<Reference> sideFaces = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Exterior);
Element e2 = doc.GetElement(sideFaces[0]);
Face face = e2.GetGeometryObjectFromReference(sideFaces[0]) as Face;
XYZ normal = face.ComputeNormal(new UV(0, 0)); // the normal of the wall external face
Color color = new Color(255, 0, 0); // RED
// Get edge loops as curve loops
IList<CurveLoop> curveLoops = face.GetEdgesAsCurveLoops();
// ExporterIFCUtils class can be used for none IFC poupose.
// SortCurveLoops method sorts curve loops (edge loops) so that outer loops come first
IList<IList<CurveLoop>> curveLoopLoop = ExporterIFCUtils.SortCurveLoops(curveLoops);
foreach (IList<CurveLoop> curveLoops2 in curveLoopLoop)
{
foreach (CurveLoop curveLoop2 in curveLoops)
{
// check if curve loop (edge loop) is counter clockwise
bool isCCW = curveLoop2.IsCounterclockwise(normal);
CurveArray curves = doc.Application.Create.NewCurveArray();
foreach (Curve curve in curveLoop2)
{
curves.Append(curve);
}
// Create model lines for an cureve loop
SketchPlane sketchPlane = SketchPlane.Create(doc, doc.Application.Create.NewPlane(curves));
ModelCurveArray curveElements = doc.Create.NewModelCurveArray(curves, sketchPlane);
// if the curve loop direction is counter clockwise, change the color to RED
if (isCCW)
{
foreach (ModelCurve mcurve in curveElements)
{
OverrideGraphicSettings overrides = doc.ActiveView.GetElementOverrides(mcurve.Id);
overrides.SetProjectionLineColor(color);
doc.ActiveView.SetElementOverrides(mcurve.Id, overrides);
}
}
}
}
tx.Commit();
}
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Revit API Tips: ソリッドやメッシュのジオメトリをプロジェクト上に作図する方法 | 0 | 7.59 | 17-08-2026 |
| 2 | Revit API Tips: 複数のファミリを組み合わせて(ネストして)新しいファミリを作成する方法 | 0 | 6.17 | 17-08-2026 |
| 3 | Managed .Net API でレイアウト空間のビューポート表示範囲のオブジェクトを取得する方法 | 0 | 15.24 | 17-08-2026 |
| 4 | What's New: Informed Design for Dynamo — Public Beta | 0 | 13.16 | 08-09-2026 |
| 5 | Visual Studioで「InventorViewCtrl.ocxの自己登録に失敗しました」エラーが発生して、Inventor ViewコントロールをWindowsフォームへ追加することが出来ない | 0 | 10.94 | 17-08-2026 |
| 6 | .NET :Interaction.GetObject で起動中の AutoCAD COM オブジェクトを取得できない場合の対処方法 | 0 | 10.2 | 04-09-2026 |
| 7 | AutoCAD .NET API :最後に追加されたエンティティの取得 | 0 | 13.03 | 23-08-2026 |
| 8 | What's New: Sample Content | 0 | 17.3 | 09-09-2026 |
| 9 | Support Trapezoidal Metal Cladding as a Wall Structure Layer | 0 | 6.34 | 14-10-2026 |
| 10 | InventorのAPIで、IDWファイルをバージョンを指定してDXFに変換する方法 | 0 | 11.63 | 17-08-2026 |