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

ADN Club => AutoCAD .NET API => Тема начата: Балиев от 28-01-2022, 19:05:24

Название: Сложный Jig.
Отправлено: Балиев от 28-01-2022, 19:05:24
Добрый день,

Есть следующая задача: необходимо многократно копировать выбранный объект (блок) через определенный интервал. При этом необходимо, чтобы копирование проходило динамически в соответствии с расстоянием курсора от начальной точки. Одновременно с этим необходимо, чтобы отслеживался еще и угол поворота линии « начальная точка – текущая точка», и в соответствии с этим углом группа скопированных объектов поворачивалось бы относительно начальной точки.

Я пытаюсь решить эту задачу используя технологию Jig. У  Kean Walmsley я нашёл код, который позволяет динамические вращать выбранный объект: https://through-the-interface.typepad.com/through_the_interface/2008/03/using-a-jig-to.html (https://through-the-interface.typepad.com/through_the_interface/2008/03/using-a-jig-to.html). Осталось научиться динамически копировать выбранный объект в соответствии с расстоянием от курсора до начальной точки. В этом, собственно, и загвоздка. Я понимаю что в какой то момент мне необходимо переопределять блок таким образом, чтобы объекты в нем заполняли пространство от начальной точки до текущего положения курсора, Но мне совершенно непонятно в каком месте кода мне нужно выполнять это переопределение.

Заранее благодарен за любые идеи решения этой задачи.
Название: Re: Сложный Jig.
Отправлено: Вильдар от 28-01-2022, 21:57:41
Посмотри DrawJig, там можно рисовать произвольное количество объектов.
Название: Re: Сложный Jig.
Отправлено: Александр Ривилис от 29-01-2022, 02:12:55
Балиев,
Думаю, что Вильдар абсолютно прав. Более того, тебе не нужно копировать блок во время Jig, а только отрисовывать его в нужных точках и с нужным поворотом (т.е. вся работа по отрисовке происходит в методе WorldDraw или ViewportDraw). А непосредственное копирование блока производится только после удачного завершения работы DrawJig. Мне кажется, что этот метод был бы оптимальным.
Название: Re: Сложный Jig.
Отправлено: Балиев от 29-01-2022, 12:09:49
Спасибо. Попробую реализовать.
Название: Re: Сложный Jig.
Отправлено: Балиев от 29-01-2022, 21:12:20
Более того, тебе не нужно копировать блок во время Jig, а только отрисовывать его в нужных точках и с нужным поворотом (т.е. вся работа по отрисовке происходит в методе WorldDraw или ViewportDraw).
А как мне получить текущую дистанцию в методе WorldDraw? Дистанция мне нужна, чтобы знать сколько дополнительных блоков отрисовывать. Я попытался получить ее нижеследующим образом, но почему то не получается:
Код - C# [Выбрать]
  1.             JigPromptDistanceOptions jdo = new JigPromptDistanceOptions("\nCurrent distance: ");
  2.             jdo.BasePoint = m_basePoint;
  3.             jdo.UseBasePoint = true;
  4.             PromptDoubleResult pdr = JigPrompts.AcquireDistance(jdo);
  5.  
На 4-ой строке выдает ошибку:
(https://i.postimg.cc/JtQTb2bk/1.png) (https://postimg.cc/JtQTb2bk)

Приведенный код работает в Sampler, но я не знаю как передать результат в WorldDraw.
Название: Re: Сложный Jig.
Отправлено: Александр Ривилис от 29-01-2022, 21:18:10
Балиев,
JigPrompts.AcquireDistance - это не статический метод класса JigPrompts. Соответственно нужно создать экземпляр класса JigPrompts и вызывать метод AcquireDistance для него.
Название: Re: Сложный Jig.
Отправлено: Александр Ривилис от 29-01-2022, 21:23:52
Балиев,
И вообще в данном случае разумнее использовать не AcquireDistance, а AcquirePoint. Это даст в результате и расстояние (от базовой точки до указанной) и направление (из базовой точки до указанной).
Название: Re: Сложный Jig.
Отправлено: Балиев от 30-01-2022, 15:59:44
igPrompts.AcquireDistance - это не статический метод класса JigPrompts. Соответственно нужно создать экземпляр класса JigPrompts и вызывать метод AcquireDistance для него.
Так не хочет экземпляр класса создаваться. Просит аргумент, а я не знаю, где его взять.
Код - C# [Выбрать]
  1.             JigPromptPointOptions jdo = new JigPromptPointOptions("\nCurrent distance: ");
  2.             jdo.BasePoint = m_basePoint;
  3.             jdo.UseBasePoint = true;
  4.             JigPrompts jp = new JigPrompts();
  5.             PromptPointResult pdr = jp.AcquirePoint(jdo);
  6.  
На 4-й строке появляется ошибка:
(https://i.postimg.cc/f39FG6bb/2.png) (https://postimg.cc/f39FG6bb)
Название: Re: Сложный Jig.
Отправлено: Александр Ривилис от 30-01-2022, 16:11:49
Балиев,
В метод Sampler передается JigPrompts, который и нужно использовать. Вообще-то "поиск рулит". Достаточно посмотреть этот пример: https://adn-cis.org/forum/index.php?topic=7251.msg22179#msg22179
Название: Re: Сложный Jig.
Отправлено: Балиев от 02-02-2022, 18:03:52
В метод Sampler передается JigPrompts, который и нужно использовать. Вообще-то "поиск рулит". Достаточно посмотреть этот пример: https://adn-cis.org/forum/index.php?topic=7251.msg22179#msg22179
Да, все получилось. Поначалу меня смутила твоя фраза: "вся работа по отрисовке происходит в методе WorldDraw ". Вот я и стал пытаться все делать в WorldDraw.