- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Скрипты и API
Модератор: специалисты Eplan
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Простите,я тут две задачи делаю, это был вопрос относящийся к другой задаче, не имеющего отношения к клеммам,а насчет клемм: требуется автоматически добавлять концевые платы к клеммам с открытыми контактами.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Доброго времени суток, мне нужно изменить позиции легенд зависимости от категории изделия и алфавитного порядка, категорию изделия определяю по полю "Произвольное свойство Значение" [2]<221472> у меня это: детали, прочие изделия, сборочные единицы, материалы и т.д. по некоторому правилу: прочие изделия от 1 до 100,детали от 100 до 200 и т.п.
Реализую это по следующему алгоритму:
1 Сортирую по свойству <221472>.
2 Сортирую по алфавиту.
3. Изменяю позиции легенд.
Вот то что я уже сделала:
Вопрос: каким образом теперь через изделия получить доступ к позициям легенд?
Реализую это по следующему алгоритму:
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 раза.
Причина: для кода, лучше использовать тег
Причина: для кода, лучше использовать тег
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Простите, я не поблагодарила за участие в моей проблеме,спасибо большое, я только начала работать с eplan api и у меня очень старая версия api справочника, поэтому извините если я спрашиваю слишком очевидные вещи.
\\Горский: для этого и существует форум, так что извиняться не за что
\\Горский: для этого и существует форум, так что извиняться не за что
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
Концевые платы нужно добавлять в конце только, по идее. Я решал данный вопрос следующим образом, нахожу все клеммники в проекте, нахожу последнюю клемму, смотрю в изделии-клемме в принадлежностях какие могут быть назначены концевые платы, добавляю. В базе изделий, естественно должно быть все забито.
"Хочу получить ссылки на все изделия," - это как? Чтобы получить ссылку на все изделия, нужно в еплане их найти сначала через DMOObjectFinder, и они будут в виде массива. При этом никаких параметров передавать не нужно, просто создать свой пустой список или массив (в примере только кусок кода).
для решения 99% проблем, которые у Вас возникают, вам не хватает двух вещей:
1. Возможности заходить под отладкой.
2. Нормальным хелпом на API.
Для решения 1-го вопроса нужна студия не Express версия. По 2-му вопросу, я так понимаю, помощь уже пришла )
"Хочу получить ссылки на все изделия," - это как? Чтобы получить ссылку на все изделия, нужно в еплане их найти сначала через 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-му вопросу, я так понимаю, помощь уже пришла )
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
Вам нужно это свойство:
Позиция легенды <20450> Позиция легенды
API-Define: FUNC_ARTICLEPLACEMENT_CAPTIONID
???
Позиция легенды <20450> Позиция легенды
API-Define: FUNC_ARTICLEPLACEMENT_CAPTIONID
???
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Спасибо за помощь, отлаживать по шагам не могу потому что у меня стоит режим Release,мне это необходимо, чтоб получать в процессе сборки файл .dll. Если честно не представляю чем мне поможет студия express, чем она будет лучше ultimate?
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
Очевидно произошло смешение понятий "ссылка". Т.е. ссылка на изделие с точки зрения программирования это будет Article. А с точки зрения Еплана это ArticleReference. Как я уже говорил, оперировать Article нет смысла, т.к. они не содержат информации о устройствах, т.е. вы не сможете выйти через изделие на свойство Позиция легенды <20450>. А вот через ArticleReference можно.
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
Так она не лучше, я же сказал "студия не Express версия". А почему нельзя поставить в режим debug и получать тоже файл dll? Мы же это делаем. Бывает много тонкостей, без отладки просто невозможно разобраться, либо очень долго это все будет.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Да это свойство (я знаю какой код у этого свойства и как его получить через объект function), но свойство "позиция легенды" есть только у Function, через изделие Article я не могу получить, проблема не в том,что я не знаю как называется это свойство.Madwolf писал(а):Вам нужно это свойство:
Позиция легенды <20450> Позиция легенды
API-Define: FUNC_ARTICLEPLACEMENT_CAPTIONID
???
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Ну, потому что у меня тип проекта "Библиотека классов", библиотеку классов невозможно отладить в режиме debug, я понимаю, что я не могу отлаживать, но я не нашла другого способа,Я не заметила частицу "не".Какой у вас тип проекта,можете скинуть любой проект целиком,который отлаживается-можно даже пустой,хочу посмотреть,что у меня не такMadwolf писал(а):Так она не лучше, я же сказал "студия не Express версия". А почему нельзя поставить в режим debug и получать тоже файл dll? Мы же это делаем. Бывает много тонкостей, без отладки просто невозможно разобраться, либо очень долго это все будет.
Последний раз редактировалось KiraKudachinova 17 фев 2015, 12:08, всего редактировалось 1 раз.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Все равно есть же связь между изделием и устройством,вот я так попробовала, как вы думаете так можно?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++;
}
}
}
}
}
}
}
}
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Доброе утро, вот у меня вопрос странный, при изучении API постоянно встречается слово "part" я его просто перевожу как часть,
я не сильна в английском, например такие предложения (Represents a part displayed in ViewPlacement.)
я понимаю как Предоставляет часть отображающуюся в ViewPlacement, но как это грамотно переводится?
я не сильна в английском, например такие предложения (Represents a part displayed in ViewPlacement.)
я понимаю как Предоставляет часть отображающуюся в ViewPlacement, но как это грамотно переводится?
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
Represents a part displayed in ViewPlacement - представляет устройство на обзоре модели.
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
Кира, при всем моем уважении, я уже 5 раз говорил, что Article не годится для выхода на Function. Т.к. передаточным звеном является ArticleReference. К тому же, что вы уперлись в эти Article, ведь проще через DMOObjectFinder получить все функции проекта и работать с ними, вещь Function содержит в себе ссылки как на ArticleReference, так и на Article.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Вы видимо меня поняли в самом буквальном смысле, конкретно "part" к чему относится? Я к тому что оно не однократно повторяется "Working with part", как самостоятельное слово не переводится?Madwolf писал(а):Represents a part displayed in ViewPlacement - представляет устройство на обзоре модели.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Извиняюсь, что испытываю ваше терпение, хотела спросить а свойство PartNr в Article и ArticleReference имеет одно и то же значение для одного изделия?Madwolf писал(а):Кира, при всем моем уважении, я уже 5 раз говорил, что Article не годится для выхода на Function. Т.к. передаточным звеном является ArticleReference. К тому же, что вы уперлись в эти Article, ведь проще через DMOObjectFinder получить все функции проекта и работать с ними, вещь Function содержит в себе ссылки как на ArticleReference, так и на Article.
Код: Выделить всё
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 раз.
-
- знаток Eplan
- Сообщения: 3329
- Зарегистрирован: 05 мар 2012, 15:00
- Имя: Горский Андрей Сергеевич
- город/регион: Санкт-Петербург
- Благодарил (а): 178 раз
- Поблагодарили: 368 раз
Re: Скрипты и API
Да по англ. это всего лишь слово "часть", однако применительно к САПР, это слово значит устройство.
Кира, рекомендую прислушаться к рекомендациям Виталия, которые он повторяет уже не единожды. Просто попробуйте, что посоветовал вам Виталий.
Кира, рекомендую прислушаться к рекомендациям Виталия, которые он повторяет уже не единожды. Просто попробуйте, что посоветовал вам Виталий.
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Спасибо, Виталий, я попробую.Madwolf писал(а): уже 5 раз говорил, что Article не годится для выхода на Function...
======================================
Попробую, просто я в некотором замешательствеAGorskiy писал(а):Да по англ. это всего лишь слово "часть", однако применительно к САПР, это слово значит устройство.
Кира, рекомендую прислушаться к рекомендациям Виталия, которые он повторяет уже не единожды. Просто попробуйте, что посоветовал вам Виталий.
Последний раз редактировалось AGorskiy 17 фев 2015, 10:48, всего редактировалось 3 раза.
Причина: цитата в цитате - оверквотинг зло
Причина: цитата в цитате - оверквотинг зло
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
PartNr - Номер изделия <22001>. Если зайти в Ё в устройство во вкладку "изделие" то слева есть таблица, в ней столбец - номер изделия, это есть ArticleReference, а вот в выпадающем списке если выбрать "данные изделия", то там тоже номер изделия, это уже будет Article. К слову, все данные в выпадающем списке "Данные ссылки изделия" это будут свойства ArticleReference.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Так значит,да? Вот по мой логике я получаю все Article, фильтрую , сортирую, чтоб изменить их позиции легенды получаю все ArticleReference, в цикле изменяю свойства позиции легенды только у тех ArticleReference у которых Номер изделия <22001> совпадает с Article. Что значит Ё?Madwolf писал(а):PartNr - Номер изделия <22001>. Если зайти в Ё в устройство во вкладку "изделие" то слева есть таблица, в ней столбец - номер изделия, это есть ArticleReference, а вот в выпадающем списке если выбрать "данные изделия", то там тоже номер изделия, это уже будет Article. К слову, все данные в выпадающем списке "Данные ссылки изделия" это будут свойства ArticleReference.
-
- знаток Eplan
- Сообщения: 1455
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 181 раз
Re: Скрипты и API
Ё - Еплан.
Горский: добавлю от себя, для простоты и быстроты, введены ряд сокращений часто используемых в Еплане, Е/Ё - сам Еплан, ЧЯ - "черный ящик" и так далее
У Article нет позиции легенды. Это просто запись из базы данных изделий проекта.
Горский: добавлю от себя, для простоты и быстроты, введены ряд сокращений часто используемых в Еплане, Е/Ё - сам Еплан, ЧЯ - "черный ящик" и так далее
У Article нет позиции легенды. Это просто запись из базы данных изделий проекта.
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Здравствуйте, столкнулась необычной для меня проблемой, может, кто-нибудь знает из-за чего может возникать исключение этого типа "InvalidHandleExeption", которое выдает сообщение " Недействительный DataModel - объект"?
-
- здесь недавно
- Сообщения: 38
- Зарегистрирован: 02 фев 2015, 07:18
- Имя: Кудачинова Кира Владимировна
- Страна: Россия
- город/регион: Томск
Re: Скрипты и API
Виталий,
перебирала объекты в проекте, на второй итерации внешнего цикла в viewPart.Sourse (именно при обращении к sourse) вылезло исключение
перебирала объекты в проекте, на второй итерации внешнего цикла в 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 раз.
Причина: цитата лишняя, вы отвечаете сразу за этим сообщением, хватило бы и просто обращения
Причина: цитата лишняя, вы отвечаете сразу за этим сообщением, хватило бы и просто обращения