Сообщество программистов Autodesk в СНГ
ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Oleg от 18-12-2015, 22:11:22
-
Как можно используя средства AutoCAD Electrical (далее АЕ ) - его команды, вставить в чертеж параметрический блок с атрибутами, созданный программой пользователя, не используя явно меню АЕ (т.е. только из командной строки, либо программы пользователя).
Цель задачи:
- функция пользователя создает параметрический блок с атрибутами, созданными по правилам АЕ и вставляет этот блок в чертеж обращаясь к функциям АЕ, по алгоритму:
<вызов функции АЕ > |<имя файла созданного блока >|[ключи],
- после выполнения такого вызова все элементы блока (графика и атрибуты) должны быть автоматически вставлены в соответствующие слои чертежа без применения дополнительных функций. В итоге при дальнейшей работе с чертежом АЕ должен определять этот блок как «свой».
С этим блоком и его атрибутами должны работать все функции АЕ;
- используемая функция АЕ не должна иметь собственное меню, либо его вывод должен быть запрещен;
- команда Автокад Insert, не позволяет автоматически задавать слои для размещения элементов блока по правилам АЕ.
Суть проблемы:
- с одной стороны АЕ имеет существенно расширенный функционал по сравнению с базовым Автокадом, но с точки зрения конечного пользователя зачастую функции АЕ выглядят как недоработанные и логически неполные;
- формально АЕ позволяет пользователям создавать свои элементы (блоки, графические элементы, функции … ), в том числе и реализовывать свои идеи используя возможности AutoLISP;
- при этом требуется соблюдать определенные правила по наименованию атрибутов и использованию слоев, согласно описанию АЕ;
- но при вставке пользовательских элементов в чертеж возникают проблемы:
- использование команды Insert не позволяет создать блок определяемый как блок-АЕ;
- команда AECOMPONENT выводит свое собственное меню, что не совсем удобно.
- в идеальном варианте пользовательская функция должна:
- вызываться через дополнительную кнопку на панели окна АЕ;
- запускать собственное меню, для создания своего блока и выполнения связанных с ним функций;
- созданные в результате элементы должны определяться средствами АЕ как «свои»,
они должны допускать выполнение всех дополнительных АЕ-функций правой кнопки мышки.
Желательно применение механизма аналогичного реализованному в инструменте АЕ "Построение параметрического соединителя"
-
Как можно используя средства AutoCAD Electrical (далее АЕ ) - его команды, вставить в чертеж параметрический блок с атрибутами, созданный программой пользователя, не используя явно меню АЕ (т.е. только из командной строки, либо программы пользователя).
Пожалуйста выложите пример такого блока.
- команда Автокад Insert, не позволяет автоматически задавать слои для размещения элементов блока по правилам АЕ.
Ну и что? Сложно дополнить её реактором для изменения слоёв?
- использование команды Insert не позволяет создать блок определяемый как блок-АЕ;
Судя по всему среди участников форума нет (или почти нет) тех, кто программирует для AE. Поэтому придётся экспериментировать.
Команда INSERT не создаёт блок, а вставляет его. Описание блока должно быть предварительно создано. Если блок находится во внешнем dwg-файле, то перед тем как он вставляется, в текущем чертеже создаётся описание блока, а затем уже вставка блока.
Нужно проанализировать в чем разница между блоком, созданном средствами AE и вставленном командой INSERT. Лучше всего для этого подходит утилита ARXDBG: http://www.maestrogroup.com.ua/support/ArxDbg2015.zip (годится для AutoCAD 2015 и 2016) Для других версий нужно смотреть http://www.maestrogroup.com.ua/support/
-
Здравствуйте Александр, спасибо за ответ. Со своей стороны могу сообщить, что употребив выражение: "использование команды Insert не позволяет создать блок определяемый как блок-АЕ", я имел в виду, что команда Insert не позволяет довести до конца весь процесс создания блока. Т.е сам блок создает ЛИСП-функция пользователя (используя примитивы "BLOCK" и "ATTDEF" и т.д.), а завершает его == выполняет вставку - команда Insert.
Просто применить генератор слоев не получиться, по одной причине. Как я выяснил, буквально сегодня, DXF-коды АЕ-блоков после вставки (средствами АЕ) существенно отличаются от их описаний. И это не только слои. Более того, после вставки появляются дополнительные DXF-группы.
-
Прекрасно. Значит нужно найти в чём отличие и выполнить "приведение" своих блоков к блокам AE. Надеюсь, что возможностей lisp для этого будет достаточно.
-
Вы правы Александр, возможностей Лиспа достаточно. Но в данном случае главное не среда разработки, а те функциональные правила которые необходимо реализовать, а они к сожалению закрыты.
В принципе открывая тему я и рассчитывал на помощь коллег которым известны открытые (но не задокументированные для общего доступа) точки обращения к функциям АЕ из программ пользователя.
Тем более что переход в другую среду разработки, например ObjectARX, потребует и значительного времени. Как и сам процесс разработки. Достаточно взглянуть на код функции на Лиспе и на ObjectARX (только набрать на клавиатуре одни многометровые идентификаторы чего стоит). Хотя вполне возможно я ошибаюсь.
Поэтому буду Вам признателен если Вы сообщите насколько реально применение ObjectARX
сокращает процесс разработки, с учетом времени освоения самого процесса.
В свое время я пытался освоить ООП, но пришел к выводу - на данном этапе это путь к чрезмерно-жесткой детерминизации разработки софта и полного разделения программеров на пахарей-негров и "умных" манагеров. В итоге превращения софтверных компаний в некую разновидность софтверных КБ, где пахари ваяют свои куски софта, а общей ситуацией владеют (а значит и финансами) руководство.
Но возможно я и не прав.
Благодарю за уделенное внимание.
-
Oleg
Я так и не увидел ни родного блока AE, ни блока, который вы хотите использовать в качестве блока AE.
Я не понял воспользовались ли моим предложением по поводу исследования блоков при помощи ARXDBG.
Я вижу пока общефилософские мысли по поводу ООП, но никакой конкретики по поводу стоящей задачи.
Я совершенно не уверен, что ObjectARX (или .NET API) может как-то помочь в решении этой задачи по сравнению с VisualLisp.
Всё что есть в Electrical API описано в документации (раздел API Help) и здесь: https://knowledge.autodesk.com/support/autocad-electrical/downloads/caas/downloads/content/autocad-electrical-apis.html
О чём мы ведём беседу? ;)
-
Здравствуйте Александр, прошу извинить за предыдущие, не совсем корректные ответы. Просто мне было неудобно грузить Вас чуждой тематикой. Ведь как я понял из Вашего же ответа, Вы с АЕ не работаете, а к тому же и сама фирма АвтоДЕСК не особо продвигает этот продукт.
Но поскольку Вы упрекаете меня в невнимательном отношении высылаю Вам материалы, необходимые для понимания сути проблемы. К письму приложены два pdf и один dxf файлы с материалами. Их содержание:
- файл «Etal_EA-Model. pdf» демонстрирует те блоки которые строит система АЕ по команде “АЕСОNNECTOR” . Здесь показано четыре основных варианта размещения блока соединителя на 7 клемм, короткими отрезками я отметил сторону подключения. У вариантов размещенных по вертикали я так же подровнял атрибуты № контактов. Должен дополнительно отметить, что данная графика соединителей как правило не соответствует ГОСТам;
- файл «tst1-Model. pdf» демонстрирует тот вариант блоков который я пытаюсь реализовать. Он создан на основе ГОСТов и нормативных документов работающих в системе Энгергосетьпроекта, Тяжпромэлектропроекта и т.д. Здесь показано четыре принятых варианта размещения блоков соединителей на 2, 3 или 5 рядов (колонок). Так же в поперечных строчках отсутствуют необходимые атрибуты. С которыми, как Вы уже знаете у меня не складывается. Кроме того графика моего блокам демонстрирует и свойства основных типов клемм, которые принято отображать на монтажных схемах в электротехнике: -измерительная, проходная, соединительная, транзитная а также многоярусная. Тот вариант который приводится в примерах к АЕ больше похож на сборочный чертеж;
- файл «Etal_EA1. dxf» содержит dxf- код блока одиночного соединителя на 7 клемм. Он построен командой “АЕСОNNECTOR” и ему присвоено имя в системе “HCN1_1PJ_44C”. Прошу обратить внимание на dxf- коды примитивов “BLOCK” и “INSERT”, остальные примитивы я еще полностью не сравнивал. Также учтите, что различия в значениях для таких dxf- групп как 5, 66, 100 и 330 я во внимание не принимал, меня больше интересует порядок изменения (появления) других групп.
Дополнительно прилагается файл «Скрин. dос», показано дополнительное меню правой кнопки, которое я пытаюсь получить для своего варианта блока.
Спасибо за описание API для AE, но я не нашел там информации по командам АЕ, в т.ч. и “АЕСОNNECTOR”.
С моей точки зрения оптимальным является такой вариант:
- команда “АЕСОNNECTOR” очевидно реализована как набор обращений вида:
- вызов “АЕСОNNECTOR” :== вызов (А): <запуск модуля настройки>
== вызов (В): <запуск меню “АЕСОNNECTOR”>
== вызов (С): <запуск модуля построения графики”>
== вызов (D):<запуск модуля создания атрибутов”>
……………………………………………………………………………………………….
== вызов (n):<запуск модуля вставки созданного блока”>
Вот для меня более актуальной является информация о порядке обращения в точки (С) и (n)
С уважением Олег
Вложения выслал по адресу: <support@adn-cis.org> - не пропускал сервер
-
Но поскольку Вы упрекаете меня в невнимательном отношении высылаю Вам материалы, необходимые для понимания сути проблемы.
Материалы не получил. Более того судя по описанию того, что Вы выслали - это не то, что я просил. Вместо dxf-файлов сделайте dwg-файлы. pdf-файл меня совсем не интересует - я не буду сам делать из него блок. Поместите dwg-фалы в zip-архив. Предельный размер - 5Мб. Кстати, в dxf-файл попадает не вся информация, которая содержится в dwg-файле.
P.S.: Обратите внимание, что я не электрик, не проектировщик. Большинство озвученных терминов мне ничего не говорят и вникать в их суть мне не интересно. Я пытаюсь найти разницу между блоком AE и вашим блоком, т.е. найти что нужно добавить к вашему блоку, чтобы его понимал AE. Возможно эта информация содержится в расширенных данных (Xdata), возможно в ExtDictionary (в этом случае группы 330...360 играют решающую роль). Если же это не блоки, а Custom Entity, то тут я ничем помочь не смогу.
Спасибо за описание API для AE, но я не нашел там информации по командам АЕ, в т.ч. и “АЕСОNNECTOR”.
А причем здесь команды? API - это интерфейс программирования и к командам он отношения не имеет. Возможно в нём есть то, что поможет самому создать необходимую команду/функцию.
-
В конечном итоге письмо получил. Посмотрел блок и обнаружил, что информация содержится в расширенных данных вставки блока:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F68556%2F7842324.4%2F0_112a92_70f2ed79_orig.png&hash=50adae3a2c46f1268bd3f2cd3f53e1ed)
и расширенных данных некотрых атрибутов:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F71764%2F7842324.5%2F0_112a93_b7af8904_orig.png&hash=22daac58d113104f17a3f50f7092e7a4)
-
Опять все выслал по адресу: <support@adn-cis.org> - не пропускал сервер
-
Опять все выслал по адресу: <support@adn-cis.org> - не пропускал сервер
В этот раз получил письмо без аттача совсем (размер письма 4.8Кб).
Собственно говоря можно уже ничего не слать. В своём блоке нужно добавить XDATA по образцу и подобию, как в блоке AE и проверять результаты. То что я мог, не работая с AE - это найти где хранится информация - я сделал. Дальше Вам придётся самостоятельно приводить свой блок к нужному состоянию.
Так как это всё не документировано, то есть шанс, что в следующей версии AE это работать не будет.
Увы, но больше мне добавить нечего.
-
Cпасибо
-
Кстати, а функция (c:ace_ins_parametric_connector xy scl param_lst) ничем не поможет?
-
Подскажите как найти ее описание???
-
Подскажите как найти ее описание???
Не понял. Кто у нас работает с AE? Для кого я писал:
Всё что есть в Electrical API описано в документации (раздел API Help)
В инсталляции AutoCAD Electrical 2014 (думаю что в остальных версиях тоже) есть файл Help\ACE_API_11_0.chm
В нём я нашёл описание этой функции:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F9508%2F7842324.5%2F0_112ac5_41157c8e_orig.png&hash=69783c73db899a0efdeeeb46e68d2a2c)
-
у меня студенческая версия АЕ2015, в ней этот файл отсутствует - результат поиска по системному диску
-
В ACADE 2013 этот файл называется ACE_API_10_0.chm, следовательно в ACADE 2015 он называется ACE_API_12_0.chm
Поищи по контексту ACE_API*.chm Я этот файл нашёл в инсталляции ACADE, а не в установленном ACADE, так как сам ACADE не устанавливал - он мне не нужен. Если не найдёшь, то скачай http://otwdownloads.autodesk.com/SWDLDNET3/2014/ACAD_E/DLM/AutoCAD_Electrical_2014_Russian_Win_64bit_dlm.sfx.exe
Запусти его на выполнение и когда появится вот это окно нажми <Выход>:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F6112%2F7842324.5%2F0_112ade_9cb9a25a_orig.png&hash=7306a614f8eba88c2b9ddff30846d0d1)
Если всё пройдёт нормально, то ACE_API_11_0.chm будет здесь:
"C:\Autodesk\AutoCAD_Electrical_2014_Russian_Win_64bit_dlm\x64\ru-RU\acade\Acad\Program Files\Root\Acade\Help\ru-RU\Help\ACE_API_11_0.chm"
-
Ну и чтобы уж совсем было просто прикладываю файл ACE_API_12_0.chm из ACADE 2015:
http://adn-cis.org/assets/gallery/AutoCAD/ACE_API_12_0.chm
-
Двойное спасибо! В этом варианте все есть. Но к сожалению, у студента "неожиданно" подкатила сессия, а студенческая лицензия только на один комп. Так, что эксперименты на время прекращаются.