- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Скрипты и API
Модератор: специалисты Eplan
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Я поняла, Function.Enums.Category.TerminalDefText - при выборе этой категории - можно получить клеммники,а клеммы в клеммнике можно получить через SubFunctions,правильно?
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Re: Скрипты и API
У себя я использовал определение клеммника, и потом через него получал клеммы данного клеммника. Без определения не работал.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Здравствуйте, в Ё можно сгенерировать отчет формата .xls, мы можем сами выбрать, что там отображать (к примеру: Номер изделия, Позицию легенды). Это делается через строку меню(сервисы-> внешняя обработка свойств).
Можно ли сделать такой отчет при помощи API?
Если да, то от чего мне стоит отталкиваться?
Можно ли сделать такой отчет при помощи API?
Если да, то от чего мне стоит отталкиваться?
-
- знаток Eplan
- Сообщения: 3339
- Зарегистрирован: 05 мар 2012, 15:00
- Имя: Горский Андрей Сергеевич
- город/регион: Санкт-Петербург
- Благодарил (а): 181 раз
- Поблагодарили: 368 раз
Код операции представление символа
Хотел создать панельку с кнопочкой которая меняет Вид представления у символа, увы не нашел в списке доступных операций, только под API
<16027> Вид представления символа (закодир.) - API-Define: SYMB_SYBMOLFUNCTIONTYPE
<16028> Вид представления символа - API-Define: SYMB_SYBMOLFUNCTIONTYPE_NAME
Возможно плохо искал или пропустил, может кто знает имя операции для реализации желаемого?
<16027> Вид представления символа (закодир.) - API-Define: SYMB_SYBMOLFUNCTIONTYPE
<16028> Вид представления символа - API-Define: SYMB_SYBMOLFUNCTIONTYPE_NAME
Возможно плохо искал или пропустил, может кто знает имя операции для реализации желаемого?
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Re: Скрипты и API
Я тоже не нашел. Для поворота уже размещенного символа используй ctrl+r, правда только 3 других варианта можно, насколько я понимаю.
-
- знаток Eplan
- Сообщения: 3339
- Зарегистрирован: 05 мар 2012, 15:00
- Имя: Горский Андрей Сергеевич
- город/регион: Санкт-Петербург
- Благодарил (а): 181 раз
- Поблагодарили: 368 раз
Написание текста во все страницы проекта сразу
Решил написать тут, так как подозреваю, что другими путями этого не достичь, а именно:
появилась необходимость уже в созданный проект во все страницы вставить текст в отведенное место.
Уточнение: комментарии могут отличаться от типа схем, Э3 или Э4, Э5 и так далее.
Так как если бы везде все одинаково, то подошло бы и свойство проекта, свойство страницы, которое косвенно могло бы быть связано с рамкой.
Только через API или есть догадки, а возможно и реализации вышеописанного?
появилась необходимость уже в созданный проект во все страницы вставить текст в отведенное место.
Уточнение: комментарии могут отличаться от типа схем, Э3 или Э4, Э5 и так далее.
Так как если бы везде все одинаково, то подошло бы и свойство проекта, свойство страницы, которое косвенно могло бы быть связано с рамкой.
Только через API или есть догадки, а возможно и реализации вышеописанного?
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
Re: Скрипты и API
бесполезное свойство описание типа документа 2 (или как оно там называется) вроде можно в рамку вставить?
или через свойство блока и таблицу замены
на апи можно 100%, на скриптах вряд ли
или через свойство блока и таблицу замены
на апи можно 100%, на скриптах вряд ли
-
- знаток Eplan
- Сообщения: 3339
- Зарегистрирован: 05 мар 2012, 15:00
- Имя: Горский Андрей Сергеевич
- город/регион: Санкт-Петербург
- Благодарил (а): 181 раз
- Поблагодарили: 368 раз
Re: Скрипты и API
Да, Саша, по всей видимости проще настроить Доп. поле в свойствах рамки, вынести его и используя фильтры в навигаторе страниц, по типу документа, вставлять комментарии.
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
-
- знаток Eplan
- Сообщения: 29
- Зарегистрирован: 14 май 2014, 12:22
- Имя: Станиславский Станислав Леонидович
- Страна: Украина
- город/регион: Харьков
- Поблагодарили: 5 раз
Re: Скрипты и API
Добрый день!
Возникла необходимость отчет "спецификация кабеля" фильтровать по источнику и цели кабеля. Соответствующих свойств у кабеля не нашел.
Сформировал свойства блока:
Источник (Место установки) [20205,1,3<20211,1,1<20201<1220,0,0,0,0,0,0,0,0,ru_RU,0,0,0,0,0,0>>>]
Цель (Место установки) [20205,1,3<20211,2,1<20201<1220,0,0,0,0,0,0,0,0,ru_RU,0,0,0,0,0,0>>>].
... И к своему сожалению обнаружил что я не могу фильтровать отчет по Свойствам блока :( (наверное по тому что они динамически формируются).
Далее возникла идея... переписать данные из Свойств блока в Доп. поля кабеля...
Подскажите возможно ли это реализовать (я так понял что реализация будет возможна только на API, так как скрипты не умеют читать свойства объектов).
Возможно у кого то есть русскоязычный help по API? \\насколько мне известно его нет в природе
Возникла необходимость отчет "спецификация кабеля" фильтровать по источнику и цели кабеля. Соответствующих свойств у кабеля не нашел.
Сформировал свойства блока:
Источник (Место установки) [20205,1,3<20211,1,1<20201<1220,0,0,0,0,0,0,0,0,ru_RU,0,0,0,0,0,0>>>]
Цель (Место установки) [20205,1,3<20211,2,1<20201<1220,0,0,0,0,0,0,0,0,ru_RU,0,0,0,0,0,0>>>].
... И к своему сожалению обнаружил что я не могу фильтровать отчет по Свойствам блока :( (наверное по тому что они динамически формируются).
Далее возникла идея... переписать данные из Свойств блока в Доп. поля кабеля...
Подскажите возможно ли это реализовать (я так понял что реализация будет возможна только на API, так как скрипты не умеют читать свойства объектов).
Возможно у кого то есть русскоязычный help по API? \\насколько мне известно его нет в природе
-
- знаток Eplan
- Сообщения: 3339
- Зарегистрирован: 05 мар 2012, 15:00
- Имя: Горский Андрей Сергеевич
- город/регион: Санкт-Петербург
- Благодарил (а): 181 раз
- Поблагодарили: 368 раз
Re: Скрипты и API
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
-
- знаток Eplan
- Сообщения: 29
- Зарегистрирован: 14 май 2014, 12:22
- Имя: Станиславский Станислав Леонидович
- Страна: Украина
- город/регион: Харьков
- Поблагодарили: 5 раз
Re: Скрипты и API
Добрый день!
После нескольких недель штурма вышеупомянутой задачи есть результат.
Но сначала несколько слов о API в целом.
Итак...
1. Для разработки дополнений желательно установить среду разработки IDE (у меня Microsoft Visual Studio), хотя обойтись можно и notepad++ (далее буду описывать ситуацию исходя из наличия IDE).
2. В IDE создаем новый проект (Файл Создать Проект Библиотека классов), Имя проекта (и в конце концов dll файла) должно соответствовать *.EplAddIn.* . В хэлпе было упомянуто что в VS нужно использовать шаблон Eplan Api AddIn, но у меня такого шаблона не оказалось.
3. В проекте нужно указать ссылки на библиотеки Eplan: В зависимости от реализуемого решения набор ссылок может отличаться.
4. Реализовать класс EplAddInModule содержащий:
Этот класс обеспечивает "стыковку" со средой Eplan
5. Реализовать класс Get содержащий непосредственную логику работы дополнения:
6. Собрать решение (Сборка Собрать решение).
7. Найти готовую dll, скопировать ее в папку c:\Program Files\EPLAN\Platform\2.4.4\Bin\.
8. Запустить Eplan и загрузить Eplan API AddIn (Сервисные программы API-AddIns... Загрузить).
9. Создать кнопку выполняющую операцию Get.
10. Выделить необходимые кабели.
11. Нажать на кнопку выполняющую операцию Get.
12. Be Happy :)
Данные из свойств блока <20201 2> и <20201 3> будут скопированы в Доп. поля <20901 1> и <20901 2>.
Жду отзывов.
После нескольких недель штурма вышеупомянутой задачи есть результат.
Но сначала несколько слов о API в целом.
Итак...
1. Для разработки дополнений желательно установить среду разработки IDE (у меня Microsoft Visual Studio), хотя обойтись можно и notepad++ (далее буду описывать ситуацию исходя из наличия IDE).
2. В IDE создаем новый проект (Файл Создать Проект Библиотека классов), Имя проекта (и в конце концов dll файла) должно соответствовать *.EplAddIn.* . В хэлпе было упомянуто что в VS нужно использовать шаблон Eplan Api AddIn, но у меня такого шаблона не оказалось.
3. В проекте нужно указать ссылки на библиотеки Eplan: В зависимости от реализуемого решения набор ссылок может отличаться.
4. Реализовать класс EplAddInModule содержащий:
Код: Выделить всё
using Eplan.EplApi.ApplicationFramework;
namespace Eplanwiki.EplAddIn.GetPropertyValue
{
public class EplAddInModule : IEplAddIn
{
public bool OnExit()
{
return true;
}
public bool OnInit()
{
return true;
}
public bool OnInitGui()
{
return true;
}
public bool OnRegister(ref bool bLoadOnStart)
{
bLoadOnStart = true;
return true;
}
public bool OnUnregister()
{
return true;
}
}
}
5. Реализовать класс Get содержащий непосредственную логику работы дополнения:
Код: Выделить всё
using Eplan.EplApi.ApplicationFramework;
using System;
using System.Windows.Forms;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.HEServices;
namespace Eplanwiki.EplAddIn.GetPropertyValue
{
class Get : IEplAction
{
public bool Execute(ActionCallingContext oActionCallingContext)
{
PropertyValue oPropValue1;
PropertyValue oPropValue2;
int count = 0; //Инициализация счетчика считающего кол-во обработанных кабелей
SelectionSet selectionSet = new SelectionSet(); //Выбор выделенных кабелей
StorableObject [] storableObjects = selectionSet.SelectionRecursive;
foreach (StorableObject so in storableObjects) //Перебор всех выбранных кабелей
{
oPropValue1 = so.Properties[20201, 2]; //Вычитывание свойства <20201 2>
oPropValue2 = so.Properties[20201, 3]; //Вычитывание свойства <20201 3>
so.Properties[20901, 1] = oPropValue1; //Запись свойства <20201 2> в Доп. поле <20901 1>
so.Properties[20901, 2] = oPropValue2; //Запись свойства <20201 2> в Доп. поле <20901 2>
count = ++count; //Инкремент счетчика считающего кол-во обработанных кабелей
}
MessageBox.Show("Обработано " + count.ToString() + " кабеля(ей)."); //Отчет о том сколько кабелей было обработано
return true;
}
public void GetActionProperties(ref ActionProperties actionProperties)
{
throw new NotImplementedException();
}
public bool OnRegister(ref string Name, ref int Ordinal)
{
Name = "Get";
Ordinal = 20;
return true;
}
}
}
7. Найти готовую dll, скопировать ее в папку c:\Program Files\EPLAN\Platform\2.4.4\Bin\.
8. Запустить Eplan и загрузить Eplan API AddIn (Сервисные программы API-AddIns... Загрузить).
9. Создать кнопку выполняющую операцию Get.
10. Выделить необходимые кабели.
11. Нажать на кнопку выполняющую операцию Get.
12. Be Happy :)
Данные из свойств блока <20201 2> и <20201 3> будут скопированы в Доп. поля <20901 1> и <20901 2>.
Жду отзывов.
-
- знаток Eplan
- Сообщения: 3339
- Зарегистрирован: 05 мар 2012, 15:00
- Имя: Горский Андрей Сергеевич
- город/регион: Санкт-Петербург
- Благодарил (а): 181 раз
- Поблагодарили: 368 раз
Re: Скрипты и API
Мой отзыв, Стас - http://www.eplan4all.info/2015/09/stanislavskiy/ кроме благодарностей добавить нечего.
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Re: Скрипты и API
1. В документации Еплан API есть сразу готовые шаблоны для студии, не нужно было изобретать велосипед )
2. При работе с выделенными объектами, лучше сразу отфильтровать кабели, т.к. если юзер выделить что-то другое, возможны ошибки, вплоть до вылета Еплана. В данном случае я бы просто выполнял проверку типа "if so is Cable ..."
2. При работе с выделенными объектами, лучше сразу отфильтровать кабели, т.к. если юзер выделить что-то другое, возможны ошибки, вплоть до вылета Еплана. В данном случае я бы просто выполнял проверку типа "if so is Cable ..."
-
- знаток Eplan
- Сообщения: 29
- Зарегистрирован: 14 май 2014, 12:22
- Имя: Станиславский Станислав Леонидович
- Страна: Украина
- город/регион: Харьков
- Поблагодарили: 5 раз
Re: Скрипты и API
Увы, я не располагаю шаблонами для Visual Studio.
Если Вы поделитесь шаблонами и любыми другими материалами по API - буду признателен.
Если Вы поделитесь шаблонами и любыми другими материалами по API - буду признателен.
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
Re: Скрипты и API
тоже внесу пару предложений
1. в описании забыли указать, что нужно выделить кабели в навигаторе кабелей, так как SelectionRecursive работает только в навигаторах, и если выделить кабели на листе - не сработает, не будет вложений (насколько помню)
2. копировать dll в папку еплана не обязательно, все равно указывается полный путь при выборе
3. эта конструкция перебирает не только кабели, но и жилы (скорее всего, проверьте записываются ли у них эти свойства)
лучше перебирать именно определения кабелей, чтобы не зацепить ничего лишнего, например так
4. переменные oPropValue1, oPropValue2 лишние, можно присваивать напрямую
5. достаточно count++;
6. лучше проверять не пустое ли свойство перед копированием, чтобы не словить исключение
а так, с почином!
успехов в разработке!
1. в описании забыли указать, что нужно выделить кабели в навигаторе кабелей, так как SelectionRecursive работает только в навигаторах, и если выделить кабели на листе - не сработает, не будет вложений (насколько помню)
2. копировать dll в папку еплана не обязательно, все равно указывается полный путь при выборе
3. эта конструкция перебирает не только кабели, но и жилы (скорее всего, проверьте записываются ли у них эти свойства)
Код: Выделить всё
SelectionSet selectionSet = new SelectionSet();
StorableObject [] storableObjects = selectionSet.SelectionRecursive;
foreach (StorableObject so in storableObjects)
{
}
Код: Выделить всё
SelectionSet selectionSet = new SelectionSet();
List<Cable> oCables = selectionSet.SelectionRecursive.OfType<Cable>().ToList();
foreach (Cable oCable in oCables)
{
}
5. достаточно count++;
6. лучше проверять не пустое ли свойство перед копированием, чтобы не словить исключение
а так, с почином!
успехов в разработке!
-
- знаток Eplan
- Сообщения: 25
- Зарегистрирован: 17 сен 2015, 09:25
- Имя: Иванюк Дмитрий Сергеевич
- Страна: РБ
- город/регион: Брест
- Благодарил (а): 2 раза
Re: Скрипты и API
Добрый день, господа. Имеется опыт написания довольно серьезных дополнений с окнами редактирования, встроенными в Eplan. Есть ли здесь люди, которые делали подобные вещи? Есть желание поделиться опытом.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- новенький
- Сообщения: 1
- Зарегистрирован: 25 сен 2015, 16:56
- Имя: Андрей
Re: Скрипты и API
Понимаю, что своего рода "некропост", но заметил, что данное ошибочное утверждение не подправили. Итак, как же сменить страницу и продолжить Interaction:Madwolf писал(а):Eplan.EplApi.EServices.Ged.Interaction прерывается при вызове любого другого Action, будь то смена страницы или вызов из командной строки. Выделить несколько объектов на разных страницах не получится (
1. В ходе выполнения I-n следим за состоянием. В случае прерывания выполнения - сохраняем состояние в промежуточный файл (папка с проектом доступна для записи)
2. Создаем перехватчик событий на момент открытия страницы (насколько показывает GUI, имеем "XPmPageOpenOnePage")
3. В перехватчике создаем проверку на наличие файла и перезапуск I-n'a
4. Так как данный момент будет притормаживать систему, добавляем перехватчик в методе OnStart, отключаем внутри метода OnSuccess.
Как то так
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Re: Скрипты и API
Я бы сказал что не "ошибочное утверждение", а как побороть данную проблему. Ведь сама суть класса InterAction подразумевает работу на конкретной странице, ведь в экземпляре класса хранятся данные о координатах объектов на странице, тип страницы, из которой вызван Interaction.
По сути да, можно сохранять выделенные объекты (их ID) в буфер и потом выполнить команду для их обработки.
По сути да, можно сохранять выделенные объекты (их ID) в буфер и потом выполнить команду для их обработки.
-
- знаток Eplan
- Сообщения: 25
- Зарегистрирован: 17 сен 2015, 09:25
- Имя: Иванюк Дмитрий Сергеевич
- Страна: РБ
- город/регион: Брест
- Благодарил (а): 2 раза
Re: Скрипты и API
Я реализовывал так:
так как Interaction может прерваться по многим причинам (не только смена страница, но и нажатие Esc например) , в методе OnStop() проверял, надо ли перезапустить Interaction. Далее, если прервал Interaction не я, перезапускал его заново. Для выделенных объектов я сразу выполнял необходимую операцию.
так как Interaction может прерваться по многим причинам (не только смена страница, но и нажатие Esc например) , в методе OnStop() проверял, надо ли перезапустить Interaction. Далее, если прервал Interaction не я, перезапускал его заново. Для выделенных объектов я сразу выполнял необходимую операцию.
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Re: Скрипты и API
Всем привет. Что за ерунда с locking step. Пытаюсь что-то записать в объект - ничего не дает "объект не был заблокирован перед обращением для записи", пытаюсь блокировать с помощью LockObject() или SmartLock() - работает через раз. Спасает только открытие проекта в режиме "с защитой от записи". Кто как это разруливает?
-
- знаток Eplan
- Сообщения: 25
- Зарегистрирован: 17 сен 2015, 09:25
- Имя: Иванюк Дмитрий Сергеевич
- Страна: РБ
- город/регион: Брест
- Благодарил (а): 2 раза
Re: Скрипты и API
Попробуй так сделать перед получением активного проекта:
Код: Выделить всё
//Получение текущего проекта.
Eplan.EplApi.HEServices.SelectionSet selection = new Eplan.EplApi.HEServices.SelectionSet();
selection.LockSelectionByDefault = false;
Project currentProject = selection.GetCurrentProject( true );
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
Re: Скрипты и API
Код: Выделить всё
SelectionSet selectionSet = new SelectionSet();
selectionSet.LockProjectByDefault = true;
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Re: Скрипты и API
Спасибо, буду иметь ввиду, мне еще посоветовали:
Код: Выделить всё
using (LockingStep ls = new LockingStep())
{
try
{
Project.LockAllObjects();
// all project's objects are locked now
}
catch (ProjectLockingException ex)
{
WriteMessage("Не удалось заблокировать проект, причина: " + ex.Message);
}
}