2012-07-10 4 views
0

Revit 애드 인을 사용하면 링크 된 모델의 매개 변수를 포함하여 유형 매개 변수를 찾아보고 설정할 수 있습니다. Revit 2011 및 이전 버전에서는 정상적으로 작동했지만 Revit 2012 및 2013에서는 더 이상 설정할 수 없습니다. 링크 된 문서에서 트랜잭션을 생성 할 때 "Autodesk.Revit.Exceptions.ArguementException : 문서가 링크 된 파일이므로 트랜잭션은 기본 문서 (프로젝트 또는 제품군)에서만 사용할 수 있습니다."Revit : 링크 된 모델의 유형 매개 변수 설정

링크 된 모델에서 트랜잭션을 사용하지 마십시오. 그래서 트랜잭션없이 매개 변수를 설정하려고 시도했지만, 트랜잭션 외부에서 모델을 수정할 수 없다는 예외가 있습니다.

링크 된 모델에서 트랜잭션을 만들 수없고 트랜잭션 외부에서 모델을 수정할 수 없습니다. 그러면 Revit 2012/2013에서 링크 된 모델을 어떻게 수정합니까? 2011 년에도 동일한 코드로 작동했습니다. The Building Coder 블로그를 비롯한 온라인 검색은 상당한 성과를 거두었지만이 급변하는 변화에 대한 언급이 없거나이를 해결하는 방법을 찾지 못했습니다. 누구든지 손 빌려 줄 수 있습니까?

코드는 간단합니다. 모델에서 매개 변수를 가져오고, 트랜잭션을 시작하고 매개 변수 값을 설정하려고합니다. 다시 동일한 코드 내가 REVIT 2012 일을 시작하고 링크 된 파일의 트랜잭션 동작을 몰랐다 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

에서 오류없이 작동합니다. 그러나 연결된 파일에 대한 매개 변수를 설정해야하고 올바르게 수행하는 방법을 찾지 못했습니다. 그리고 RevitAPI의 도움을 알려줍니다 거래 문서 만 차에서 사용할 수 있습니다 (프로젝트 또는 가족.)

나는,은 Revit 2011 년에 링크 된 파일의 매개 변수를 설정하는 것은 버그가 아니라 기능이라고 추측 할 수 그것 때문에 잠재적으로 안전하지 않습니다.

0

2 년 후 ... 나는 당신이 문제의 문서를 열어서 그것을 activedocument로 만들고 거기에 원하는 코드를 적용해야한다고 생각합니다. 코드 예제가 필요한 경우 알려 주시면 무언가를 시도해 보겠습니다.

1

링크 된 파일을 언로드 할 수 있습니다. 따라서 트랜잭션을 시작하기 전에 파일을 언로드 한 다음 트랜잭션이 종료 된 후에 파일을 다시로드하십시오.

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