Revit Macros FAQ

이 절에서는 Revit 매크로와 관련된 자주 묻는 질문에 대한 대답을 제공합니다.

질문 답변
매크로 관리자의 분류 리스트에 새로 작성한 매크로가 표시될 것으로 예상했으나 리스트에 없습니다. 그 이유는 무엇입니까? Revit 매크로 IDE에서 작성 메뉴를 사용하여 매크로 프로젝트를 성공적으로 작성해야만 새 매크로가 매크로 관리자에 나타납니다.
새 매크로를 작성할 때 RevitAPI.dll과 RevitAPIUI.dll을 참조로 추가해야 합니까? 아니오. 이 단계는 완료되었기 때문에 RevitAPI.dll과 RevitAPIUI 파일을 참조할 필요가 없습니다. Revit 매크로 프로젝트에서는 둘 다 필수 참조로 사용합니다. IDE에서 이 참조를 삭제하면 Revit 매크로가 실패합니다.

RevitAPI.dll 및 RevitAPIUI.dll 복원을(를) 참고하십시오.

내 Revit.ini 파일을 편집해야 합니까? 아니오. Revit 매크로는 시스템에 대한 추가 수정 없이 매크로 관리자에 표시되도록 자동 등록됩니다.
Revit 매크로 IDE에서 This*.cs 파일 또는 This*.vb 파일의 메서드를 제거하여 매크로를 삭제했습니다. 그러나 매크로 관리자의 분류 리스트를 다시 열면 삭제된 매크로 이름이 계속 표시됩니다. 리스트에서 해당 이름을 지우는 방법은 무엇입니까? 편집된 프로젝트를 성공적으로 빌드해야 매크로 관리자가 제거를 인식할 수 있습니다.
응용프로그램 레벨 매크로와 문서 레벨 매크로 간의 차이점은 무엇입니까? Revit 응용프로그램의 단일 인스턴스 내에 열려 있는 모든 Revit 프로젝트에서 응용프로그램 레벨 매크로를 실행할 수 있습니다. 문서 레벨 매크로 프로젝트는 RVT 파일에 저장됩니다. 현재 활성 문서 내에서 문서 레벨 매크로 프로젝트를 로드하고 해당 문서에서 실행할 수 있습니다.
응용프로그램 객체 또는 externalCommandData와 동일한 항목에 액세스하는 방법은 무엇입니까? 모든 응용프로그램 레벨 매크로는 UIApplication 객체와 연관되어 있습니다. 응용프로그램 레벨 매크로에서는 C# 및 VB.NET의 응용프로그램 키워드 포인터가 API 응용프로그램 객체를 반환합니다.

문서 레벨 매크로에서는 문서 키워드가 API 문서 객체를 반환합니다. 문서 레벨 매크로에서 UIApplication 객체에 액세스하려면 this.Application을 사용하십시오.

시작 및 종료 메서드: Module_StartupModule_Shutdown에 어떤 항목을 포함해야 합니까?

Module_Startup 메서드는 모듈이 로드될 때 호출되고 Module_Shutdown은 모듈이 언로드될 때 호출됩니다.

응용프로그램 레벨 매크로 모듈의 경우 Module_Startup은 Revit 프로젝트가 열릴 때 호출되고 Module_Shutdown은 프로젝트 문서가 닫힐 때 호출됩니다.

문서 레벨 매크로 모듈의 경우 Module_Startup은 Revit이 시작할 때 호출되고 Module_Shutdown은 Revit이 종료될 때 호출됩니다.

Module_StartupModule_Shutdown은 또한 매크로 프로젝트가 재구성될 때도 호출됩니다.

Module_Startup 메서드에 초기화 코드를 추가하고 Module_Shutdown 메서드에서 정리 작업을 실행할 수 있습니다. 예를 들어 시작 시 이벤트 처리기를 등록하고 종료 시 해당 등록을 해제할 수 있습니다(권장 방식).

내 Revit 이벤트 처리기를 등록 및 등록 해제해야 하는 이유 및 방법은 무엇입니까? 앞에서 설명한 대로 Revit IDE에서 이 작업을 실행하기 위한 권장 방법은 *_Startup 메서드에서 이벤트 핸들러를 등록하고 *_Shutdown 메서드에서 등록 해제하는 것입니다. 모든 매크로는 동적으로 로드 및 언로드됩니다. 매크로를 디버그할 때 이벤트 처리기를 제대로 등록 해제하지 않은 경우 Revit에서 잘못된 메서드(잘못된 메모리 주소)를 호출할 수 있습니다. Revit IDE에서 Revit에 이러한 충돌이 발생하지 않도록 할 수 있지만 이벤트 핸들러를 제대로 등록 해제하지 않으면 현재 Revit 세션 중에 성능 문제가 발생할 수 있습니다.
제대로 작동하는 것으로 보이지 않으며 Revit에 문제를 발생시키는 대화상자가 있습니다. 실행 중인 API 콜백의 범위 바깥에서 작동하는 모델리스형 대화상자는 문제를 일으킬 수 있습니다. Revit에서 불안정을 방지하도록 이러한 콜백을 수행하지 않는 것이 좋습니다.
Startup 및 Shutdown 메서드와 이벤트 처리기를 사용하려고 합니다. 예를 제공해 주십시오. 다음 샘플 코드는 새 Revit 프로젝트가 작성될 때 메시지 상자를 자동으로 시작하는 OnDocumentNewed 이벤트 핸들러를 등록하는 방법을 보여줍니다. 주: Revit SDK에 제공된 매크로 샘플 중 하나에서 문서 레벨 이벤트 핸들러의 시작 및 종료 예를 표시할 수 있습니다. 이 FAQ에서는 응용프로그램 레벨 이벤트 처리기 예를 보여줍니다.

2011의 Revit IDE에서는 모든 API 이벤트에 액세스할 수 있습니다. 2011 이전의 이벤트는 제거되었습니다. 다음 예는 새 이벤트를 보여줍니다.

C# 예, 응용프로그램 레벨:

private
void Module_Startup(object sender, EventArgs e){
 this.Application.DocumentOpened
+= new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);
} void Application_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e){
System.Windows.Forms.MessageBox.Show("message here");
} private void Module_Shutdown(object sender, EventArgs e){ this.Application.DocumentOpened -= new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);}
}

VB.NET 예, 응용프로그램 레벨:

Private
Sub Module_Startup(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Startup
AddHandler Me.OnDocumentNewed,
AddressOf Me.ThisApplication_OnDocumentNewed
End SubPrivate Sub Module_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
RemoveHandler Me.OnDocumentNewed,
AddressOf Me.ThisApplication_OnDocumentNewed
End SubPrivate Sub ThisApplication_OnDocumentNewed(ByVal document As Autodesk.Revit.Document)
System.Windows.Forms.MessageBox.Show("VB.NET
Application event OnDocumentNewed")
End Sub