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

Скрипты и API

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

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


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

Re: Скрипты и API

Сообщение KiraKudachinova » 17 фев 2015, 09:10

Madwolf писал(а):Очевидно произошло смешение понятий "ссылка". Т.е. ссылка на изделие с точки зрения программирования это будет Article. А с точки зрения Еплана это ArticleReference. Как я уже говорил, оперировать Article нет смысла, т.к. они не содержат информации о устройствах, т.е. вы не сможете выйти через изделие на свойство Позиция легенды <20450>. А вот через ArticleReference можно.


Все равно есть же связь между изделием и устройством,вот я так попробовала, как вы думаете так можно?

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

 public void RestructLegendItem()
       {
           var currentProject = new ProjectManager().CurrentProject;
           List<Article> articleSort = SortByAlfabet();
           DMObjectsFinder objFinder = new DMObjectsFinder(currentProject);
           StorableObject[] storableObjects = objFinder.GetStorableObjects(null);
           ViewPart viewPart = new ViewPart();
           var numberOfLegendItem = 1;

           foreach (var so in storableObjects)
           {
               viewPart = so as ViewPart;
               foreach (var article in articleSort)
               {
                   if (viewPart != null)
                   {
                           foreach (var index in viewPart.Source.Properties.FUNC_ARTICLE_PARTNR.Indexes)
                           {
                       
                                   if (viewPart.Source.Properties.FUNC_ARTICLE_PARTNR[index] == article.PartNr)
                                   {
                                       if (viewPart.Source.Properties.FUNC_ARTICLEPLACEMENT_CAPTIONID != null)
                                       {
                                           viewPart.Source.Properties.FUNC_ARTICLEPLACEMENT_CAPTIONID = numberOfLegendItem;
                                           if (numberOfLegendItem < 100)
                                           {
                                               numberOfLegendItem++;
                                           }
                                         
                                       }
                                   }
                               
                            }
                   }
                 
               }

           }


       }


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

Re: Скрипты и API

Сообщение KiraKudachinova » 17 фев 2015, 09:18

Доброе утро, вот у меня вопрос странный, при изучении API постоянно встречается слово "part" я его просто перевожу как часть,
я не сильна в английском, например такие предложения (Represents a part displayed in ViewPlacement.)
я понимаю как Предоставляет часть отображающуюся в ViewPlacement, но как это грамотно переводится?

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

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

Re: Скрипты и API

Сообщение Madwolf » 17 фев 2015, 09:43

Represents a part displayed in ViewPlacement - представляет устройство на обзоре модели.

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

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

Re: Скрипты и API

Сообщение Madwolf » 17 фев 2015, 10:19

Кира, при всем моем уважении, я уже 5 раз говорил, что Article не годится для выхода на Function. Т.к. передаточным звеном является ArticleReference. К тому же, что вы уперлись в эти Article, ведь проще через DMOObjectFinder получить все функции проекта и работать с ними, вещь Function содержит в себе ссылки как на ArticleReference, так и на Article.


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

Re: Скрипты и API

Сообщение KiraKudachinova » 17 фев 2015, 10:29

Madwolf писал(а):Represents a part displayed in ViewPlacement - представляет устройство на обзоре модели.


Вы видимо меня поняли в самом буквальном смысле, конкретно "part" к чему относится? Я к тому что оно не однократно повторяется "Working with part", как самостоятельное слово не переводится?


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

Re: Скрипты и API

Сообщение KiraKudachinova » 17 фев 2015, 10:35

Madwolf писал(а):Кира, при всем моем уважении, я уже 5 раз говорил, что Article не годится для выхода на Function. Т.к. передаточным звеном является ArticleReference. К тому же, что вы уперлись в эти Article, ведь проще через DMOObjectFinder получить все функции проекта и работать с ними, вещь Function содержит в себе ссылки как на ArticleReference, так и на Article.

Извиняюсь, что испытываю ваше терпение, хотела спросить а свойство PartNr в Article и ArticleReference имеет одно и то же значение для одного изделия?

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

var currentProject = new ProjectManager().CurrentProject;
       
           List<Article> articleSorts = SortByAlfabet();

           DMObjectsFinder oDMO = new DMObjectsFinder(currentProject);
           ArticleReferencesFilter aRFilter = new ArticleReferencesFilter();
           List<ArticleReference> arrAR = new List<ArticleReference>();
           arrAR = oDMO.GetArticleReferences(aRFilter).ToList<ArticleReference>();



           MessageBox.Show(Convert.ToString(arrAR.Count));
           foreach (var artRef in arrAR)
           {
               foreach(var artSor in articleSorts)
               {
             
                   if (artRef.PartNr == artSor.PartNr)
                   {
                       //тут я и проведу изменение позиций легенд
                   }


               }
           }
