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

Скрипты и API

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

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

Закрыто

KiraKudachinova
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 02 фев 2015, 07:18
Имя: Кудачинова Кира Владимировна
Страна: Россия
город/регион: Томск

Re: Скрипты и API

Сообщение KiraKudachinova »

Я поняла, Function.Enums.Category.TerminalDefText - при выборе этой категории - можно получить клеммники,а клеммы в клеммнике можно получить через SubFunctions,правильно?

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Re: Скрипты и API

Сообщение Madwolf »

У себя я использовал определение клеммника, и потом через него получал клеммы данного клеммника. Без определения не работал.

KiraKudachinova
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 02 фев 2015, 07:18
Имя: Кудачинова Кира Владимировна
Страна: Россия
город/регион: Томск

Re: Скрипты и API

Сообщение KiraKudachinova »

Здравствуйте, в Ё можно сгенерировать отчет формата .xls, мы можем сами выбрать, что там отображать (к примеру: Номер изделия, Позицию легенды). Это делается через строку меню(сервисы-> внешняя обработка свойств).
Можно ли сделать такой отчет при помощи API?
Если да, то от чего мне стоит отталкиваться?

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Re: Скрипты и API

Сообщение Madwolf »

Можно, в хелпе на API описан данный функционал.
Аватара пользователя

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 3339
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 181 раз
Поблагодарили: 368 раз

Код операции представление символа

Сообщение AGorskiy »

Хотел создать панельку с кнопочкой которая меняет Вид представления у символа, увы не нашел в списке доступных операций, только под API
<16027> Вид представления символа (закодир.) - API-Define: SYMB_SYBMOLFUNCTIONTYPE
<16028> Вид представления символа - API-Define: SYMB_SYBMOLFUNCTIONTYPE_NAME

Возможно плохо искал или пропустил, может кто знает имя операции для реализации желаемого?
[+] Пример операции для редактирования текста
XGedIaFormatDefPoints

/color:?

Цвет (текста или линии)
Предварительно определенные значения:
0 = черный
1 = красный
2 = желтый
3 = зеленый
4 = циан
5 = голубой
6 = пурпурный
7 = черный
8 = белый
9 = светло-серый
252 = темно-серый
253 = серый
-16002 = Из слоя.
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Re: Скрипты и API

Сообщение Madwolf »

Я тоже не нашел. Для поворота уже размещенного символа используй ctrl+r, правда только 3 других варианта можно, насколько я понимаю.
Аватара пользователя

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 3339
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 181 раз
Поблагодарили: 368 раз

Написание текста во все страницы проекта сразу

Сообщение AGorskiy »

Решил написать тут, так как подозреваю, что другими путями этого не достичь, а именно:
появилась необходимость уже в созданный проект во все страницы вставить текст в отведенное место.
Уточнение: комментарии могут отличаться от типа схем, Э3 или Э4, Э5 и так далее.

Так как если бы везде все одинаково, то подошло бы и свойство проекта, свойство страницы, которое косвенно могло бы быть связано с рамкой.

Только через API или есть догадки, а возможно и реализации вышеописанного?
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Re: Скрипты и API

Сообщение aranea »

бесполезное свойство описание типа документа 2 (или как оно там называется) вроде можно в рамку вставить?
или через свойство блока и таблицу замены

на апи можно 100%, на скриптах вряд ли
Изображение
Аватара пользователя

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 3339
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 181 раз
Поблагодарили: 368 раз

Re: Скрипты и API

Сообщение AGorskiy »

Да, Саша, по всей видимости проще настроить Доп. поле в свойствах рамки, вынести его и используя фильтры в навигаторе страниц, по типу документа, вставлять комментарии.
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.

Stas
знаток Eplan
знаток Eplan
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Re: Скрипты и API

Сообщение Stas »

Добрый день!
Возникла необходимость отчет "спецификация кабеля" фильтровать по источнику и цели кабеля. Соответствующих свойств у кабеля не нашел.
Сформировал свойства блока:
Источник (Место установки) [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? \\насколько мне известно его нет в природе
Аватара пользователя

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 3339
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 181 раз
Поблагодарили: 368 раз

Re: Скрипты и API

Сообщение AGorskiy »

Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.

Stas
знаток Eplan
знаток Eplan
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Re: Скрипты и API

Сообщение Stas »

Добрый день!
После нескольких недель штурма вышеупомянутой задачи есть результат.
Но сначала несколько слов о API в целом.
Итак...
1. Для разработки дополнений желательно установить среду разработки IDE (у меня Microsoft Visual Studio), хотя обойтись можно и notepad++ (далее буду описывать ситуацию исходя из наличия IDE).
2. В IDE создаем новый проект (Файл -> Создать -> Проект -> Библиотека классов), Имя проекта (и в конце концов dll файла) должно соответствовать *.EplAddIn.* . В хэлпе было упомянуто что в VS нужно использовать шаблон Eplan Api AddIn, но у меня такого шаблона не оказалось.
3. В проекте нужно указать ссылки на библиотеки Eplan:
[+]
Eplan.EplApi.AFu.dll
Eplan.EplApi.Baseu.dll
Eplan.EplApi.DataModelu.dll
Eplan.EplApi.EServicesu.dll
Eplan.EplApi.Guiu.dll
Eplan.EplApi.HEServicesu.dll
Eplan.EplApi.MasterDatau.dll
Eplan.EplApi.Ppeu.dll
Eplan.EplApi.RecorderToolsu.dll
Eplan.EplApi.RemoteClientu.dll
Eplan.EplApi.Remotingu.dll
Eplan.EplApi.Starteru.dll
Eplan.EplApi.Systemu.dll
Eplan.EplApi.WebServiceu.dll
System.Windows.Forms.dll
В зависимости от реализуемого решения набор ссылок может отличаться.

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;
        }
    }
}
Этот класс обеспечивает "стыковку" со средой Eplan
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;
        }
    }
}
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>.
Жду отзывов.
Аватара пользователя

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 3339
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 181 раз
Поблагодарили: 368 раз

