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

ADN Club => Civil 3D API => Тема начата: simson43 от 11-03-2019, 15:06:07

Название: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 11-03-2019, 15:06:07
А есть ли аналог команды "Создать трассу из элементов сети" в API?
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: Дмитрий Загорулькин от 11-03-2019, 15:35:44
В API нет какого-то метода, который бы создавал трассу по участку сети. Но есть методы по созданию трассы и методы по добавлению в неё отрезков и дуг. Поэтому, получаем участок сети с помощью выбора начального и конечного элемента. Затем, получаем данные обо всех трубах выбранного участка. Для прямолинейных труб - начальная и конечная точка для последующего вызова метода Alignment.Entities.AddFixedLine, для дуговых возможны варианты - выберите подходящую перегрузку метода Alignment.Entities.AddFixedCurve. Создаём новую трассу с помощью Alignment.Create и с помощью вышеуказанных методов (AddFixed...) добавляем в неё геометрию труб в плане.
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 11-03-2019, 19:47:04
Надеялся есть метод проще.
спасибо

а вот там есть еще класс что-то вроде SettingsCmdCreateAlignFromNetwork
не нашел ему применение, нужен ли он в этом случае вообще?
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: Дмитрий Загорулькин от 11-03-2019, 20:02:28
а вот там есть еще класс что-то вроде SettingsCmdCreateAlignFromNetwork
не нашел ему применение, нужен ли он в этом случае вообще?
Это настройки "по умолчанию" для стандартной команды. Их можно изменять программно - для этого и существует этот класс. В данном случае, можно оттуда какие-то настройки прочитать и использовать, при желании. Например - стиль трассы.
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 12-03-2019, 10:46:27
Вот как раз в этих настройках нет стиля трассы
я его взял из "SettingsCmdCreateAlignmentEntities"
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 12-03-2019, 11:12:52
И вот эти параметры работают некорректно или так и должно, что они вместо цифры счетчика пишут собственно эти слова "Следующая цифра счетчика"?

SettingsCmdCreateAlignFromNetwork.NameFormat.AlignmentFromNetwork.Value
SettingsCmdCreateAlignmentEntities.DefaultNameFormat.AlignmentNameTemplate.Value
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: Дмитрий Загорулькин от 12-03-2019, 11:24:55
Вот как раз в этих настройках нет стиля трассы
Странно, но, действительно. Для этой команды нет возможности задать отдельно стиль трассы. Вообще, если посмотреть в "Области инструментов" на вкладке "Параметры", то эти настройки находятся в секции "Трубопроводная сеть" а не в секции "Трасса". Это многое проясняет.
я его взял из "SettingsCmdCreateAlignmentEntities"
А вот это не совсем правильно. Поэкспериментировал маленько - эти настройки никак не влияют на поведение команды по созданию трассы из сети. Больше похоже на то, что команда создания трассы по сети берёт стиль трассы по умолчанию из основных настроек для трасс чертежа - SettingsAlignment (http://docs.autodesk.com/CIV3D/2019/ENU/API_Reference_Guide/html/c755a741-c654-7fea-aca6-bf2def1f4b23.htm)
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: Дмитрий Загорулькин от 12-03-2019, 11:26:51
И вот эти параметры работают некорректно или так и должно, что они вместо цифры счетчика пишут собственно эти слова "Следующая цифра счетчика"?

SettingsCmdCreateAlignFromNetwork.NameFormat.AlignmentFromNetwork.Value
SettingsCmdCreateAlignmentEntities.DefaultNameFormat.AlignmentNameTemplate.Value
Так они же возвращают шаблон имени, так что всё правильно.
Предугадывая следующий вопрос. Насколько я помню, в .NET API нет возможности получить следующее уникальное имя трассы на основе заданного шаблона. Но можно программно вычислить уникальное имя трассы по собственным алгоритмам. Порядок действий такой:
1) получаем все имена трасс в чертеже
2) вычисляем уникальное имя трассы по собственному алгоритму
3) проверяем, нет ли такого имени уже в чертеже. Если есть - возвращаемся на шаг 2. Если нет - профит.
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 12-03-2019, 11:31:58
Так они же возвращают шаблон имени, так что всё правильно.

тогда почему он каждый раз возвращает новое имя с повышением счетчика?
SettingsProfileView.NameFormat.ProfileView.Value

PS: не вышло предугадать вопрос)
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: Дмитрий Загорулькин от 12-03-2019, 11:35:20
тогда почему он каждый раз возвращает новое имя с повышением счетчика?
SettingsProfileView.NameFormat.ProfileView.Value
Не понял вопроса. Каждый раз при обращении к этому свойству увеличивается счётчик? Если да, то похоже на баг.
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 12-03-2019, 11:40:09
Не при обращении
при обращении выдает такой же шаблон

А при создании профилей по этому шаблону получаются следующие имена
PV-(1)
PV-(2)
PV-(3) и тд

хотелось бы такой же баг с именами трасс
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: Дмитрий Загорулькин от 12-03-2019, 11:44:49
Каким методом создаются виды профилей?
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 12-03-2019, 11:48:30
public static ObjectId Create(
   ObjectId alignmentId,
   Point3d insertPosition,
   string profileViewName,
   ObjectId profileViewBandSetId,
   ObjectId profileViewStyleId
)
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: Дмитрий Загорулькин от 12-03-2019, 12:22:41
Хм. Даже не знаю, что тут работает неправильно - то ли метод создания трассы, который не принимает шаблона имени, то ли метод создания вида профиля, который этот шаблон принимает. А шаблон имени в каком виде передаётся? С русскими обозначениями переменных? Есть небольшая вероятность, что метод создания трассы может принимать англоязычный шаблон. Если нет - то увы. Насколько я помню, когда-то давно я тоже пробовал использовать шаблоны имён и, судя по всему, у меня не получилось. Или получилось так же частично - где-то прокатывает, где-то нет. Поэтому я уже давно в своих приложениях при создании всех именованных объектов Civil 3D использую собственный алгоритм получения уникального имени. Как один из плюсов - сразу понятно, что объект создан моим приложением.
Название: Re: есть ли аналог команды "Создать трассу из элементов сети" в API?
Отправлено: simson43 от 12-03-2019, 12:37:55
Попробовал англоязычный шаблон подсунуть - не работает(

ладно придется иначе
Спасибо)