| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
ACAD-2002. Глюк начальной загрузки ЛИСП?
г. Норильск
Регистрация: 15.08.2005
Сообщений: 362
|
||
Просмотров: 10365
|
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Вообще то ACAD.LSP и должен загружатся 1 раз за сеанс работы, а не в каждый чертёж. В каждый чертёж он загружается только если системная переменная ACADLSPASDOC=1. Может где то тут заморочка?
А если не секрет скажи зачем делаешь SDI=1? Я вот как то никак немогу найти применение однодокументному режиму. Прости интересно как это можно использовать? |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 362
|
Привет!
> В каждый чертёж он загружается только если системная переменная > ACADLSPASDOC=1. Да не, все комбинации с LISPINIT и ACADLSPASDOC я перепробовал еще до того, как послать свое сообщение. Естественно, вслед за acad.lsp игнорируется и acaddoc.lsp Едитственное с чем не игрался, так это с файлом acad2002.lsp. > А если не секрет скажи зачем делаешь SDI=1? Я пишу программу, которой будет пользоваться целый отдел. В отделе есть любители "однооконного" режима. Объясняют свою привязанность они просто: если открыть несколько копий АКАД и в каждый загрузить по чертежу, то переключаться между ними, щелкая по появившимся "кнопкам" на панели задач Windows удобнее, чем каждый раз лазить в меню "Окно" одной-единственной копии АКАД и переключать чертежи там. Ну а мне приходится учитывать все пристрастия пользователей...
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 362
|
Привет!
> В каждый чертёж он загружается только если системная переменная > ACADLSPASDOC=1. Да не, все комбинации с LISPINIT и ACADLSPASDOC я перепробовал еще до того, как послать свое сообщение. Естественно, вслед за acad.lsp игнорируется и acaddoc.lsp Едитственное с чем не игрался, так это с файлом acad2002.lsp. > А если не секрет скажи зачем делаешь SDI=1? Я пишу программу, которой будет пользоваться целый отдел. В отделе есть любители "однооконного" режима. Объясняют свою привязанность они просто: если открыть несколько копий АКАД и в каждый загрузить по чертежу, то переключаться между ними, щелкая по появившимся "кнопкам" на панели задач Windows удобнее, чем каждый раз лазить в меню "Окно" одной-единственной копии АКАД и переключать чертежи там. Ну а мне приходится учитывать все пристрастия пользователей...
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
|
|||
![]() |
|
||||
Цитата:
Во-первых, неизбежны конфликты при запуске нескольких копий одной и той же версии AutoCAD - они будут использовать одни и те же ветки в регистратуре. Это может быть не заметно до поры, но когда аукнется - мало не покажется. Во-вторых, при такой системе в памяти будет висеть сразу несколько ядер AutoCAD. У них что на PC память безразмерная? :-) |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,557
![]() |
Цитата:
зы. Я тоже не люблю реестр и всяко разно его обзываю ![]() |
|||
![]() |
|
||||
Цитата:
|
||||
![]() |
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
Открывать много одиночных сессий автокада довольно геморойно уж извините за прямоту. А лезть в ОКНО для перехода из одного чертежа в другой тоже не сахар, попробуйте друзья прижать большим пальцем левой рулки CTRL а уцазательным постукивать по TAB, и посмотрите как все просто. :-)
|
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 362
|
Всем привет!
Памяти на тех машинах по 512Мб. CTRL-TAB это, конечно, хорошо... Но это "косвенный" метод обхода глюка. Хотелось бы услышать что-то вроде: а) Да, это известная проблема, лечится так-то... б) Да, это известная проблема, она устранена в версии X.Y... в) Да ничего у нас не глючит - это твой АКАД кривой!
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 362
|
Всем привет!
Очередная "информация к размышлению". Увы, это все-таки глюк АКАД-а. Делаем просто - в начало файла acaddoc.lsp пишем: (setq indsob"DRM-S") (princ indsob)(princ " \n") далее идут всякие проверки и вызовы (load). В одном из этих вызываемых файлов есть (S:STARTUP), содержащая лишь строку (princ "\nПривет-start!"). Устанавливаем SDI=1, входим в любой файл. Все О'К. Начинаем "щелкать" по "запомненным" файлам. 2-3 щелчка (иногда и дольше - систему пока не выяснил) все нормально. Но вот на одном из щелчков получаем знакомое сообщение: Команда: Неизвестная команда "S::STARTUP". Для вызова справки нажмите F1. Ага! С этого момента начинаем "щелкать" исключительно по первому из "запомненных" файлов, т.е. фактически "перезагружаем" текущий рисунок. Сделаем это 5-6 раз. А теперь смотрим лог: =========================================================== Команда: Открывается файл формата AutoCAD 2000. Подстановка [simplex.shx] вместо [ru-s.shx]. Выполняется регенерация модели. Команда: Команда: Неизвестная команда "S::STARTUP". Для вызова справки нажмите F1. Команда: Открывается файл формата AutoCAD 2000. Подстановка [simplex.shx] вместо [ru-s.shx]. Выполняется регенерация модели. Команда: Команда: Открывается файл формата AutoCAD 2000. Подстановка [simplex.shx] вместо [ru-s.shx]. Выполняется регенерация модели. Команда: Команда: Открывается файл формата AutoCAD 2000. Подстановка [simplex.shx] вместо [ru-s.shx]. Выполняется регенерация модели. Команда: Команда: Открывается файл формата AutoCAD 2000. Подстановка [simplex.shx] вместо [ru-s.shx]. Выполняется регенерация модели. Команда: Команда: Открывается файл формата AutoCAD 2000. Подстановка [simplex.shx] вместо [ru-s.shx]. Выполняется регенерация модели. Команда: Команда: (princ S::startup) nilnil Команда: DRM-S Загружается Super-Dream... Утилиты меню AutoCAD загружены. Привет-start! Привет-start! Привет-start! Привет-start! Привет-start! Команда: =========================================================== Обратите внимание на реакцию системы на невинную команду (princ S::startup) Т.е. АКАД добросовестно загружал каждый раз файлы, но (s::startup) не выполнял, а "хранил в заначке". И радостно выполнил ее 5 раз. Ваши комментарии?
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
> ===AAA===
Я честно говоря вообще (s::startup) вообще никогда не использую, да и ACADDOC.LSP тоже теперь не использую. Обычно пишу ЛИСП-файл меню с расширением *.mnl. Там сначала (load ......) а, затем исполняется несколько функций (..........), в основном это проверки параметров сохранённых в словарях и установка некоторых глобальных переменных. Вроде такое положение дел пока устраивает, хотя у тебя могут быть какие нибудь тонкости. В *.mnl-файлах есть ещё и большой плюс. У продвинутых пользователей ACADDOC.LSP часто что нибудь содержит и при переносе на другие компы это вызывает сложности. А *.mnl-файлы привязаны к соответствующему меню лезть туда обычно никому не надо. Загрузил один раз меню и дальше всё работает. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,483
|
Глюк этот связан именно с s::startup (imho) - процедура пытается выполниться, когда еще не весь кад "активизирован", т.е. не все библиотеки подгружены.
Выход: попробовать процедуру выполнять в отдельном файле, а в acad.lsp в самом конце просто прописать (load "myfile.lsp"). В файле myfile в конце напрямую вызвать команду. Нечто вида: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Вот у меня появилась идея насчёт твоего глюка. В принципе (s::startup) нет надобности использовать если в ней не содежится (COMMAND которые не могут работать до полной инициализации чертежа. А может у тебя есть (COMMAND до (s::startup) :?: и в этом вся фигня?
|
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 362
|
Привет!
Эх, если бы все было так просто.... То kpblc Да так и делается. Вот цепочка вызовов (load). acaddoc.lsp -> setup.a2k -> start.a2k и вот в этом-то последнем и определена (s::startup) То Fantomas Нет, "командов" нет ни "до" ни "после" s::startup. Они же там просто не работают :-) Собственно говоря, и сама S::startup написана ради "коммандов". Это определения (при необходимости, переопределения) текстовых стилей, _purge, показ слайдов с "новостями" и т.п. Вся эта "богадельня" прекрсно работала в версиях 10,12,14 да и в 2002 при SDI=0 тоже работает нормально. Глюк проявляется только при выборе файлов из "ранее запомненных" при SDI=1
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Цитата:
![]() А от SDI=1 надо по моему уходить. А может для "непокорных" написать функцию с реактором на изменение SDI? Он только SDI=1, а она ему бац SDI=0 и слайд страшный-страшный с подвешенным за одно место автокадчиком ![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Алексей, многие твои проблем в том, что ты упорно держишься за устаревшие технологии. SDI тому пример. Сделать удобный переход между документами можно разными способами. Есть, например, бесплатная утилита
http://www.activedwg.com/Downloads/CxDocBar16.zip где-то рядом должен валяться и CxDocBar15.zip которая делает у окон "закладки", по которым удобно переключаться. Что касается S::STARUP, то от нее надо избавляться. Это "наследие мрачных времен". Как ее запускает Автокад, никто точно не знает. А если нужна собственная обязательная функция, выполняемая каждый раз, напиши ее сам и вызывай на выполнение тогда, когда нужно. Можно и в acaddoc.lsp прописать, и в mnl. Хоть куда. Но ты будешь точно знать, что и почему происходит. Заодно разыщи и прибей все S::STARTUP, где бы они не встретились. Причины сбоев могут быть в том, что сейчас LISP-функции не являются более списками, которые можно было на лету модифицировать. А S::STARTUP как раз была, возможно единственной такой функцией. Все другие одноименные функции переопределяют друг друга по мере объявлений. А S::STARTUP, скорее всего, внутри Автокада пытается себя модернизировать, путем добавления нового кода. По крайней мере так было задумано. Таинственный значок, наверное, и есть "трупик" предыдущей STARTUP. Он же теперь двоичный код, а не список, как было в R14. Чтобы функция могла модифицироваться, ее надо объявлять через defun-q. То есть (defun-q S::STARTUP ... А "свою" STARTUP добавлять так (см. справку) Цитата:
Код:
|
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 362
|
Привет, Сергей!
Рад видеть, ты мое мыло получил? >Что касается S::STARUP, то от нее надо избавляться. Это "наследие мрачных времен". Да еще каких мрачных :-) Однако, как я от нее избавлюсь, мне же при старте (command'ы) выполнять надо... (defun-q s::startup) проблему не решила. Устаревшие технологии, да - признаю. Но увы, пока у меня цель "по-быстрому", пока есть время, переписать старые наработки... Я тут еще один глючок нарыл при работе со скриптами - глаза на лоб! Но пока не буду его озвучивать, нужно покопать поглубже.
__________________
Счастливо, Алексей! |
|||
![]() |