Получить позицию в профиле по точке в плане

Автор Тема: Получить позицию в профиле по точке в плане  (Прочитано 7691 раз)

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

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Простите, возможно я повторюсь.
На форуме скорее есть ответ на мой вопрос.
К примеру на трубе есть некая точка в плане.
Возможно ли получить позицию x на виде профиля, с помощью CIVIL API?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Путь примерно такой:
- Ищем, на каких видах профилей отображена эта труба (их может быть несколько)
- У этих видов профилей получаем трассы
- Определяем пикетажи трасс в нужной точке
- Находим точки на видах профилей по найденным пикетажам

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Вот тут есть пример. Надо только немного допилить под нужды: http://adn-cis.org/forum/index.php?topic=2983.0

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Вот тут есть пример. Надо только немного допилить под нужды: http://adn-cis.org/forum/index.php?topic=2983.0

Все пока ясно, спасибо!


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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Следуя этому примеру я так понял, для того чтобы мне получить
позицию в виде профиля по произвольной точке на трассе в плане,
я должен создать временную трубу (или иной объект),
который пересечет плоскость вида профиля?


Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
В примере другая задача решается. Там сперва требуется найти точку, которая является пересечением трассы и трубы. Здесь же нужная точка уже есть в исходных данных:
К примеру на трубе есть некая точка в плане.
Значит, вычислять её не надо и искать пересечения - тоже.

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Подскажите какое пространство имен подключить для

DrawableOverrule???

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
а все нашел  Autodesk.AutoCAD.GraphicsInterface

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Вот ваша команда из примера
Код - C# [Выбрать]
  1. public class MyCommads {
  2.     [CommandMethod("MyProfilePartOverrule")]
  3.     public static void CmdProfilePartOverrule()     {
  4.         if (_overrule == null)         {
  5.             _overrule = new MyPipePartOverrule();
  6.             Overrule.AddOverrule(
  7.               RXClass.GetClass(typeof(ProfileViewPart)),
  8.               _overrule, false);
  9.         }  else  {
  10.             Overrule.RemoveOverrule(
  11.               RXClass.GetClass(typeof(ProfileViewPart)),
  12.               _overrule);
  13.             _overrule = null;
  14.         }
  15.         Application.DocumentManager.
  16.           MdiActiveDocument.Editor.Regen();
  17.     }
  18.     private static MyPipePartOverrule _overrule = null;
  19. }


Вопросик такой.

Я правильно понимаю, что переопределяемый метод
public override bool WorldDraw() в классе MyPipePartOverrule
автоматически должен вызываться?



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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
В переопределяемом методе есть строки: 183, 184
для рисования крестика.

Код - C# [Выбрать]
  1. wd.Geometry.WorldLine(..)
  2.  

А если что-то посложнее хочу нарисовать
 (к примеру элемент вхождение блока)
То как быть?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А это уже совсем другой вопрос. И даже не из области Civil 3D API.

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Хорошо вообщем для решения зайду с другой стороны

У меня есть объект трассы Trs
Alignment Trs = (Alignment)tr.GetObject(alignId, OpenMode.ForRead);

Могу ли я получить доступ к объекту вида профиля,
используя методы или свойства объекта Trs?
Чтобы потом в виде профиля получить позицию нужной точки в плане.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Да, у трассы есть метод получения её видов профилей: http://docs.autodesk.com/CIV3D/2019/ENU/API_Reference_Guide/html/8009e280-e5dc-0f19-bab8-aaed693eca5d.htm

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Да, у трассы есть метод получения её видов профилей: http://docs.autodesk.com/CIV3D/2019/ENU/API_Reference_Guide/html/8009e280-e5dc-0f19-bab8-aaed693eca5d.htm
Спасибо!
А как получить точку начала профиля (т.е. откуда рисуется первая труба)
на виде профиля?
1) ProfileView.Location
2) ProfileView.GetLocalExtents
Или другой метод есть?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Вот тут есть пример. Надо только немного допилить под нужды: http://adn-cis.org/forum/index.php?topic=2983.0
Алексей, посмотрите внимательно мой код по этой ссылке (который "от переводчика"). Строки 149-152.