Как создать стиль метки для трубы?

Автор Тема: Как создать стиль метки для трубы?  (Прочитано 34804 раз)

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

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Подскажите пожалуйста

Как создать стиль метки для трубы (для того чтобы указать стиль метки при создании сети)?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #1 : 14-05-2014, 15:48:52 »
Вы уверены, что хотите программно это делать? Это даже с помощью интерфейса не очень просто делается.
Для создания сети можно рассмотреть более простые варианты:
1. Брать уже созданный в шаблоне стиль меток трубы. Искать его, например, по названию. А название это хранить в настройках программы.
2. Брать первый стиль из списка - если не принципиально, какие метки должны стоять.
3. Есть подозрение, что можно создавать сеть не указывая никакой стиль меток для труб (надо проверять).

P.S. А как Вы создаете сеть, что Вам нужно стиль меток для труб?
Я вижу только один метод - Network.Create(CivilDocument, ref string). Здесь только ссылка на документ и строка для имени сети.
Добавить в эту сеть трубы - тоже никаких меток не надо. Методы Network.AddLinePipe и Network.AddCurvePipe не требуют стилей меток ни в каком виде. О чем речь тогда?

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #2 : 14-05-2014, 16:00:51 »
Эээ

1. Как программно получить список стилей метокпрофиля плана?
2. Нужно задать именно определённые стили меток для конкретных сетей.
3. Названия сетей уже создаются без указания силей меток для труб - не хватает задания стилей меток, которые надо создать.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #3 : 14-05-2014, 16:09:47 »
CivilDocument.Styles.LabelStyles.PipeLabelStyles.PlanProfileLabelStyles
Только учитывайте, что у стилей из этой коллекции могут быть дочерние стили.

Кстати, если я правильно понимаю, то методом Add этой коллекции можно создать новый стиль.

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #4 : 14-05-2014, 16:33:30 »
Add создает стиль с указанным именем.

А вот как получить созданный стиль на редактирование, я что-то пока не понимаю.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #5 : 14-05-2014, 16:36:42 »
Метод создает стиль и возвращает ObjectId созданного стиля ;)

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #6 : 14-05-2014, 16:57:35 »
получилось

что-то я не тот тип задал - видимо не стоит в конце рабочего дня таким заниматься :)

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #7 : 16-05-2014, 08:22:11 »
Взял пример из API Developer’s Guide - Using Property Fields in Label Style Text
newTextComponent.Text.Contents.Value = "<[Описание(CP)]>";
newTextComponent.Text.Contents.Value += "<[Inner Pipe Diameter(Umm|P2|RN|AP|GC|UN|Sn|OF)]>";
newTextComponent.Text.Contents.Value += "<[Material(CP)]>";

<[Material(CP)]>" не воспринимается как как свойство, а воспринимается как текст
<[Описание(CP)]> - воспринимается как свойство

Описание и имя отображаются нормально - а вот другие параметры не отображаются, см. скрин.
Есть какой то нюанс или пример из API Developer’s Guide  не работает?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #8 : 16-05-2014, 08:50:38 »
Думаю, что причина тут в локализации. Да и в Guide может быть ошибка, не исключаю этого.
Я бы попробовал вручную создать стиль со всеми нужными параметрами а потом в отладчике, поставив точку останова в нужном месте, посмотрел бы нужные значения свойств этого стиля.

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #9 : 16-05-2014, 09:26:18 »
видео
после добавления текст метки отображается нормально, а вот  после добавления в ручную любого другого параметра появляются символу типа \u+4018

точка остановки - заданное значение - см. скрин
в командной строке автокада - text: <[Имя сети(CP)]>

в какой кодировке должен быть задан  текст метки через API?
« Последнее редактирование: 16-05-2014, 09:49:57 от Doublefish »

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #10 : 16-05-2014, 09:55:49 »
А что за шрифт применяется? У меня нормально отображается (AutoCAD Civil 3D 2014 RUS без SP):
https://chronicle.autodesk.com/main/details/1106181b-51d3-45a7-9644-14bed2c42502

Никакую особую кодировку задавать не надо, собственно это и демонстрирует Ваш скрин с точкой останова.

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #11 : 16-05-2014, 10:04:24 »
Повторюсь - такое происходит после newTextComponent.Text.Contents.Value = "<[Inner Pipe Diameter(Umm|P2|RN|AP|GC|UN|Sn|OF)]>";

В ручную мышкой я и сам вижу что метки отображаются. Как добавить текст метки программно чтобы метка воспринималась как метка а не как текст?

newTextComponent.Text.Contents.Value = "<[Описание(CP)]>";  - работает
newTextComponent.Text.Contents.Value = "<[Material(CP)]>";  - не работает
newTextComponent.Text.Contents.Value = "<[Inner Pipe Diameter(Umm|P2|RN|AP|GC|UN|Sn|OF)]>"; - не работает

???

если в ручную в окне редактора добавить <[Inner Pipe Diameter(Umm|P2|RN|AP|GC|UN|Sn|OF)]> - то начинает работать.

