Получить координату Z указав на объект AeccDbPipe

Автор Тема: Получить координату Z указав на объект AeccDbPipe  (Прочитано 5814 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Возможно ли прочесть координату Z у объекта трубы AeccDbPipe
Если пользователь укажет на нее в плане?
Ну и если можно еще и диаметр.
 На картинке я показал какие данные нужны

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Во-первых - это в ветку по Civil надо
Во-вторых - конечно возможно. Любая труба в своей основе - обычная полилиния. Все остальное - чистая математика

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Ой да точно, что-то поспешил,
Если можно, отправьте пожалуйста
эту тему в раздел Civil.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Алексей (IdeaSoft) 27-07-2018, 17:25:45

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
На картинке я показал какие данные нужны
Так надо подключить нужные библиотеки цивила и работать с трубами уже через тип Pipe - у него есть эти свойства
Что-то около того:
Код - C# [Выбрать]
  1. using (AcadHelpers.Document.LockDocument())
  2. using (Transaction tr = AcadHelpers.Database.TransactionManager.StartTransaction())
  3. {
  4.     var pipe = tr.GetObject(_objectId, OpenMode.ForWrite) as Pipe;
  5.     if (pipe != null)
  6.     {
  7.         var pt = pipe.StartPoint;
  8.         var newPt = new Point3d(pt.X, pt.Y, value);
  9.         pipe.StartPoint = newPt;
  10.     }
  11.     tr.Commit();
  12. }

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
using (AcadHelpers.Document.LockDocument())
А что за объект AcadHelpers?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
using (AcadHelpers.Document.LockDocument())
А что за объект AcadHelpers?

В AutoCAD .NET API такого класса/пространства имён нет. Это Александр Пекшев aka Modis такой сделал. А ты можешь пользоваться стандартным.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Как получить коллекцию ObjectID всех Pipe?

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Перебрать объекты модели и отобрать тип Pipe  8)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Перебрать объекты модели и отобрать тип Pipe  8)
Я разделил тему. Ответы на это вопрос здесь: http://adn-cis.org/forum/index.php?topic=8624.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
А вот все нашел вот тут
http://spiderinnet1.typepad.com/blog/2012/06/autocad-net-iterate-through-model-space.html
ранее сообщали.

Все норм получилось
Сделал так

Код - C# [Выбрать]
  1.  
  2.  
  3. using CAD_DBS = Autodesk.AutoCAD.DatabaseServices;
  4. using CIV_DBS = Autodesk.Civil.DatabaseServices;
  5.  
  6.        using (Transaction tr = db.TransactionManager.StartTransaction())
  7.             {
  8.                 BlockTableRecord btRecord = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);
  9.                 foreach (ObjectId id in btRecord)
  10.                 {
  11.                     CAD_DBS.Entity ent = (CAD_DBS.Entity)tr.GetObject(id, OpenMode.ForRead);
  12.                     if (ent is CIV_DBS.Pipe)
  13.                     {
  14.  
  15.                      }
  16.                  }
  17.             }
Спасибо всеми за ответы.