Revit:在链接模型中设置类型参数



我们的Revit外接程序允许用户浏览和设置类型参数,包括链接模型中的类型参数。它在Revit 2011及更早版本中运行良好,但在Revit 2012和2013中,我们无法再设置这些。在链接文档上构建事务时,我得到:"Autodesk.Revit.Exceptions.ArgumentException:文档是链接文件。事务只能在主文档(项目或族)中使用。"

好的,所以我们不能在链接模型上使用事务。所以我尝试在没有事务的情况下设置参数,但后来我得到了一个异常,说我们不能在事务之外修改模型。

无法在链接模型上创建事务,也无法在事务之外修改模型——那么如何在Revit 2012/2013中修改链接模型呢?它在2011年使用相同的代码运行良好。在网上搜索了包括The Building Coder博客在内的大量内容,但没有提到这一突破性的变化,也没有提到如何解决它。有人能伸出援手吗?

我们的代码很简单——我们在模型中获取一个参数,启动一个事务并尝试设置一个参数值。同样,在Revit 2011中,相同的代码也可以正常工作。

// elementType is an ElementType in document doc 
// for which we want to set a type parameter.
Parameter typeParameter = elementType.get_Parameter(pararmeterName);
Transaction transaction = new Transaction(doc, "Update Revit Type"); // Exception thrown here if doc is a linked model
transaction.Start();
typeParameter.Set("FooValue");
transaction.Commit();

自Revit 2014以来,您可以卸载链接的文件。因此,只需在启动事务之前卸载文件,然后在事务结束后重新加载它们。

// Unload all links
var loadedExternalFilesRef = new List<RevitLinkType>();
var collector = new FilteredElementCollector(document);
foreach (Element element in collector.OfClass(typeof(RevitLinkType)))
{
    ExternalFileReference extFileRef = element.GetExternalFileReference();
    if (null == extFileRef || extFileRef.GetLinkedFileStatus() != LinkedFileStatus.Loaded) 
        continue;
    var revitLinkType = (RevitLinkType)element;
    loadedExternalFilesRef.Add(revitLinkType);
    revitLinkType.Unload(null);
}
// Do your stuff in a transaction
// Reload links
foreach (RevitLinkType revitLinkType in loadedExternalFilesRef)
    revitLinkType.Load();

我开始使用Revit 2012,不知道链接文件中事务的行为。但我也需要为链接的文件设置参数,但没有找到正确的方法。RevitAPI帮助告诉事务只能在主文档(项目或族)中使用

我可以猜测,在Revit 2011中的链接文件中设置参数是一个错误,而不是一个功能,因为它可能不安全。

两年后。。。我认为你必须打开有问题的文档,使其成为活动文档,然后尝试在其中应用你想要的代码。如果你需要一个代码示例,请告诉我,我会尝试创建

最新更新