Как автоматом перезагрузить *.MNU файл?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как автоматом перезагрузить *.MNU файл?

Как автоматом перезагрузить *.MNU файл?

Ответ
Поиск в этой теме
Непрочитано 29.11.2005, 23:38 #1
Как автоматом перезагрузить *.MNU файл?
Владимир М
 
-
 
Ухта
Регистрация: 31.07.2005
Сообщений: 381

Как сделать чтобы при запуске AutoCADа автоматически перезагружался *.mnu файл запуска всех команд. Есть проблема – одна команда не хочет запускаться при каждом запуске AutoCADа. При перезагрузке *.mnu файла выполняется данная команда.
Просмотров: 7943
 
Непрочитано 30.11.2005, 08:37
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Я так полагаю, что надо бы именно код этой команды посмотреть. А так вообще-то (если имя файла меню и имя группы меню известно), то сделать лиспом можно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2005, 09:57
#3
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Если разговор о подгружаемом меню, то я делаю так:
Предварительно выполняется проверка, подгружено ли нужное меню, т.к. при подгрузке уже подгруженного меню Акад огрызается.
Для чего я выполняю принудительную выгрузку - тут долго объяснять, задача специфическая.
Код:
[Выделить все]
...
(if (menugroup "NAME")
   (command "_menuunload" "NAME")
)
(command "_menuload" "NAME.mnu")
...
Похожее можно выдумать и для основного меню - если надо именно это. Из вопроса не очень ясно.
Pilot вне форума  
 
Непрочитано 30.11.2005, 10:41
#4
Геннадий aka PG

Машиностроение, Проектирование
 
Регистрация: 15.09.2003
Москва
Сообщений: 1,113
<phrase 1=


Если дата обновления файла меню позже чем файлы *.mnc, *.mnr
то АКАД сам перекомпилирует меню
Может быть этим сыграть как то.
Лучше работать с файлом *.mns, а не *.mnu
__________________
С уважением,
Геннадий aka PG
Геннадий aka PG вне форума  
 
Автор темы   Непрочитано 30.11.2005, 18:49
#5
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Тут как раз вопрос к вам Геннадий aka PG . Вот как раз проблема с вашим программным обеспечиванием CADHLP программки хорошие, но я не знаю как у вас, но у меня вечно после программы “Параметы объекта” (focall) вечно вылетает калькулятор FoCal (focal). Незнаю как их удружить. Может вы с этим уже разобрались?
Владимир М вне форума  
 
Непрочитано 30.11.2005, 18:58
#6
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


А нельзя ли просто создать PROFILE с нужным меню и если чего не так презагрузиты его родимого т.е. сделать текушим и все. (хоть он и есть уже текуший)
Startrek вне форума  
 
Автор темы   Непрочитано 30.11.2005, 19:02
#7
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Извините, забыл со всеми поздороваться. Всем желаю здравствия и спасибо за ваши попытки помочь мне. Pilot ваше мнение интересно, хотел бы посмотреть ваш листик.
Владимир М вне форума  
 
Автор темы   Непрочитано 30.11.2005, 19:14
#8
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Startrek, извини но мне так надоедает перезагружаться. И это не дело, надо это проблему все равно как-то решать. Чувствую внутренние коды этих программ не дружат между собой хорошо бы их исправить, но они компилированы (focall и focal). И это уже проблема.
Владимир М вне форума  
 
Непрочитано 01.12.2005, 09:17
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


> Владимир М : Честно говоря, очень интересно посмотреть, какая команда не работает. А также узнать все-таки имя файла меню и создаваемую им группу меню. А выполнить "перегрузку" меню можно примерно следующим манером:
Код:
[Выделить все]
;|=============================================================================
*    Функция перегрузки меню указанного имени. Выполняемые действия аналогичны
* ручному выполнению команды _.menuload. В имени файла не должно быть символа "."
*    Параметры вызова:
*	menu-file-name		имя файла меню, без расширения
*	menu-file-group		группа меню. nil->равно имени файла
*	source-file-name	полный путь к имени файла с указанием расширения
=============================================================================|;
(defun menu-reload (menu-file-name	 menu-file-group
		    source-file-name	 /
		    loc:set-file-ext
		    )
  ;; Локальные функции
  (defun loc:set-file-ext (file-name ext)
    ;; Замена расширения файла на указанное. Если расширения не было, устанавливается
    ;; переданное
    (strcat (vl-filename-directory file-name)
	    (vl-filename-base file-name)
	    "."
	    ext
	    ) ;_ end of strcat
    ) ;_ end of defun
  ;; Конец локальных функций
  (if (not menu-file-group)
    (setq menu-file-group menu-file-name)
    ) ;_ end of if
  (if (menugroup menu-file-group)
    (command "_.menuunload" menu-file-group)
    ) ;_ end of if
  (foreach item	'("mnu" "mns" "mnr" "mnc")
    (if	(findfile (loc:set-file-ext menu-file-name item))
      (vl-file-delete (loc:set-file-ext menu-file-name item))
      ) ;_ end of if
    ) ;_ end of foreach
  (if (findfile source-file-name)
    (vl-file-copy
      source-file-name
      (strcat (vl-filename-directory (findfile "acad.mnu"))
	      (loc:set-file-ext menu-file-name ".mnu")
	      ) ;_ end of strcat
      ) ;_ end of vl-file-copy
    ) ;_ end of if
  (vl-cmdf "_.menuload" (loc:set-file-ext menu-file-name ".mnu"))
  (princ "\nМеню успешно загружено (без верхнего меню!)")
  (princ)
  ) ;_ end of defun
