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

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

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

无法在链接模型上创建事务,也无法修改事务之外的模型 – 那么如何在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(); 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中链接文件中的设置参数是一个错误,而不是一个function,因为它可能不安全。

2年后…我想你必须打开有问题的文档,将其作为activedocument,然后尝试在那里应用你想要的代码。 如果你需要一个代码示例,请告诉我,我会尝试鞭打一些东西