Сообщество программистов Autodesk в СНГ

Разное => Разное => Тема начата: Алексей (IdeaSoft) от 31-01-2017, 16:33:02

Название: Программирование C#, GraphicsPath.StartFigure
Отправлено: Алексей (IdeaSoft) от 31-01-2017, 16:33:02
Друзья. Хоть мой вопрос и выходит за рамки AutoCAD API.
Может кто подскажет если сталкивался с похожей проблемой.
В рантайме происходит ошибка.
Ошибка происходит не сразу а через пару секунд после рисования.
Рисую по таймеру с интервалом 100 мс.
В таймере просто вызываю метод PictureBox1.Refresh() и происходит событие OnPaint()
в обработчике, которого и вызывается метод рисования Draw_Image().

ОШИБКА ТАКАЯ
Недопустимый параметр при вызове любого из методов Path

Вот такая заготовка метода рисования
Код - C# [Выбрать]
  1. ...
  2. private void Draw_Image(Graphics gr) {
  3. Path = new GraphicsPath();
  4. // В цикле добавляю отрезки
  5. ...
  6. Point[] pnts = {new Point( (int)x1, (int)x2 ),
  7.                  new Point( (int)x2, (int)y2 )};
  8.  
  9. Path.StartFigure();
  10. Path.AddLines(pnts);
  11. Path.CloseFigure();
  12. ...
  13. // Конец цикла
  14. gr.DrawPath(Pens.Red, Path);
  15.  
  16. Path.Dispose();
  17.  
  18. }
  19.  
                                       
Название: Re: Программирование C#, GraphicsPath.StartFigure
Отправлено: Александр Ривилис от 31-01-2017, 17:02:43
А если убрать строку
Код - C# [Выбрать]
  1. Path.Dispose();

?
Название: Re: Программирование C#, GraphicsPath.StartFigure
Отправлено: Алексей (IdeaSoft) от 31-01-2017, 17:20:45
А если убрать строку
Спасибо ты направил меня на мысль.
Если убрать Dispose, то получается эффект смазывания, т.е. при перетаскивании и масштабировании
изображения старый объект Path остается и остаются все предыдущие Path.
 
У меня же объект Path является свойством моего класса
Код - C# [Выбрать]
  1. class Doroga {
  2.     public GraphicsPath Path;
  3. ...
  4. }
  5. ...
  6. Doroga Dor =new Doroga();
  7. ...


Я методе рисование перед формированием рисунка
сделал так Dor.Path = null;

Код - C# [Выбрать]
  1. private void Draw_Image(Graphics gr) {
  2. ...
  3. Dor.Path = null;
  4. Dor.Path = new GraphicsPath();
  5. ...
  6. Dor.Path.Dispose();
  7. }

и ошибка перестала появляться