Последний раз редактировалось KiraKudachinova 17 фев 2015, 12:42, всего редактировалось 1 раз.

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

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

Re: Скрипты и API

Сообщение AGorskiy » 17 фев 2015, 10:37

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


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

Re: Скрипты и API

Сообщение KiraKudachinova » 17 фев 2015, 10:42

Madwolf писал(а): уже 5 раз говорил, что Article не годится для выхода на Function...

Спасибо, Виталий, я попробую.
======================================
AGorskiy писал(а):Да по англ. это всего лишь слово "часть", однако применительно к САПР, это слово значит устройство.
Кира, рекомендую прислушаться к рекомендациям Виталия, которые он повторяет уже не единожды. Просто попробуйте, что посоветовал вам Виталий.

Попробую, просто я в некотором замешательстве
Последний раз редактировалось AGorskiy 17 фев 2015, 10:48, всего редактировалось 3 раза.
Причина: цитата в цитате - оверквотинг зло

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

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

Re: Скрипты и API

Сообщение Madwolf » 17 фев 2015, 17:36

PartNr - Номер изделия <22001>. Если зайти в Ё в устройство во вкладку "изделие" то слева есть таблица, в ней столбец - номер изделия, это есть ArticleReference, а вот в выпадающем списке если выбрать "данные изделия", то там тоже номер изделия, это уже будет Article. К слову, все данные в выпадающем списке "Данные ссылки изделия" это будут свойства ArticleReference.


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

Re: Скрипты и API

Сообщение KiraKudachinova » 18 фев 2015, 06:12

Madwolf писал(а):PartNr - Номер изделия <22001>. Если зайти в Ё в устройство во вкладку "изделие" то слева есть таблица, в ней столбец - номер изделия, это есть ArticleReference, а вот в выпадающем списке если выбрать "данные изделия", то там тоже номер изделия, это уже будет Article. К слову, все данные в выпадающем списке "Данные ссылки изделия" это будут свойства ArticleReference.


Так значит,да? Вот по мой логике я получаю все Article, фильтрую , сортирую, чтоб изменить их позиции легенды получаю все ArticleReference, в цикле изменяю свойства позиции легенды только у тех ArticleReference у которых Номер изделия <22001> совпадает с Article. Что значит Ё?

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

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

Re: Скрипты и API

Сообщение Madwolf » 18 фев 2015, 08:31

Ё - Еплан.
Горский: добавлю от себя, для простоты и быстроты, введены ряд сокращений часто используемых в Еплане, Е/Ё - сам Еплан, ЧЯ - "черный ящик" и так далее

У Article нет позиции легенды. Это просто запись из базы данных изделий проекта.


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

Re: Скрипты и API

Сообщение KiraKudachinova » 24 фев 2015, 14:10

Здравствуйте, столкнулась необычной для меня проблемой, может, кто-нибудь знает из-за чего может возникать исключение этого типа "InvalidHandleExeption", которое выдает сообщение " Недействительный DataModel - объект"?

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

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

Re: Скрипты и API

Сообщение Madwolf » 24 фев 2015, 14:14

Что именно Вы хотите сделать и на каком этапе возникает эта ошибка?


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

Re: Скрипты и API

Сообщение KiraKudachinova » 24 фев 2015, 14:39

Виталий,
перебирала объекты в проекте, на второй итерации внешнего цикла в viewPart.Sourse (именно при обращении к sourse) вылезло исключение

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

foreach (var so in storableObjects)
                   {
                       
                       viewPart = so as ViewPart;
                   if (viewPart != null)
                   {
                       
                       foreach (var index in viewPart.Source.Properties.FUNC_ARTICLE_PARTNR.Indexes)
                       {
                           var countOfIndex = viewPart.Source.Properties.FUNC_ARTICLE_PARTNR.Indexes;
}}}
Последний раз редактировалось AGorskiy 25 фев 2015, 09:53, всего редактировалось 1 раз.
Причина: цитата лишняя, вы отвечаете сразу за этим сообщением, хватило бы и просто обращения

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

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

Re: Скрипты и API

Сообщение aranea » 24 фев 2015, 14:47

а почему все переменные var?
обычно делаю так

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

foreach (storableObject so in storableObjects)
                   {
                       if (so is ViewPart)
                       {
                       ViewPart viewPart = so as ViewPart;
                       ....
                       }}

