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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Выполнение acaddoc.lsp - частичное отображение опций команды Автокада

Выполнение acaddoc.lsp - частичное отображение опций команды Автокада

Ответ
Поиск в этой теме
Непрочитано 07.02.2008, 13:40 #1
Выполнение acaddoc.lsp - частичное отображение опций команды Автокада
Makswell
 
Инженер-строитель
 
Киров
Регистрация: 15.08.2007
Сообщений: 2,204

Допустим файл "acaddoc.lsp" содержит такой код (создаёт текстовый стиль):
Код:
[Выделить все]
(setq old_cmdecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(vl-cmdf "_.-STYLE" "M-Standard_0"		  "GOST2304.ttf"
	   "0"		"1"	     "0"	  "_No"
	   "_No"
	  )
(setvar "CMDECHO" old_cmdecho)
(setq old_cmdecho nil)
При открытии/создании файла у меня в ком. строку происходит следующее:
Цитата:
Выполняется регенерация модели.

AutoCAD Express Tools Copyright © 2002-2004 Autodesk, Inc.

Утилиты меню AutoCAD загружены.Создавать перевернутый текст? [Да/Нет] <Нет>:
Т.е. независимо от состояния переменной "CMDECHO" всё равно отображается последнее сообщение команды "_.-STYLE".
Что надо изменить в коде, чтобы сообщение "Создавать перевернутый текст? [Да/Нет] <Нет>:" не отображалось?

ЗЫ Автокад 2008, рус, SP1.
Просмотров: 6593
 
Непрочитано 07.02.2008, 13:44
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А (princ) там не надо дописать?
Profan вне форума  
 
Автор темы   Непрочитано 07.02.2008, 13:48
#3
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


(princ) пробовал - никаких изменений
Makswell вне форума  
 
Непрочитано 07.02.2008, 13:48
#4
Кулик Алексей aka kpblc
Moderator

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


Создавать текстовый стиль чисто программно, без командных методов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2008, 14:01
#5
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Алексей, спасибо за ответ, но суть не в этом. В принципе у меня и так всё работает корректно, эта надпись не фатальна. Хотя, конечно, напрягает.
Мне просто интересно, почему так происходит? Даже если последней строкой будет что-то типа (princ "\nПоследняя стока\n"), всё равно ничего не изменится.
Makswell вне форума  
 
Непрочитано 07.02.2008, 14:15
#6
Кулик Алексей aka kpblc
Moderator

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


Ну раз так, то можно попробовать эдак:
Код:
[Выделить все]
(defun create-style (/ cmdecho)
  (setq cmdecho (getvar "cmdecho"))
  (command "_.style" "M-Standard_0" "GOST2304.ttf" 0 1 0 "_n" "_n" "_n")
  (setvar "cmdecho" cmdecho)
  (princ)
  ) ;_ end of defun

(create-style)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2008, 14:20
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Почитай про системную переменную NOMUTT
Или создавай другим способом
Код:
[Выделить все]
;;;Текстовый стиль
(mapcar (function (lambda ( mip_font  / text_style)
      (if (not (tblsearch "STYLE" mip_font))
        (progn
   (setq text_style  (vla-add (vla-get-textstyles *mip-activedoc*) mip_font))
   (vla-put-fontfile text_style "MIPGOST.SHX")
   (vla-put-height text_style 0.0)
   (vla-put-obliqueangle text_style (/ (* (atoi (getcfg "AppData/MIP/UGMIP")) PI) 180))
   (vla-put-width text_style 1.1)
          (vla-put-activetextstyle *mip-activedoc* text_style)))
      ))
 '("МИП_ГОСТ"))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 07.02.2008 в 16:26.
VVA вне форума  
 
Непрочитано 07.02.2008, 15:12
#8
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
(vl-cmdf "_.-STYLE" "M-Standard_0" "GOST2304.ttf"
"0" "1" "0" "_No"
"_No"
)
Количество параметров зависит от свойств шрифта GOST2304.ttf У меня его нет.
Сделайте команду Стиль _.-STYLE в комстроке и посмотрите количество Ваших вводов. Думаю всё встанет на свои места. Нет, опубликуйте тот протокол.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 07.02.2008, 16:17
#9
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Алексей, при твоём варианте (в посте №6) происходит то же самое. Объявление и вызов функции ничего не меняет.

VVA, спасибо что напомнил про NOMUTT. Это как раз то, что нужно.
В итоге получилось:
Код:
[Выделить все]
(setq old_cmdecho (getvar "CMDECHO"))
(setvar "NOMUTT" 1)
(setvar "CMDECHO" 0)
(vl-cmdf "_.-STYLE"   "M-Standard_0"		"GOST2304.ttf"
	 "0"	      "1"	   "0"		"_No"
	 "_No"
	)
(terpri)
(setvar "NOMUTT" 0)
(setvar "CMDECHO" old_cmdecho)
(setq old_cmdecho nil)
ЗЫ. Попробую разобраться в коде, предложенном тобой. Сходу пока не понятно...

Alan, здесь дело не в количестве параметров команды "_.-STYLE". Такое поведение замечено у команд, которые имеют опции. Например, если в acaddoc.lsp будет такое:
Код:
[Выделить все]
(setq old_cmdecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(vl-cmdf "_.PLINE" '(0 0) '(100 100) "")
(setvar "CMDECHO" old_cmdecho)
(setq old_cmdecho nil)
То всё равно выскочит эта "лишняя" надпись: "Следующая точка или [Дуга/Замкнуть/Полуширина/длИна/Отменить/Ширина]:"
Makswell вне форума  
 
Непрочитано 07.02.2008, 17:49
#10
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Проверял под Автокадом 2002(рус)
Текст acaddoc.lsp
Цитата:
(defun s::startup()
(vl-cmdf "_.-STYLE" "M-Standard_0" "arial.ttf" "0" "1" "0" "_No" "_No") ;_ конец vl-cmdf
(princ)
)
Протокол выполнения
Цитата:
Открывается файл формата AutoCAD 2000.
Выполняется регенерация модели.
AutoCAD Express Tools Copyright © 2000 Autodesk, Inc.
Утилиты меню AutoCAD загружены._.-STYLE Имя текстового стиля или [?] <russ>:
M-Standard_0
Новый стиль.
Укажите полное имя шрифта или имя файла (TTF или SHX) <txt>: arial.ttf Высота
текста <0.0>: 0 Степень сжатия-растяжения <1.0>: 1
Угол наклона <0>: 0 Писать текст справа налево? [Да/Нет] <Н>: _No Создавать
перевернутый текст? [Да/Нет] <Н>: _No
Новый текстовый стиль: "M-Standard_0".
Не заметил версию вначале. Вот Вам Автокад 2008 МЕР
Цитата:
Утилиты меню AutoCAD загружены.
Утилиты меню AutoCAD MEP loaded.
Утилиты меню AutoCAD Architecture loaded._.-STYLE Имя текстового стиля или [?]
<Standard>: M-Standard_0
Новый стиль.
Укажите полное имя шрифта или имя файла (TTF или SHX) <txt>: arial.ttf Задайте
высоту текста или [Аннотативный] <0.000>: 0 Степень сжатия-растяжения <1.000>: 1
Угол наклона <0.00>: 0 Писать текст справа налево? [Да/Нет] <Нет>: _No
Создавать перевернутый текст? [Да/Нет] <Нет>: _No
Новый текстовый стиль: "M-Standard_0".
ИМХО. Назначение текстового стиля в acaddoc.lsp это нонсенс, не для этого он предназначен.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 07.02.2008 в 18:04.
Alan вне форума  
 
Непрочитано 08.02.2008, 01:35
#11
Кулик Алексей aka kpblc
Moderator

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


Makswell, я согласен с Alan,- acaddoc.lsp не для таких вещей (теоретически) предназначен. Создание текстового стиля прекрасно решается либо через ActiveX- (см.#7), либо через entmake-методы.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2008, 09:52
#12
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Пожалуй соглашусь. Создание текстового стиля в acaddoc.lsp - это лишнее.
Тогда уж заодно ещё вопрос. Для каких вещей предназначен acaddoc.lsp?
У меня, например, в нём:
1. Загрузка файла библиотеки лисп-функций.
2. Загрузка файлов программ.
3. Установка некоторых системных переменных

PS А то, что создание текстового стиля прекрасно решается либо через ActiveX, либо через entmake-методы - это без сомнения! Но это уже скорее про культуру программирования. Да и вообще, ну не даётся мне этот ActiveX, сколько не бьюсь. Тупой я наверно. Хотя через entmake могу, могу... Только, правда, написание этого кода займёт у меня раз в 10 больше времени, чем через vl-cmdf.
Makswell вне форума  
 
Непрочитано 08.02.2008, 10:20
#13
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Makswell Посмотреть сообщение
Пожалуй соглашусь. Создание текстового стиля в acaddoc.lsp - это лишнее.
Тогда уж заодно ещё вопрос. Для каких вещей предназначен acaddoc.lsp?
У меня, например, в нём:
1. Загрузка файла библиотеки лисп-функций.
2. Загрузка файлов программ.
3. Установка некоторых системных переменных
...
Волшебная кнопка F1 (цитата из 2006, в других то же самое)
Цитата:
Файл acaddoc.lsp предназначен для выполнения инициализации каждого документа (рисунка). Этот файл удобно использовать для автоматической загрузки библиотек AutoLISP-процедур при создании нового рисунка или открытии имеющегося.
Каждый раз при открытии рисунка программа AutoCAD производит поиск файла acaddoc.lsp по библиотечному пути. При обнаружении такого файла производится его загрузка в память. Загрузка файла acaddoc.lsp производится для каждого рисунка независимо от значения системных переменных ACADLSPASDOC и LISPINIT.
В большинстве случаев пользователю достаточно иметь один файл acaddoc.lsp для всех AutoLISP-процедур, работающих непосредственно с документами. AutoCAD выполняет поиск файла acaddoc.lsp в порядке, заданном в стандартных библиотечных путях. Поэтому при работе с различными типами рисунков в каждой папке с рисунками можно хранить свой файл acaddoc.lsp для загрузки требуемого набора процедур AutoLISP.
В файле acaddoc.lsp может храниться код для одной или нескольких процедур или серии запросов функции load . Последний способ более предпочтителен, так как при этом упрощается возможная модификация перечня загружаемых процедур и приложений. Последний способ более предпочтителен, так как при этом упрощается возможная модификация перечня загружаемых процедур и приложений. Если, например, файл acaddoc.lsp имеет приведенное ниже содержимое, файлы mydocumentapp1.lsp, build.lsp и counter.lsp будут загружаться при открытии каждого документа.
(load "mydocumentapp1")(load "build")(load "counter")Предупреждение Не следует изменять зарезервированный файл acad2006doc.lsp. Комапания Autodesk предоставляет файл acad2006doc.lsp, содержащий функции на языке AutoLISP, которые необходимы для нормальной работы AutoCAD. Данный файл загружается в память непосредственно перед загрузкой файла acaddoc.lsp.
Alan Лучше сказать можно, но ЭТО надо знать обязательно.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 08.02.2008, 10:21
#14
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Из Справки:
Цитата:
В файлах acad.lsp, acaddoc.lsp и MNL-файлах функция command обязательно должна вызываться из конструкции defun.
Для задания последовательности команд, выполняемой в момент запуска сеанса работы с рисунком, необходимо пользоваться функцией S::STARTUP.
Profan вне форума  
 
Непрочитано 08.02.2008, 10:24
#15
Кулик Алексей aka kpblc
Moderator

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


Как пример создания текстового стиля: http://dwg.ru/f/showpost.php?p=132694&postcount=25
Лично у меня в acaddoc.lsp (от него подумываю уже отказаться) выполняется примерно следующее:
- анализируется среда исполнения (AutoCAD / ADT / BricsCAD / AutoCAD LT)
- проверяются ветки реестра и записываются туда стартовые значения (если их не было).
- определяются глобальные переменные
- проверяется, в сетевом режиме или нет приложение работает. Если в сетевом, то выполняется проверка на актуальность сборки. Если на сервере лежит более свежая - то скопировать ее на локальную машину.
- проверяется актуальность меню. При необходимости загружается новое.
- выполняется загрузка библиотеки (возможно, скомпилированное в fas).
А вот уже внутри самой загрузки выполняются стартовые настройки - устанавливаются пользовательские словари, текстовый и размерный стили, загружаюися реакторы и прочая требуха.
---
Добавлено: командные методы в этот момент не используются совсем.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.02.2008, 10:54
#16
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
....
Лично у меня в acaddoc.lsp (от него подумываю уже отказаться) выполняется примерно следующее:
- анализируется среда исполнения (AutoCAD / ADT / BricsCAD / AutoCAD LT)
- проверяются ветки реестра и записываются туда стартовые значения (если их не было).
- определяются глобальные переменные
- проверяется, в сетевом режиме или нет приложение работает. Если в сетевом, то выполняется проверка на актуальность сборки. Если на сервере лежит более свежая - то скопировать ее на локальную машину.
- проверяется актуальность меню. При необходимости загружается новое.
- выполняется загрузка библиотеки (возможно, скомпилированное в fas).

...
Лично мне кажется что в acaddoc.lsp ты делаешь слишком много.
P.S.Но это дело вкуса.
Цитата:
(от него подумываю уже отказаться)
А никто и вовсе не гарантирует, что любимый тобой *.MNL сохраниться в первоначальном виде. Тэндэнция, однако, идёт (ИМХО) не туда.
P.S.Но это дело вкуса.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 08.02.2008, 11:01
#17
Кулик Алексей aka kpblc
Moderator

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


Конечно много. Но я-то думаю не в сторону mnl, а в сторону прописывания собственного lisp'a в автозагрузку. Дешево и сердито
Правда, как дело будет обстоять "не для полного AutoCAD" - пока неизвестно. Надо разбираться, а мне пока лениво.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.03.2008, 17:53
#18
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


С той же проблемой столкнулся.
А чем плохо так?
Код:
[Выделить все]
(setvar "NOMUTT" 1)
(setvar "CMDECHO" 0)
...
(код)
...
(setvar "NOMUTT" 0)
(setvar "CMDECHO" 1)
У меня эффект получился в моем случае.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 26.03.2008, 18:35
#19
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Shoorup Посмотреть сообщение
С той же проблемой столкнулся.........
Это Вы о какой проблеме?
Цитата:
А чем плохо так?
Код:
[Выделить все]
(setvar "NOMUTT" 1) (setvar "CMDECHO" 0)
... (код) ... 
(setvar "NOMUTT" 0) (setvar "CMDECHO" 1)
Насчет кода ничего не скажу, не вижу.
А вот переменные вначале запоминаються, потом setvar , а потом восстанавливаются запомненные.
Цитата:
У меня эффект получился в моем случае.
Интересненько, интересненько...
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Выполнение acaddoc.lsp - частичное отображение опций команды Автокада

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Отображение GRID при выполнении команды PAN REALTIME MAX-MAX AutoCAD 10 29.06.2009 18:43
команды Автокада 2005 в Автокад 2006 Автокадер AutoCAD 10 14.09.2006 12:16
Заперт на стандартные команды автокада Александер Программирование 22 12.07.2005 14:28