Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Oleg от 18-12-2015, 22:11:22

Название: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Oleg от 18-12-2015, 22:11:22
Как можно используя средства AutoCAD Electrical (далее АЕ ) - его команды, вставить в чертеж параметрический блок с  атрибутами, созданный программой пользователя, не используя явно меню АЕ  (т.е. только из командной строки, либо программы пользователя).
 
Цель задачи:
- функция пользователя создает параметрический блок с атрибутами, созданными по правилам АЕ и вставляет этот блок в чертеж обращаясь к функциям АЕ, по алгоритму:
<вызов функции АЕ > |<имя файла созданного блока >|[ключи],
- после выполнения такого вызова все элементы блока (графика и атрибуты) должны быть автоматически вставлены в соответствующие слои чертежа без применения дополнительных функций. В итоге при дальнейшей работе с чертежом АЕ должен определять этот блок как «свой».
С этим блоком и его атрибутами должны работать все функции АЕ;
- используемая функция АЕ не должна иметь собственное меню, либо его вывод должен быть запрещен;
- команда Автокад Insert, не позволяет автоматически задавать слои для размещения элементов блока по правилам АЕ.
 
Суть проблемы:
- с одной стороны АЕ имеет существенно расширенный функционал по сравнению с базовым Автокадом, но с точки зрения конечного пользователя зачастую функции АЕ выглядят как недоработанные и логически неполные;
- формально АЕ позволяет пользователям создавать свои элементы (блоки, графические элементы, функции … ), в том числе и реализовывать свои идеи используя возможности AutoLISP;
- при этом требуется соблюдать определенные правила по наименованию атрибутов и использованию слоев, согласно описанию АЕ;
- но при вставке пользовательских элементов в чертеж возникают проблемы:
            - использование команды Insert не позволяет создать блок определяемый как блок-АЕ;
              - команда AECOMPONENT выводит свое собственное меню, что не совсем удобно.
- в идеальном варианте пользовательская функция должна:
              - вызываться через дополнительную кнопку на панели окна АЕ;
              - запускать собственное меню, для создания своего блока и выполнения связанных с ним функций;
             - созданные в результате элементы должны определяться средствами АЕ как «свои»,
                они должны допускать выполнение всех  дополнительных АЕ-функций правой кнопки мышки.

Желательно применение механизма аналогичного реализованному в инструменте АЕ "Построение параметрического соединителя"
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 19-12-2015, 22:15:17
Как можно используя средства 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/


Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ .....
Отправлено: Oleg от 20-12-2015, 00:11:09
Здравствуйте Александр, спасибо за ответ. Со своей стороны могу сообщить, что употребив выражение: "использование команды Insert не позволяет создать блок определяемый как блок-АЕ", я имел в виду, что  команда Insert не позволяет довести до конца весь процесс создания блока. Т.е  сам блок создает ЛИСП-функция пользователя (используя примитивы "BLOCK" и "ATTDEF" и т.д.), а  завершает его == выполняет вставку - команда Insert.
Просто применить генератор слоев не получиться, по одной причине. Как я выяснил, буквально сегодня, DXF-коды АЕ-блоков после вставки (средствами АЕ) существенно отличаются от их описаний. И это не только слои. Более того, после вставки появляются дополнительные DXF-группы. 
     
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 20-12-2015, 00:26:31
Прекрасно. Значит нужно найти в чём отличие и выполнить "приведение" своих блоков к блокам AE. Надеюсь, что возможностей lisp для этого будет достаточно.
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ
Отправлено: Oleg от 20-12-2015, 03:15:54
Вы правы Александр, возможностей Лиспа достаточно. Но в данном случае главное не среда разработки, а те функциональные правила которые необходимо реализовать, а они к сожалению закрыты.
В принципе открывая тему я  и рассчитывал на помощь коллег которым известны открытые (но не задокументированные для общего доступа) точки обращения к функциям АЕ из программ пользователя.
Тем более что переход в другую среду разработки, например ObjectARX, потребует и значительного времени. Как и сам процесс разработки. Достаточно взглянуть на код функции на Лиспе и на ObjectARX (только набрать на клавиатуре одни многометровые идентификаторы чего стоит).   Хотя вполне возможно я ошибаюсь.
Поэтому буду Вам признателен если Вы сообщите насколько реально  применение ObjectARX
сокращает процесс разработки, с учетом времени освоения самого процесса.
В свое время я пытался освоить ООП, но пришел к выводу - на данном этапе это путь к чрезмерно-жесткой детерминизации разработки софта и полного разделения программеров на пахарей-негров и "умных" манагеров. В итоге превращения софтверных компаний в некую разновидность софтверных КБ, где пахари ваяют свои куски софта, а общей ситуацией владеют (а значит и финансами) руководство.
Но возможно я и не прав.
 Благодарю за уделенное внимание.
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 20-12-2015, 13:37:04
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
О чём мы ведём беседу? ;)
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ
Отправлено: Oleg от 20-12-2015, 16:54:41
Здравствуйте Александр, прошу извинить за предыдущие, не совсем корректные ответы. Просто мне было неудобно грузить Вас чуждой тематикой. Ведь как я понял из Вашего же ответа, Вы с АЕ не работаете, а к тому же и сама фирма АвтоДЕСК не особо продвигает этот продукт.
Но поскольку  Вы упрекаете меня в невнимательном  отношении  высылаю Вам материалы, необходимые для понимания сути проблемы. К письму приложены  два 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> - не пропускал сервер
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 20-12-2015, 17:25:22
Но поскольку  Вы упрекаете меня в невнимательном  отношении  высылаю Вам материалы, необходимые для понимания сути проблемы.
Материалы не получил. Более того судя по описанию того, что Вы выслали - это не то, что я просил. Вместо dxf-файлов сделайте dwg-файлы. pdf-файл меня совсем не интересует - я не буду сам делать из него блок. Поместите dwg-фалы в zip-архив. Предельный размер - 5Мб. Кстати, в dxf-файл попадает не вся информация, которая содержится в dwg-файле.
P.S.: Обратите внимание, что я не электрик, не проектировщик. Большинство озвученных терминов мне ничего не говорят и вникать в их суть мне не интересно. Я пытаюсь найти разницу между блоком AE и вашим блоком, т.е. найти что нужно добавить к вашему блоку, чтобы его понимал AE. Возможно эта информация содержится в расширенных данных (Xdata), возможно в ExtDictionary (в этом случае группы 330...360 играют решающую роль). Если же это не блоки, а Custom Entity, то тут я ничем помочь не смогу.

