На днях довольно случайным образом удалось решить проблему загрузки библиотек lisp.
В поисках программы для нумерации блоков забрел на форум caduser.ru и случайно натолкнулся на эту тему.
Особенно полезной для меня оказалась функция Getfile (спасибо Елпанову Евгению). Взяв ее за основу и дополнив функцией START
(defun START (file_name folder / file_list)
(setq file_list (GetFile file_name folder))
(if (foreach file file_list
(load file (strcat "\nФайл " file " не найден"))
) ;_ end of foreach
(princ (strcat "\nБиблиотека " folder " загружена"))
) ;_ end of if
) ;_ end of defun
получаем инструмент для загрузки всех лиспов из заданного каталога. Например так
(START "*.lsp" "Z:\\Настройки\\LISP\\Sourse")
четверг, 1 апреля 2010 г.
Подписаться на:
Комментарии к сообщению (Atom)
А зачем?
ОтветитьУдалитьв смысле зачем? лиспов много, они постоянно добавляются, тяжело следить, чтобы каждый загрузился. Вот за тем и сделал.
ОтветитьУдалитьну если все команды лиспов вы всегда вводите вручную, то да. А если делаете кнопки, то вариант отстойный... Зачем понапрасну захламлять память автокада кучей программ которыми вы, возможно, не воспользуетесь в эту рабочую сессию...
ОтветитьУдалитьДа, может я не использую все программы в одной сессии, но цеплять загрузку функций на конкретную кнопку - не выход. Так можно делать если в команде одна функция, а если их много?
ОтветитьУдалитьВот, например, написал программку для нумерации блоков. Но я ее не с нуля писал, а взял готовые из книжки (САПР на базе..), просто собрал, доработал, усовершенствовал, написал диалог с разбором значений. Но этих функций в итоговую команду вошло 7 или 8 (примерно, точно не помню), а как организовать их загрузку, в один макрос затолкать?
Вот из таких соображений...
Ну возможно я себе не очень представляю ваши потребности... Тогда извинятйе:) А вообще для запуска итоговой команды можно сделать кнопку примерно такого содержания:
ОтветитьУдалить^C^C(if (not C:КОМАНДА) (load "НАЗВАНИЕ_ЛИСПА"));КОМАНДА;
и получаете загрузку лиспа по нажатию на эту кнопку.
Это я знаю.
ОтветитьУдалитьПостараюсь пояснить:
-берем функцию для выбора примитивов (ru-ssentget-by-type, она фильтрует примитивы по типу и др.)
-функция для преобразования набора в список
-проверяем блок на наличие нужного атрибута
-меняем значения атрибутов на заданные
это тело программы, оно может вызываться с разными аргументами, поэтому сохраняем как отдельную функцию.
в основную программу входят функция сохранения окружения (ru-app-begin) и его восстановления по окончании работы программы (ru-app-end), диалог с разбором значений, сюда же входят обработчики ошибок и все такое. Итого, считая вложенные функции, около 10 получается. Причем эти функции типовые, они повторяются и в других программах. Отслеживать же все функции (особенно вложенные) проблематично, поэтому и такое решение. Да и авторы "САПР на базе...", Кулик Алексей советуют программы разделять на небольшие функции.
кстати на YouTube выложил ролик с демонстрацией такой программки, если интересно то посмотреть можно здесь:
ОтветитьУдалитьhttp://www.youtube.com/user/shpolvind?feature=mhw5
Понятно...
ОтветитьУдалитьА программка вкусненькая получилась ;)