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

ADN Club => Civil 3D API => Тема начата: Алексей (IdeaSoft) от 08-06-2018, 13:19:06

Название: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 13:19:06
Подскажите, как получить с помощью CIVIL API:

1) Коллекцию трасс (к примеру сети водопровод)

2) По трассе получить объект профиля и соотв. позицию профиля (X,Y) в модели

Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 13:31:01
Вроде как трасса это коридор?

Код - C# [Выбрать]
  1.             CorridorCollection coll = ... ;// взять коллекцию
  2.             foreach (CAD_DBS.ObjectId id in coll) {
  3.                 Corridor cor =   ... ;  // взять коридор по id
  4.                 Plane pln = ...;  // Тут что делать не понятно?
  5.                 Autodesk.Aec.Geometry.Profile prof = cor.GetProfile(pln); // Получить профиль
  6.                // Ну и положение чертежа профиля наверное так получить можно?
  7.                 Point2d p1, p2;  
  8.                 prof.Extent(out p1, out p2);
  9.             }
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 13:49:45
Вроде как трасса это коридор?
А мне казалось, что коридор - это коридор...
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 14:03:52
Вроде как трасса это коридор?
А мне казалось, что коридор - это коридор...

Я проверил коридор это ни фига не трасса.
Трассу нужно искать где-то в другом месте
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 14:17:16
Я проверил коридор это ни фига не трасса.
Трассу нужно искать где-то в другом месте
Ага. Alignment: http://adndevblog.typepad.com/infrastructure/2012/05/list-all-alignment-entities.html
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 14:20:30
Я проверил коридор это ни фига не трасса.
Трассу нужно искать где-то в другом месте
Ага. Alignment

По ходу через коллекцию труб можно получить трассу

Код - C# [Выбрать]
  1.             Document doc = Application.DocumentManager.MdiActiveDocument;
  2.             Database db = doc.Database;
  3.             CivilDocument civ_doc = CivilDocument.GetCivilDocument(db);
  4.             ObjectIdCollection coll = civ_doc.GetPipeNetworkIds(); // Коллекция труб
  5.             Pipe pipe = ... ;  // Получить трубу из коллекции
  6.             ObjectId newtid = pipe.NetworkId; // Получить ИД трассы из элемента трубы
  7.             Network nw = ... ; // взять трассу по newtid

Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 14:21:41
По ходу через коллекцию труб можно получить трассу
Кажется ты написал бред.
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 14:26:29
Кажется ты написал бред.
Конечно же бред. Все через заднее место написал.
Сначала получить коллекцию труб а потом трассу - это полный бред.
Я так делать не хочу и не буду.
А я хочу сразу получить коллекцию трасс.
Как это сделать?

Должен же в API способ получить коллекцию трасс.
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 14:27:43
А я хочу сразу получить коллекцию трасс.
Как это сделать?
Выше я уже давал ссылку: http://adndevblog.typepad.com/infrastructure/2012/05/list-all-alignment-entities.html
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 14:30:37
А точно же. Вот я тормоз.
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 14:32:00
            ObjectId newtid = pipe.NetworkId; // Получить ИД трассы из элемента трубы
И в любом случае ты получал не ObjectId трассы, а ObjectId сети.
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 14:34:06
Ага посмотрел.
Вообщем так
В цикле делаю проверку на то что это объект Network и все


Код - vb.net [Выбрать]
  1. Dim alignSubEnt As AlignmentSubEntity = alignEnt(i)
  2.             Select Case alignSubEnt.SubEntityType
  3.               Case AlignmentSubEntityType.Network


Нет это тоже бред


Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 14:43:27
Нет это тоже бред
Безусловно. Причем здесь трубопроводная сеть?
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 14:46:02
Что-то не въехал пока

Зачем мне эти: AlignmentSubEntityType.Line
                       AlignmentSubEntityType.Acr и прочие Spiral

Мне же нужно объект трассы (сети)
Я так понял это Network


Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 14:48:28
Мне же нужно объект трассы (сети)
Я так понял это Network
Трасса - это трасса. Сеть - это сеть. Я перестал что-либо понимать...
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 14:51:13
Дли понимания прикрепляю картинку в дереве объектов Civil

Мне нужно получить доступ к коллекции "различные трассы"

