WPF, DrawingVisual, что это такое и с чем это едят, или как перерисова

uaha1979

Суть: есть Canvas (с координатами x) на котором рисуются DrawingVisual'ы, далее делается замена координат y = Ax + b, далее надо перерисовать старые DrawingVisual'ы в новых координатах.
Как это реализовано у меня:
//Я шел по книге: pro WPF in C# 2008 Matthew MacDonald, поэтому реализация может быть не самая лучшая

class DrawingCanvas : Canvas {
public List<Visual> visuals = new List<Visual>

protected override int VisualChildrenCount {
get { return visuals.Count; }
}
protected override Visual GetVisualChild(int index) {
return visuals[index];
}
public void AddVisual(Visual visual) {
visuals.Add(visual);
base.AddVisualChild(visual);
base.AddLogicalChild(visual);
}
public void DeleteVisual(Visual visual) {
visuals.Remove(visual);
base.RemoveVisualChild(visual);
base.RemoveLogicalChild(visual);
}
}

Рисую я так:

private void Draw{
DrawingVisual visual = new DrawingVisual;
DrawingContext dc = visual.RenderOpen;
Pen drawingPen = new Pen(Brushes.Red, 1);
Point startPoint = new Point;
Point endPoint = new Point;

for (int j = 0; j < 3000; j++) {
obj.Integrate;
dc.DrawLine(drawingPen, startPoint, endPoint);
startPoint = endPoint;
}

dc.Close;
drawingSurface.AddVisual(visual);//!
}

В итоге: я хочу вынуть все DrawingVisual'ы из visuals, модифицировать их и положить обратно
но я не знаю, что из себя представляет DrawingVisual, как он хранится, как отрисовывается итд
Буду рад получить инфу по этим вопросам (ссылки, названия книг, итд)

Dasar

если ты хочешь модифицировать уже отрисованное, то скорее всего тебе не нужен Visual-ы

uaha1979

Я пробовал делать так:

dc = visual.RenderOpen;
dc.PushTransform(transform);
dc.Close;
tmpColl.Add(visual);

Потом из tmpColl копировал обратно. не помогло.
А должно ли помочь?

Dasar

ты задачу какую хочешь решить?

uaha1979

Рисуется график (интегрированием но он получился слишком мелким/большим в стандартных границах, я вычисляю нормальные границы (выше, ниже, левее, правее, которых графика нет) и хочу перерисовать в старый график в новых границах.

uaha1979

Может сохранять visual'ы как пикчи, и их потом трансформировать, но это как-то маразмом попахивает.

Dasar

и хочу перерисовать в старый график в новых границах.
так и перерисовывай его с нуля заново, генеря заново все visual-ы.
другими словами: пишешь функцию, которая генерит необходимую часть графика, эту функцию и вызываешь при изменении размеров контрола или настроек вывода графика
Оставить комментарий
Имя или ник:
Комментарий: