Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Revit API Tips: 壁プロファイルの取得方法

Дата публикации: 17-08-2026 07:31:15


窓、ドア、開口部などを含んだ壁のプロファイルを取得するためのメソッドは用意されていませんが、壁の側面を取得して、その面のエッジループを取得することができます。外側と内側のエッジループを識別することができます。
 
以下にサンプルコードを記載いたします。
 
このコードでは壁の外側の面を 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();
}
 
 
 

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Revit API Tips: ソリッドやメッシュのジオメトリをプロジェクト上に作図する方法07.5917-08-2026
2Revit API Tips: 複数のファミリを組み合わせて(ネストして)新しいファミリを作成する方法06.1717-08-2026
3Managed .Net API でレイアウト空間のビューポート表示範囲のオブジェクトを取得する方法015.2417-08-2026
4What's New: Informed Design for Dynamo — Public Beta013.1608-09-2026
5Visual Studioで「InventorViewCtrl.ocxの自己登録に失敗しました」エラーが発生して、Inventor ViewコントロールをWindowsフォームへ追加することが出来ない010.9417-08-2026
6.NET :Interaction.GetObject で起動中の AutoCAD COM オブジェクトを取得できない場合の対処方法010.204-09-2026
7AutoCAD .NET API :最後に追加されたエンティティの取得013.0323-08-2026
8What's New: Sample Content017.309-09-2026
9Support Trapezoidal Metal Cladding as a Wall Structure Layer06.3414-10-2026
10InventorのAPIで、IDWファイルをバージョンを指定してDXFに変換する方法011.6317-08-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 5.8. Источник: forums.autodesk.com.