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

ADN Club => Civil 3D API => Тема начата: D_TRex от 23-03-2023, 16:55:46

Название: Временная графика
Отправлено: D_TRex от 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)
(https://i.postimg.cc/cr5JDVQC/2023-03-23-194605069.png) (https://postimg.cc/cr5JDVQC)
Название: Re: Временная графика
Отправлено: Алексей Терно от 23-03-2023, 17:20:31
Красные кружки?
Название: Re: Временная графика
Отправлено: Александр Ривилис от 23-03-2023, 17:28:22
acedGrDraw и acedGrVecs - это то же самое, что Editor.DrawVector / Editor.DrawVectors. Соответственно они тебе не подойдут. Для того чтобы графика была временной, но не стиралась, нужно использовать транзитивную графику (TransientManager). Один из примеров можешь глянуть здесь: https://adn-cis.org/vyiravnivanie-primitiva-po-trem-tochkam.html
Название: Re: Временная графика
Отправлено: Алексей Терно от 23-03-2023, 17:53:30
Для того чтобы графика была временной, но не стиралась, нужно использовать транзитивную графику (TransientManager).
Александр, а почему не DrawJig?
Название: Re: Временная графика
Отправлено: Александр Ривилис от 23-03-2023, 18:12:31
Александр, а почему не DrawJig?
Вообще-то DrawJig используется для других целей. Впрочем, я не знаю как D_TRex собирается использовать временную графику.
Название: Re: Временная графика
Отправлено: Алексей Терно от 23-03-2023, 18:59:24
Вообще-то DrawJig используется для других целей.
Я посмотрел приложенный Вами пример, и мне показалось, что с той задачей прекрасно справится и DrawJig
Название: Re: Временная графика
Отправлено: Александр Ривилис от 23-03-2023, 20:18:47
Вообще-то DrawJig используется для других целей.
Я посмотрел приложенный Вами пример, и мне показалось, что с той задачей прекрасно справится и DrawJig
Да. В данном конкретном случае DrawJig можно было бы использовать, хотя DrawJig явно сложнее.
Название: Re: Временная графика
Отправлено: D_TRex от 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()
Название: Re: Временная графика
Отправлено: Алексей Терно от 24-03-2023, 11:42:24
DrawJig (на всякий случай), а что это такое и как использовать?
DrawJig позволяет показывать временную графику во время выполнения собственных команд. Пример использования:
Название: Re: Временная графика
Отправлено: D_TRex от 24-03-2023, 13:22:20
DrawJig позволяет показывать временную графику во время выполнения собственных команд
Тогда не подходит, мне надо подсветить все вершины полилинии или начало и конец трубы
Название: Re: Временная графика
Отправлено: Александр Ривилис от 24-03-2023, 14:04:19
D_TRex,
В твоём коде ты создаешь временную графику и сразу ее удаляешь.
Название: Re: Временная графика
Отправлено: D_TRex от 24-03-2023, 14:19:03
В твоём коде ты создаешь временную графику и сразу ее удаляешь.
Я же прокомментировал что там у меня остановка, а точнее просто удаление не выполняется
Название: Re: Временная графика
Отправлено: Алексей Терно от 24-03-2023, 15:35:55
мне надо подсветить все вершины полилинии или начало и конец трубы
Опиши весь процесс - что именно тебе надо сделать, когда нужно удалять временную графику?
Название: Re: Временная графика
Отправлено: D_TRex от 24-03-2023, 16:37:33
Опиши весь процесс
Я намечаю будущую сеть на чертеже полилинией (так быстрее и удобнее) потом по этой полилинии навожу трубопроводную сеть, так вот хотел временной графикой подсвечивать все вершины полилинии (так как отклонение в несколько градусов визуально не видно - пока не прочертишь сеть. Графика нужна как при нанесении шриховки, удаляемая командой реген.
DrawJig тоже интересно, но это отдельная тема и в конкретном вопросе не помогает
Название: Re: Временная графика
Отправлено: Алексей Терно от 26-03-2023, 21:31:24
Я намечаю будущую сеть на чертеже полилинией (так быстрее и удобнее) потом по этой полилинии навожу трубопроводную сеть
А почему не создать трубопроводную сеть программно по выбранной полилинии? Так вообще не будет никаких отклонений
Название: Re: Временная графика
Отправлено: D_TRex от 27-03-2023, 09:07:37
А почему не создать трубопроводную сеть программно по выбранной полилинии?
Да я видел примеры, но там много "но". допустим надо понимать полилиния стартует от колодца или свободного конца, какая именно вершина будет углом поворота, а какая колодцем, при этом иногда трубы выполняются дугой. Речь идёт о километрах сетей, а не а паре полилиний.
Название: Re: Временная графика
Отправлено: D_TRex от 27-03-2023, 13:57:39
Один из примеров можешь глянуть здесь: https://adn-cis.org/vyiravnivanie-primitiva-po-trem-tochkam.html
Попробовал я полностью пример от и до - всё работает (не знаю в чем моя ошибка) скорее всего в том что оно работает лишь на протяжении работы процедуры - в это время нельзя ни чего редактировать. совершенно нет информации (ни в справке, ни в инете) по TransientManager. Буду пробовать
Название: Re: Временная графика
Отправлено: Александр Ривилис от 27-03-2023, 14:10:23
D_TRex,
Ты хотел, чтобы после завершения твоей команды кружки оставались на экране? Тогда как я понимаю, нужно просто рисовать кружки (не временные, а постоянные). Одной командой их рисуешь, другой стираешь.
Название: Re: Временная графика
Отправлено: D_TRex от 28-03-2023, 05:47:31
Александр, Я уже тоже думал об этом, проблема в том что если я нарисую, а потом фатальная ошибка, то все мои художества останутся. Скиньте ссылку на пример как отловить команды Автокада. Спасибо
Название: Re: Временная графика
Отправлено: Алексей Кулик от 28-03-2023, 14:31:54
Ну, фаталку самого ACAD вряд ли удастся отловить, а в своем коде я бы пользовал try - catch .
Название: Re: Временная графика
Отправлено: Александр Ривилис от 29-03-2023, 14:13:27
Александр, Я уже тоже думал об этом, проблема в том что если я нарисую, а потом фатальная ошибка, то все мои художества останутся
Если возникает фатальная ошибка (Fatal Error), очень не рекомендую сохранять чертеж. С большой вероятностью он будет испорчен.
Название: Re: Временная графика
Отправлено: alz от 30-03-2023, 06:12:02
Я уже тоже думал об этом, проблема в том что если я нарисую, а потом фатальная ошибка, то все мои художества останутся.
Так если временная графика должна быть видна между командами и рисуется обычными примитивами и удаляется отдельной командой, как тебе посоветовали то ее удаление все равно на пользователе, тут уже все равно фатал не фатал, сохранили не сохранили, просто вышли из чертежа не воспользовавшись функцией очистки.
Просто команду очистки реализовать в виде - удалить временную графику находящуюся на слое вида "!_Слой_для_временной_графики_100500" вместе со слоем собственно. Привязать ее на финализирующую команду обработки чего-то там а так же сделать кнопку для пользователя на удаление всего этого добра если вдруг что пошло не так.
Название: Re: Временная графика
Отправлено: D_TRex от 30-03-2023, 08:37:58
Сделал рисованием круглишков с удалением пользователем, пока массив не пробовал прикрутить. Про команду я спрашивал, потому что в начале темы эта графика удалялась при выполнении "РЕГЕН".

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