Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы

Автор Тема: Как вставить параметрический блок с атрибутами, вызвав команду АЕ из программы  (Прочитано 17642 раз)

0 Пользователей и 4 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн OlegАвтор темы

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

Желательно применение механизма аналогичного реализованному в инструменте АЕ "Построение параметрического соединителя"

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как можно используя средства 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/


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Здравствуйте Александр, спасибо за ответ. Со своей стороны могу сообщить, что употребив выражение: "использование команды Insert не позволяет создать блок определяемый как блок-АЕ", я имел в виду, что  команда Insert не позволяет довести до конца весь процесс создания блока. Т.е  сам блок создает ЛИСП-функция пользователя (используя примитивы "BLOCK" и "ATTDEF" и т.д.), а  завершает его == выполняет вставку - команда Insert.
Просто применить генератор слоев не получиться, по одной причине. Как я выяснил, буквально сегодня, DXF-коды АЕ-блоков после вставки (средствами АЕ) существенно отличаются от их описаний. И это не только слои. Более того, после вставки появляются дополнительные DXF-группы. 
     

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Прекрасно. Значит нужно найти в чём отличие и выполнить "приведение" своих блоков к блокам AE. Надеюсь, что возможностей lisp для этого будет достаточно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Вы правы Александр, возможностей Лиспа достаточно. Но в данном случае главное не среда разработки, а те функциональные правила которые необходимо реализовать, а они к сожалению закрыты.
В принципе открывая тему я  и рассчитывал на помощь коллег которым известны открытые (но не задокументированные для общего доступа) точки обращения к функциям АЕ из программ пользователя.
Тем более что переход в другую среду разработки, например ObjectARX, потребует и значительного времени. Как и сам процесс разработки. Достаточно взглянуть на код функции на Лиспе и на ObjectARX (только набрать на клавиатуре одни многометровые идентификаторы чего стоит).   Хотя вполне возможно я ошибаюсь.
Поэтому буду Вам признателен если Вы сообщите насколько реально  применение ObjectARX
сокращает процесс разработки, с учетом времени освоения самого процесса.
В свое время я пытался освоить ООП, но пришел к выводу - на данном этапе это путь к чрезмерно-жесткой детерминизации разработки софта и полного разделения программеров на пахарей-негров и "умных" манагеров. В итоге превращения софтверных компаний в некую разновидность софтверных КБ, где пахари ваяют свои куски софта, а общей ситуацией владеют (а значит и финансами) руководство.
Но возможно я и не прав.
 Благодарю за уделенное внимание.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
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
О чём мы ведём беседу? ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Здравствуйте Александр, прошу извинить за предыдущие, не совсем корректные ответы. Просто мне было неудобно грузить Вас чуждой тематикой. Ведь как я понял из Вашего же ответа, Вы с АЕ не работаете, а к тому же и сама фирма АвтоДЕСК не особо продвигает этот продукт.
Но поскольку  Вы упрекаете меня в невнимательном  отношении  высылаю Вам материалы, необходимые для понимания сути проблемы. К письму приложены  два 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> - не пропускал сервер

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но поскольку  Вы упрекаете меня в невнимательном  отношении  высылаю Вам материалы, необходимые для понимания сути проблемы.
Материалы не получил. Более того судя по описанию того, что Вы выслали - это не то, что я просил. Вместо dxf-файлов сделайте dwg-файлы. pdf-файл меня совсем не интересует - я не буду сам делать из него блок. Поместите dwg-фалы в zip-архив. Предельный размер - 5Мб. Кстати, в dxf-файл попадает не вся информация, которая содержится в dwg-файле.
P.S.: Обратите внимание, что я не электрик, не проектировщик. Большинство озвученных терминов мне ничего не говорят и вникать в их суть мне не интересно. Я пытаюсь найти разницу между блоком AE и вашим блоком, т.е. найти что нужно добавить к вашему блоку, чтобы его понимал AE. Возможно эта информация содержится в расширенных данных (Xdata), возможно в ExtDictionary (в этом случае группы 330...360 играют решающую роль). Если же это не блоки, а Custom Entity, то тут я ничем помочь не смогу.

Спасибо за описание API для  AE, но я не нашел там информации по командам АЕ, в т.ч. и “АЕСОNNECTOR”.
А причем здесь команды? API - это интерфейс программирования и к командам он отношения не имеет. Возможно в нём есть то, что поможет самому создать необходимую команду/функцию.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В конечном итоге письмо получил. Посмотрел блок и обнаружил, что информация содержится в расширенных данных вставки блока:

и расширенных данных некотрых атрибутов:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Опять все выслал по адресу:   <support@adn-cis.org> - не пропускал сервер

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Опять все выслал по адресу:   <support@adn-cis.org> - не пропускал сервер
В этот раз получил письмо без аттача совсем (размер письма 4.8Кб).
Собственно говоря можно уже ничего не слать. В своём блоке нужно добавить XDATA по образцу и подобию, как в блоке AE и проверять результаты. То что я мог, не работая с AE - это найти где хранится информация - я сделал. Дальше Вам придётся самостоятельно приводить свой блок к нужному состоянию.
Так как это всё не документировано, то есть шанс, что в следующей версии AE это работать не будет.
Увы, но больше мне добавить  нечего.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, а функция (c:ace_ins_parametric_connector xy scl param_lst) ничем не поможет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн OlegАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Подскажите как найти ее описание???

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Подскажите как найти ее описание???
Не понял. Кто у нас работает с AE? Для кого я писал:
Всё что есть в Electrical API описано в документации (раздел API Help)
В инсталляции AutoCAD Electrical 2014 (думаю что в остальных версиях тоже) есть файл Help\ACE_API_11_0.chm
В нём я нашёл описание этой функции:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение