Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Скрипты и API

Обсуждение и решение проблем в работе с Eplan.

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

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 884
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Скрипты и API

Сообщение Madwolf » 04 апр 2014, 08:15

Я использовал следующим образом: GetString(ISOCode.Language.L___)


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 18 апр 2014, 06:20

Всем здравствуйте!
Столкнулся с такой проблемой: при взятии проекта в обработку через

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

ProjectManager prjMngr;
Project prj;
prjMngr = new ProjectManager();
prj = prjMngr.CurrentProject;

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

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

aranea
знаток Eplan
знаток Eplan
Сообщения: 519
Зарегистрирован: 21 сен 2012, 21:45
Ф.И.О.: Воробьев Александр
Поблагодарили: 12 раз
Контактная информация:

Re: Скрипты и API

Сообщение aranea » 18 апр 2014, 07:07

да, действительно так, глупо как-то сделали

выход есть:

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

        //     ProjectManager's property which returns first project from the list of opened
        //     projects.  Please use Eplan::EplApi::HeServices::SelectionSet class in order
        //     to get the selected project, or other selected objects.

            SelectionSet sel = new SelectionSet();
            MessageBox.Show("ProjectName: :" + sel.GetCurrentProject(false).ProjectName);

работает при выборе любого объекта в любом навигаторе или открытой странице
Изображение


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 21 апр 2014, 07:25

aranea, спасибо! заработало как надо.


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 23 апр 2014, 11:50

Здравствуйте!
Подскажите, пожалуйста, как можно добраться до свойств отображения свойств символов или других элементов? Например, как программно изменить цвет ОУ?
Я так понимаю копаться надо в свойствах функций.

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 884
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Скрипты и API

Сообщение Madwolf » 23 апр 2014, 13:46

Нужно использовать класс PropertyPlacement, каждое отображаемое свойство функции будет представлено записью с соотв. индексом, например PropertyPlacement[0]. Также перед внесением изменений нужно вызвать метод SwitchLocalPropertyPlacements(true).


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 23 апр 2014, 14:02

спасибо, получилось! я квадратные скобки не доглядел в описании


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 25 апр 2014, 11:32

Всем здравствуйте!
Ни как не получается найти, как задать координаты создаваемого текста.

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

Eplan.EplApi.DataModel.Graphics.Text text = new Text();
text.Create(oPage, "Текст", 2.5);

Текст создаётся в точке [0,0]. Как бы его подвинуть?


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 25 апр 2014, 12:00

Всё очень просто

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

PointD A = new PointD();
A.X = 20; A.Y = 20;
text.Location = A;

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 884
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Скрипты и API

Сообщение Madwolf » 25 апр 2014, 18:26

А еще проще так:

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

text.Location = new PointD(20, 20);

Кстати, все изменения в графических объектах нужно производить после того как они созданы методом create(), иначе вываливается исключение.


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 22 май 2014, 06:28

Всем привет!
Новая проблемка возникла.
Требуется изменить свойство отображения символа, например, цвет текста гравировки. Делаю таким образом:

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

oFunc.PropertyPlacements[0].TextColorId = 5;

Но работает это только если до этого вручную изменить какое-нибудь свойство (тот же цвет). А если я только вставил символ из базы, и программно меняю цвет текста гравировки, то Eplan выдаёт такое сообщение:
Объект не был заблокирован перед обращением для записи.

Стоит что-то изменить в свойствах текста гравировки, так всё работает как надо.
Как бы мне программно разблокировать свойства отображения этого символа?


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 22 май 2014, 07:04

Понял, что работает, когда порядок свойств "Определ. пользователем". Теперь надо понять как его таковым сделать.

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 884
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Скрипты и API

Сообщение Madwolf » 22 май 2014, 09:01

Посмотрите внимательно мой пост за 23 апреля.


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 22 май 2014, 09:08

madwolf_by, в очередной раз благодарю! Не послушал я тогда умного совета)

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 884
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Скрипты и API

Сообщение Madwolf » 22 май 2014, 19:36

Правда в случае с обзором модели такая функция не работала, но и не ругалась. Также столкнулся с особенностью, что иногда чтобы передвинуть графику нужно заблокировать объект с помощью метода LockObject().


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 28 май 2014, 15:17

Хочу изменить отображение определённого свойства (например текст гравировки). Все свойства отсоединены друг от друга, в списке расставлены в определённом порядке, чтобы можно было обратиться к конкретному свойству через PropertyPlacement[], но при запуске кода свойства сортируются по порядку номера свойства (тот номер что пишется в <...> после наименования свойства), и изменяется не то свойство, что хотелось бы.
Можно, конечно, расставить свойства в этом порядке и заранее, но вот если надо обработать разные символы с разным набором и количеством свойств, то нужного результата не получить.
Можно ли как-нибудь отменить эту сортировку или обращаться к свойству через какое-то условие, например, если имя свойства "текст гравировки", то его цвет красный? Не получается только определить имя свойства из списка PropertyPlacement.

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 884
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 14 раз

