2017-02-08 2 views
0

Revit API 리본에 PushButton이 있으며 테스트를 수행하기 위해 프레스를 시뮬레이트하고 싶습니다 (현재 활성화 된 문서에서 ExternalCommandData object 필요). 그러나 나는 PushButton.Click() 기능과 같은 것을 찾지 못합니다.푸시 버튼을 클릭 시뮬레이션하는 방법은 무엇입니까?

var panel = Application.CreateRibbonPanel("a", "b") 
var buttonData = new PushButtonData(name, name, ApplicationInfo.AddInPath, "TestZone.Commands." + "DefaultCommand"); 
var button = panel.AddItem(buttonData) as PushButton; 

물론 응용 프로그램은 OnStartup 기능의 기본 UIControlledApplication입니다. 어쨌든 버튼 클릭 시뮬레이션을 통해 현재 열려있는 문서의 ExternalCommandData 객체를 얻을 수 있습니다 (최종 버전에는 문서가 이미 열려 있음을 확인하는 검사가 있습니다). 또는 externalCommandData를 가져 오는 다른 방법이 있습니까?

이 질문은 revit API를 알아야 할 수도 있습니다. C#에 대한 지식만으로도이 문제를 해결할 수 있을지는 의문입니다.

답변

1

나도 같은 많은 있었다를 Revit 단위 테스트 문제 - 다른 사용자가 옳다면 명령을 실행하지 않고 ExternalCommandData object을 얻을 수있는 방법이 없습니다. 다행스럽게도 외부에서 Revit을 시작하고 실행하는 작업을 자동화하여 많은 작업을 가능하게 해주는 프레임 워크가 있습니다. https://github.com/DynamoDS/RevitTestFramework

Dynamo 그룹은 테스트를 자동화하기 위해이 프레임 워크를 구축했으며 많은 훌륭한 기능을 제공합니다.

대부분의 pertinently 당신을 위해, 실제로 여기에 유효한 ExternalCommandData object

를 노출 자신의 프레임 워크에서 몇 가지 예제 코드입니다.

/// <summary> 
/// Using the TestModel parameter, you can specify a Revit model 
/// to be opened prior to executing the test. The model path specified 
/// in this attribute is relative to the working directory. 
/// </summary> 
[Test] 
[TestModel(@"./bricks.rfa")] 
public void ModelHasTheCorrectNumberOfBricks() 
{ 
    var doc = RevitTestExecutive.CommandData.Application.ActiveUIDocument.Document; 

    var fec = new FilteredElementCollector(doc); 
    fec.OfClass(typeof(FamilyInstance)); 

    var bricks = fec.ToElements() 
     .Cast<FamilyInstance>() 
     .Where(fi => fi.Symbol.Family.Name == "brick"); 

    Assert.AreEqual(bricks.Count(), 4); 
} 

RevitTestExecutive.CommandData은 찾고있는 ExternalCommandData를 제공합니다.

기계에 관리자로 RTF를 설치하는 데 문제가 있음에 유의하십시오. Windows UAC 문제가 발생하지 않도록 로컬 사용자로 로컬 디렉토리에 설치하는 것이 좋습니다.

0

명령을 실행하지 않고 ExternalCommandData 개체를 가져 오는 방법은 없습니다.

UI 자동화를 사용하여 푸시 버튼을 프로그래밍 방식으로 클릭 할 수 있습니다. 명령에 대한 키보드 단축키를 구성하고 UI 자동화를 사용하여 키 누르기를 시뮬레이트하는 것이 더 간단 할 수 있습니다. REVIT에서 UI 자동화를 사용하는 방법에 대한 자세한 내용은

참조 제레미 Tammik의 블로그 : http://thebuildingcoder.typepad.com/blog/automation/

0

당신은 외부 명령을 실행하기 위해 클릭을 시뮬레이션 할 수 있으며, 유효한 ExternalCommandData 객체 자신을 만들 수 없습니다. Revit은 이벤트 핸들러를 호출하고 콜백 함수 (예 : 외부 명령 Execute 메소드와 같은 Revit 이벤트 핸들러)에서 유효한 Revit API 컨텍스트를 제공 할 때이를 수행 할 수 있습니다.

당신은 그러나 것처럼, 다른 유효한 된 Revit API 컨텍스트에서 외부 명령을 실행할 수 있습니다 할 수 있습니다 내장 된 Revit 명령은 PostCommand API 사용 :

http://thebuildingcoder.typepad.com/blog/about-the-author.html#5.3

관련 문제