Временная графика

Автор Тема: Временная графика  (Прочитано 13792 раз)

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

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Временная графика
« : 23-03-2023, 16:55:46 »
Здравствуйте, подскажите как выполнить обозначение как на картинке. Код что приведён ниже не подходит так как пропадает сразу же при движении модели. acedGrDraw - не получилось (видимо нужна ссылка на библиотеку) но судя по видео не подходит. Спасибо
Код - vb.net [Выбрать]
  1. Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  2. ed.DrawVector(sp, ep, 256, True)


Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Временная графика
« Ответ #1 : 23-03-2023, 17:20:31 »
Красные кружки?

Отмечено как Решение D_TRex 28-03-2023, 05:48:14

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #2 : 23-03-2023, 17:28:22 »
acedGrDraw и acedGrVecs - это то же самое, что Editor.DrawVector / Editor.DrawVectors. Соответственно они тебе не подойдут. Для того чтобы графика была временной, но не стиралась, нужно использовать транзитивную графику (TransientManager). Один из примеров можешь глянуть здесь: https://adn-cis.org/vyiravnivanie-primitiva-po-trem-tochkam.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Временная графика
« Ответ #3 : 23-03-2023, 17:53:30 »
Для того чтобы графика была временной, но не стиралась, нужно использовать транзитивную графику (TransientManager).
Александр, а почему не DrawJig?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #4 : 23-03-2023, 18:12:31 »
Александр, а почему не DrawJig?
Вообще-то DrawJig используется для других целей. Впрочем, я не знаю как D_TRex собирается использовать временную графику.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Временная графика
« Ответ #5 : 23-03-2023, 18:59:24 »
Вообще-то DrawJig используется для других целей.
Я посмотрел приложенный Вами пример, и мне показалось, что с той задачей прекрасно справится и DrawJig

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #6 : 23-03-2023, 20:18:47 »
Вообще-то DrawJig используется для других целей.
Я посмотрел приложенный Вами пример, и мне показалось, что с той задачей прекрасно справится и DrawJig
Да. В данном конкретном случае DrawJig можно было бы использовать, хотя DrawJig явно сложнее.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #7 : 24-03-2023, 04:56:18 »
Спасибо много сообщений на каждое отвечать не к чему.
Алексей Терно да нужны красные кружки при чем они масштабируются при зумировании (это наверное допиливать надо). Задача в пометке точек полилинии и не только, просто зачастую приходится обводить по полилинии, а точек с малым радиусом не видно.
Александр Ривилис Ваш пример обязательно попробую, по результатам напишу.
DrawJig (на всякий случай), а что это такое и как использовать?

Почему то ни чего не происходит, весь код мне не нужен, круг точно получает данные - я их потом считывал, но вот на чертеже ни чего не появляется, есть один нюанс что в примере происходило конвертирование координат, но там весь пример на это был заточен.
Код - vb.net [Выбрать]
  1.         Dim activeDoc As Document = Application.DocumentManager.MdiActiveDocument
  2.         Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  3.         Dim selPline = New PromptEntityOptions(vbLf & "Выберите полилинию")
  4.         selPline.SetRejectMessage(vbLf & "Должна быть полилиния")
  5.         selPline.AddAllowedClass(GetType(Polyline), True)
  6.         Dim res = ed.GetEntity(selPline)
  7.         If res.Status <> PromptStatus.OK Then Return
  8.         Dim PID As ObjectId = res.ObjectId
  9.         Dim cPline As Polyline
  10.  
  11.         Application.DocumentManager.MdiActiveDocument.LockDocument()
  12.         Using tr As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()
  13.             cPline = tr.GetObject(PID, OpenMode.ForWrite, False, True)
  14.             tr.Commit()
  15.         End Using
  16.  
  17.         Dim sp As New Point3d(cPLine.StartPoint(0), cPLine.StartPoint(1), 0)
  18.         Dim ep As New Point3d(cPLine.EndPoint(0), cPLine.EndPoint(1), 0)
  19.         Dim tCircle As New Circle
  20.         tCircle.Center = sp
  21.         tCircle.Radius = 2.5
  22.         Dim coll As New IntegerCollection
  23.         Autodesk.AutoCAD.GraphicsInterface.TransientManager.CurrentTransientManager.AddTransient(tCircle, Autodesk.AutoCAD.GraphicsInterface.TransientDrawingMode.DirectShortTerm, 128, coll)
  24.         ' тут я прерываю и смотрю получилось ли, точнее прочто не выполняю остаток кода
  25.         Autodesk.AutoCAD.GraphicsInterface.TransientManager.CurrentTransientManager.EraseTransient(tCircle, coll)
  26.         tCircle.Dispose()