Re: Скрипты и API

Сообщение AGorskiy »

Мой отзыв, Стас - http://www.eplan4all.info/2015/09/stanislavskiy/ кроме благодарностей добавить нечего.
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Re: Скрипты и API

Сообщение Madwolf »

1. В документации Еплан API есть сразу готовые шаблоны для студии, не нужно было изобретать велосипед )
2. При работе с выделенными объектами, лучше сразу отфильтровать кабели, т.к. если юзер выделить что-то другое, возможны ошибки, вплоть до вылета Еплана. В данном случае я бы просто выполнял проверку типа "if so is Cable ..."

Stas
знаток Eplan
знаток Eplan
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Re: Скрипты и API

Сообщение Stas »

Увы, я не располагаю шаблонами для Visual Studio.
Если Вы поделитесь шаблонами и любыми другими материалами по API - буду признателен.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Re: Скрипты и API

Сообщение aranea »

тоже внесу пару предложений

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)
    {
    }
4. переменные oPropValue1, oPropValue2 лишние, можно присваивать напрямую
5. достаточно count++;
6. лучше проверять не пустое ли свойство перед копированием, чтобы не словить исключение

а так, с почином!
успехов в разработке!
Изображение

Stas
знаток Eplan
знаток Eplan
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Re: Скрипты и API

Сообщение Stas »

Благодарю за замечания и предложения.
Учту.

ids
знаток Eplan
знаток Eplan
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Re: Скрипты и API

Сообщение ids »

Добрый день, господа. Имеется опыт написания довольно серьезных дополнений с окнами редактирования, встроенными в Eplan. Есть ли здесь люди, которые делали подобные вещи? Есть желание поделиться опытом.
Устройства.png
Операции.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.

IOIOOIIOIO
новенький
новенький
Сообщения: 1
Зарегистрирован: 25 сен 2015, 16:56
Имя: Андрей

Re: Скрипты и API

Сообщение IOIOOIIOIO »

Madwolf писал(а):Eplan.EplApi.EServices.Ged.Interaction прерывается при вызове любого другого Action, будь то смена страницы или вызов из командной строки. Выделить несколько объектов на разных страницах не получится (
Понимаю, что своего рода "некропост", но заметил, что данное ошибочное утверждение не подправили. Итак, как же сменить страницу и продолжить Interaction:
1. В ходе выполнения I-n следим за состоянием. В случае прерывания выполнения - сохраняем состояние в промежуточный файл (папка с проектом доступна для записи)
2. Создаем перехватчик событий на момент открытия страницы (насколько показывает GUI, имеем "XPmPageOpenOnePage")
3. В перехватчике создаем проверку на наличие файла и перезапуск I-n'a
4. Так как данный момент будет притормаживать систему, добавляем перехватчик в методе OnStart, отключаем внутри метода OnSuccess.
Как то так :roll:

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Re: Скрипты и API

Сообщение Madwolf »

Я бы сказал что не "ошибочное утверждение", а как побороть данную проблему. Ведь сама суть класса InterAction подразумевает работу на конкретной странице, ведь в экземпляре класса хранятся данные о координатах объектов на странице, тип страницы, из которой вызван Interaction.

По сути да, можно сохранять выделенные объекты (их ID) в буфер и потом выполнить команду для их обработки.

ids
знаток Eplan
знаток Eplan
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Re: Скрипты и API

Сообщение ids »

Я реализовывал так:
так как Interaction может прерваться по многим причинам (не только смена страница, но и нажатие Esc например) , в методе OnStop() проверял, надо ли перезапустить Interaction. Далее, если прервал Interaction не я, перезапускал его заново. Для выделенных объектов я сразу выполнял необходимую операцию.

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Re: Скрипты и API

Сообщение Madwolf »

Всем привет. Что за ерунда с locking step. Пытаюсь что-то записать в объект - ничего не дает "объект не был заблокирован перед обращением для записи", пытаюсь блокировать с помощью LockObject() или SmartLock() - работает через раз. Спасает только открытие проекта в режиме "с защитой от записи". Кто как это разруливает?

ids
знаток Eplan
знаток Eplan
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Re: Скрипты и API

Сообщение ids »

Попробуй так сделать перед получением активного проекта:

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

  //Получение текущего проекта.
  Eplan.EplApi.HEServices.SelectionSet selection = new Eplan.EplApi.HEServices.SelectionSet();
  selection.LockSelectionByDefault = false;
  
  Project currentProject = selection.GetCurrentProject( true );
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Re: Скрипты и API

Сообщение aranea »

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

            SelectionSet selectionSet = new SelectionSet();
            selectionSet.LockProjectByDefault = true;
в хэлпе что-то было про LockProjectByDefault и LockSelectionByDefault
Изображение

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Re: Скрипты и API

Сообщение Madwolf »

Спасибо, буду иметь ввиду, мне еще посоветовали:

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

using (LockingStep ls = new LockingStep())
                {
                    try
                    {
                        Project.LockAllObjects();
                        // all project's objects are locked now
                    }
                    catch (ProjectLockingException ex)
                    {
                        WriteMessage("Не удалось заблокировать проект, причина: " + ex.Message);
                    }
             }
Закрыто

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