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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > лисп для открытия *.dwg файла

лисп для открытия *.dwg файла

Ответ
Поиск в этой теме
Непрочитано 21.06.2005, 08:24 #1
лисп для открытия *.dwg файла
Александер
 
Регистрация: 15.06.2005
Сообщений: 184

такой вопросик: как на лиспе огранизовать открытие определенного файла *.dwg из строго определенного места (имя и путь указываем в програмке).
Просмотров: 8822
 
Непрочитано 21.06.2005, 09:53
#2
Arkady

AutoCad Development and Support
 
Регистрация: 21.08.2003
Israel
Сообщений: 183
Отправить сообщение для Arkady с помощью Skype™


По моему напрямую нельзя.
Можно оспользоваться скриптом.То есть создать програмно скрипт файл и запустить его через лисп.
Arkady вне форума  
 
Непрочитано 21.06.2005, 10:02
#3
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


Да можно.

Это из RUCAD:

Код:
[Выделить все]
(defun ru-dwg-open-file (dwg_file / n)
;;; Пример:  (ru-dwg-open-file "c:\\.ru\\cad\\samples\\dwg\\Dim_test.dwg")
  (if (= 0 (getvar "SDI"))
    ;; Для многодокументного режима (SDI=0) открываем новый документ  
    ;; в новом окне. Сохранять открытые не нужно
    (vla-activate
      (vla-open (ru-obj-get-docs-collection)
                dwg_file
      )
    )
    (progn
      ;; для однодокументного режима
      (if (not (equal 2 (logand 2 (getvar "QAFLAGS"))))
        (setvar "QAFLAGS" (+ (getvar "QAFLAGS") 2))
      )
      (if (not (equal 4 (logand 4 (getvar "QAFLAGS"))))
        (setvar "QAFLAGS" (+ (getvar "QAFLAGS") 4))
      )

      (command "_.OPEN")
      ;; Проверяем, не изменялся ли текущий рисунок
      (if (not (equal 0 (getvar "DBMOD")))
        ;; и, если изменялся - передаем опцию "Yes", дескать, сохраняй 
        (command "_y")
      )
      (command dwg_file)
      (setq n 0)
      ;; и теперь, пока работает команда OPEN 
      (while (and (< n 4)
                  (wcmatch (getvar "CMDNAMES") "*OPEN*")
             )
        (t
          ;; на все возможные запросы даем пустой ответ
          (command "")
        )
        (setq n (+ n 1))
      )
      (setvar "QAFLAGS" 0)
    )
  )
)


(defun ru-obj-get-docs-collection ()
    (ru-obj-acad-collection "Documents")
)

(defun ru-obj-acad-collection (name)
;;; Корень коллекции NAME в AcadApplication
    (vlax-get-property (ru-obj-get-acad-object) name)
)

(defun ru-obj-get-acad-object ()
  (cond	(*ru_acad-object*)
	(t
	 (setq *ru_acad-object*
		(vlax-get-acad-object)
	 ) 
	)
  ) 
)
Apelsinov вне форума  
 
Непрочитано 21.06.2005, 10:10
#4
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


(setq path "C:\\IES\\Design Center\\" или что там вам надо
dwg_n (getfiled "Select Detail File" path "dwg" 4)
dwg (vla-open (vla-get-documents (vlax-get-acad-object)) dwg_n)
);setq
Лентяй вне форума  
 
Автор темы   Непрочитано 21.06.2005, 13:24
#5
Александер


 
Регистрация: 15.06.2005
Сообщений: 184


Что-то не получается выдает ошибку Error:no function definition: ЎЛЎ®¤_color
Цвет объектов по умолчанию <ПОСЛОЮ>:
Команда: _layer
Текущий слой: "0"
Задайте опцию [?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]: _s
Имя слоя для установки текущим или <выбрать объект>: Задайте опцию
[?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]:
Команда: ; ошибка: В функции *error* возникла ошибкаНастройка переменной
AutoCAD отвергнута: "CMDECHO" nil
как только я его уже не пробовал открывать:
(command "vbastmt" "AcadApplication.Documents.Open \"C:\\temp.dwg\"") - все равно выдает ошибку... :cry:
Александер вне форума  
 