Спасибо за описание API для  AE, но я не нашел там информации по командам АЕ, в т.ч. и “АЕСОNNECTOR”.
А причем здесь команды? API - это интерфейс программирования и к командам он отношения не имеет. Возможно в нём есть то, что поможет самому создать необходимую команду/функцию.
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 20-12-2015, 17:57:33
В конечном итоге письмо получил. Посмотрел блок и обнаружил, что информация содержится в расширенных данных вставки блока:
(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)
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ
Отправлено: Oleg от 20-12-2015, 18:46:27
Опять все выслал по адресу:   <support@adn-cis.org> - не пропускал сервер
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 20-12-2015, 19:32:32
Опять все выслал по адресу:   <support@adn-cis.org> - не пропускал сервер
В этот раз получил письмо без аттача совсем (размер письма 4.8Кб).
Собственно говоря можно уже ничего не слать. В своём блоке нужно добавить XDATA по образцу и подобию, как в блоке AE и проверять результаты. То что я мог, не работая с AE - это найти где хранится информация - я сделал. Дальше Вам придётся самостоятельно приводить свой блок к нужному состоянию.
Так как это всё не документировано, то есть шанс, что в следующей версии AE это работать не будет.
Увы, но больше мне добавить  нечего.
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ
Отправлено: Oleg от 20-12-2015, 19:36:17
Cпасибо
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 20-12-2015, 22:04:45
Кстати, а функция (c:ace_ins_parametric_connector xy scl param_lst) ничем не поможет?
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ
Отправлено: Oleg от 20-12-2015, 23:12:44
Подскажите как найти ее описание???
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 21-12-2015, 01:01:11
Подскажите как найти ее описание???
Не понял. Кто у нас работает с 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)
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ
Отправлено: Oleg от 21-12-2015, 12:01:27
у меня студенческая версия АЕ2015, в ней этот файл отсутствует - результат поиска по системному диску
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 21-12-2015, 13:00:14
В 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"
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы
Отправлено: Александр Ривилис от 21-12-2015, 13:45:34
Ну и чтобы уж совсем было просто прикладываю файл ACE_API_12_0.chm из ACADE 2015:
http://adn-cis.org/assets/gallery/AutoCAD/ACE_API_12_0.chm
Название: Re: Как вставить параметрический блок с атрибутами, вызвав команду АЕ
Отправлено: Oleg от 21-12-2015, 13:52:23
Двойное спасибо! В этом варианте все есть. Но к сожалению, у студента "неожиданно" подкатила сессия, а студенческая лицензия только на один комп. Так, что эксперименты на время прекращаются.