|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
08.12.2008, 19:53 | #1 | |
Файл acaddoc.lsp : Процедура загрузки функций.
Руководитель фирмы
Москва
Регистрация: 28.03.2007
Сообщений: 1,831
|
||
Просмотров: 6270
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
А посмотреть http://www.caduser.ru/cgi-bin/f1/board.cgi?t=19612AN ?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Ну посмотрел, и?
Приведу пример. Вот у вас есть, кпримеру несколько файлов dwg, лежащих в одной папке. У меня, кпримеру - библиотека блоков. Файлы Блок1.dwg Блок2.dwg БлокN.dwg Мне надо, чтобы при открытии файла Блок1.dwg в него подгрузились функции из файла Блок1.lsp, но чтобы они не подгружались при открытии других файлов. В то же время, для файла БЛОК2.dwg есть свой файл с функциями Блок2.lsp и т.д. Кладем в эту же папку одноименные файлы с расширением *.lsp Блок1.lsp Блок2.lsp При открытии файла, если в этой же папке есть с таким же именем lsp он загрузится в этот рисунок. К другим файлам dwg и lsp это не имеет никакого отношения. Кроме функций, в файлах *.lsp еще и процедуры. Ни в коем случае их нельзя запускать в чужих файлах! При этом в Автокаде не нужно прописывать пути к каждой папке, где лежат dwg файлы. Достаточно одноименности. Я вообще удивляюсь, почему это не встроено в Автокад изначально. Последний раз редактировалось Кулик Алексей aka kpblc, 09.12.2008 в 18:05. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Profan, абсолютно согласен. На 1000%.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
"Слабо работаете" - достаточно сильное заявление. У меня командные реакторы в полный рост используются. На DoubleClick-реакторе я качественно обжегся. Объектные реакторы мне не понадобились. Реакторы изменения базы чертежа трогать не рискнул. Реактор на системную переменную начал было использовать, да потом как-то плюнул - без этого обошелся.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
И ты хочешь сказать, что функции действия и обработки данных в одном чертеже такие же как и в другом?
Ладно. Зайдем с другого боку. Зачем я бился над реактором объекта - затем, чтобы сделать такой блок, в котором есть свойство "Блок настроен"\"Настроить". Lookup-ом сделанное. Всего два значения. Когда переключаешь любые параметры блока, то срабатывает реактор. Но функция действия этого объекта смотрит на это свойство и если его значение стало "Настроить", запускается функция редактирования этого блока. Точнее, выпадает окно, в котором пользователь устанавливает нужные значения и по нажатии кнопки "Настроить" данные прописываются в блок. Напомню, что все операции с блоком происходят при выключенном реакторе. Получается, что сколько блоков, столько и функций действия. Они и функции обработки блоков уникальны. Для одного блока - одно, для другого - другое. Я такую прогу пишу для библиотеки блоков по заказу. Поскольку штатными средствами всего, что хочет заказчик в блок не впихнуть никак. А если выбор параметров вынести за пределы динамизма блока и блок реформировать программно - другой базар. Вот и родилась идея связанных одним именем файла dwg и lsp. Не надо тебе грузить в данный проект функции, или процедуры при запуске выполнять, только для этого чертежа предназначенные - не клади файл *.lsp с таким же именем в одну папку с dwg файлом. Никому никто не мешает. Подумаешь процедуру добавил. Проверяет есть такой файл в папке или нет. Что вы так странно к этому отнеслись? - не понимаю. Вполне очевидная вещь. Практически все программы такой фишкой пользуются. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Все это можно сделать совсем по-другому, не прибегая к достаточно опасным действиям типа применения объектных реакторов.
Моя методика, может, более трудоемка по количеству проработки, и требует кое-какой мозговой деятельности, но работать будет более устойчиво, как мне кажется. И программа будет универсальна, и таскать безумное количество дополнительных lsp не понадобится. Суть примерно такова: при вызове конт.меню на вхождении такого "супер-блока" в это меню добавляется строка вызова формы с данными. Отфильтровать "супер-блоки" от "нормальных" не проблема (это я тебе гарантирую, поскольку такими вещами в свое время я занимался). Меню можно модифицировать как глобально, так и динамически (во втором случае будет, скорее всего, не обойтись без реактора vlr-mouse-reactor с действием :vlr-beginRightClick). И вообще, у меня полное ощущение, что ты пытаешься сделать нечто типа MEP, но средствами только лиспа. Одумайся и посмотри вертикальные решения! --- Добавлено: у тебя в коде идет "привязка" к WindowTitle. Так вот, при несохраненном файле все хорошо: WindowTitle вернет Drawing1.dwg (или Рисунок1.dwg, или Чертеж1.dwg) независимо ни от чего. Но! Устанавливаем флажок _.options -> Open and Save -> Display full path in tile и Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 12.12.2008 в 00:13. |
|||
|
||||
Во! Вот за это, спасибо. Я с самого начала колебался. Думал, раз у Drawing1.dwg путь все равно есть, только из другого свойства берется. На МОИ ДОКУМЕНТЫ указывает, думаю, наверное путь надо отдельно от имени брать, а в WindowTitle всегда пытаться выделить имя из общего значения. Потом склеивать и дальше двигаться. Так и для Drawing1.dwg можно тоже процедуры выполнять. Но что-то мне влом было.
Обязательно исправлю. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Ну как же ты любишь все усложнять!
Код:
--- Добавлено: код написан в перерывах между беготней за ребенком, мытьем посуды и помощи жене. Поэтому на красивость не претендует
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 13.12.2008 в 00:12. |
|||
|
||||
Первое, с чем я не согласен, это с оболочкой - функцией. Нужна не функция, а процедура проверки наличия одноименного файла.
Эта процедура выполняется один раз, при открытии файла рисунка и незачем ей висеть в памяти. "fas" "vlx" я намеренно не вставлял, поскольку это закрытые форматы и могут содержать все, что угодно. Напомню, из Автокада есть доступ к реестуру! Такие форматы пусть пользователь ручками загружает, на свой страх и риск. Из-за того, что ты это функцией сделал, применение ее равносильно загрузке файла вручную. Зачем? Вместо того, чтобы тупо поискать в известной директории конкретный файл lsp ты пытаешся определять загружен\не загружен,зачем? Два файла, с одинаковым именем, но с разными расширениями лежат рядом. Что это значит? Будь добр, опиши словами концепцию. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Ага, а то, что этот код можно засунуть в автозагрузку (хоть руками, хоть программно) - не рассматривается? А то, что исключить / добавить какие-то расширения, тоже выкидывается?
Концепция, кстати, твоя - загружать программный код из файла, имеющего такое же расширение, что и открываемый. Я ж тебе показал гарантированно работающий код - а ты еще и недоволен.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
файл в нанокаде и в автокаде, путаница | E.D. | AutoCAD | 2 | 24.10.2008 09:56 |
Выполнение acaddoc.lsp - частичное отображение опций команды Автокада | Makswell | LISP | 18 | 26.03.2008 18:35 |
ACAD-2002. Глюк начальной загрузки ЛИСП? | ===AAA=== | LISP | 27 | 31.08.2005 07:58 |
AutoCAD ищет старый файл загрузки | Cnapmak | AutoCAD | 2 | 27.07.2005 19:13 |