2015-02-17 2 views
1

Я использую ZedGraph для отображения кривых (с точками 10k +) в моем приложении.Перерисовать только часть панели

Я добавил вертикальные полосы, чтобы пользователь мог видеть значение точки (вид перекрестия). Каждый раз, когда пользователь перемещает мышь, весь контроль перерисовывается:

bool stackedGraphControl1_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e) 
{ 
    DrawCursors(e.Location); 
    Refresh(); 
    return false; 
} 

С более чем 2-х кривыми, компьютер становится лагом. Одно из решений состоит в том, чтобы нарисовать только вертикальные полосы (удалить вызов Refresh() и нарисовать только вертикальные полосы). Это намного быстрее, но графический результат смешно:

enter image description here

Но не очень полезно. Я понимаю, что все вертикальные полосы рисуются снова и снова, но не удаляются.

Есть ли способ перерисовать (то есть: удалить и нарисовать) только полосы (которые находятся в GraphObjList моих панелей)?

ответ

1

В прошлом я выполнил эту функцию, переопределив OnPaint из ZedGraphControl для создания многоуровневого эффекта рисования.

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

Будущие OnPaint вызовы blit this Bitmap на графический объект и вручную рисуют любые GraphObjs поверх этого.

События MouseMove просто обновляют свойства индикатора и принудительно перерисовывают изображение в виде кешированного zedgraph.

Смежные вопросы