Автор темы   Непрочитано 21.06.2005, 13:27
#6
Александер


 
Регистрация: 15.06.2005
Сообщений: 184


а в варианте Лентяя открывает диалоговое окошко предлагает выбрать файл - выбираю - а он его все равно не открывает.
к тому же мне надо чтобы открывался один файл из указанного места без всяких доп. параметров и диалоговых окошек.
Александер вне форума  
 
Автор темы   Непрочитано 21.06.2005, 15:10
#7
Александер


 
Регистрация: 15.06.2005
Сообщений: 184


Ввсем большое спасибо за помощь, решил я свою проблемку очень просто. если кому интересно напишу.
в автокаде в командной строке вводим команду sdi и присваиваем значение 1, после этого можно будет файл *.dwg открыть командой _open
т.е. ^С^С_open c:/Имяфайла.dwg
и все!!!
Александер вне форума  
 
Автор темы   Непрочитано 21.06.2005, 16:47
#8
Александер


 
Регистрация: 15.06.2005
Сообщений: 184


не все так просто в этой жизни....
такой вариант работает только для одного одновременно открытого файла, а надо чтобы можно было работать сразу с несколькими файлами....
так что проблема опять осталась нерешенной, помогите кто может.
Александер вне форума  
 
Непрочитано 21.06.2005, 17:32
#9
vk

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


Ты же сам написал
Цитата:
Сообщение от Александер
....в командной строке вводим команду sdi и присваиваем значение 1....
и после этого хочешь
Цитата:
Сообщение от Александер
а надо чтобы можно было работать сразу с несколькими файлами....
Конечно не получится. Сделай SDI=0
vk вне форума  
 
Непрочитано 21.06.2005, 17:44
#10
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


>Александер

Вы, как мне кажется, что-то напутали с загрузкой лиспов, у меня оба лиспа работают.
Ошибки, что Вы описали, вообще из другой области...
Опишите свои действия по использованию лиспов.
Apelsinov вне форума  
 
Непрочитано 22.06.2005, 08:24
#11
B2Slow


 
Регистрация: 20.06.2005
Иркутск
Сообщений: 57


Извиняюсь, что разветвляю тему.. Просто вопрос из той же области. Можно ли сделать так, чтобы при запуске не создавался новый drawing.dwg, а загружался последний редактированный файл из последней сессии?
B2Slow вне форума  
 
Автор темы   Непрочитано 22.06.2005, 08:47
#12
Александер


 
Регистрация: 15.06.2005
Сообщений: 184


у меня автокад 2002.
а лиспы загружаю так:
пробовал по разному даже просто копировал один из лиспов например первый

(defun ru-dwg-open-file (dwg_file / n)
;;; Пример: (ru-dwg-open-file "c:\\.ru\\cad\\samples\\dwg\\Dim_test.dwg")
(if (= 0 (getvar "SDI"))
;; Для многодокументного режима (SDI=0) открываем новый документ
;; в новом окне. Сохранять открытые не нужно
(vla-activate
(vla-open (ru-obj-get-docs-collection)
dwg_file
)
)
(progn
;; для однодокументного режима
(if (not (equal 2 (logand 2 (getvar "QAFLAGS"))))
(setvar "QAFLAGS" (+ (getvar "QAFLAGS") 2))
)
(if (not (equal 4 (logand 4 (getvar "QAFLAGS"))))
(setvar "QAFLAGS" (+ (getvar "QAFLAGS") 4))
)

(command "_.OPEN")
;; Проверяем, не изменялся ли текущий рисунок
(if (not (equal 0 (getvar "DBMOD")))
;; и, если изменялся - передаем опцию "Yes", дескать, сохраняй
(command "_y")
)
(command dwg_file)
(setq n 0)
;; и теперь, пока работает команда OPEN
(while (and (< n 4)
(wcmatch (getvar "CMDNAMES") "*OPEN*")
)
(t
;; на все возможные запросы даем пустой ответ
(command "")
)
(setq n (+ n 1))
)
(setvar "QAFLAGS" 0)
)
)
)

