2012-04-16 3 views
4

WPF에서 경로 도우미 프로그램을 만들고 있는데 수만 개의 가장자리가있는 그래프 개체 인지도를 표시해야합니다. 확대, 이동, 가장자리 선택과 같이이지도와 상호 작용하고 싶다면이 선을 그리는 데 가장 좋은 옵션은 무엇입니까? 시도한 모든 옵션은 실제로 렌더링 성능이 느려지는 것으로 나타났습니다.WPF에서 수천 줄의 빠른지도 그리기

답변

3

Shape을 사용할 수 있습니다.이 객체와의 상호 작용은 특히 간단하지만 수천 개의 가장자리를 처리하는 경우 화면의 벡터 그래픽을 렌더링하는 데 사용할 수있는 시각적 객체 인 DrawingVisual 클래스를 사용하는 것이 좋습니다. 및 해당 RenderOpen 메서드. 나는 당신에게 similar problem을 가지고 있었고 DrawingContext을 사용하여 내 응용 프로그램의 성능을 향상 시켰습니다.

변환하려면 특히 ScaleTrasnform 변환을 사용해야하며 패널이나 모양에 변형을 적용해야합니다.

DrawingVisual은 이벤트 handlig를 제공하지 않으므로 Shape를 사용하면 이벤트를 사용하여 가장자리와 상호 작용할 수 있습니다. DrawingVisual에서는 Hit-Testing을 구현해야합니다.

+0

감사합니다. 나는 DrawingVisual과 함께 할 것이라고 생각합니다. –

0

WPF를 사용해야하는 경우 DrawingVisual 클래스를 살펴보십시오. 이렇게하면 더 빠른 성능을 제공하는 낮은 수준의 드로잉 프리미티브에 액세스 할 수 있습니다. 그러나 하위 수준의 객체를 다루는 경우 포커스 및 히트 테스트와 같은 문제를 처리해야합니다. DrawingVisuals에 MSDN 항목 여기를보세요 :

http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.aspx http://msdn.microsoft.com/en-us/library/ms742254.aspx

1

그리기 성능을 향상시키기 위해 한 번에 모든 라인을 렌더링하지 않도록해야합니다. 낮은 수준의 비주얼을 사용해도 성능을 향상시킬 수 없습니다.

당신은 이러한 것들을 수행 할 필요가 : 당신은, 고속도로, 지방 도로를 하나 개의 레이어에 그 라인이 후 고속도로에 관련된 라인의 기초에이를 분할 할 수 있습니다 다른 layers.You에서 레이어를 분할하는 경우

  1. 을 , Streets 등
  2. 공간적으로 색인을 생성하는 메커니즘을 찾아야합니다. 공간 인덱싱을 사용하면 경계 상자에 따라 선을 인덱싱 할 수 있습니다.
  3. 테두리 상자에 선을 표시하고 해당 경계 상자에있는 선만 렌더링하십시오.
  4. 확대/축소 수준이 높은 중요한 선 (고속도로, 고속도로)을 렌더링 한 다음 점차적으로 다른 선 (중요도가 낮은 도로, 거리) 지도 확대시.
+0

아이디어를 제공해 주셔서 감사합니다. 다른 레이어를 구현하려고합니다. –

관련 문제