首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Revit无法运行外部命令

Revit无法运行外部命令
EN

Stack Overflow用户
提问于 2018-08-08 15:25:05
回答 1查看 1.8K关注 0票数 0

我目前正在尝试创建一个Autodesk加载项,用于检查房间的几何形状。我很难做到这一点,原因是出现了一个错误:"Revit不能运行外部命令。AutodeskRevit.Exceptions.InvalidOperationException. HelloWorld.Class1不继承IExternalCommand。

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

因此,我假设需要将IExternalCommand输入到代码中来运行命令。当我这样做包括IExternalComand时,我会收到一个visual错误,上面写着"Class1不实现接口成员IExternalComand ref string,ElementSet)“。

这是我的代码:

代码语言:javascript
运行
复制
    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);

        }
    }
}

谢谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 15:03:58

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

代码语言:javascript
运行
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51750369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档