Revitアドイン-選択要素のSolidVolumeを取得する

Revitのアドインコマンドで選択された要素を取得して要素の情報をダイアログで表示するプログラムの作成方法について

はじめに

本記事では、Autodesk Revitのアドインコマンドを使用して、選択された要素の情報を取得し、ダイアログで表示する方法について解説します。表示する情報は、要素のID(ElementId)、SolidのVolume(体積)、および要素のLocationPointの座標です。

アドインコマンドの作成

以下に、アドインコマンドのコードを示します。このコードでは、Revitのリボンに新しいボタンを追加し、そのボタンをクリックすると選択された要素の情報を取得してダイアログに表示します。

using System;
using System.Linq;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;

namespace RevitAddin
{
    public class App : IExternalApplication
    {
        public Result OnStartup(UIControlledApplication application)
        {
            // リボンに新しいタブを追加
            string tabName = "CustomTab";
            application.CreateRibbonTab(tabName);

            // リボンに新しいパネルを追加
            RibbonPanel ribbonPanel = application.CreateRibbonPanel(tabName, "CustomPanel");

            // ボタンの作成
            PushButtonData buttonData = new PushButtonData(
                "MyButton",
                "Show Element Info",
                Assembly.GetExecutingAssembly().Location,
                "RevitAddin.Command");

            PushButton pushButton = ribbonPanel.AddItem(buttonData) as PushButton;

            // ボタンのプロパティを設定
            pushButton.ToolTip = "選択された要素の情報を表示します。";

            return Result.Succeeded;
        }

        public Result OnShutdown(UIControlledApplication application)
        {
            return Result.Succeeded;
        }
    }

    [Transaction(TransactionMode.Manual)]
    public class Command : IExternalCommand
    {
        public Result Execute(
            ExternalCommandData commandData, 
            ref string message, 
            ElementSet elements)
        {
            // UIとドキュメントの取得
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            Document doc = uiDoc.Document;

            // 要素を選択
            Selection sel = uiDoc.Selection;
            Reference selectedRef = sel.PickObject(ObjectType.Element);

            // 選択された要素の取得
            Element selectedElement = doc.GetElement(selectedRef.ElementId);

            // 要素の情報を取得
            string elementId = selectedElement.Id.ToString();
            double volume = GetSolidVolume(selectedElement);
            XYZ locationPoint = GetLocationPoint(selectedElement);

            // ダイアログに情報を表示
            TaskDialog dialog = new TaskDialog("Element Information");
            dialog.MainInstruction = "選択された要素の情報";
            dialog.MainContent = $"Element ID: {elementId}\nSolid Volume: {volume} m³\nLocation Point: {locationPoint}";
            dialog.Show();

            return Result.Succeeded;
        }

        // SolidのVolumeを取得するメソッド
        private double GetSolidVolume(Element element)
        {
            GeometryElement geometryElement = element.get_Geometry(new Options());
            double totalVolume = 0.0;

            foreach (GeometryObject obj in geometryElement)
            {
                if (obj is Solid solid && solid.Volume > 0)
                {
                    totalVolume += solid.Volume;
                }
            }

            return totalVolume;
        }

        // 要素のLocationPointの座標を取得するメソッド
        private XYZ GetLocationPoint(Element element)
        {
            Location location = element.Location;
            if (location is LocationPoint locationPoint)
            {
                return locationPoint.Point;
            }

            return null;
        }
    }
}

このコードでは、Revitのリボンに新しいボタンを追加し、そのボタンをクリックすると、選択された要素の情報がダイアログで表示されます。要素の情報には、ID、SolidのVolume、およびLocationPointの座標が含まれています。

まとめ

この記事では、Revitのアドインコマンドを使用して、選択された要素の情報を取得し、ダイアログで表示する方法を解説しました。

この記事が気に入ったらサポートをしてみませんか?