создаю текстовый файл (например openf.lsp) в автокаде захожу в сервис загружаю приложение openf.lsp
после чего автокад выдает ошибку:
Error:неверная функция: 1_color
Цвет объектов по умолчанию <ПОСЛОЮ>:
Команда: _layer
Текущий слой: "0"
Задайте опцию [?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]: _s
Имя слоя для установки текущим или <выбрать объект>: Задайте опцию
[?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]:
Команда: ; ошибка: В функции *error* возникла ошибкаНастройка переменной
AutoCAD отвергнута: "CMDECHO" nil
тоже самое происходит и со вторым лиспом.
Александер вне форума  
 
Непрочитано 22.06.2005, 08:56
#13
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Можно. Для этого нужно в "Options" включить "Start-up Dialog", и выбирай любой файл из прошлой сессии.
Лентяй вне форума  
 
Непрочитано 22.06.2005, 09:01
#14
B2Slow


 
Регистрация: 20.06.2005
Иркутск
Сообщений: 57


Цитата:
Сообщение от Лентяй
Можно. Для этого нужно в "Options" включить "Start-up Dialog", и выбирай любой файл из прошлой сессии.
то есть, все-таки нельзя без клика?..
B2Slow вне форума  
 
Непрочитано 22.06.2005, 10:06
#15
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
то есть, все-таки нельзя без клика?..
А кофе в койку? Самый лентяй здесь - я. а посему всем просим - клИкать! А ежели серьезно, то соответствующую команжу можно записать в S::STARTUP.
Лентяй вне форума  
 
Автор темы   Непрочитано 22.06.2005, 10:44
#16
Александер


 
Регистрация: 15.06.2005
Сообщений: 184


а мне то поможет кто? я уже все форумы просмотрел.
как сделать так чтобы при нажатии одной кнопочки открылся нужный файл, при этом уже открытый не закрылся, т.е. для многодокументального режима работы (sdi=0) можно вообще такое сделать в 2002 автокаде, может не на лиспе а еще как - главное чтобы работало... очень надо, да и не мне одному, судя по вопровам обсуждаемым на форумах
Александер вне форума  
 
Непрочитано 22.06.2005, 10:47
#17
B2Slow


 
Регистрация: 20.06.2005
Иркутск
Сообщений: 57


Цитата:
Сообщение от Лентяй
Цитата:
то есть, все-таки нельзя без клика?..
А кофе в койку? Самый лентяй здесь - я. а посему всем просим - клИкать! А ежели серьезно, то соответствующую команжу можно записать в S::STARTUP.
=)Эту команду я и хочу узнать... так как рысканьями по хелпу и глубокими размышлениями ничего не добился... - не хватает знаний английского и сообразительности...
B2Slow вне форума  
 
Непрочитано 22.06.2005, 10:53
#18
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Эту команду я и хочу узнать... так как рысканьями по хелпу и глубокими размышлениями ничего не добился... - не хватает знаний английского и сообразительности...
Экий вы зануда! Если Start Up Dialog включен (в коробочке галочка), то при запуске АвтоКАДА открывается окно со списком последниих использованных файлов, причем самый последний - уже подсвечен. КлИкай себе ОК и вперед.
Лентяй вне форума  
 
Непрочитано 22.06.2005, 11:01
#19
B2Slow


 
Регистрация: 20.06.2005
Иркутск
Сообщений: 57


Ладно... Проблема уже не стОит тех усилий, которые я прилагаю здесь, чтобы ее решить :?
B2Slow вне форума  
 
Непрочитано 22.06.2005, 11:52
#20
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Александер
а мне то поможет кто? я уже все форумы просмотрел.
как сделать так чтобы при нажатии одной кнопочки открылся нужный файл, при этом уже открытый не закрылся, т.е. для многодокументального режима работы (sdi=0) можно вообще такое сделать в 2002 автокаде, может не на лиспе а еще как - главное чтобы работало... очень надо, да и не мне одному, судя по вопровам обсуждаемым на форумах
Вариант, проще некуда:
Код:
[Выделить все]
(defun demo (file)
  (cond ((not (setq file (findfile file))) (princ "\nFile not found!"))
        ((zerop (getvar "SDI")) (vla-Open (vla-get-Documents (vlax-get-acad-object)) file))
        ((princ "\nSDI Mode!"))
  )
  (princ)
)
Вызов:
Код:
[Выделить все]
(demo "x:/xxxx/xxxx.dwg")
Иксами забиты подставляемые значения.
Alaspher вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > лисп для открытия *.dwg файла

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