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

Скрипты и API

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

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

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

Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 69
Зарегистрирован: 09 апр 2014, 08:55
Ф.И.О.: Александр Павлов
Откуда: Санкт Петербург
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Скрипты и API

Сообщение Alexander_Pavlov » 08 дек 2015, 13:09

foreach (Placement item in oVP.Group.SubPlacements) - решило вопрос, но далее получил сообщение "Объект не был заблокирован перед обращением для записи ". Объект заблокировал, ошибка исчезла, но толщина не меняется, хотя написал

GraphicalPlacement oGPl = item as GraphicalPlacement;
oPen = oGPl.Layer.Pen;
oGPl.LockObject();
oPen.Width = 2;
oGPl.Pen = oPen;
Eplan 2.1

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

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

Re: Скрипты и API

Сообщение Madwolf » 08 дек 2015, 19:39

Во-первый LockObject() не всегда решает вопроса. Я просто открываю проект в эксклюзивном режиме, все работает, либо как уже писали выше, лучше заблокировать весь проект. Во-вторых, если уже блокируете объект, убедитесь что он заблокирован, а то смысла от этого кода -ноль. У меня для моего примера все работает отлично, сразу видна толщина линий, убедитесь что в слое стоит толщина отличная от 0, поставьте 0,5. Какой-слой я уже не помню точно (вроде бы EPLAN577 Графика.Обзор модели), лучше посмотрите под отладкой.

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

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

Re: Скрипты и API

Сообщение Madwolf » 08 дек 2015, 22:08

Alexander_Pavlov писал(а):
Eplan.EplApi.DataModel.Graphics: ViewPlacement - обзор модели, ViewPart - деталь на обзоре модели.


Делаю только первые шаги, поэтому, возможно, глупый вопрос.

Класс ViewPart имеет свойство SubPlacements, в help на API это есть. В References я добавил Eplan.EplApi.DataModel и прописал using Eplan.EplApi.DataModel в свой Add in, но получаю ошибку

'Eplan.EplApi.DataModel.ViewPart' does not contain a definition for 'SubPlacements' and no extension method 'SubPlacements' accepting a first argument of type 'Eplan.EplApi.DataModel.ViewPart' could be found (are you missing a using directive or an assembly reference?)
foreach (Placement item in oVP.SubPlacements)


Может в студии надо ещё где то открыть доступ?


Ну так студия и пишет что пропущена директива Using, либо в референсы не добавлено. Проще всего - кликаем ПКМ на нужный метод, или название класса или еще что-то на что студия ругается, там если будет Resolve, то значит просто нет в директивах этого пространства имен, выбираем Resolve, и студия сама добавит нужное, если же Resolve нет, то значит нет в референсах.
Вообще SubPlacements это свойство Block (а ViewPart наследуется от него).

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

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

Re: Скрипты и API

Сообщение Madwolf » 08 дек 2015, 22:11

ids писал(а):
Madwolf писал(а):Возникла следующая проблема: нужно записать в свойства функции данные, причем хочу обращаться к ней по ID и индексу, например: oFunction.Properties[20901, 1].Set(). Еплан постоянно ругается на неправильный индекс, хотя там 100% содержатся данные по данному ID и индексу. При этом oFunction.Properties.FUNC_SUPPLEMENTARYFIELD[1].Set() прекрасно работает.


А можно поподробнее о возникающих ошибках - у меня ваш пример отлично работает.


Вопрос может быть в том, что фактически код выглядит не так, а ID и индексы я передаю "на лету" из формы, может быть в этом и проблема. В общем я пока оставил на выбор пользователю только индекс, все работает.

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

Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 69
Зарегистрирован: 09 апр 2014, 08:55
Ф.И.О.: Александр Павлов
Откуда: Санкт Петербург
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Скрипты и API

Сообщение Alexander_Pavlov » 09 дек 2015, 10:12

Resolve не предлагает, в References (может быть что то лишнее):
References.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Eplan 2.1

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

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

Re: Скрипты и API

Сообщение Madwolf » 09 дек 2015, 13:53

Вероятная причина - я смотрю Вы используете 2.1, а я 2.4, поэтому возможно и нет даже этих методов в API.

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

Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 69
Зарегистрирован: 09 апр 2014, 08:55
Ф.И.О.: Александр Павлов
Откуда: Санкт Петербург
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Скрипты и API

Сообщение Alexander_Pavlov » 10 дек 2015, 09:10

