Нужна помощь в выборе графического инструмента для WPF
Нужна помощь в выборе графического инструмента для WPF для решения следующей задачи.
Нужно визуализировать 3-х слойную модель:
- 1 слой представляет собой сечение объекта, (квадраты с разными свойствами) размеры естественно разные 100х100м или 2000х500м, делается в любом чарте, тут проблем нет.
- 2-й слой представляет собой несколько прямоугольников, в качестве заливки - изображение (то есть поддержка кистей виндовс ImageBrach. тайлы - небольшие bmp файлы) ещё нужно эти прямоугольники вращать на произвольны угол, при этом форма и заливка не должны искажаться при изменении масштабирования нижнего слоя.
Сделал на канве, но не понимаю как совместить с нижним чартом, например ось х на отметке 300м - такой прямоугольник. изменили размеры графика на чарте - отметка 300м естественно сместилась, как отследить куда надо передвинуть/перерисовать прямоугольник. Опять же длинна прямоугольников должна меняться в зависимости от масштаба по оси Y, а ширина оставаться постоянной.
3-й слой нужен интерактивный, то есть дать возможность мышкой нарисовать некую область и нужно иметь возможность изменить свойства квадратов из 1-го слоя, попавших в нарисованную область (например закрасить их одним цветом). Так же нужно иметь возможность передвинуть границу области (мышкой сместить точку у у серии типа полилайн).
Для рисования на canvas например, есть куча примеров, но та же проблема - совместить с чартом. В данный момент частично реализовано на LiveChart, есть проблемы: Не смог получить доступ к отдельной LineSeries в коллекции для поворота. Пересчитываю координаты точек объектов и перерисовываю их. При этом тайлы искажаются при изменении масштаба по оси Y прямоугольники 2-го слоя искажаются.
Не могу найти, можно ли рисовать на самом LiveChart ? или единственный вариант отслеживать мышь на области графика и например по щелчку добавлять точки в серию на чарте?
До этого пробовал OxyPlot, но он не имеет поддержки кистей виндовс. Вроде можно всё сделать на канве, но не понимаю как быть с масштабированием - пересчитывать размеры всего в ручную? (при изменении размеров окна или среза объекта), использование LiveChart не принципиально, а WPF обязательно.
Может всё таки есть инструмент, который позволит всё это сделать ? Буду благодарен за любые идеи.
Скриншот существующей программы (не моей). мне надо сделать что то подобное
Прямоугольники имеют одинаковую заливку, но при этом у повёрнутых она искажена.
Ответы (1 шт):
Решение, может кому пригодится.
У LiveChart есть методы ConvertToChartValues и ConvertToPixels (https://lvcharts.net/App/documentation/beta/wpf/LiveCharts-Wpf-Extentions)
Point Nxy = new Point(0,0); //точка начала осе чарта
Point Nxy1 = Chart1.ConvertToPixels(Nxy); //координаты этой точки в пикселях
//контейнера
Polygon reg = new Polygon();
reg.Points.Add(Nxy1);
reg.Points.Add(new Point(Nxy1.X+ 400, 100));
reg.Points.Add(new Point(Nxy1.X + 400, 200));
reg.Points.Add(Nxy1);
reg.Fill = new SolidColorBrush(Colors.Blue);
reg.Name = "reg1";
canva.Children.Add(reg);
Данный код даёт координаты точки начала осей в пикселях. Нарисованный на канве полигон включает эту точку. Главное изначально точно совместить канву и чарт.

