1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Вывод отображения определённых свойств устройству

Сценарии / Модули API

Модератор: специалисты Eplan

Ответить
Аватара пользователя

Автор темы
Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 48
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 48 раз

Вывод отображения определённых свойств устройству

Сообщение Barmaley4 »

Добрый день!
На листах Э3 у каждого объекта выносится ОУ (Visible display tag) для отображения имени на схеме. Но что если надо дополнительно вынести некоторые свойства блока в дополнение к имеющемуся ОУ? И некоторые должны быть разного форматирования, часть невидимые, часть жирным шрифтом, часть с высотой текста 1,2.
Как изменить отображения компонентов у объекта? (в еплане вкладка Display)
Среди пользовательских настроек отображения можно импортировать .emc файл с Property arrangement параметрами, может быть можно как то скормить этоту заранее подготовленную настройку объекту?

Что я нашёл:
В рамках еплана можно запускать action , XGedStartInteractionAction /Name:XgedIaFormatSymbol /visible:0 /propertyID:20010
в такой конфигурации можно сделать ОУ невидимым, но проблема в том что для этого объект должен быть выделен мышкой, как из АПИ применить экшон конкретному объекту? :ext_cigar:

Отправлено спустя 2 часа 33 минуты 6 секунд:
Update:
Попробовал получить набор свойств PropertyPlacement

Код: Выделить всё

                        PropertyPlacement[] PC1 = C1.PropertyPlacements;  // C1 - Cable
                        if (PC1.Length > 0)
                        {     
                        PC1[0].TextColorId = 3;
                        PC1[0].Height = 10;
                        PC1[0].IsVisible = true;
                        }
                        
Половину объектов он переименовал, но на одном запнулся и выкинул эксепшн "The object has not been locked before a write access"
Чем он отличается от тех что прошли обработку не пойму. Такой же Cable (определение кабеля) , отличий не вижу.
Ну ладно, у объекта есть метод LockObjec() - добавил блок

Код: Выделить всё

                        if (!C1.IsLocked)
                            C1.LockObject();
Не помогло, всёравно пишет не залоченый перед записью.
В чём может быть проблемма?
Аватара пользователя

Автор темы
Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 48
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 48 раз

Вывод отображения определённых свойств устройству

Сообщение Barmaley4 »

Немного ошибся, не заблокирован не сам объект C1, а первое свойства из C1.PropertyPlacements.
Пробовал делать так:

Код: Выделить всё

PropertyPlacement[] PC1 = C1.PropertyPlacements;
foreach (var pc in PC1)
                            { 
                            try
                                {        
                                    ResLoger.WriteData($"Обозначение плейсмента имеет Лок статус {pc.IsLocked.ToString()}!");
                                    if (!pc.IsLocked)
                                    { 
                                    pc.LockObject();
                                    ResLoger.WriteData($"После команды LockObject обозначение плейсмента имеет Лок статус {pc.IsLocked.ToString()}!");
                                    }
                                    pc.TextColorId = 3;
                                    pc.Height = 10;
                                    pc.IsVisible = true;
                                    ResLoger.WriteData($"Кабель {C1.Properties.FUNC_DEVICETAG_FULL} изменён на заданный тип отображения ОУ!");
                                }
                                catch {
                                    ResLoger.WriteData($"Кабель {C1.Properties.FUNC_DEVICETAG_FULL} не залочен!!! Сбой на этапе {pc.ToString()} Заблокировать не удалось!");
                                }
Но всё равно не работает. Проблема заключается именно в наборе оторажения, если скопировать формат в самом еплане с "нормального" кабеля на "проблемный", то именует без вопросов! Так же с проблемными кабелями работает экшон XgedIaFormatSymbol, но опять же, не понятно как из АПИ его вызвать для конкретного объекта..

Временно нашёл такое решение:

Код: Выделить всё

			C1.SwitchLocalPropertyPlacements(true);
                        PropertyPlacement[] PC1 = C1.PropertyPlacements;

                        for (int i = PC1.Count() - 1; i >= 0; i--)
                            PC1[i].Remove();

                        PropertyPlacement pp = new PropertyPlacement();
                        pp.Create(C1, 20010);
                        pp.IsVisible = true;
                        pp.Height = 15;
                        pp.TextColorId = 3;
                        pp.Location = new PointD(1.0, 0.0);
Как я понял метод SwitchLocalPropertyPlacements(true) - скидывает формат отображения на дефолтный по шаблону функции.
А что он делает если отправить аргумент false?
Так же при создании нового свойства pp некоторые параметры отображаются странно, а как их задать из параметров объекта - не понятно.. Например как задать слой (Новый PP создаётся в слое EPLAN400, а нужен EPLAN407) и базовую точку (выравнивание не по точке вставке, а по центру)?
Ответить

Вернуться в «Eplan API»