【问题标题】:Revit API cannot run the external commandRevit API 无法运行外部命令
【发布时间】:2019-01-15 22:28:10
【问题描述】:

我目前正在尝试创建 Autodesk Revit 插件,用于检查房间的几何形状。由于错误提示“Revit 无法运行外部命令。AutodeskRevit.Exceptions.InvalidOperationException。HelloWorld.Class1 不继承 IExternalCommand。

抱歉,我是 C# 和 Autodesk Revit 的新手

所以我假设需要将 IExternalCommand 输入到代码中才能运行该命令。当我这样做包含 IExternalComand 时,我收到一个 Visual Studio 错误,说“Class1 没有实现接口成员 'IExternalCommand.Execute(ExternalCommandData, ref string, ElementSet)”。

这是我的代码:

    using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.Creation;
using Autodesk.Revit.Exceptions;
using Autodesk.Revit.DB.Architecture;


namespace HelloWorld
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    class Class1 :IExternalCommand
    {



        public void GetRoomDimensions(Autodesk.Revit.DB.Document doc, Room room)
        {
            String roominfo = "Room dimensions:\n";
            // turn on volume calculations:
            using (Transaction t = new Transaction(doc, "Turn on volume calculation"))
            {
                t.Start();
                AreaVolumeSettings settings = AreaVolumeSettings.GetAreaVolumeSettings(doc);
                settings.ComputeVolumes = true;
                t.Commit();
            }

            roominfo += "Vol: " + room.Volume + "\n";
            roominfo += "Area: " + room.Area + "\n";
            roominfo += "Perimeter: " + room.Perimeter + "\n";
            roominfo += "Unbounded height: " + room.UnboundedHeight + "\n";
            TaskDialog.Show("Revit", roominfo);

        }
    }
}

感谢您的建议。

【问题讨论】:

    标签: c# autodesk revit-api revit


    【解决方案1】:

    IExternalCommandExecute 方法运行。你需要在你的类中定义一个Execute 方法。从那里你可以调用你的GetRoomDimensions 方法

    public Result Execute(
      ExternalCommandData commandData, 
      ref string message, 
      ElementSet elements)
    {
        UIApplication application = commandData.Application;
        Document mainDocument = application.ActiveUIDocument.Document;
    
        if(elements.Size > 0)
        {
            //Only 1 room should be selected
            return Result.Failed;
        }
    
        Room room = null;
    
        foreach(Element element in elements)
        {
            room = element as Room;
        }
    
        if(room == null)
        {
            //A non-room element was selected
            return Result.Failed;
        }
    
        GetRoomDimensions(mainDocument, room);
    
        return Result.Success
    }
    

    这是一个深入解释IExternalCommand的链接:

    https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/Revit-API/files/GUID-797F9E50-08C4-4E58-8CF0-8B4C68035409-htm.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2016-10-24
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      相关资源
      最近更新 更多