Здравствуйте. Вопрос к разработчикам.
Имеется лисп с командой.
Требуется выполнять команду при открытии DWG файла (не просто загружать лисп, а выполнять загруженную команду).
Как возможно это реализовать?
Насколько я понимаю, штатных возможностей для этого нет.
Во вложении лисп. Команда “проверить_элементы_вариации”. Лисп проверяет наличие элементов вариации, если находит выводит соответствующее сообщение.
проверить элементы вариации.zip (420 байтов)
В нанокаде нет штатной возможности загрузки лиспа с каждым файлом. Только при загрузке приложения.
Если необходимо сделать аналог автозагрузки с каждым файлом, то реализовать это можно только с помощью ректора менеджера документов. Весьма скользкий, но единственный путь.
В нанокаде нет штатной возможности загрузки лиспа с каждым файлом. Только при загрузке приложения.
Если необходимо сделать аналог автозагрузки с каждым файлом, то реализовать это можно только с помощью ректора менеджера документов. Весьма скользкий, но единственный путь.
Лисп не надо загружать при открытии каждого файла (загружается автоматически при загрузке Нанокада через appload). Нужно выполнять команду из этого лиспа при открытии каждого файла.
Как полумера, устроит выполнение только при открытии первого файла (вместе с загрузкой приложения). Или во время работы запускался бы через интервал времени. Или при закрытии файла.
Если лисп переписать в NRX приложение, это поможет?
Лисп не надо загружать при открытии каждого файла (загружается автоматически при загрузке Нанокада через appload). Нужно выполнять команду из этого лиспа при открытии каждого файла.
Как полумера, устроит выполнение только при открытии первого файла (вместе с загрузкой приложения). Или во время работы запускался бы через интервал времени. Или при закрытии файла.
Если лисп переписать в NRX приложение, это поможет?
Если команду нужно запустить во время загрузки, то в конце загружаемого файла нужно вставить строку с вызовом функции.
В вашем случае предложил бы саму основную функции оформить некомандной (без c:). Например , как то так
По поводу NRX не подскажу. Но предполагаю, что там тоже можно установить обработчик события создания документа. И это будет аналог той самой автозагрузки (с единственным вызовом функции check_vary из примера) при каждом документе, который можно на лиспе реализовать с помощью реакторов.
UPD.Кстати, функция check_vary прямо может быть указано в обработчике события реактора менеджера документов :vlr-documentBecameCurrent. При каждой активации чертежа будет вызываться алерт
Если команду нужно запустить во время загрузки, то в конце загружаемого файла нужно вставить строку с вызовом функции.
В вашем случае предложил бы саму основную функции оформить некомандной (без c:). Например , как то так
По поводу NRX не подскажу. Но предполагаю, что там тоже можно установить обработчик события создания документа. И это будет аналог той самой автозагрузки (с единственным вызовом функции check_vary из примера) при каждом документе, который можно на лиспе реализовать с помощью реакторов.
UPD.Кстати, функция check_vary прямо может быть указано в обработчике события реактора менеджера документов :vlr-documentBecameCurrent. При каждой активации чертежа будет вызываться алерт
Для первого открытого файла это работает.
Спасибо!
https://forum.nanocad.ru/discussion/comment/2856#Comment_2856
Если команду нужно запустить во время загрузки, то в конце загружаемого файла нужно вставить строку с вызовом функции.
В вашем случае предложил бы саму основную функции оформить некомандной (без c:). Например , как то так

По поводу NRX не подскажу. Но предполагаю, что там тоже можно установить обработчик события создания документа. И это будет аналог той самой автозагрузки (с единственным вызовом функции check_vary из примера) при каждом документе, который можно на лиспе реализовать с помощью реакторов.
UPD.Кстати, функция check_vary прямо может быть указано в обработчике события реактора менеджера документов :vlr-documentBecameCurrent. При каждой активации чертежа будет вызываться алерт
А можно подробнее?
Где/как указать в обработчике события реактора менеджера документов :vlr-documentBecameCurrent свою функцию? Или где почитать об этом?
В справке АС был целый тематический цикл, посвященный реакторам. Тема довольно сложная. Особенно из-за того, в нанокаде (как оказалось) не все команды реакторов работают корректно. Приходится выявлять методом тыка работающие, работающие при определенных условиях, работающие всегда неправильно и не работатющие вовсе инструменты.
Гдето на форуме выкладывал реактор, в котором в заголовок нанокада выводится полное наименование текущего чертежа. Там как раз реактор на активацию документа. Вот именно в ту функцию, которая выводит заголовок, и нужно вставить ваши изыскания. Сейчас этого лиспа под рукой нет. Поищите по сайту или телеге что-то типа “автозапуск”. Или коллеги с сайта помогут- дадут наводку.
Но еще раз повторюсь: тема с реакторами очень скользкая и неоднозначная. Простым копипастом не обойтись
В справке АС был целый тематический цикл, посвященный реакторам. Тема довольно сложная. Особенно из-за того, в нанокаде (как оказалось) не все команды реакторов работают корректно. Приходится выявлять методом тыка работающие, работающие при определенных условиях, работающие всегда неправильно и не работатющие вовсе инструменты.
Гдето на форуме выкладывал реактор, в котором в заголовок нанокада выводится полное наименование текущего чертежа. Там как раз реактор на активацию документа. Вот именно в ту функцию, которая выводит заголовок, и нужно вставить ваши изыскания. Сейчас этого лиспа под рукой нет. Поищите по сайту или телеге что-то типа “автозапуск”. Или коллеги с сайта помогут- дадут наводку.
Но еще раз повторюсь: тема с реакторами очень скользкая и неоднозначная. Простым копипастом не обойтись
этот?
autocaption.zip (592 байта)
если ты будешь подписывать свой код как то мне будет немножечко легче вести летопись КЛАССИКОВ

да, этот)
Я подумаю насчет @подписи
этот?
если ты будешь подписывать свой код как то мне будет немножечко легче вести летопись КЛАССИКОВ

Адаптировал. Почти получилось:
;Автоматическая проверка элементов вариации
;при переключении вкладки чертежа
(vl-load-com)
;Тело реактора
(defun check_vary2 (reactor-object parameter-list / vdict dict)
(setq vdict (vla-GetExtensionDictionary
(vla-get-modelspace
(vla-get-ActiveDocument
(vlax-get-acad-object)))))
(setq dict (vlax-vla-object->ename vdict))
(if (dictsearch dict "ACAD_ENHANCEDBLOCK")
(progn
(alert "Файл содержит элементы вариации!")
))
(prin1)
)
;натравливаем ректор на событие
(if (not CaptionReactor)
(setq CaptionReactor (vlr-docmanager-reactor nil
'(
(:vlr-documentBecameCurrent . check_vary2)
)
)))
(prin1)
-
Но после второго вывода сообщения “Файл содержит элементы вариации!” появляется диалог расположения окон, который появляться не должен:

-
Видимо что-то нужно очищать или сбрасывать после выполнения функции check_vary2.
-
Первый открытый файл не проверяется реактором. Проверяется другим, выше указанным кодом. То есть нужно иметь два разных лиспа.
Можно ли их объединить, добавив какой-либо реактор открытия первого файла-чертежа?
Помогите, пожалуйста, доработать.