viewPart.Source.Properties.FUNC_ARTICLE_PARTNR.Indexes
с этим надо отдельно разбираться, что возвращает и т.д.

плюс не забывайте значения свойств проверять на IsEmpty
Изображение


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

Re: Скрипты и API

Сообщение KiraKudachinova » 25 фев 2015, 06:02

Здравствуйте!
Александр, спасибо, я попробую. Про "var" -просто удобно.
Последний раз редактировалось AGorskiy 25 фев 2015, 09:52, всего редактировалось 1 раз.
Причина: цитата лишняя, вы отвечаете сразу за этим сообщением, хватило бы и просто обращения

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

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

Re: Скрипты и API

Сообщение Madwolf » 25 фев 2015, 11:01

Удобно глюки ловить с var на этапе выполнения, а не ошибки на этапе компиляции с нормальным указанием типа.


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

Re: Скрипты и API

Сообщение KiraKudachinova » 25 фев 2015, 11:12

aranea писал(а):а почему все переменные var?
обычно делаю так

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

foreach (storableObject so in storableObjects)
                   {
                       if (so is ViewPart)
                       {
                       ViewPart viewPart = so as ViewPart;
                       ....
                       }}

viewPart.Source.Properties.FUNC_ARTICLE_PARTNR.Indexes
с этим надо отдельно разбираться, что возвращает и т.д.

плюс не забывайте значения свойств проверять на IsEmpty


Я попробовала сделать так как вы подсказали, смысл мне проверять пока свойства если исключение возникает при обращение к sourse, я даже пробовала сделать ша if (viewPart.Sourse != null)

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

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

Re: Скрипты и API

Сообщение Madwolf » 25 фев 2015, 12:29

У ViewPart должен быть Sourse, если, конечно, обзор модели не обновлен, а реально в пространстве листа объект удален.
Ко всему прочему запрос, по-моему, в принципе некорректный. Нужно сделать запрос следующим образом: Source.ArticleReferences[0].PartNr, т.к. у 3D объекта, коим является Source может быть только одно изделие.

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

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

Re: Скрипты и API

Сообщение Madwolf » 25 фев 2015, 12:49

И вообще, прежде чем смотреть действительные индексы, нужно убедиться что свойство индексируемое:

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

  if (oProperty.IsIndexed)
  {
  }


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

Re: Скрипты и API

Сообщение KiraKudachinova » 25 фев 2015, 13:00

Madwolf писал(а):У ViewPart должен быть Sourse, если, конечно, обзор модели не обновлен, а реально в пространстве листа объект удален.
Ко всему прочему запрос, по-моему, в принципе некорректный. Нужно сделать запрос следующим образом: Source.ArticleReferences[0].PartNr, т.к. у 3D объекта, коим является Source может быть только одно изделие.


Почему "[0]" (Source.ArticleReferences[0].PartNr), я обращалась к Sourse, чтобы получить доступ к Properties (iewPart.Source.Properties.FUNC_ARTICLE_PARTNR), но честно я не знаю что такое Sourse?


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

Re: Скрипты и API

Сообщение KiraKudachinova » 25 фев 2015, 13:01

Это исключение вылетает именно на второй итерации внешнего цикла, во всех остальных случая все нормально
Последний раз редактировалось AGorskiy 25 фев 2015, 14:11, всего редактировалось 1 раз.
Причина: Кира, я ранее уже писал - цитата в цитате - оверквотинг зло. Обратите внимание на причины редактирования, пожалуйста.


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

Re: Скрипты и API

Сообщение limbir » 04 мар 2015, 14:27

Здравствуйте!
Возможно ли программно запустить какую-нибудь стандартную команду из меню? Конкретно интересует Данные проекта > Кабели > Присвоить жилы > Всё присвоить заново.

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

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

Re: Скрипты и API

Сообщение AGorskiy » 04 мар 2015, 14:31

Предложу другой вариант, назначить "горячую клавишу" на данную команду. Сделать это просто. Или нужно именно программно, то есть при выполнении какого-либо экзешника? Опишите, что вы хотите.
Посмотрите, думаю поможет http://www.eplan4all.info/2012/11/sozda ... trumentov/
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.


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

Re: Скрипты и API

Сообщение limbir » 04 мар 2015, 15:31

Делаю алгоритм подсчёта аксессуаров для проводов (кабельные наконечники, маркировка). Данные извлекаю из точек определения соединений. Для обработки актуальных данных необходимо присваивать жилы перед запуском алгоритма. Я хотел подстраховать пользователя на случай, если он забудет это сделать.


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



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

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