Да, именно в этом причина! Работает только в 2.4. требуется Eplan.EplApi.Datamodel ревизия 8366!
Eplan 2.1


Dmitry_S
новенький
новенький
Сообщения: 1
Зарегистрирован: 10 окт 2013, 08:13
Ф.И.О.: Шестаков Дмитрий Владимирович

Re: Скрипты и API

Сообщение Dmitry_S » 24 дек 2015, 18:08

Доброго времени суток. Возможно ли задать слои создаваемому объекту (линия, текст)?

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

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

Re: Скрипты и API

Сообщение Madwolf » 24 дек 2015, 18:45

Конечно, пример не совсем удачный, но, думаю, для понимания сути подойдет:

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


        public void SetLayerToPlacements(List<GraphicalPlacement> oListPlacement)
        {
            string layerName = "EPLAN102";
                GraphicalLayerTable oGLT = Project.LayerTable;
                if (oGLT.Layers[2].Name == layerName)
                {
                    for (int i = 0; i < oListPlacement.Count; i++)
                    {
                        (oListPlacement[i]).Layer = oGLT.Layers[2];
                    }
            }

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

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

Re: Скрипты и API

Сообщение Madwolf » 05 янв 2016, 10:04

Чтобы изменить функцию (или другой объект) в тот момент, когда окно редактирования этой же функции (объекта) открыто, поможет следующий код:

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

                                        using (Transaction txn = new TransactionManager().CreateTransaction())
                                        {
                                            if (new TransactionManager().IsEplanTransactionRunning)
                                            {
                                                // add some code here
                                            }
                                            txn.Commit();
                                        }             


ids
знаток Eplan
знаток Eplan
Сообщения: 14
Зарегистрирован: 17 сен 2015, 09:25
Ф.И.О.: Иванюк Дмитрий Сергеевич

Re: Скрипты и API

Сообщение ids » 05 янв 2016, 10:18

Madwolf писал(а):Чтобы изменить функцию (или другой объект) в тот момент, когда окно редактирования этой же функции (объекта) открыто, поможет следующий код:

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

                                        using (Transaction txn = new TransactionManager().CreateTransaction())
                                        {
                                            if (new TransactionManager().IsEplanTransactionRunning)
                                            {
                                                // add some code here
                                            }
                                            txn.Commit();
                                        }             

Добрый день,
я бы написал так:

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

            TransactionManager txnM = new TransactionManager();
            using ( Transaction txn = txnM.CreateTransaction() )
                {
                if ( txnM.IsEplanTransactionRunning )
                    {
                    // add some code here
                    }
                txn.Commit();
                }

хотелось бы также услышать про реальный сценарий такой необходимости.

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

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

Re: Скрипты и API

Сообщение Madwolf » 05 янв 2016, 13:34

Дмитрий Сергеевич здравствуйте.
Я же написал для чего это нужно: Чтобы изменить функцию (или другой объект) в тот момент, когда окно редактирования этой же функции (объекта) открыто.
Ваш пример не подойдет, т.к. нельзя объявить TransactionManager вне директивы using, по всей видимости. Студия по этому поводу выругалась:
"Embedded statement cannot be a declaration or labeled statement"


ids
знаток Eplan
знаток Eplan
Сообщения: 14
Зарегистрирован: 17 сен 2015, 09:25
Ф.И.О.: Иванюк Дмитрий Сергеевич

Re: Скрипты и API

Сообщение ids » 05 янв 2016, 14:03

Madwolf писал(а):Дмитрий Сергеевич здравствуйте.
Я же написал для чего это нужно: Чтобы изменить функцию (или другой объект) в тот момент, когда окно редактирования этой же функции (объекта) открыто.
Ваш пример не подойдет, т.к. нельзя объявить TransactionManager вне директивы using, по всей видимости. Студия по этому поводу выругалась:
"Embedded statement cannot be a declaration or labeled statement"

Странно - у меня все собралось без ошибок...
Новый вопрос - а у Вас был опыт реализации Undo действия для Eplan?

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

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

Re: Скрипты и API

Сообщение Madwolf » 05 янв 2016, 18:12

Да, я очень часто использую Undo, т.к. без него вставка графических объектов (линии, прямоугольники и т.п.) через АПИ приводит к тому, что все имеющиеся обратные шаги стираются.
Вроде бы все в хелпе описано детально, но на всякий случай тут еще примерчик:

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

// создать шаг возврата
            using (UndoStep undo = new UndoManager().CreateUndoStep())
            {
                // тут код который нужно выполнить, например создать выноску, обычно я сюда метод или несколько методов вставляю.
                undo.SetUndoDescription("Выноска API");
            }

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

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

Автоматическая нумерация страниц

Сообщение AGorskiy » 18 янв 2016, 18:41

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

// © Mishkin_Ivan@mail.ru
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.HEServices;
using System;
using System.Collections.Generic;

namespace Bolapansoft.EplanAddin {
    /// <summary>
    /// Нумерация страниц тома (томов). Выделить можно любую страницу проекта или несколько проектов сразу.
    /// </summary>
    class ActionNumberPages : IEplAction {
        public bool OnRegister(ref string Name, ref int Ordinal) {
            // Имя для регистрации в системе
            Name = "NimberPagesInProperty11031";
            Ordinal = 21;
            return true; ;
        }
        public bool Execute(ActionCallingContext oActionCallingContext) {
            SelectionSet set = new SelectionSet();
            var projects = set.SelectedProjects;
            if (projects == null || projects.Length == 0)
                return false;
            int countedPages = 0;
            foreach (var project in projects) {
                try {
                    project.LockObject();
                    countedPages += NumberPages(project);
                }
                catch (Exception) {
                }
                finally {
                    project.Dispose();
                }
            }
            return countedPages>0;
        }

        private static int NumberPages(Eplan.EplApi.DataModel.Project project) {
            int countedPages = 0;
            // Если в проекте несколько томов, каждый нумеруем отдельно.
            Dictionary<string, int> counters = new Dictionary<string, int>();
            var allPages = project.Pages;
            foreach (var page in allPages) {

                try {
                    // В данном скрипте предполагается, что признаком тома в структуре страницы
                    // является <1160> "Определённая пользователем структура" (DESIGNATION_USERDEFINED)
                    string udfKey = page.Properties.DESIGNATION_USERDEFINED;
                    int counter = RestoreCounter(counters, udfKey);
                    MultiLangString pageNumber = new MultiLangString();
                    pageNumber.AddString(ISOCode.Language.L___, (++counter).ToString());
                    page.LockObject();
                    // Запоминаем номер страницы в <11031> Дополнительное поле страницы.
                    page.Properties.PAGE_ADDITIONALPAGE = pageNumber;
                    pageNumber.Dispose();
                    ++countedPages;
                    StoreCounter(counters, udfKey, counter);
                }
                catch (Exception) {
                   
                    throw;
                }
                finally {
                    page.Dispose();
                }
            }
            return countedPages;
        }

        private static void StoreCounter(Dictionary<string, int> counters, string udfKey, int value) {
            counters[udfKey] = value;
        }

        private static int RestoreCounter(Dictionary<string, int> counters, string udfKey) {
            if (counters.ContainsKey(udfKey)) {
                return counters[udfKey];
            }
            else
                return 0;
        }

        public void GetActionProperties(ref ActionProperties actionProperties) {
           ;
        }

    }
}


viewtopic.php?p=64744#p64744 Автор: Dotarev
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.


KAN
новенький
новенький
Сообщения: 2
Зарегистрирован: 17 июл 2015, 15:06
Ф.И.О.: Кутузов Александр

Скрипты и API

Сообщение KAN » 05 фев 2016, 18:31

Добрый день! Наверное у многих работающих с EPLAN рано или поздно появляется желание облегчить свой ручной труд и что-нибудь автоматизировать. Вот видимо и мое время пришло. Не раз была прочитана данная ветка, запущены и проверены многие примеры
в частности на странице 9 от Stas (часть кода):
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>

все работает. В качестве эксперимента хотелось изменить ОУ программно, но при попытке заменить "so.Properties[20901, 1]" на "so.Properties[20010, 1]"(а также на: so.Properties.FUNC_VISIBLENAME.Set("1234"), или so.VisibleName, или so.Properties.set_FUNC_VISIBLENAME(1, oPropValue1) ) выдается исключение "Не удалось установить новое значение свойства.".

Вопрос - что не так? ReadOnly?
Также перед "переименованием" пытался делать .LockDevice() или project.LockObject() открытому проекту, но все не то. Объектом был кабель, хотя думаю это не принципиально.
Или имя и его производные 20013, 20014, 20014 и пр. нельзя менять? Направьте в нужное русло


Dotarev
знаток Eplan
знаток Eplan
Сообщения: 115
Зарегистрирован: 12 июн 2014, 05:17
Ф.И.О.: Мишкин Иван
Благодарил (а): 11 раз
Поблагодарили: 20 раз

Скрипты и API

Сообщение Dotarev » 06 фев 2016, 09:28

Смотрим:
Help→Обзоры EPLAN→Свойства EPLAN: Обзор→Свойства EPLAN: Сортировка по ид→Ид;1234→ R/O: Да
Так что - да, это свойство изменять нельзя. Вопрос о том, можно ли в принципе переименовать ОУ через API, остается открытым.

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

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

Скрипты и API

Сообщение Madwolf » 07 фев 2016, 20:10

Eplan::EplApi::HEServices::NameService вам в помощь, в частности его метод SetName (), в который нужно подсовывать заранее заготовленный FunctionBasePropertyList.


KAN
новенький
новенький
Сообщения: 2
Зарегистрирован: 17 июл 2015, 15:06
Ф.И.О.: Кутузов Александр

Скрипты и API

Сообщение KAN » 08 фев 2016, 14:25

Спасибо ответившим. Буду пробовать...

\\если какие-либо сообщения помогли, используйте кнопку "поблагодарить...." это и репа юзера и удобно искать, фильтровать полезную инфу
Последний раз редактировалось AGorskiy 08 фев 2016, 14:27, всего редактировалось 1 раз.
Причина: коммент модера


Dotarev
знаток Eplan
знаток Eplan
Сообщения: 115
Зарегистрирован: 12 июн 2014, 05:17
Ф.И.О.: Мишкин Иван
Благодарил (а): 11 раз
Поблагодарили: 20 раз

Скрипты и API

Сообщение Dotarev » 14 фев 2016, 09:21

Редактор отчетов в Eplan предоставляет богатые возможности по подготовке и форматированию вывода. Но наступает момент, когда этих богатств становится мало. :ext_komp_cr: . Это значит, что самое время присмотреться к полю "Операция" в текст-заполнителе.
Итак, необходимо: пользуясь API, для каждой строки отчета извлечь объекты, формирующие эту строку, обработать их и выдать в отчет какой-нибудь полезный текст.
1. Подготавливаем операцию для отчета (Action):

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

// The MIT License (MIT) https://opensource.org/licenses/mit-license.php
// Copyright (c) 2016 mivan12@mail.ru
// When quoting it is required the reference to the forum http://asutpforum.ru
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.DataModel;
using System;
using System.Collections.Generic;

namespace Eplan.EplAddin.PlaceholderAction {
    /// <summary>
    /// Action для использования в текст-заполнителе отчета (Placeholder).
    /// Для текущих записей, формирующих строку отчета, извлекаются исходные объекты и подготавливается текст для вывода в отчет.
    /// </summary>
    class GetObjectPropertyLaLaFaAction : IEplAction {
        // Name записываем на память - именно его надо указать в отчете в поле "Операция" текст-заполнителя, а подсказок не будет.
        public bool OnRegister(ref string Name, ref int Ordinal) {
            Name = "GetObjectPropertyLaLaFa";
            Ordinal = 20;
            return true;
        }
        // Метод вызывается для каждой строки отчета.
        public bool Execute(ActionCallingContext oActionCallingContext) {
            List<string> output = new List<string>();
            string objectNames = "";

            // Возможные параметры:
            // [in] objects - список формирующих строку объектов
            // [in/out] "color" тип: ColorId. Можно поменять цвет поля.
            oActionCallingContext.GetParameter("objects", ref objectNames);

            // Строку может формировать несколько объектов - в списке objectNames их ID разделены ";"
            string[] objIDs = objectNames.Split(';');
            string outputSeparator = "";
            foreach (string objID in objIDs) {
                try {
                    // Находим объект по его идентификатору
                    StorableObject obj = StorableObject.FromStringIdentifier(objID);
                    output.Add(outputSeparator + GetObjectPropertyLaLaFa(obj));
                    outputSeparator = ";";
                }
                catch (Exception ex) {
                    // Если что-то с извлечением свойств объекта пошло не так, пропустим его.
                    output.Add(" Fault:" + ex.Message);
                }
            }
            // Метод SetStrings устанавливает текст вывода.
            oActionCallingContext.SetStrings(output.ToArray());
            return true;
        }
        // Obsolete - игнорируем.
        public void GetActionProperties(ref ActionProperties actionProperties) {
            return;
        }

        // Тут можно препарировать объект как заблагорассудится.
        private static string GetObjectPropertyLaLaFa(StorableObject obj) {
            // Для примера, выведу общее количество изделий, присвоенных функции.
            if (obj is EplApi.DataModel.Function) {
                EplApi.DataModel.Function function = (EplApi.DataModel.Function)obj;
                if (function.IsMainFunction) {
                    int count_FUNC_ARTICLE_PARTNR = 0;
                    for (int i = 1; i < 50; i++) {
                        if (!function.Properties.FUNC_ARTICLE_PARTNR[i].IsEmpty)
                            ++count_FUNC_ARTICLE_PARTNR;
                    }
                    return count_FUNC_ARTICLE_PARTNR.ToString();
                }
                else return "";
            }
            return "Error - Report objects type is " + obj.GetType().ToString();
        }
    }
}

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

3. Формируем (или обновляем) отчет. Результат: функция GetObjectPropertyLaLaFa вызывается для каждого объекта строки отчета. Функция подготавливает текст, который выводится в отчет.
Возможно также изменить цвет текстового поля выводимой строки, используя свойство [in/out] "color" (тип ColorId).
В операцию можно передать несколько текстовых параметров:

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

// The MIT License (MIT) https://opensource.org/licenses/mit-license.php
// Copyright (c) 2016 mivan12@mail.ru
// When quoting it is required the reference to the forum http://asutpforum.ru
using Eplan.EplApi.ApplicationFramework;
using System.Collections.Generic;

namespace Eplan.EplAddin.PlaceholderAction {
    /// <summary>
    /// Извлечение переданных в операцию параметров.
    /// </summary>
    class GetPlaceholderParametersAction : IEplAction {
        public bool OnRegister(ref string Name, ref int Ordinal) {
            Name = "GetPlaceholderParameters";
            Ordinal = 20;
            return true;
        }
        public bool Execute(ActionCallingContext oActionCallingContext) {
            List<string> output = new List<string>();
           
            string[] parNames = oActionCallingContext.GetParameters();
           
            foreach (var parName in parNames) {
                string parametr = "";
                // Переданные параметры именуются средой Eplan как "0", "1" и т.д.
                oActionCallingContext.GetParameter(parName, ref parametr);
                output.Add(parName + ": " + parametr);
            }
           
            oActionCallingContext.SetStrings(output.ToArray());
            return true;
        }
        // Obsolete - игнорируем.
        public void GetActionProperties(ref ActionProperties actionProperties) {
            return;
        }
    }
}

Например, при вызове операции с параметрами:
GetObjectPropertyLaLaFa First 245
передается дополнительно две строки - "0" - "First", "1" - "245".
Успешного кодирования!
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

Скрипт. Резервирование всех открытых проектов

Сообщение AGorskiy » 26 мар 2016, 13:54

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

Нужно резервирование всех проектов открытых, в Навигаторе при закрытии Еплана, как понимаю разными файлами, выполнение без API, только скриптом.
Есть такой скрипт http://www.eplan4all.info/2013/03/rezer ... e-proekta/ - но он обрабатывает только активный проект, насколько помню и то при закрытии проекта, а не самого Eplan'а.
Так же есть этот скрипт - viewtopic.php?f=90&t=2701#p23323

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


ids
знаток Eplan
знаток Eplan
Сообщения: 14
Зарегистрирован: 17 сен 2015, 09:25
Ф.И.О.: Иванюк Дмитрий Сергеевич

Скрипты и API

Сообщение ids » 06 апр 2016, 15:32

Добрый день,

Есть такой вопрос - нужно перебрать для всех соединений дополнительные элементы (уголки, тройники и т.д.). Кто-нибудь делал подобное?

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

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

Скрипты и API

Сообщение Madwolf » 13 апр 2016, 18:30

Дмитрий здравствуйте.

Я так понимаю не ясно как их получить для конкретного соединения?


ids
знаток Eplan
знаток Eplan
Сообщения: 14
Зарегистрирован: 17 сен 2015, 09:25
Ф.И.О.: Иванюк Дмитрий Сергеевич

Скрипты и API

Сообщение ids » 14 апр 2016, 12:04

Добрый день,

Задача такая - перерисовать схему Eplan'а в другом приложении, для чего я перебираю все видимые ОУ, читаю их координаты и линии соединения с другими ОУ. Разобрался: для подсоединенных ОУ используем свойство

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

Connections

для подсоединенных графических элементов -

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

GraphicalConnections

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

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

Скрипты и API

Сообщение Madwolf » 15 апр 2016, 18:32

А через экспорт ACAD почему не устраивает?


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



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

Сейчас этот форум просматривают: Bing [Bot] и 0 гостей