На форуме обязательно:
  1. Заполнить свой профиль на Русском языке. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.

Скрипты и API

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

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

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

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

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

Сообщение 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
Сообщения: 146
Зарегистрирован: 12 июн 2014, 05:17
Имя: Мишкин Иван
Благодарил (а): 12 раз
Поблагодарили: 32 раза

Скрипты и API

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

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

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1015
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 15 раз
Поблагодарили: 55 раз

Скрипты и 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
Сообщения: 146
Зарегистрирован: 12 июн 2014, 05:17
Имя: Мишкин Иван
Благодарил (а): 12 раз
Поблагодарили: 32 раза

Скрипты и 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
Сообщения: 2480
Зарегистрирован: 05 мар 2012, 14:00
Имя: Горский Андрей Сергеевич
Откуда: Санкт-Петербург
Благодарил (а): 51 раз
Поблагодарили: 74 раза
Контактная информация:

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

Сообщение 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
Сообщения: 23
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Благодарил (а): 2 раза

Скрипты и API

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

Добрый день,

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

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1015
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 15 раз
Поблагодарили: 55 раз

Скрипты и API

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

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

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


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

Скрипты и API

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

Добрый день,

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

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

Connections

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

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

GraphicalConnections

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1015
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 15 раз
Поблагодарили: 55 раз

Скрипты и API

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

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


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

Скрипты и API

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

Просто нужен вывод в специфическом формате - в виде скрипта Lua.


Stas
знаток Eplan
знаток Eplan
Сообщения: 28
Зарегистрирован: 14 май 2014, 11:22
Имя: Станиславский Станислав Леонидович
Поблагодарили: 1 раз

Скрипты и API

Сообщение Stas » 06 июл 2016, 15:07

Доброго времени суток уважаемое сообщество!
Недавно возникла необходимость воспользоваться скриптом опубликованным Satyr-ом в начале этой темы
Satyr писал(а):Источник цитаты
[+] Код
using System.IO;


public class SimpleEventHandler
{
[Start]
[DeclareEventHandler("onActionStart.String.*")]
public long MyEventHandlerFunction2(IEventParameter iEventParameter)
{

try
{
//File.Create(@"C:\События.txt"); ..Создание файла
EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
String strActionName = oEventParameterString.String;
StreamWriter sw;
FileInfo fi = new FileInfo(@"C:\События.txt");
sw = fi.AppendText();
sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
sw.Close();

}

catch (System.InvalidCastException exc)
{

String strExc = exc.Message;

System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");

}



return 0;

}

}


данный скрипт записывает в лог действия которые выполняются EPLAN-ом.
Но к моему сожалению этот скрипт не работает в версии 2.5 (в версии 2.4 работает).
При загрузке данного скрипта появляется сообщение об ошибке Функция 'MyEventHandlerFunction2' привела к возникновению ошибки. Адресат вызова создал исключение.
Подскажите пожалуйста, с чем может быть связана эта ошибка и что нужно изменить что бы этот весьма полезный скрипт работал в версии 2.5 :ges_help:


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

Скрипты и API

Сообщение ids » 07 июл 2016, 08:53

Stas писал(а):Источник цитаты Доброго времени суток уважаемое сообщество!
Недавно возникла необходимость воспользоваться скриптом опубликованным Satyr-ом в начале этой темы данный скрипт записывает в лог действия которые выполняются EPLAN-ом.
Но к моему сожалению этот скрипт не работает в версии 2.5 (в версии 2.4 работает).
При загрузке данного скрипта появляется сообщение об ошибке Функция 'MyEventHandlerFunction2' привела к возникновению ошибки. Адресат вызова создал исключение.
Подскажите пожалуйста, с чем может быть связана эта ошибка и что нужно изменить что бы этот весьма полезный скрипт работал в версии 2.5 :ges_help:


Добрый день,

видно в версии 2.5 немного изменили объектную модель, но сам не могу глянуть что не так из-за отсутствии таковой. Предлагаю так - закомментируй вначале все тело функции, проверь, загружается ли он нормально. Далее по одной строчке убирай комментарий и найди строку, которая приводит к ошибке. А потом посмотрим, как ее исправить.