Код не проверял, т.к. подобными вещами редко занимаюсь.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.12.2005, 09:33
#10
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Цитата:
Сообщение от Владимир М
...Pilot ваше мнение интересно, хотел бы посмотреть ваш листик.
В смысле лисПик?
Так я, собственно, все уже показал.
Сперва проверяем группу на загруженность и если она загружена - выгружаем.
А потом загружаем снова.

И вообще, свой вопрос поточнее и поподробнее сформулируй плиз. А то может мы о разном толкуем.[/b]
Pilot вне форума  
 
Непрочитано 01.12.2005, 09:40
#11
Геннадий aka PG

Машиностроение, Проектирование
 
Регистрация: 15.09.2003
Москва
Сообщений: 1,113
<phrase 1=


Цитата:
Сообщение от Владимир М
Тут как раз вопрос к вам Геннадий aka PG . Вот как раз проблема с вашим программным обеспечиванием CADHLP программки хорошие, но я не знаю как у вас, но у меня вечно после программы “Параметы объекта” (focall) вечно вылетает калькулятор FoCal (focal). Незнаю как их удружить. Может вы с этим уже разобрались?
Затрудняюсь ответить, только что попробовал и убедился что параметры объекта сами по себе, а калькулятор сам (все использую из сборника, а не отдельными программами)
Строки вызова параметров и калькулятора соотв. такие:
^C^C^P(progn(if (= c:focall nil)(load "focall.vlx")));focall;
^C^C^P(progn(if (= c:focal nil)(load "focal.vlx")));focal;
Программы компилированы, так что вмешательство в коды затруднительно, может написать автору, но с такой проблемой я не встречался ранее (работало все в АКАД 2005, 2004...)
__________________
С уважением,
Геннадий aka PG
Геннадий aka PG вне форума  
 
Автор темы   Непрочитано 01.12.2005, 19:09
#12
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Здравия всем еще раз. Геннадий aka PG я создаю на подобие вашего сборника свой, для конструктора-машиностроителя с вашего сайта и других сборников. Пользуюсь чужими программками и своими не нарушая авторских прав для свободного распространения причем бесплатно. И глупо выкладывать на сайт, продукт с глюками и ошибками.
В данном случае в макросе *.mnu файла команды focal пришлось убрать ^P, что бы работала и не вылетала FoCal, после команды focall. Но стоит закрыть и открыть Автокад, как опять глючит. Перезапускаю *.mnu файл – все нормально. Закрою(выключу) Автокад. При включении опять придется перезагружать *.mnu файл. Хочу разобраться. Сборник пока тестируется.
^C^C(progn(load "focal.vlx"));focal;
^C^C^P(progn(load "focall.vlx"));focall;
Может они у вас обновлены, вышлите их отдельно от вашего программного продукта на мою почту! Буду очень признателен!
Владимир М вне форума  
 
Автор темы   Непрочитано 01.12.2005, 19:12
#13
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Спасибо kpblc за Лиспик, посмотрю, разберусь и сообщу, как обстоят дела.
Да, работы у меня еще много! Буду пытаться их решить! Очень признателен, спасибо!
Владимир М вне форума  
 
Автор темы   Непрочитано 03.12.2005, 13:46
#14
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Еще вопросы к kpblc
Что означают переменные: loc:set-file-ext, file-name, ext?

Цитата:
А также узнать все-таки имя файла меню и создаваемую им группу меню.
Имя файла меню: designer
Создаваемую им группу меню: designer

Нужно ли место этих переменных (menu-file-name, menu-file-group, source-file-name, loc:set-file-ext, file-name, ext) ставить свои имена и пути файлов в кавычки? Или другим образом предать значения переменных menu-file-name, menu-file-group, source-file-name, loc:set-file-ext, file-name, ext.

