2012-07-10 50 views
0

我們的Revit Add-In允許用戶瀏覽和設置類型參數,包括鏈接模型中的類型參數。它在Revit 2011和更早版本中運行良好,但在Revit 2012和2013中,我們不能再設置這些。當在鏈接文檔上構建事務時,我會得到:「Autodesk.Revit.Exceptions.ArguementException:Document是一個鏈接文件。事務只能用於主文檔(項目或系列)。」Revit:在鏈接模型中設置類型參數

OK,所以我們可以不在鏈接的模型上使用交易。所以我嘗試在沒有事務的情況下設置參數,但後來發現異常,說我們無法在事務外修改模型。

無法在鏈接的模型上創建事務並且無法修改事務外的模型 - 那麼如何修改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(); 

回答

0

我開始工作,2012 Revit和不知道該鏈接文件中的交易行爲。但我也需要設置參數到鏈接的文件,並沒有找到如何正確執行它的方式。 而RevitAPI幫助告訴交易只能在主文檔中使用(項目或族。)

我可以猜測,在Revit 2011設置鏈接文件中的參數是一個錯誤,而不是一個功能,因爲它可能是不安全的。

0

2年後...我認爲你必須打開有問題的文檔,將其作爲活動文檔,然後嘗試在那裏應用你想要的代碼。如果你需要一個代碼示例,請告訴我,我會盡量鞭打一些東西

1

自2014年Revit以來,您可以卸載鏈接的文件。所以只需在開始事務之前卸載文件,然後在事務結束後重新加載它們。

// 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();