잉크 분석을 사용하는 데이터 프록시

잉크 분석 개요에서 설명한 대로 잉크 분석 기술은 내부적으로 분석 결과 및 관계를 포함하도록 트리 기반 문서 모델을 유지 관리합니다. 애플리케이션에 서로 다른 설정된 문서 저장소가 이미 있는 경우 서로 다른 문서 모델 간에 데이터를 프록시하도록 설계된 잉크 분석 기능을 사용해야 합니다.

데이터 프록시 유형

데이터 프록시 기능을 사용하면 애플리케이션에서 다음을 수행할 수 있습니다.

  • 분석 결과 데이터를 기존 문서 모델에 다시 통합합니다.
  • 이전 결과(또는 상태)를 InkAnalyzer로 다시 전달합니다.
  • 잉크가 아닌 상태를 InkAnalyzer에 전달합니다.
  • 분석 작업을 완료하는 데 필요한 최소 데이터 집합(이전 및 비 잉크 상태 모두)만 통신합니다.
  • 분석 결과를 사용하여 내부 애플리케이션 문서 모델을 쉽게 업데이트합니다.

잉크 분석 데이터 프록시에는 두 가지 기본 방법이 있습니다. 차이점은 문서 모델 간의 동기화가 발생하는 시기와 방법에 대한 세부 정보에 있습니다. 첫 번째 방법인 동기 업데이트에서는 애플리케이션 문서에서 변경이 발생할 때 잉크 분석 문서 모델을 수정해야 합니다. 두 번째 방식인 주문형 업데이트에서는 애플리케이션 문서 모델 변경 내용의 영향을 받는 데이터만 InkAnalyzer에 전달해야 합니다. 즉, 애플리케이션 문서 수정과 동일한 영역에 있는 잉크 분석 문서 모델의 일부에 대한 데이터만 필요할 때 InkAnalyzer 에 전달해야 합니다.

동기 업데이트

동기 업데이트 접근 방식을 사용하려면 애플리케이션 문서에서 발생하는 InkAnalyzer 개체의 ContextNode 개체 컬렉션에 있는 노드를 수정(생성 및 삭제)해야 합니다. 예를 들어 애플리케이션에 텍스트 단어를 추가할 때마다 InkAnalyzer에서 해당 TextWord 스타일 ContextNode가 만들어집니다. 페이지에서 텍스트 단어의 위치가 변경되면 해당 ContextNode 의 위치가 동시에 업데이트됩니다. 이 메서드는 변경 내용이 분석 중인 잉크에 영향을 주지 않더라도 모든 문서 변경에 InkAnalyzer 업데이트가 포함되므로 주문형 메서드보다 컴퓨팅 리소스 측면에서 효율성이 떨어집니다.

다음 예제는 동기 업데이트의 작동 방식을 보여 줍니다. 기존 문서 모델이 있는 애플리케이션을 상상해 보십시오. 최종 사용자가 새 텍스트 추가와 같이 문서를 변경하면 다음과 같이 변경 내용이 처리됩니다.

  1. 최종 사용자가 새 데이터를 만듭니다.
  2. 애플리케이션은 데이터를 처리하고, 저장하고, 렌더링하는 방법을 결정합니다.
  3. 실용적인 목적을 위해 다음 단계가 동시에 수행됩니다.
    1. 애플리케이션은 데이터를 문서 모델에 배치합니다.
    2. 애플리케이션은 InkAnalyzer 를 만들고 업데이트합니다. 이 작업을 동시에 수행하면 InkAnalyzer 에 항상 최신 정보가 있습니다.
    3. 애플리케이션은 InkAnalyzer에서 BackgroundAnalyze를 호출하여 분석을 시작합니다.
  4. 변경 내용에 잉크가 포함되고 InkAnalyzer 가 새 결과를 결정하는 경우 일련의 이벤트가 발생합니다. InkAnalyzerContextNode 개체 컬렉션에 대한 각 변경 내용에 대해 하나의 이벤트가 발생합니다. 이러한 이벤트에는 ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeletingContextNodeReparenting이 포함됩니다. 애플리케이션은 이러한 이벤트를 처리하여 분석 작업의 결과를 적절하게 문서 모델로 다시 프록시합니다.
  5. 애플리케이션은 문서의 레이아웃을 업데이트하여 문서 모델에서 새 데이터를 가져옵니다.
  6. 새 데이터는 최종 사용자에게 다시 렌더링됩니다.

주문형 업데이트

주문형 접근 방식을 사용하려면 분석 중인 영역에 있는 ContextNode 개체에 대해서만 데이터를 전달해야 합니다. 필요한 ContextNode 개체는 분석 작업이 호출된 직후와 결과를 조정하기 직전에 애플리케이션의 문서 모델에서 추출됩니다. 동기 업데이트보다 구현하기가 더 복잡하지만 이 방법은 더 나은 성능 결과를 생성합니다.

잉크 분석 개요

InkAnalyzer 클래스(C++)

Microsoft.Ink.InkAnalyzer

Microsoft.Ink.ContextNode