Код:
[Выделить все]
(strcat (vl-filename-directory (findfile "acad.mnu")) 
         (loc:set-file-ext menu-file-name ".mnu") 
         ) ;_ end of strcat 
      ) ;_ end of vl-file-copy 
    ) ;_ end of if 
  (vl-cmdf "_.menuload" (loc:set-file-ext menu-file-name ".mnu")) 
  (princ "\nМеню успешно загружено (без верхнего меню!)") 
  (princ)
"acad.mnu" остается или переменовывается?
".mnu" остается или переменовывается?
Заранее благодарен!
Владимир М вне форума  
 
Автор темы   Непрочитано 03.12.2005, 21:35
#15
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Второй раз просматриваю код у kpblc, и возник еще вопрос.
Не вместо ли item должно ext ?
Владимир М вне форума  
 
Непрочитано 05.12.2005, 10:02
#16
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


> Владмир М :
loc:set-file-ext - Наименование внутренней (локальной) функции, которая для указанного имени устанавливает указанное расширение. У нее два парамета - file-name (полное имя файла, с путем, для которого и надо устанавливать расширение) и ext - собственно устанавливаемое расширение.
Поскольку функция локальная, вызывать ее из других лиспов дело глухое. А вот изнутри этого если сделать
Код:
[Выделить все]
(loc:set-file-ext "c:\\text.pgp" "mnu")
то она вернет
Код:
В автозагрузку можно повесить код
Код:
[Выделить все]
(menu-reload "designer" "designer" "c:\\cad\\mnu\\designer.mnu")
c:\\cad\\mnu\\designer.mnu не должен быть по путям поддержки када - иначе и он будет стерт.
Остальные меню не трогаются (по крайней мере, не должны).
Строка (findfile "acad.mnu") служит фактически только для гарантированного копирования файла mnu пользовательского меню в папку поддержки када и последующую подгрузку его.
Насчет
Цитата:
Не вместо ли item должно ext ?
не очень понял - это про какой кусок кода? Про этот?
Код:
[Выделить все]
  (foreach item '("mnu" "mns" "mnr" "mnc")
    (if	(findfile (loc:set-file-ext menu-file-name item))
      (vl-file-delete (loc:set-file-ext menu-file-name item))
      ) ;_ end of if
    ) ;_ end of foreach
Так тут последовательно проходится по списку '("mnu" "mns" "mnr" "mnc"), переменной item назначается значение сначала "mnu", потом "mns" и т.д., производится формирование имени файла (допустим, что acad.mnu лежит по пути c:\documents and settings\curuser\application data\autodesk\autocad 2005\R16.1\enu\support\): menu-file-name = "C:\\Documents and Settings\\a.kulik\\Application Data\\Autodesk\\AutoCAD 2005\\R16.1\\enu\\support\\designer"
(loc:set-file-ext menu-file-name item) -> "C:\\Documents and Settings\\a.kulik\\Application Data\\Autodesk\\AutoCAD 2005\\R16.1\\enu\\support\\designer.mnu".
И полученный файл удаляется. Также удаляются файлы с такими же именами, но расширениями mns, mnr, mnc. Потом туда копируется начальный файл (который "c:\\cad\\mnu\\designer.mnu") и производится его загрузка. В момент загрузки кад автоматически создает mns, mnr, mnc-файлы. Правда, это только для 2005. Для 2006-го как будет работать - не знаю. Думаю, что достаточно в (foreach...) вколотить нечто вроде
Код:
[Выделить все]
  (foreach item '("mnu" "mns" "mnr" "mnc" "cui")
    (if   (findfile (loc:set-file-ext menu-file-name item))
      (vl-file-delete (loc:set-file-ext menu-file-name item))
      ) ;_ end of if
    ) ;_ end of foreach
Но не уверен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.12.2005, 02:01
#17
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Ххммм, даже так, стирается, а я думал, что он только выгружается, очень интересно! Как бы, мне тут лишнего не постирать.
Кстати kpblc к вашему исходному коду как лучше всего присвоить значения данных типа setq <переменная1> <выражение1>(т.е. символ1) и т.д.?
Владимир М вне форума  
 