(https://s22.postimg.cc/gt6k19bn1/Provodnik.png) (https://postimg.cc/image/gt6k19bn1/)
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Дмитрий Загорулькин от 08-06-2018, 16:01:02
По порядку.
Получить коллекцию трасс в чертеже: http://docs.autodesk.com/CIV3D/2019/ENU/API_Reference_Guide/html/768e0508-6ee6-3da7-410b-4a059f6ddcbf.htm
Далее, трасса сети. В принципе, сеть и трасса могут и не иметь никакой связи. Просто сеть будет отображаться на виде профиля трассы. Но в идеальном случае, у сети может быть задана ссылочная трасса: http://docs.autodesk.com/CIV3D/2019/ENU/API_Reference_Guide/html/cc05cd26-d4ad-cc1f-5a82-fc28852b7509.htm
Далее, надо получить профили трассы? Или виды профилей, на которых отображена сеть? В общем, нужно более детальное описание задачи - что есть и что надо получить. Тогда смогу что-то подсказать конкретное.
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Дмитрий Загорулькин от 08-06-2018, 16:26:08
Перечитал ещё раз предыдущее обсуждение.
В Сивиле всё не так просто с сетью и трассой. Есть только один вариант, о котором я выше писал - если у сети задана ссылочная трасса. Но это ничего не гарантирует. То есть, хоть ссылочная трасса и будет задана, но не даёт гарантии, что трубы и колодцы сети будут отображаться на видах профилей этой трассы. Также, нет никакой гарантии, что геометрия сети и трассы в плане будут совпадать. То есть, ссылочная трасса - это просто запись ObjectId трассы в объект Network, не более. И если найти трассу сети, имея исходными данными сеть, ещё как-то можно, то найти сеть под трассой можно, пожалуй, только брутфорсом. То есть:
Есть сеть - у сети есть свойство ReferenceAlignmentId (но оно ничего не гарантирует). У каждой трубы и колодца сети есть ещё отдельный метод GetProfileViewDisplayingMe: http://docs.autodesk.com/CIV3D/2019/ENU/API_Reference_Guide/html/307afdd4-7ad4-d57f-c273-a0d54d9222fe.htm. То есть, можно найти виды профилей, на которых конкретная труба или колодец отображаются. Потом уже по восходящей цепочке от видов профилей найти их родительские трассы.
Если же исходными данными является трасса, то найти какие сети под ней проходят и отображаются на её видах профилей - довольно нетривиальная задача. Прямого пути нет. Но решаемо.
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 16:32:48
Ага я получил коллекцию элементов типа
AlignmentSubEntityLine
Но вот как понять что элемент трубы находится в трассе?
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Дмитрий Загорулькин от 08-06-2018, 16:41:05
Это элементы, из которых состоит трасса - отрезки. Трасса (Alignment) - это просто линия в нулевом уровне, по которой строятся профили и виды профилей. Внутри трассы есть коллекция частей, из которых она состоит: линии, дуги и спирали. Но сама трасса (Alignment) ничего не "знает" об объекте "сеть" (Network). В данных трассы нигде не содержится никаких привязок к сетям чертежа. Так что
элемент трубы находится в трассе
такого в принципе не может быть. Элемент сети (труба или колодец) может геометрически находиться на трассе (на плановом виде), но трасса об этом не "знает" ничего.
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 17:35:59
Вот есть объект класса pipe
Мне бы просто получить этот объект?

CIV_DBS.Pipe pp =//  Вот как найти в базе объект Pipe?
pp.NetworkName //  Тут я получу имя трассы - это все что пока мне нужно будет.

Pipe и AlignmentSubEntityLine - это одно и тоже или разные вещи (приведение типов сработает)?


 
Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Александр Ривилис от 08-06-2018, 17:42:56
CIV_DBS.Pipe pp =//  Вот как найти в базе объект Pipe?
Если ты знаешь его ObjectId, то можешь его найти. Если нет, то по каким параметрам ты его найдёшь?
pp.NetworkName //  Тут я получу имя трассы - это все что пока мне нужно будет.
Не получишь. Потому что это не имя трассы, а имя сети.
Pipe и AlignmentSubEntityLine - это одно и тоже или разные вещи (приведение типов сработает)?
Это совершенно разные вещи. Приведение типов не может сработать.

Название: Re: Получить коллекцию Трасс и профиль
Отправлено: Алексей (IdeaSoft) от 08-06-2018, 22:26:29
Спасибо большое за ответы.
Теперь разобрался.