Тема: Как сделать кнопку открытия и "Сохранения как" конкретного файла?
Подскажите, плиз, как Присвоить кнопке следующие функции:
При нажатии на кнопку должен открыться и сразу же "Сохраниться как" (с запросом имени) конкретный файл?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Настройка меню и DIESEL → Как сделать кнопку открытия и "Сохранения как" конкретного файла?
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите, плиз, как Присвоить кнопке следующие функции:
При нажатии на кнопку должен открыться и сразу же "Сохраниться как" (с запросом имени) конкретный файл?
Подскажите, плиз, как Присвоить кнопке следующие функции:
При нажатии на кнопку должен открыться файл 11.dwg,хранящийся на диске <D> в корне и "Сохраниться как" (с запросом имени) в папку <11> диска <D>? Заранее спасибо!!!
> septima
Если не предполагается рисунок редактировать, то на кой его открывать? Скопировать в проводнике, любом файловом менеджере...
Можно и без открытия файла
Сама ф-ция
(defun f11 (VL-LOAD-COM) (setq file "D:\\11.dwg") (setq dest (strcat (VL-FILENAME-DIRECTORY file)(VL-FILENAME-BASE file))) (vl-mkdir dest) (setq dest (strcat dest "\\" (VL-FILENAME-BASE file)(VL-FILENAME-EXTENSION file))) (VL-FILE-DELETE dest) (VL-FILE-COPY file dest))
Как сделать кнопку не раз уже упоминалось
В том то и дело, что файл 11.dwg - шаблон,исходник для последующей обработки. Его надо открыть, "Сохранить как" в папку <11> под другим именем и отредактировать под текущий проект. Спасибо VVA за полезный алгоритм, но ,похоже, я сам виноват: не совсем корректно описал вопрос.
Не понятно что значит " отредактировать под текущий проект". А так скопируй просто 11.dwg в папку под именем 11a.dwg.
(VL-LOAD-COM) (setq file "D:\\11.dwg") (setq dest (strcat (VL-FILENAME-DIRECTORY file)(VL-FILENAME-BASE file))) (vl-mkdir dest) (setq dest (strcat dest "\\" "11a.dwg")) (VL-FILE-DELETE dest) (VL-FILE-COPY file dest)
Если непременно надо с открытием в Автокаде
(setq from "D:\\11.dwg") (setq to "11a.dwg") (setq dest (strcat (VL-FILENAME-DIRECTORY from)(VL-FILENAME-BASE from))) (vl-mkdir dest) (setq dest (strcat dest "\\" to)) (setq File (vla-open (vla-get-documents(vlax-get-acad-object)) from)) (vla-saveas File dest ac2004_dwg) (vla-close File) (vlax-release-object File)
Без проверок, что файл м.б. открыт и не доступен. С проверками см.
https://www.caduser.ru/forum/topic29668.html и здесь
https://www.caduser.ru/forum/topic28268.html
VVA, Огромное спасибо за помощь!! А как все это завязать на кнопку? И файл 11.dwg обязательно надо открыть, кое-что в нем изменить и сохранить в папку <11>, но под другим именем. Реально все эти функции повесить на одну кнопку? Вот как? )
> septima
Нереально. Потому как в программном режиме (по крайней мере лисповом) после активизации другого документа выполнение функции прерывается. В общем, некорректно оно себя вести начинает
В виде макроса на кнопке совсем никак? Но почему? Я же могу по-отдельности выполнить все эти функции: Находясь в одном файле открыть 11.dwg, "сохранить его как",скажем, 11.000.5 (файл для проекта 11.000.5)в постоянную папку <11>, и со спокойной душой работать в теперь уже 11.000.5? Затем его просто сохранить и закрыть. В итоге получаем файл 11.000.5 в папке <11>, созданный из 11.dwg.
Опять, непонятно что значит "кое-что в нем изменить"? Если просто открыть->сохранить как, то сохраняешь этот код под именем
C11.lsp
(defun C:C11 ( / from to dest File ) (setq from "D:\\11.dwg") (setq to "11a.dwg") (setq dest (strcat (VL-FILENAME-DIRECTORY from)(VL-FILENAME-BASE from))) (vl-mkdir dest) (setq dest (strcat dest "\\" to)) (setq File (vla-open (vla-get-documents(vlax-get-acad-object)) from)) (vla-saveas File dest ac2004_dwg) (vla-close File) (vlax-release-object File) (princ) )
Файл кладешь в доступное для автокада место.
Кнопка
^C^C(if (null C:C11)(load "c11.lsp"));C11;
Как загрузить файл https://www.caduser.ru/oldlink/faq/?part=23 Как сохранить программный код на своем компьютере?
> septima
Вот именно, по отдельности. "Слабое звено" здесь - фраза "Находясь в одном файле...". Т.е., чтобы открыть нужный файл, вы сначала открываете другой. А зачем? Разве вы можете начать рисовать, скажем, отрезок в одном рисунке, а закончить в другом? Нет, конечно. Так же и Лисп-программа или макрос не могут, начав выполнение в одном рисунке, закончить в другом. И нечего мудрить. Открывайте рисунок двойным кликом на имени файла в проводнике или где там еще и выполняйте "Сохранить как...".
Уважаемый VVA, Безграничная благодарность за помощь! Только не работает ничего. Выдает ошибку No function definition: VLAX-GET-ACAD-OBJECT. Сохранил код в папке Support ACADa под именем C11.lsp. Что я не стак сделал?
И уважаемый Владимир Громов, я не пытаюсь начать рисовать линию в одном файле, и закончить ее в другом. Если подробно и в именах, то речь о следующем: Есть некий рабочий файл RS.00.dwg, где, собственно, и проходит весь процесс. И есть файлы - заготовки (шаблоны) с отдельными узлами. Постоянно приходится,переключаясь с работы в RS.00.dwg, открывать тот или иной шаблон (к примеру файл D:/11.dwg), чтобы не менять исходник, "сохранять его как" в папку D:/11 (чтобы получилось D:/11/11.dwg), и теперь уже работать в нем. Затем сохранить и вернуться к работе в D:/RS.00. Вот и была задумка весь процесс открытия-сохранения как повесить на одну кнопку. То есть при нажатии не кнопку открывается файл D:/11.dwg и "сохраняется как" в D:/11/11.dwg. Теперь работаем в этом файле, а RS.00 ждет своей очереди.
> septima
Так в том то и дело, что вы хотите начать выполнение макроса в файле "RS.00.dwg", а закончить в "D:/11.dwg". Вам нужно 2 кнопки, IMHO. Одна для открытия файла "D:/11.dwg" из любого файла и другая для "Сохранения как..." уже текущего файла "D:/11.dwg" в файл "D:/11/11.dwg".
> septima
Для загрузки vla ф-ций надо добавить (vl-load-com)
(defun C:C11 ( / from to dest File ) (vl-load-com) (setq from "D:\\11.dwg") (setq to "11a.dwg") (setq dest (strcat (VL-FILENAME-DIRECTORY from)(VL-FILENAME-BASE from))) (vl-mkdir dest) (setq dest (strcat dest "\\" to)) (setq File (vla-open (vla-get-documents(vlax-get-acad-object)) from)) (vla-saveas File dest ac2004_dwg) (vla-close File) (vlax-release-object File) (princ) )
> VVA
Попробовал программу. Сначала создал два файла RS.00.dwg и 11.dwg на диске D:. Создал папку D:\11. Открыл файл RS.00.dwg, выполнил программу. В папке D:\11 образовался файл 11a.dwg, только текущим-то и единственно загруженным файлом оказался все-таки RS.00.dwg.
Чтобы файл не выгружался, надо закоментировать строку
(vla-close File)
Чтобы он стал активным добавить строку
(vla-put-ActiveDocument (vlax-get-acad-object) File)
Получится прерно следующее
(defun C:C11 ( / from to dest File ) (vl-load-com) (setq from "D:\\11.dwg") (setq to "11a.dwg") (setq dest (strcat (VL-FILENAME-DIRECTORY from)(VL-FILENAME-BASE from))) (vl-mkdir dest) (setq dest (strcat dest "\\" to)) (setq File (vla-open (vla-get-documents(vlax-get-acad-object)) from)) (vla-saveas File dest ac2004_dwg) (vla-put-ActiveDocument (vlax-get-acad-object) File) ;(vla-close File) (vlax-release-object File) (princ) )
> VVA
Эта программа сработала. Однако, здесь заданы фиксированные имена файлов. А septima нужен запрос имени файла для "Сохранения как...".
Короче так. Постановка задачи такая.
Есть некий файл-шаблон. Его имя задается явно.
На том же диске, создается папка с именем=имени шаблона. Запрашивается имя файла для сохранения, шаблон сохраняется как и становится текущим документом.
Реализация
(defun C:C11 ( / from to dest File ) (vl-load-com) (setq from "D:\\11.dwg") (setq dest (strcat (VL-FILENAME-DIRECTORY from)(VL-FILENAME-BASE from))) (vl-mkdir dest) (setq dest (strcat dest "\\")) (setq to (getfiled "Файл для сохранения проекта" dest "dwg" 17)) (if to (progn (setq File (vla-open (vla-get-documents(vlax-get-acad-object)) from)) (vla-saveas File to ac2004_dwg) (vla-put-ActiveDocument (vlax-get-acad-object) File) ;(vla-close File) (vlax-release-object File) ) ) (princ) )
Вот вариант с запросом выбора шаблона.
(defun C:C11 ( / from to dest File ) (vl-load-com) (if *LAST_DIR* (setq from (getfiled "Выберите файл шаблона" (VL-FILENAME-DIRECTORY *LAST_DIR*) "dwg" 16)) (setq from (getfiled "Выберите файл шаблона" "" "dwg" 16))) ;_ end of if (if from (progn (setq *LAST_DIR* from) (VL-PROPAGATE '*LAST_DIR*) (setq dest (strcat (VL-FILENAME-DIRECTORY from)(VL-FILENAME-BASE from))) (vl-mkdir dest) (setq dest (strcat dest "\\")) (setq to (getfiled "Файл для сохранения проекта" dest "dwg" 17)) (if to (progn (setq File (vla-open (vla-get-documents(vlax-get-acad-object)) from)) (vla-saveas File to ac2004_dwg) (vla-put-ActiveDocument (vlax-get-acad-object) File) ;(vla-close File) (vlax-release-object File) ) ) ) ) (princ) )
Господа, Всем огромное человеческое Спасибо!! Все работает!! Помогли сэкономить кучу времени!!!
Уважаемый VVA,выручите последний раз: Все то же самое, но чтобы файл сохранялся ВСЕГДА на D:\ (без создания папки с именем шаблона). Как сделать?
Закоментарь (vl-mkdir dest) вот так
;;;(vl-mkdir dest)
И вместо (setq to (getfiled "Файл для сохранения проекта" dest "dwg" 17)
(setq to (getfiled "Файл для сохранения проекта""D:\\" "dwg" 17))
VVA, Но все равно при запросе на сохранение создается папка с именем шаблона.
Приведи код, на котором остановился
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Настройка меню и DIESEL → Как сделать кнопку открытия и "Сохранения как" конкретного файла?
Форум работает на PunBB, при поддержке Informer Technologies, Inc