« Последнее редактирование: 24-03-2023, 07:09:37 от D_TRex »

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Временная графика
« Ответ #8 : 24-03-2023, 11:42:24 »
DrawJig (на всякий случай), а что это такое и как использовать?
DrawJig позволяет показывать временную графику во время выполнения собственных команд. Пример использования:

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #9 : 24-03-2023, 13:22:20 »
DrawJig позволяет показывать временную графику во время выполнения собственных команд
Тогда не подходит, мне надо подсветить все вершины полилинии или начало и конец трубы

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #10 : 24-03-2023, 14:04:19 »
D_TRex,
В твоём коде ты создаешь временную графику и сразу ее удаляешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #11 : 24-03-2023, 14:19:03 »
В твоём коде ты создаешь временную графику и сразу ее удаляешь.
Я же прокомментировал что там у меня остановка, а точнее просто удаление не выполняется

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Временная графика
« Ответ #12 : 24-03-2023, 15:35:55 »
мне надо подсветить все вершины полилинии или начало и конец трубы
Опиши весь процесс - что именно тебе надо сделать, когда нужно удалять временную графику?

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #13 : 24-03-2023, 16:37:33 »
Опиши весь процесс
Я намечаю будущую сеть на чертеже полилинией (так быстрее и удобнее) потом по этой полилинии навожу трубопроводную сеть, так вот хотел временной графикой подсвечивать все вершины полилинии (так как отклонение в несколько градусов визуально не видно - пока не прочертишь сеть. Графика нужна как при нанесении шриховки, удаляемая командой реген.
DrawJig тоже интересно, но это отдельная тема и в конкретном вопросе не помогает

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Временная графика
« Ответ #14 : 26-03-2023, 21:31:24 »
Я намечаю будущую сеть на чертеже полилинией (так быстрее и удобнее) потом по этой полилинии навожу трубопроводную сеть
А почему не создать трубопроводную сеть программно по выбранной полилинии? Так вообще не будет никаких отклонений

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #15 : 27-03-2023, 09:07:37 »
А почему не создать трубопроводную сеть программно по выбранной полилинии?
Да я видел примеры, но там много "но". допустим надо понимать полилиния стартует от колодца или свободного конца, какая именно вершина будет углом поворота, а какая колодцем, при этом иногда трубы выполняются дугой. Речь идёт о километрах сетей, а не а паре полилиний.

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #16 : 27-03-2023, 13:57:39 »
Один из примеров можешь глянуть здесь: https://adn-cis.org/vyiravnivanie-primitiva-po-trem-tochkam.html
Попробовал я полностью пример от и до - всё работает (не знаю в чем моя ошибка) скорее всего в том что оно работает лишь на протяжении работы процедуры - в это время нельзя ни чего редактировать. совершенно нет информации (ни в справке, ни в инете) по TransientManager. Буду пробовать

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #17 : 27-03-2023, 14:10:23 »
D_TRex,
Ты хотел, чтобы после завершения твоей команды кружки оставались на экране? Тогда как я понимаю, нужно просто рисовать кружки (не временные, а постоянные). Одной командой их рисуешь, другой стираешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #18 : 28-03-2023, 05:47:31 »
Александр, Я уже тоже думал об этом, проблема в том что если я нарисую, а потом фатальная ошибка, то все мои художества останутся. Скиньте ссылку на пример как отловить команды Автокада. Спасибо

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Временная графика
« Ответ #19 : 28-03-2023, 14:31:54 »
Ну, фаталку самого ACAD вряд ли удастся отловить, а в своем коде я бы пользовал try - catch .
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #20 : 29-03-2023, 14:13:27 »
Александр, Я уже тоже думал об этом, проблема в том что если я нарисую, а потом фатальная ошибка, то все мои художества останутся
Если возникает фатальная ошибка (Fatal Error), очень не рекомендую сохранять чертеж. С большой вероятностью он будет испорчен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 11
Re: Временная графика
« Ответ #21 : 30-03-2023, 06:12:02 »
Я уже тоже думал об этом, проблема в том что если я нарисую, а потом фатальная ошибка, то все мои художества останутся.
Так если временная графика должна быть видна между командами и рисуется обычными примитивами и удаляется отдельной командой, как тебе посоветовали то ее удаление все равно на пользователе, тут уже все равно фатал не фатал, сохранили не сохранили, просто вышли из чертежа не воспользовавшись функцией очистки.
Просто команду очистки реализовать в виде - удалить временную графику находящуюся на слое вида "!_Слой_для_временной_графики_100500" вместе со слоем собственно. Привязать ее на финализирующую команду обработки чего-то там а так же сделать кнопку для пользователя на удаление всего этого добра если вдруг что пошло не так.

Оффлайн D_TRexАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Временная графика
« Ответ #22 : 30-03-2023, 08:37:58 »
Сделал рисованием круглишков с удалением пользователем, пока массив не пробовал прикрутить. Про команду я спрашивал, потому что в начале темы эта графика удалялась при выполнении "РЕГЕН".

Как обычно когда ищешь ни чего нет, вот нечаянно попалась тема на этом форуме с отсылкой сюда https://adndevblog.typepad.com/autocad/2012/07/highlighting-a-polyline-segment.html пока не пробовал реализовать, но в той теме хвалили. Попробовал этот код выделяет пролёт между вершинами