Stas
знаток Eplan
знаток Eplan
Сообщения: 28
Зарегистрирован: 14 май 2014, 11:22
Имя: Станиславский Станислав Леонидович
Поблагодарили: 1 раз

Скрипты и API

Сообщение Stas » 07 июл 2016, 11:54

Всем доброго времени суток!
Следуя Вашему совету, начал разбирать код скрипта и пришел к следующим выводам.
1. Проблема в Win10, а не в Eplan 2.5. Скрипт Satyr-а нормально работает и в версии 2.5 под Win7.
2. При работе с Win10 (насколько я понял) происходят какие то недоразумения с правами доступа и скрипт банально не может что либо писать в файл...

Исходя из вышеописанного решил заменить вывод в txt файл на использование MessageBox.Show

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
      try
      {
         EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
         String strActionName = oEventParameterString.String;
         
         System.Windows.Forms.MessageBox.Show("Now action is " + strActionName);
      }

      catch (System.InvalidCastException exc)
      {
         String strExc = exc.Message;
         System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");
      }
      return 0;
   }
}


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

Скрипты и API

Сообщение ids » 07 июл 2016, 12:43

Добрый день,

да - просто так писать в файл в корне диска С не очень правильно, лучше писать в свой пользовательский каталог. Например, попробуйте так

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

File.Create(@"%userprofile%\Documents\События.txt"); ..Создание файла


Stas
знаток Eplan
знаток Eplan
Сообщения: 28
Зарегистрирован: 14 май 2014, 11:22
Имя: Станиславский Станислав Леонидович
Поблагодарили: 1 раз

Скрипты и API

Сообщение Stas » 07 июл 2016, 13:21

Спасибо. Ваше замечание уместно и оно помогло.
Возникла следующая проблема. Если файл существует, то запись лога начинается без проблем, а если файла нет, то он создается но запись в него не происходит до перезагрузки скрипта.
Попытался создать условие, но результат то же...

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [Start]
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
      if (File.Exists(@"C:\Users\USERNAME\Documents\События.txt"))
      {
         try
         {
            EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
            String strActionName = oEventParameterString.String;
            StreamWriter sw;
            FileInfo fi = new FileInfo(@"C:\Users\USERNAME\Documents\События.txt");
            sw = fi.AppendText();
            sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
            sw.Close();
         }

         catch (System.InvalidCastException exc)
         {

            String strExc = exc.Message;

            System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");

         }
      }
      else
      {
         File.Create(@"C:\Users\USERNAME\Documents\События.txt"); //..Создание файла создавать файл
      }
      return 0;
   }

}


В чем может быть проблема?


Dotarev
знаток Eplan
знаток Eplan
Сообщения: 146
Зарегистрирован: 12 июн 2014, 05:17
Имя: Мишкин Иван
Благодарил (а): 12 раз
Поблагодарили: 32 раза

Скрипты и API

Сообщение Dotarev » 07 июл 2016, 13:35

Попробуй так:

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [Start]
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
         try
         {
            if (!File.Exists(@"C:\Users\USERNAME\Documents\События.txt"))
                 File.Create(@"C:\Users\USERNAME\Documents\События.txt"); //..Создание файла создавать файл
            EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
            String strActionName = oEventParameterString.String;
            StreamWriter sw;
            FileInfo fi = new FileInfo(@"C:\Users\USERNAME\Documents\События.txt");
            sw = fi.AppendText();
            sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
            sw.Close();
         }

         catch (System.InvalidCastException exc)
         {
            String strExc = exc.Message;
            System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");
         }
      }
     
      return 0;
   }


Stas
знаток Eplan
знаток Eplan
Сообщения: 28
Зарегистрирован: 14 май 2014, 11:22
Имя: Станиславский Станислав Леонидович
Поблагодарили: 1 раз

Скрипты и API

Сообщение Stas » 07 июл 2016, 13:51

