Revit SDK 介绍:ExternalResourceDBServer & ExternalResourceUIServer

前言

这个例子介绍如何在 Revit 中加入自己的资源。

内容

ExternalResourceDBServer

效果

在注释标记设定和链接RVT文件中增加外部资源。
在这里插入图片描述
在这里插入图片描述

关键逻辑

必须使用 IExternalDBApplication,在 Revit 启动的时候就进行加载。
从下面的代码可知,关键点在于注册和增加 SampleExternalResourceDBServer

public ExternalDBApplicationResult OnStartup(ControlledApplication application)
{
   // Get Revit's ExternalResourceService.
   ExternalService externalResourceService = ExternalServiceRegistry.GetService(ExternalServices.BuiltInExternalServices.ExternalResourceService);

   if (externalResourceService == null)
      return ExternalDBApplicationResult.Failed;

   // Create an instance of your IExternalResourceServer and register it with the ExternalResourceService.
   IExternalResourceServer sampleServer = new SampleExternalResourceDBServer();
   externalResourceService.AddServer(sampleServer);
   return ExternalDBApplicationResult.Succeeded;
}

通过上述的操作,可以将用户的服务加入到 Revit 的系统中去。SampleExternalResourceDBServer 继承自 IExternalResourceServer

namespace Autodesk.Revit.DB
{
    public interface IExternalResourceServer : ExternalService.IExternalServer
    {
        bool AreSameResources(IDictionary<string, string> reference1, IDictionary<string, string> reference2);
        string GetIconPath();
        string GetInSessionPath(ExternalResourceReference reference, string originalDisplayPath);        
        ResourceVersionStatus GetResourceVersionStatus(ExternalResourceReference reference);
        string GetShortName();
        void GetTypeSpecificServerOperations(ExternalResourceServerExtensions extensions);
        bool IsResourceWellFormed(ExternalResourceReference extRef);
        void LoadResource(Guid loadRequestId, ExternalResourceType resourceType, ExternalResourceReference desiredResource, ExternalResourceLoadContext loadContext, ExternalResourceLoadContent loadResults);
        void SetupBrowserData(ExternalResourceBrowserData browseData);
        bool SupportsExternalResourceType(ExternalResourceType type);
    }
}

从接口名称可知,也可自行调试例子:

  1. SetupBrowserData - 用来在对话框展示内容,用户可以自己控制展示的内容
  2. LoadResource - 把资源加载进来,理论上可以加载任何地方的资源,本地或者网络

内建支持的可用的扩展资源类型:

namespace Autodesk.Revit.DB
{
    public static class ExternalResourceTypes
    {
        public static class BuiltInExternalResourceTypes
        {
            public static ExternalResourceType TopographyLink { get; }
            public static ExternalResourceType RevitLink { get; }
            public static ExternalResourceType PointCloud { get; }
            public static ExternalResourceType KeynoteTable { get; }
            public static ExternalResourceType Image { get; }
            public static ExternalResourceType IFCLink { get; }
            public static ExternalResourceType FabricationConfiguration { get; }
            public static ExternalResourceType CADLink { get; }
            public static ExternalResourceType AssemblyCodeTable { get; }
        }
    }
}

ExternalResourceUIServer

与上面类似,需要在 Revit 启动的时候加载,IExternalApplication

public Result OnStartup(UIControlledApplication application)
{
   ExternalService externalResourceUIService = ExternalServiceRegistry.GetService(ExternalServices.BuiltInExternalServices.ExternalResourceUIService);
   if (externalResourceUIService == null)
      return Result.Failed;

   // Create an instance of your IExternalResourceUIServer and register it with the ExternalResourceUIService.
   IExternalResourceUIServer sampleUIServer = new SampleExternalResourceUIServer();
   externalResourceUIService.AddServer(sampleUIServer);
   return Result.Succeeded;
}

SampleExternalResourceUIServer 继承自 IExternalResourceUIServer,这个接口在资源浏览和加载的时候给用户提供了 UI 操作的接口:

namespace Autodesk.Revit.UI
{
    public interface IExternalResourceUIServer : DB.ExternalService.IExternalServer
    {
        Guid GetDBServerId();
        void HandleBrowseResult(ExternalResourceUIBrowseResultType resultType, string browsingItemPath);
        void HandleLoadResourceResults(Document document, IList<DB.ExternalResourceLoadData> loadData);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值