我有一个 Revit 应用程序,它注册了一个外部资源服务器并使用一个外部事件来更改基调表,但我遇到了一些奇怪的行为。一般的想法是,当我通过 UI 给它一个路径时,它会告诉 Revit 在该路径加载基调表,它可以是我的外部资源服务器上的资源。这是代码的相关部分:
...preceeding code...
var knt = KeynoteTable.GetKeynoteTable(app.ActiveUIDocument.Document);
var mp = ModelPathUtils.ConvertUserVisiblePathToModelPath(_dbManager.ActiveDB.FilePath);
var extRef = ExternalResourceReference.CreateLocalResource(app.ActiveUIDocument.Document,
ExternalResourceTypes.BuiltInExternalResourceTypes.KeynoteTable, mp, PathType.Absolute);
if (knt == null) throw new Exception("Keynote table was null on reload, could not change files");
if (mp == null) throw new Exception("Model path was null, could not change files");
if (extRef == null) throw new Exception("External Resource Reference was null, could not change files");
...following code...
简而言之,它获取主题表对象,从给定的文件路径(保存在
_dbManager.ActiveDB.FilePath
中)创建模型路径,然后从中创建外部引用对象。然后它稍后使用它从以下位置加载主题表:
using (var t = new Transaction(app.ActiveUIDocument.Document, "Change Keynote File"))
{
t.Start();
knt.LoadFrom(extRef, null);
t.Commit();
}
使用我的服务器通常具有的单个文件夹路径就可以正常工作,例如
RDCloud://Something/File.txt
。但是,当您获得像 RDCloud://Something/AnotherThing/File.txt
这样的更深层次的路径时(这种情况在我的应用程序中发生的频率要低得多,但确实会发生),获取 extRef
对象的调用返回 null,因此它最终会抛出异常。
关于为什么这里为空的任何想法?这是预期的吗?我在这里做错了什么吗?