이 절에서는 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_Startup 및 Module_Shutdown에 어떤 항목을 포함해야 합니까? |
Module_Startup 메서드는 모듈이 로드될 때 호출되고 Module_Shutdown은 모듈이 언로드될 때 호출됩니다. 응용프로그램 레벨 매크로 모듈의 경우 Module_Startup은 Revit 프로젝트가 열릴 때 호출되고 Module_Shutdown은 프로젝트 문서가 닫힐 때 호출됩니다. 문서 레벨 매크로 모듈의 경우 Module_Startup은 Revit이 시작할 때 호출되고 Module_Shutdown은 Revit이 종료될 때 호출됩니다. Module_Startup 및 Module_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.StartupAddHandler Me.OnDocumentNewed, AddressOf Me.ThisApplication_OnDocumentNewedEnd SubPrivate Sub Module_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ShutdownRemoveHandler Me.OnDocumentNewed, AddressOf Me.ThisApplication_OnDocumentNewedEnd SubPrivate Sub ThisApplication_OnDocumentNewed(ByVal document As Autodesk.Revit.Document)System.Windows.Forms.MessageBox.Show("VB.NET Application event OnDocumentNewed")End Sub