Непрочитано 06.12.2005, 08:14
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Я стираю чтобы уж точно увидеть результат - либо загрузка меню, либо ошибка. Если ошибка, то ее можно уже и под микроскопом рассматривать. Иначе может загрузиться старый файл и я буду в полной уверенности, что все ок. А потом бегай, ищи, где собака порылась.
Лишнее вряд ли сотрется. Кстати, есть одна тонкость, о которой официальная документация умалчивает (по крайней мере, я не нашел): если рисунки меню хранятся в dll, то эту dll из-под када (в том плане, что пока AutoCAD болтается в памяти) удалить невозможно. Так что приходится извращаться.
Цитата:
Сообщение от Владимир М
как лучше всего присвоить значения данных типа setq <переменная1> <выражение1>(т.е. символ1) и т.д.
Ну как обычно, я думаю. Это, я так полагаю, надо для гарантированного вызова этой функции с предопределенными параметрами в автозагрузке? Так тогда можно в автозагрузке повесить лисп типа
Код:
[Выделить все]
;;;Код функции (menu-reload)
(defun autoload	()
  (menu-reload "designer" "designer" "c:\\cad\\mnu\\designer.mnu")
  ) ;_ end of defun

(autoload)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.12.2005, 22:09
#19
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Не знаю, не проверял. Посмотрите, пожалуйста kpblc. Не чего я тут не напутал?
Код:
[Выделить все]
(defun menu-reload ("designer"    "designer"
          "designer\\mnu\\designer.mnu"    /
          loc:set-file-ext
          )
  ;; Локальные функции
  (defun loc:set-file-ext ("designer.pgp" "mnu")
    ;; Замена расширения файла на указанное. Если расширения не было, устанавливается
    ;; переданное
    (strcat (vl-filename-directory "designer.pgp")
       (vl-filename-base "designer.pgp")
       "."
       "mnu"
       ) ;_ end of strcat
    ) ;_ end of defun
  ;; Конец локальных функций
  (if (not "designer")
    (setq "designer" "designer")
    ) ;_ end of if
  (if (menugroup "designer")
    (command "_.menuunload" "designer")
    ) ;_ end of if
  (foreach item   '("mnu" "mns" "mnr" "mnc")
    (if   (findfile (loc:set-file-ext "designer" item))
      (vl-file-delete (loc:set-file-ext "designer" item))
      ) ;_ end of if
    ) ;_ end of foreach
  (if (findfile "designer\\mnu\\designer.mnu")
    (vl-file-copy
      "designer\\mnu\\designer.mnu"
      (strcat (vl-filename-directory (findfile designer\\mnu\\designer.mnu"))
         (loc:set-file-ext "designer" "designer.mnu")
         ) ;_ end of strcat
      ) ;_ end of vl-file-copy
    ) ;_ end of if
  (vl-cmdf "_.menuload" (loc:set-file-ext "designer" "designer.mnu"))
  (princ "\nМеню успешно загружено (без верхнего меню!)")
  (princ)
  ) ;_ end of defun

;;;Код функции (menu-reload) 
(defun autoload   () 
  (menu-reload "designer" "designer" "designer\\mnu\\designer.mnu") 
  ) ;_ end of defun 

(autoload)
А, еще, что за расширение .pgp в коду?
Заранее благодарен!
Владимир М вне форума  
 
Непрочитано 08.12.2005, 04:55
#20
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Перечитал ветку несколько раз, так и не понял, в каком месте образуется проблема. По крайней мере, понятно только что сей глюк не локализован, а перезагрузка mnu - не что иное как пока единственный случайно найденный способ "реанимации".
Цитата:
после программы “Параметы объекта” (focall) вечно вылетает калькулятор FoCal (focal)
Как именно вылетает? На что то ругается? Вот это интересно для начала.

Далее, что еще может быть... Способ загрузки файлов *.vlx - только из меню или они попали в автозагрузку, в .mnl, еще каким то образом? Если программа написана и скомпилирована корректно, то в принципе нет необходимости ее перезагружать каждый раз при вызове. Есть слабое предположение, что обе программы случайным образом используют какую то общую переменную или функцию. И одна из них делает ее непригодной для другой. Можно долго разглядывать, что там торчит наружу, но в этом случае лучше обратиться к автору.

Еще, пропадает ли сей глюк только в первом открытом файле (после старта АКАДа и перезагрузки mnu) или же во втором, третьем и т.д. тоже нормально работает?

Проверялось ли только на одном экземпляре АКАДа или на разных (включая рус/англ версии)? Нельзя сбрасывать со счетов возможную глючность АКАДа, всякое бывает, особенно на криворусифицированых.

И наверно самый "каверзный" вопрос, если перед стартом АКАДа ручками удалить соответствующие mns, mnr и mnc (заставить при старте АКАД скомпилировать их заново), то как оно работает? Если нормально будет, то самый простой костыль будет состоять из батника для прибивки этих файлов и последующего запуска АКАДа.

PS что то очень не нравится этот замут с перезагрузкой :roll:
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как автоматом перезагрузить *.MNU файл?

Реклама i