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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ACAD-2002. Глюк начальной загрузки ЛИСП?

ACAD-2002. Глюк начальной загрузки ЛИСП?

Ответ
Поиск в этой теме
Непрочитано 29.08.2005, 16:24
ACAD-2002. Глюк начальной загрузки ЛИСП?
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 470

Всем привет!

Сегодня, отлаживая программу, наткнулся на непонятный
глюк - если установить SDI=1 (однооконный режим), то
перестают автоматически загружаться файлы acad.lsp
и acaddoc.lsp, если открывать файлы через "список ранее
открывавшихся файлов", тот, что появляется внизу меню
"Файл".

Выглядит это вот как:

делаем файл acad.lsp со строкой
(princ "000000")(princ " \n")

и делаем файл acaddoc.lsp со строкой
(princ "111111")(princ " \n")

Входим в АКАД, открываем любой файл (любым способом)
и видим внизу строки:

000000
111111

т.е. все, как доктор прописал. Через меню "Файл->Открыть"
или кнопочку "Открыть" на панели открываем разные файлы.
Все прекрасно, "нулики" и "единички" бодро появляются внизу
экрана. Но стоит только выбрать файл из "запомненного"
Автокадом списка файлов, как появляется сообщение:

Команда: Неизвестная команда "S::STARTUP". Для вызова справки нажмите F1.

(Только вместо  символ, чем-то напоминающий твердый
знак, ASCII-128)

И все... Такое сообщение будет выдаваться на каждый вновь
открываемый файл (уже независимо, каким способом), пока
не закроешь Актокад.

Видимо, Автокад "навешивает" некие действия на пункты
"запомненных файлов"...

Вопрос стандартный - это лечится?
__________________
Счастливо, Алексей!
Просмотров: 10584
 
Непрочитано 30.08.2005, 15:30
#21
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
Да еще каких мрачных :-) Однако, как я от нее избавлюсь,
мне же при старте (command'ы) выполнять надо...
Ну большинство COMMAND можно переписать без COMMAND, не короче получится но тем не мение. Какие COMMAND надо переписать?
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 30.08.2005, 16:20
#22
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Привет!

В s::startup используются

_style
_.pspace
_.vslide
_purge
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 30.08.2005, 16:34
#23
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Меня, правда, сейчас другой глюк больше донимает. :-(

В некоторых случаях (в каких, об этом чуть позже - еще
не установил абсолютно точную закономернось) запуск
из программы скрипта a.scr типа
===============================================
(setq namfil "E:\\WIP2\\2\\19_общи_структ.dwg") (command "_.qsave") (command "_.open" namfil)
===============================================

Приводит к ошибке. О, нет, SDI=1 к этому времени уже
установлена. Не могу найти файл, говорит. А как она
его найдет, если

===============================================
Имя открываемого рисунка <E:\WIP2\2\4_Н-10_Кайеркан.dwg>: *Прервано*

Команда: !namfil
"E:WIP2\\2\\17_Структ_Анисимова.dwg"
===============================================

Т.е. автокад "сожрал" две косых после двоеточия!
Причем, если сейчач ввести с клавиатуры
(command "_script" "a") то шурует, как по маслу!

Ну, почему он "косые"-то жрет?!
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 30.08.2005, 17:24
#24
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Всё кроме _.vslide труда не представляет. Думаю что с _.vslide тоже что нибудь можно придумать. Вот к примеру создание или активирование текстового стиля:
Код:
[Выделить все]
(defun NewTextStyle (
		 Style		;- название стиля (например "My_Style")
		 FontFile	;- название стиля шрифта (например "txt.shx")
		 Height		;- высота (например 0.0) - вещественное!
		 Width		;- ширина (например 0.8) - вещественное!
		 Oblique	;- угол наклона (например "12") - строка!
		 Active		;- если T то сделает стиль активным
		 /
		 actDoc
		 tstCol
		 newSt
		 errFlag
		 )
  (vl-load-com)
  (setq actDoc
	 (vla-get-ActiveDocument
	   (vlax-get-acad-object))
	tstCol(vla-get-TextStyles actDoc)
	); end setq
  (if
    (not
      (tblsearch "STYLE" Style))
    (progn
      (if
	(vl-catch-all-error-p
	  (setq newSt
		 (vl-catch-all-apply 'vla-add(list tstCol Style))))
	   (progn
	     (setq errFlag T)
	  (alert(strcat "Error. Can't create file with name: " Style))
	     ); end progn
	  (progn
	    (vla-put-FontFile newSt FontFile)
	    (vla-put-Height newSt Height)
	    (vla-put-Width newSt Width)
	    (vla-put-ObliqueAngle newSt(angtof Oblique))
	    ); end progn
	  ); end if
	); end progn
      (setq newSt(vla-item tstCol Style))
      ); end if
  (if
    (and
      (not errFlag)
      Active
      )
    (vla-put-ActiveTextStyle actDoc newSt)
    ); end if
    newSt
    ); end of NewTextStyle
Тут конечно не все проверки присутствуют, к примеру не проверяется наличие файла шрифта, однако с COMMAND отловить ошибку еще глючнее.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 30.08.2005, 18:33
#25
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Привет!

Сейчас "смеха для" проверил работу функций "комманд"
из файла ***.mnl.

Оказывается, они там работают. Тогда действительно
можно отказаться от s::startup.

Правда, есть подозрение, что дело не только в
выполнении или невыполнении s::startup, но и в
незагрузке acaddoc.lsp

Может, действительно засунуть начало "стартера-
загрузчика" в *.mnl ... ?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 31.08.2005, 00:58
#26
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


Мой совет, но не более чем imho, :wink: если используется SDI=0 все запихать в acaddoc.lsp.
Файлы необходимые для работы с конкретным меню, подгружать их соотв. *.mnl
S:Startup определить единожды в acaddoc.lsp.
BigBrother вне форума  
 
Непрочитано 31.08.2005, 07:21
#27
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Алексей, тебе уже несколько раз говорили - избавляйся от S::STARTUP. А ты только сейчас поверил, что собственную стартовую функцию
можно запускать из mnl.

Заодно надо избавляться и от устареших команд. Ведь не ты один делаешь какие-то настройки при старте. У всех такие идеи есть и они решаются.
Кое-что и невозможно сделать через command, но легко через ActiveX

Все твои вопросы очень подробно разобраны в книге "САПР на базе AutoCAD - как это делается". С приложением тучи исходников. Очень подробно - стартовая инициализация.
Забывай заодно и про слайды - это же не ранняя DOS. С растровой графикой прекрасно и просто работать.

Вот как, например, решается вопрос с открытием файла в разных режимах.

Код:
[Выделить все]
(defun ru-dwg-open-file (dwg_file / n)
;;; Пример:  (ru-dwg-open-file "c:\\.ru\\cad\\samples\\dwg\\Dim_test.dwg")
  (ru-error-catch
    (function
      (lambda ()
        (if (= 0 (getvar "SDI"))
          ;; Для многодокументного режима (SDI=0) открываем новый документ  
          ;; в новом окне. Сохранять открытые не нужно
          (vla-open (ru-obj-get-docs-collection)
                    dwg_file
          ) ;_ end of vla-open
          (progn
            ;; для однодокументного режима
            (if (not (equal 2 (logand 2 (getvar "QAFLAGS"))))
              (setvar "QAFLAGS" (+ (getvar "QAFLAGS") 2))
            ) ;_ end of if
            (if (not (equal 4 (logand 4 (getvar "QAFLAGS"))))
              (setvar "QAFLAGS" (+ (getvar "QAFLAGS") 4))
            ) ;_ end of if
            (command "_.OPEN")
            ;; Проверяем, не изменялся ли текущий рисунок
            (if (not (equal 0 (getvar "DBMOD")))
              ;; и, если изменялся - передаем опцию "Yes", дескать, сохраняй 
              (command "_y")
            ) ;_ end of if
            (command dwg_file)
            (setq n 0)
            ;; и теперь, пока работает команда OPEN 
            (while (and (< n 4)
                        (wcmatch (getvar "CMDNAMES") "*OPEN*")
                   ) ;_ end of and
              (t
                ;; на все возможные запросы даем пустой ответ
                (command "")
              ) ;_ end of T
              (setq n (+ n 1))
            ) ;_ end of while
            (setvar "QAFLAGS" 0)
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of lambda
    ) ;_ end of function
    (function
      (lambda (msg)
        (princ (strcat "\nRU-DWG-OPEN-FILE: " msg))
        nil
      ) ;_ end of lambda
    ) ;_ end of function
  ) ;_ end of ru-error-catch
)
Здесь используется пара функций ruCAD - ru-error-catch, гарантирующая от сбоев при любых ошибках и (ru-obj-get-docs-collection), которую
можно заменить на
Код:
[Выделить все]
(vlax-get-property (vlax-get-acad-object)  "Documents")
, так что напрямую, без корректировки не применишь, но смысл понятен. Это просто для примера. И для забытия скриптов.

Выход не в том, чтобы принудительно устаналивать режимы SDI, а в том, чтобы программы учитывали все особенности работы.

И все глюки разных версий Автокада, которых столько, что некоторые функции превращаются в сплошные ловушки ошибок.[/code]
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 31.08.2005, 07:58
#28
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Привет!

Ох, братцы, если бы я был просто "практикующим программистом"...
Может быть когда-нибудь, в следующей жизни... Или если
будет свободное время.

А глюк с "\\" пришлось обходить, заменив их на "/".
Хотя (вот уж то наследие "мрачных времен"!) я от них, т.е. "/"
старался избавляться, т.к. это вызывало глюки при работе
с одной из ранних сетей не то "нетваре", не то "пачворкс".

Всем спасибо за участие. А книгу куплю при случае. Вот
поеду в отпуск "на материк" и поищу.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ACAD-2002. Глюк начальной загрузки ЛИСП?

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