2013-12-09 2 views
4

Я не уверен, что это подходящее место для запроса такого совета информации о понятии, поэтому я приношу свои извинения, если в Stack Overflow не задан вопрос или не по теме.Рисование динамических полигонов в WPF

Я хочу разработать приложение в WPF, которое имеет возможность рисовать многоугольники с функциональностью обычного элемента управления, они могут изменять форму, добавляя, удаляя или перемещая вершины, меняя кисти все время выполнения, связывание или, возможно, прямое управление кодом C# (все еще не уверен в этом).

То, что я пытаюсь достичь, - это приложение, которое рисует карту, а фигуры на ней - сущности с динамическими границами над картой (например, политические границы). Полигоны также должны быть интерактивными элементами управления с проверкой столкновений (а не только ограничивающей рамкой, а именно формой объекта на карте). Я могу ожидать, что фигуры будут очень детализированы из-за границ, которые обнаруживаются реками и горами или другими природными объектами, которые не только прямая линия из двух вершин, поэтому ее производительность должна быть важным фактором здесь, потому что один многоугольник может содержать сотни вершин) ,

Что я пришел к выводу, что через WPF можно использовать такое приложение. Но моя неопределенность заключается в наиболее эффективном способе реализации чертежа карты, возможно, я должен реализовать D3D-хостинг, такой как SharpDX, но я не хочу этого, это сделает вещи еще более сложными и трудными.

Я предпочитаю, чтобы все на этой карте было функциональным как обычный элемент управления WPF с его способностями привязки данных и стилизации. Я разработал с WPF несколько небольших тестовых проектов в течение нескольких месяцев, чтобы изучить основы и основную концепцию. Но теперь основной интерес для меня развивается с WPF. Мне нужен совет, потому что рисование сложных и динамичных фигур до сих пор не совсем ясно для меня, чтобы просто продолжить и начать его развивать.

+0

Вы можете получить представление о том, с чего начать, если вы посмотрите на один из контрольных карт, которые уже доступны как с открытым исходным кодом.Например, [этот] (http://xamlmapcontrol.codeplex.com/) в CodePlex. – Clemens

ответ

5

Я бы использовал WPF, действительно, я бы сказал, что WPF идеально подходит для этого, хотя будет много знаний. WPF использует DirectX, так что я достаточно предформат, я предполагаю (если у вас есть оборудование).

Вам нужно будет ознакомиться с:

Однако, если вы не знакомы с Dependency Properties, они могут быть головной болью, чтобы учиться, так что r а не создавать свой собственный UserControl с ними, вы можете уйти с Canvas в своем Window и строить вещи программно или во время разработки в XAML.

Что касается собственно рисования фигур; если вы заранее знаете, как будут выглядеть фигуры, вы можете нарисовать их заранее, используя инструмент, подобный Blend (или самостоятельно в XAML - вам нужно будет познакомиться с синтаксисом разметки пути), тогда вы можете использовать такие преобразования, как ScaleTransform, чтобы преобразовать их во время выполнения, или если вы хотите их построить во время выполнения, вы можете сделать это с программным добавлением точек на Polygon

eg из (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