Программирование C#, GraphicsPath.StartFigure

Автор Тема: Программирование C#, GraphicsPath.StartFigure  (Прочитано 3349 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Друзья. Хоть мой вопрос и выходит за рамки 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.  
                                       

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Программирование C#, GraphicsPath.StartFigure
« Ответ #1 : 31-01-2017, 17:02:43 »
А если убрать строку
Код - C# [Выбрать]
  1. Path.Dispose();

?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Программирование C#, GraphicsPath.StartFigure
« Ответ #2 : 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. }

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