Re: Скрипты и API

Сообщение Madwolf » 28 май 2014, 18:01

Не знаю почему у Вас они путаются, у меня они в том порядке как нужно. Если нужно, то имя свойства можно узнать из
...PropertyPlacements[ ].DisplayedProperty.Definition.Name - тип string.
Можно узнать ID свойства через ...PropertyPlacements[ ].DisplayedProperty.AsInt, а индекс ...PropertyPlacements[ ].DisplayedProperty.Index


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 29 май 2014, 04:36

madwolf_by, помогли, спасибо!


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 16 июн 2014, 11:43

Добрый день!
Написана программка, использующая свойство функции "Пользователь, доп. поле1 <40201>". Для удобства оно переименовано, например, в "Номер сигнала" (Настройки: Проекты: Проект: Управление: Дополнительные поля: Функция: Новое имя).
Возможно ли это переименование запрограммировать, чтобы при запуске программы в другом проекте это свойство проекта уже называлось как надо.

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

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 2266
Зарегистрирован: 05 мар 2012, 14:00
Ф.И.О.: Горский Андрей Сергеевич
Откуда: Санкт-Петербург
Благодарил (а): 18 раз
Поблагодарили: 21 раз
Контактная информация:

Re: Скрипты и API

Сообщение AGorskiy » 16 июн 2014, 12:09

Мои познания в АПИ ничтожны, но смею предположить, что нет так как это затрагивает саму программу, но вам ничего не стоит использовать перенос свойств проекта - viewtopic.php?f=90&t=4873#p44146 и(или) заложить это себе в программку.
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 17 июн 2014, 09:25

AGorskiy, спасибо за совет, но требовалось немножко не то.
Порылся в хелпе, чуток подумал и придумал вот что:

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

SelectionSet sel = new SelectionSet();
Project prj = sel.GetCurrentProject(false);
ProjectSettings prjSet = new ProjectSettings(prj);
prjSet.SetStringSetting("TrDMBase.PropertyDefs.17.40201.PropertyName", "Моё новое имя свойства", 0);

Самая проблема оказалась в поиске имени настройки "TrDMBase.PropertyDefs.17.40201.PropertyName", в хелпе не нашёл, решил искать в "\EPLAN\Platform\2.2.5\cfg" по тексту "SUPPLEMENTARYFIELD" (взято из имени свойства функций, для которого и требуется замена). Поиск меня привёл к файлу SettingsMasterGui_AvailableSettings.xml, где лежат path'ы настроек.

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

aranea
знаток Eplan
знаток Eplan
Сообщения: 519
Зарегистрирован: 21 сен 2012, 21:45
Ф.И.О.: Воробьев Александр
Поблагодарили: 12 раз
Контактная информация:

Re: Скрипты и API

Сообщение aranea » 17 июн 2014, 10:43

limbir, отличное решение!
также имена путей можно найти после экспорта нужных настроек в xml файл

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

<?xml version="1.0" encoding="utf-8" ?>
- <Settings ver="2.2.5">
  <CAT name="COMPANY" />
  <CAT name="INSTALL" />
- <CAT name="PROJECT">
- <MOD name="TrDMBase">
- <LEV1 name="PropertyDefs">
.......
- <LEV2 name="17">
...........
- <LEV3 name="40201">
- <Setting name="PropertyName" ver="1" type="string" desc="649">
- <Default>
  <Val />
  </Default>
  <Val />
  </Setting>
  </LEV3>
..............
Изображение


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 18 июн 2014, 13:38

Никак теперь не могу определить к какому классу относится "Обозначение местоположения", это штрихпунктирная рамка, которая на CTRL+F11 вызывается. Может кто в курсе?

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

aranea
знаток Eplan
знаток Eplan
Сообщения: 519
Зарегистрирован: 21 сен 2012, 21:45
Ф.И.О.: Воробьев Александр
Поблагодарили: 12 раз
Контактная информация:

Re: Скрипты и API

Сообщение aranea » 18 июн 2014, 14:26

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

SelectionSet selectionSet = new SelectionSet();
StorableObject[] storableObjects = selectionSet.Selection;

foreach (StorableObject so in storableObjects)
    {
    MessageBox.Show("so.ToString(): " + so.ToString());
    }

дает
so.ToString(): Eplan.EplApi.DataModel.LocationBox
Изображение


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Re: Скрипты и API

Сообщение limbir » 18 июн 2014, 14:38

aranea, благодарю!


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



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей