알림 관리자
알림 관리자는 당신의 애드온이 ArchiCAD 환경에 더 많이 통합할 수 있게 해줍니다.
이 서비스를 바르게 사용하기 위해서는 근원적인 아이디어와 기술을 이애하는 것이 매우 중요합니다.
잘못된 방법으로 알림 관리자를 이용하여 ArchiCAD를 중단시키는 것은 매우 쉽습니다; 그래서 매우 조심해야 합니다!
당신이 유념해야 할 핵심은 사용자 상호작용 없이 알림이 백그라운드에서 들어오고 있다는 것입니다. 이 문제에 집중하는 시스템을 계획하십시오; 시간이 많이 걸리는 작업을 수행하지 마십시오. 그리고 또한 글로벌 효과가 있는 변경사항을 만들지 마십시오. 비록 알림 관리자가 이것을 감지하고 그러한 동작을 거부하겠지만 말입니다.
어떤 종류의 이벤트에 대하여 애드온이 알림을 수신하는가?
애드온은 도면 파일ㅇ르 열고, 저장하고, 닫는 것 같은 실제 프로젝트에서 발생하는 이벤트를 캐치할 수 있습니다; 팀워크 이벤트, 프로그램 환경 내 변경사항에 대한 알림도 받을 수 있습니다. 또한 애드온은 프로젝트 데이터베이스의 요소가 생성, 변경, 삭제될 때 이벤트 알림을 받을 수 있습니다. 또한 요소 데이터베이스를 Undo, Redo할 때의 변경사항에 대한 알림도 받을 수 있습니다.
함수
모든 알림 관리자 함수들은 ACAPI_Notify_ 접두사로 시작합니다. 이 함수 패밀리는 요청된 이벤트가 발생했을 때 알림을 받을 애드온을 등록하도록 지원해줍니다. 일단 알림이 게시되면, 제어권을 갖게 되고 이벤트를 처리하기 위해 거의 모든 API 함수들을 호출할 수 있습니다.
특정 이벤트에 대한 알림을 받으려면, 당신은 다음 함수들로 등록을 해야 합니다:
ACAPI_Notify_CatchProjectEvent
ACAPI_Notify_CatchViewEvent
ACAPI_Notify_CatchToolChange
ACAPI_Notify_CatchSelectionChange
ACAPI_Notify_CatchChangeDefaults
ACAPI_Notify_CatchNewElement
ACAPI_Notify_InstallElementObserver
ACAPI_Notify_CatchElementReservationChange
ACAPI_Notify_CatchLockableReservationChange![]()
만약 당신이 애플리케이션 시작부터 특정 이벤트에 대한 알림을 받고 싶으면, CheckEnvironment 함수에서
APIAddon_Normal 대신 APIAddon_Preload
를 리턴하여 당신의 애드온이 미리 로드되도록 요구할 수 있습니다.
이렇게 하면 당신의 Initialize 함수가 구동 직후 바로 호출되고 당신의 콜백 함수들을 등록할 수 있습니다.
당신이 API 등록에 콜백 함수를 설치하는 동안, 당신의 애드온은 메모리 안에 로드된 채로 유지됩니다. 그래서 함수 포인터들이 유효한 채로 남아 있게 됩니다.
다음 함수들은 당신에게 게시된 알림을 처리하는 동안 추가 정보에 접근할 수 있게 해줍니다:
ACAPI_Notify_GetParentElement
ACAPI_Notify_GetTranParams
요소 관련 알림
요소들 모니터링
데이터베이스에서 지정된 요소에 발생하는 이벤트의 알림을 받으려면, 당신은 ACAPI_Element_AttachObserver 함수로 요소에다가 옵저버를 부착해야 합니다. 그 다음 이 정보는 프로젝트 파일로 저장됩니다. 그래서 다음 번에 당신이 도면을 사용할 때 알림 시스템은 예전에 모니터링을 위해 당신이 표시해 둔 요소들의 변경사항에 대해 애드온에게 알림을 공지하게 됩니다.
만약 당신의 애드온이 ACAPI_Notify_CatchNewElement로 APIElementEventHandlerProc 요소 이벤트 핸들러 함수를 설치했다면 당신은 요소 생성 이벤트를 캐치할 수 있습니다. 당신이 만약 새로운 요소들에만 관심이 있다면 특정 타입의 요소들을 지정할 수도 있습니다. 더 많은 요소 타입들에 대해 동일한 콜백 함수를 동시에 사용할 수 있습니다. 만약 당신이 새로 생성된 요소의 변경사항을 추적하길 원한다면, 당신은 새로운 요소 콜백에서 바로 옵저버를 부착할 수 있습니다.
어떻게 작동하는가?
알림 시스템 관련 요소는 ArchiCAD의 undo 리스트를 기반으로 합니다. 즉 마지막 작업에 의해 생성된 undo 엔트리들을 처리합니다.
현재 프로젝트에서 일부 요소들의 집합을 모니터링하는 3개의 애드온들이 있다고 가정합니다. 애드온 "A"는 객체를 벽에 연결하고 해당 벽에 무슨 일이 발생하면 객체를 벽에 정렬하도록 감시합니다. 애드온 "B"는 일종의 자동 텍스트 기능을 갖고 있으며 단어 요소 생성의 공지를 받아야 합니다. 마지막으로 애드온 "C"는 벽의 길이를 제어하며 일부 벽을 제거하고 노트로 대체합니다.
다음 그림은 사용자가 평면도에서 2개의 벽을 늘릴 때 이 구성에서 무슨 일이 발생하는지 보여줍니다:
벽을 편집한 후 알림 메커니즘은 1번째 애드온이 수행해야 하는 요소들에 대한 현재 undo 엔트리를 검색합니다. 애드온이 옵저버를 부착한 요소 참조를 찾거나, 요소가 생성되고 애드온이 해당 유형의 새로운 요소에 대한 요구될 알림을 갖고 있을 때마다 알림 관리자는 적절한 애드온의 콜백 함수를 호출합니다.
마지막 엔트리에 도달한 뒤에 undo 단계에서 생성된 원래 동작이 생성됩니다. 전체 검색 메서드는 애드온이 알림을 받을 수 있도록 처음부터 다시 시작합니다.
알림을 받는 동안 애드온은 아마도 현재 undo 단계에 새로운 엔트리들을 추가할 것입니다. 그러나 애드온은 자체적으로 변경된 요소에 대한 알림을 받지 않을 것입니다.