Результат аналогичен.
Stas писал(а):Источник цитаты Если файл существует, то запись лога начинается без проблем, а если файла нет, то он создается но запись в него не происходит до перезагрузки скрипта.


Dotarev
знаток Eplan
знаток Eplan
Сообщения: 146
Зарегистрирован: 12 июн 2014, 05:17
Имя: Мишкин Иван
Благодарил (а): 12 раз
Поблагодарили: 32 раза

Скрипты и API

Сообщение Dotarev » 07 июл 2016, 14:30

Тогда так:

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [Start]
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
         try
         {
            EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
            String strActionName = oEventParameterString.String;
            StreamWriter sw;
            FileInfo fi = new FileInfo(@"C:\Users\USERNAME\Documents\События.txt");
            if (fi.Exists)
                sw = fi.AppendText();
            else
                sw = fi.CreateText();
            sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
            sw.Close();
         }

         catch (System.InvalidCastException exc)
         {
            String strExc = exc.Message;
            System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");
         }
      }
     
      return 0;
   }


Stas
знаток Eplan
знаток Eplan
Сообщения: 28
Зарегистрирован: 14 май 2014, 11:22
Имя: Станиславский Станислав Леонидович
Поблагодарили: 1 раз

Скрипты и API

Сообщение Stas » 07 июл 2016, 15:46

Ваш вариант работает корректно.
Благодарю покорнейше. :thankyou:


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

Скрипты и API

Сообщение limbir » 07 сен 2016, 13:54

Здравствуйте!
Требуется изменить стандартные пути к каталогам Eplan (Настройки > Пользователь > Управление > Каталоги).
Выполняю следующее:

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

Settings settings = new Settings();
string path_projects = Path.Combine(path_data, @"Проекты\Новая папка\");
settings.SetStringSetting("USER.TrDMProject.Masterdata.Pathnames.Projects", path_projects, 0);

При проверке значения свойства с помощью

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

MessageBox.Show(settings.GetStringSetting("USER.TrDMProject.Masterdata.Pathnames.Projects", 0));

непосредственно после выполнения метода SetStringSetting, получаю то, что и планировал:
$(EPLAN_DATA)\Проекты\Новая папка\

И даже после перезапуска Eplan такая проверка показывает, что всё в порядке.
Но стоит только открыть диалоговое окно Настройки > Пользователь > Управление > Каталоги, как свойство сбрасывается на то, что было установлено до этого в этом диалоговом окне.

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

aranea
знаток Eplan
знаток Eplan
Сообщения: 651
Зарегистрирован: 21 сен 2012, 21:45
Имя: Воробьев Александр
Благодарил (а): 2 раза
Поблагодарили: 40 раз
Контактная информация:

Скрипты и API

Сообщение aranea » 07 сен 2016, 14:21

тут напрашивается два пути:
1. после изменения настроек записать в поле "Проекты" окна настроек каталогов тот же путь (XSDMasterDataSettingsPathDlg, 3009) где-то была инфа как обращаться к элементам интерфейса Е по этим идентификаторам
2. до изменения настроек создать новую схему
советую посмотреть тут https://suplanus.de/setuserpaths/

п.с. зачем менять каталог проектов? проекты можно в любом каталоге открывать через Брауз, вот формы и рамки может и был бы смысл, так как вложенные каталоги не катят
Изображение

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

aranea
знаток Eplan
знаток Eplan
Сообщения: 651
Зарегистрирован: 21 сен 2012, 21:45
Имя: Воробьев Александр
Благодарил (а): 2 раза
Поблагодарили: 40 раз
Контактная информация:

Скрипты и API

Сообщение aranea » 07 сен 2016, 16:48

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

        SchemeSetting oSet = new SchemeSetting();
        oSet.Init("USER.ModalDialogs.PathsScheme");
        oSet.SetStringSetting("Projects", path_projects, 0);
        oSet.Set();
Изображение


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

Скрипты и API

Сообщение limbir » 08 сен 2016, 03:34

Александр, большое спасибо!
Каталог проектов здесь приведён в качестве примера.