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

Скрипты и API

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

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

Закрыто

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

Re: Скрипты и API

Сообщение KiraKudachinova »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

Доброго времени суток, мне нужно изменить позиции легенд зависимости от категории изделия и алфавитного порядка, категорию изделия определяю по полю "Произвольное свойство Значение" [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 »

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

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

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

Re: Скрипты и API

Сообщение Madwolf »

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

"Хочу получить ссылки на все изделия," - это как? Чтобы получить ссылку на все изделия, нужно в еплане их найти сначала через 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
Сообщения: 1454
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 60 раз
Поблагодарили: 181 раз

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

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

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

Madwolf писал(а):Вам нужно это свойство:
Позиция легенды <20450> Позиция легенды
API-Define: FUNC_ARTICLEPLACEMENT_CAPTIONID
???
Да это свойство (я знаю какой код у этого свойства и как его получить через объект function), но свойство "позиция легенды" есть только у Function, через изделие Article я не могу получить, проблема не в том,что я не знаю как называется это свойство.

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

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 »

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

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

Madwolf писал(а):Represents a part displayed in ViewPlacement - представляет устройство на обзоре модели.
Вы видимо меня поняли в самом буквальном смысле, конкретно "part" к чему относится? Я к тому что оно не однократно повторяется "Working with part", как самостоятельное слово не переводится?

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

Re: Скрипты и API

Сообщение KiraKudachinova »

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
Сообщения: 3327
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 176 раз
Поблагодарили: 364 раза

Re: Скрипты и API

Сообщение AGorskiy »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

Madwolf писал(а): уже 5 раз говорил, что Article не годится для выхода на Function...
Спасибо, Виталий, я попробую.
======================================
AGorskiy писал(а):Да по англ. это всего лишь слово "часть", однако применительно к САПР, это слово значит устройство.
Кира, рекомендую прислушаться к рекомендациям Виталия, которые он повторяет уже не единожды. Просто попробуйте, что посоветовал вам Виталий.
Попробую, просто я в некотором замешательстве
Последний раз редактировалось AGorskiy 17 фев 2015, 10:48, всего редактировалось 3 раза.
Причина: цитата в цитате - оверквотинг зло

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

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

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

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

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

Re: Скрипты и API

Сообщение Madwolf »

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

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

Re: Скрипты и API

Сообщение KiraKudachinova »

Виталий,
перебирала объекты в проекте, на второй итерации внешнего цикла в 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»