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

时间:2012-07-10 16:25:43

标签: c# .net revit revit-api

我们的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();

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

我开始使用Revit 2012,并且不知道链接文件中的事务的行为。但是我还需要为链接文件设置参数,并且没有找到如何正确执行的方法。 RevitAPI帮助告诉交易只能在主要文件(项目或家庭)中使用。

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

答案 2 :(得分:0)

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