1

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

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

无法在链接模型上创建事务,也无法在事务之外修改模型 - 那么如何在 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();
4

3 回答 3

1

从 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();
于 2016-02-29T13:49:26.690 回答
0

2 年后...我认为您必须打开有问题的文档,使其成为活动文档,然后尝试在其中应用您想要的代码。如果您需要代码示例,请告诉我,我会尝试做一些事情

于 2015-04-15T13:44:36.430 回答
0

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

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

于 2012-07-11T02:49:24.133 回答