так как же добавить метку диаметра и материала программно ? при этом же имя трубы и описание добавляется и отображается - код же один и тот же!
« Последнее редактирование: 16-05-2014, 10:42:37 от Doublefish »

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #12 : 16-05-2014, 10:46:17 »
Странно, конечно. В теории должно работать, на практике я пока это не использовал. Если поделитесь кодом, с помощью которого добираетесь до свойств стиля, могу попробовать покопаться и поискать причину.

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #13 : 16-05-2014, 11:55:33 »
[CommandMethod("LGIPPipeTestlabeppipeV")]
        public static void lgipaddlabelpipeVTest()
        {
            string sStyleName = "testlabel";
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Autodesk.Civil.ApplicationServices.CivilDocument CivilDoc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;

            using (Autodesk.AutoCAD.ApplicationServices.DocumentLock doclock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
            {
                using (Transaction tr = acDoc.TransactionManager.StartTransaction())
                {
                    ObjectId oPipeStyleId;
                    oPipeStyleId = CivilDoc.Styles.LabelStyles.PipeLabelStyles.PlanProfileLabelStyles.Add(sStyleName);
                    LabelStyle oPipeLabel = oPipeStyleId.GetObject(OpenMode.ForWrite) as LabelStyle;
                    oPipeLabel.Description = "22";
                    foreach (ObjectId id in oPipeLabel.GetComponents(LabelStyleComponentType.Text))
                    {
                        ObjectIdCollection lineCompCol = oPipeLabel.GetComponents(LabelStyleComponentType.Text);
                        var newTextComponent = tr.GetObject(id, OpenMode.ForWrite) as LabelStyleTextComponent;
                        newTextComponent.General.Visible.Value = true;
                        newTextComponent.Text.Height.Value = 0.005;
                        newTextComponent.Text.Color.Value = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByAci, 5);
                        newTextComponent.Text.Contents.Value = "<[Material(CP)]>";
                    }
                    ed.WriteMessage("Метка трубы с именем \"" + sStyleName + "\" успешно добавлена.\n");
                    tr.Commit();
                }
            }
        }

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #14 : 16-05-2014, 15:33:56 »
Да, это, похоже, баг. Проверил в русской и английской версиях, а также попробовал с помощью COM - везде вместо подстановки значения пишет имя поля. Тут даже не API кривое, а где-то в ядре программы ошибка.
если в ручную в окне редактора добавить <[Inner Pipe Diameter(Umm|P2|RN|AP|GC|UN|Sn|OF)]> - то начинает работать.
Это если выбрать этот параметр из списка и нажать стрелочку. Если же просто взять и вставить эту формулу в значение - тоже не обработает. Получается, что API отрабатывает как полагается, а вот внутренние механизмы глючат.
https://chronicle.autodesk.com/main/details/c5735c44-e2c6-4928-8427-df43e9613d54

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #15 : 23-05-2014, 10:36:54 »
Как обойти данную проблему?

Может быть можно как то скопировать из другого чертежа стили меток?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #16 : 23-05-2014, 11:18:45 »
Если сильно нужно - можно попробовать в ADN задать вопрос по поводу этой проблемы. С Вас тогда полный текст кода, позволяющий воспроизвести проблему (включая все using и один командный метод для запуска кода).

Вообще, работа в Civil 3D подразумевает использование готового шаблона для создания чертежа, в котором уже настроены вручную все нужные стили. Если в уже существующем чертеже не хватает каких-то стилей - есть довольно удобный инструмент, позволяющий пользователю самостоятельно перенести нужные стили из другого чертежа. Не знаю, зачем Вам понадобилось создавать стили программно...

Для программного копирования стилей между чертежами можно воспользоваться методом ExportTo объекта StyleBase (родительского объекта любого стиля).

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #17 : 28-05-2014, 13:27:59 »
Отправил запрос через подписку - Technical Support.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #18 : 28-05-2014, 13:35:14 »
Тоже вариант, может подскажут чего дельного.

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #19 : 02-07-2014, 10:06:40 »
В результате следующий ответ:
Not supported. The comp.Text.Contents.Value does not support the format like "<[Material(CP)]>", you should set a fixed string to it.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #20 : 02-07-2014, 11:31:53 »
Одной фразой убили всю идею программного создания стиля метки.

Оффлайн DoublefishАвтор темы

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Как создать стиль метки для трубы?
« Ответ #21 : 02-07-2014, 12:02:38 »
А есть примерчик копирования стиля в текущий чертеж из другого dwg с помощью ExportTo ?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #22 : 02-07-2014, 12:08:27 »
У меня нет - никогда этим не занимался. Как я уже говорил, стандартные инструменты с этим сами прекрасно справляются. :)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Как создать стиль метки для трубы?
« Ответ #23 : 22-10-2014, 17:57:44 »
Как обойти данную проблему?
Сегодня тоже напоролся на эту проблему. Весьма досадный момент, конечно. Но обнаружился частичный обходной маневр: если создать выражение из нужного параметра, то его стиль метки нормально воспринимает. Конечно, не для всего это подойдет - материал в выражение никак не засунуть...