2013-12-09 8 views
4

이것이 컨셉 정보 조언을 요청할 적절한 장소인지 확신 할 수 없으므로 관련이 없거나 스택 오버플로에서 묻는 주제가 아닌 경우 사과드립니다.WPF에서 동적 폴리곤 그리기

일반 컨트롤의 기능으로 다각형을 그릴 수있는 응용 프로그램을 개발하고 싶습니다. 정점 추가, 제거 또는 이동, 런타임에 따라 브러시 변경, 바인딩 또는 아마 C# 코드 (여전히 그것에 대해 확실하지 않음)에서 직접 조작.

내가 얻으려고하는 것은지도를 그리는 응용 프로그램이며 그 위에 모양은지도 위에 동적 테두리가있는 엔터티 (예 : 정치 테두리)입니다. 또한 다각형은 충돌 테스트 (경계 상자뿐만 아니라지도의 엔티티 모양과 정확히 일치)가있는 클릭 가능한 컨트롤이어야합니다. 강이나 산이나 두 개의 꼭지점이 직선이 아닌 다른 자연 물체에서 발견되는 경계로 인해 매우 자세한 모양을 기대할 수 있습니다. 따라서 하나의 다각형에 수백 개의 정점이 포함될 수 있으므로 성능이 중요한 요소가되어야합니다. .

WPF를 통해 이러한 응용 프로그램을 구현할 수 있다고 결론을 내 렸습니다. 그러나 내 불확실성은지도 그림을 구현하는 가장 효율적인 방법입니다. 아마도 SharpDX와 같은 D3D 호스팅을 구현해야합니다. 그러나 나는 그것을 원하지 않습니다. 더 복잡하고 어렵게 만듭니다.

데이터 바인딩 및 스타일 지정 기능을 갖춘 일반 WPF 컨트롤처럼이 맵의 모든 기능을 선호합니다. WPF로 몇 개월 동안 몇 가지 작은 테스트 프로젝트를 개발하여 기초와 기본 개념을 배웠습니다. 하지만 이제는 WPF로 개발할 때 주요 관심사가되었습니다. 복잡하고 역동적 인 드로잉을 그리기 때문에 아직 개발이 시작되지 않았기 때문에 약간의 조언이 필요합니다.

+0

에서 당신은 당신이 이미 오픈 소스로 사용할 수있는지도 컨트롤 중 하나를 살펴 경우 시작하는 위치의 아이디어를 얻을 수 있습니다.CodePlex의 [this one] (http://xamlmapcontrol.codeplex.com/)과 같이 – Clemens

답변

5

저는 WPF를 사용할 것입니다. WPF는 실제로 이것을 배우기에는 상당한 액수가 될 것입니다. WPF는 DirectX를 사용하므로 하드웨어가 있으면 충분히 상상할 수 있습니다.

당신은 익숙해 질 필요가있을 것이다 : 이미 종속성 속성에 익숙하지 않은 경우

, 그들은 수 배울 두통이 있으니, 그래서 r 자신의 UserControl을 직접 작성하는 것보다 을 Window에 넣고 프로그래밍 방식으로 또는 디자인 타임에 XAML로 빌드 할 수 있습니다.

실제로 모양을 그리는 방법은 다음과 같습니다. Blend와 같은 도구를 사용하여 (또는 XAML에서 직접 - 경로 마크 업 구문에 익숙해 져야 함) 미리 도구를 사용하여 모양을 표시 할 수있는 모양을 미리 아는 경우에는 다음과 같은 변형을 사용할 수 있습니다. ScaleTransform을 런타임에 변환하거나 런타임에 빌드하려는 경우 프로그래밍 방식으로 점을 추가하여 Polygon

(Polygon)

//Add the Polygon Element 
myPolygon = new Polygon(); 
myPolygon.Stroke = System.Windows.Media.Brushes.Black; 
myPolygon.Fill = System.Windows.Media.Brushes.LightSeaGreen; 
myPolygon.StrokeThickness = 2; 
myPolygon.HorizontalAlignment = HorizontalAlignment.Left; 
myPolygon.VerticalAlignment = VerticalAlignment.Center; 
System.Windows.Point Point1 = new System.Windows.Point(1, 50); 
System.Windows.Point Point2 = new System.Windows.Point(10,80); 
System.Windows.Point Point3 = new System.Windows.Point(50,50); 
PointCollection myPointCollection = new PointCollection(); 
myPointCollection.Add(Point1); 
myPointCollection.Add(Point2); 
myPointCollection.Add(Point3); 
myPolygon.Points = myPointCollection; 
myGrid.Children.Add(myPolygon); 
+0

XAML에서 도형을 만들려는 경우에만 필요하기 때문에 "경로 마크 업 구문에 익숙해 져야합니다"라는 데 동의하지 않습니다. 나에게 질문은 MVVM에 따라 코드에서 모양을 만드는 것과 비슷하게 들린다. – Clemens

+0

감사합니다. MVVM을 사용하거나 내 대답은 그것에 대해 불가지론하지 않습니다. – markmnl

+0

답변 해 주셔서 감사합니다. 주제에 대해 좀 더 중요한 질문을하기 위해 돌아 왔습니다. 1) 특정 점 (x, y)가 다각형 안에 있는지 감지 할 수 있습니까? 2) 성능 향상을 위해 드로 콜을 관리하고 뷰 포트 외부의 호출을 피할 필요가 있습니까? 3)이 WPF에 의해 관리되는 렌더링 또는 모양을 변경하면 새로 고침 및 다시 그려야합니까? – Lispwave