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

Скрипты и API

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


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

Re: Скрипты и API

Сообщение KiraKudachinova » 16 фев 2015, 12:27

Простите,я тут две задачи делаю, это был вопрос относящийся к другой задаче, не имеющего отношения к клеммам,а насчет клемм: требуется автоматически добавлять концевые платы к клеммам с открытыми контактами.


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

Re: Скрипты и API

Сообщение KiraKudachinova » 16 фев 2015, 12:43

Доброго времени суток, мне нужно изменить позиции легенд зависимости от категории изделия и алфавитного порядка, категорию изделия определяю по полю "Произвольное свойство Значение" [2]<221472> у меня это: детали, прочие изделия, сборочные единицы, материалы и т.д. по некоторому правилу: прочие изделия от 1 до 100,детали от 100 до 200 и т.п.

Реализую это по следующему алгоритму:
1 Сортирую по свойству <221472>.
2 Сортирую по алфавиту.
3. Изменяю позиции легенд.

Вот то что я уже сделала:

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

private  List<Article> GetArticlesByCategory(string category)
        {
            var currentProject = new ProjectManager().CurrentProject;
            Article[] articles = currentProject.Articles;
            List<Article> articleOfCatrgory = new List<Article>();


           foreach(var article in articles)
           {
             
               if (article.Properties.ARTICLE_FREE_DATA_VALUE[2].ToString(ISOCode.Language.L___) == category)
               {
                   articleOfCatrgory.Add(article);
               
               }
           }
   

           return articleOfCatrgory;
        }

{
           List<Article> articles = this.GetArticlesByCategory("Прочие изделия");
           ShowArticles(articles);
         
           for (int i = 0; i < articles.Count; i++)
           {
               for (int j = i+1; j < articles.Count; j++)
               {
                   if (String.Compare(articles[i].Properties.ARTICLE_DESCR1.ToString(ISOCode.Language.L___),articles[j].Properties.ARTICLE_DESCR1.ToString(ISOCode.Language.L___))>0)
                   {
                       Article tempArticle = articles[i];
                       articles[i] = articles[j];
                       articles[j] = tempArticle;
                   }

               }
           }
        //   ShowArticles(articles);
           return articles;
       
       }
public void RestructLegendItem()
{
List articles = SortByAlfabet();
string s = "";
foreach(var article in articles)
{
// Here I want to set of position legend since 1 to 100
}

}


Вопрос: каким образом теперь через изделия получить доступ к позициям легенд?
Последний раз редактировалось AGorskiy 16 фев 2015, 12:53, всего редактировалось 2 раза.
Причина: для кода, лучше использовать тег


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

Re: Скрипты и API

Сообщение KiraKudachinova » 16 фев 2015, 12:47

Простите, я не поблагодарила за участие в моей проблеме,спасибо большое, я только начала работать с eplan api и у меня очень старая версия api справочника, поэтому извините если я спрашиваю слишком очевидные вещи.

\\Горский: для этого и существует форум, так что извиняться не за что

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

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

Re: Скрипты и API

Сообщение Madwolf » 16 фев 2015, 12:57

Концевые платы нужно добавлять в конце только, по идее. Я решал данный вопрос следующим образом, нахожу все клеммники в проекте, нахожу последнюю клемму, смотрю в изделии-клемме в принадлежностях какие могут быть назначены концевые платы, добавляю. В базе изделий, естественно должно быть все забито.

"Хочу получить ссылки на все изделия," - это как? Чтобы получить ссылку на все изделия, нужно в еплане их найти сначала через DMOObjectFinder, и они будут в виде массива. При этом никаких параметров передавать не нужно, просто создать свой пустой список или массив (в примере только кусок кода).

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

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.HEServices;
using Eplan.EplApi.DataModel.Graphics;

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



для решения 99% проблем, которые у Вас возникают, вам не хватает двух вещей:
1. Возможности заходить под отладкой.
2. Нормальным хелпом на API.

Для решения 1-го вопроса нужна студия не Express версия. По 2-му вопросу, я так понимаю, помощь уже пришла )

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

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

Re: Скрипты и API

Сообщение Madwolf » 16 фев 2015, 13:01

Вам нужно это свойство:
Позиция легенды <20450> Позиция легенды
API-Define: FUNC_ARTICLEPLACEMENT_CAPTIONID
???


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

Re: Скрипты и API

Сообщение KiraKudachinova » 16 фев 2015, 13:05

Спасибо за помощь, отлаживать по шагам не могу потому что у меня стоит режим Release,мне это необходимо, чтоб получать в процессе сборки файл .dll. Если честно не представляю чем мне поможет студия express, чем она будет лучше ultimate?

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

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

Re: Скрипты и API

Сообщение Madwolf » 16 фев 2015, 13:09

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

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

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

Re: Скрипты и API

Сообщение Madwolf » 16 фев 2015, 13:11

Так она не лучше, я же сказал "студия не Express версия". А почему нельзя поставить в режим debug и получать тоже файл dll? Мы же это делаем. Бывает много тонкостей, без отладки просто невозможно разобраться, либо очень долго это все будет.


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

Re: Скрипты и API

Сообщение KiraKudachinova » 16 фев 2015, 13:18

Madwolf писал(а):Вам нужно это свойство:
Позиция легенды <20450> Позиция легенды
API-Define: FUNC_ARTICLEPLACEMENT_CAPTIONID
???


Да это свойство (я знаю какой код у этого свойства и как его получить через объект function), но свойство "позиция легенды" есть только у Function, через изделие Article я не могу получить, проблема не в том,что я не знаю как называется это свойство.

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

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

Re: Скрипты и API

Сообщение Madwolf » 16 фев 2015, 13:25

Решение см. выше.


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

Re: Скрипты и API

Сообщение KiraKudachinova » 17 фев 2015, 07:06

Madwolf писал(а):Так она не лучше, я же сказал "студия не Express версия". А почему нельзя поставить в режим debug и получать тоже файл dll? Мы же это делаем. Бывает много тонкостей, без отладки просто невозможно разобраться, либо очень долго это все будет.


Ну, потому что у меня тип проекта "Библиотека классов", библиотеку классов невозможно отладить в режиме debug, я понимаю, что я не могу отлаживать, но я не нашла другого способа,Я не заметила частицу "не".Какой у вас тип проекта,можете скинуть любой проект целиком,который отлаживается-можно даже пустой,хочу посмотреть,что у меня не так
Последний раз редактировалось KiraKudachinova 17 фев 2015, 12:08, всего редактировалось 1 раз.


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
Сообщения: 952
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 12 раз
Поблагодарили: 45 раз

Re: Скрипты и API

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

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

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

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

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

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
Сообщения: 952
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 12 раз
Поблагодарили: 45 раз

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
Сообщения: 952
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 12 раз
Поблагодарили: 45 раз

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
Сообщения: 952
Зарегистрирован: 17 окт 2012, 10:24
Имя: Виталий
Благодарил (а): 12 раз
Поблагодарили: 45 раз

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 раз.
Причина: цитата лишняя, вы отвечаете сразу за этим сообщением, хватило бы и просто обращения


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



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

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