Тема: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Подскажите, плиз, как Присвоить кнопке следующие функции:
При нажатии на кнопку должен открыться и сразу же "Сохраниться как" (с запросом имени) конкретный файл?

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Подскажите, плиз, как Присвоить кнопке следующие функции:
При нажатии на кнопку должен открыться файл 11.dwg,хранящийся на диске <D> в корне и "Сохраниться как" (с запросом имени) в папку <11> диска <D>? Заранее спасибо!!!

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

> septima
Если не предполагается рисунок редактировать, то на кой его открывать? Скопировать в проводнике, любом файловом менеджере...

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Можно и без открытия файла
Сама ф-ция

(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))

Как сделать кнопку не раз уже упоминалось

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

В том то и дело, что файл 11.dwg - шаблон,исходник для последующей обработки. Его надо открыть, "Сохранить как" в папку <11> под другим именем и отредактировать под текущий проект. Спасибо VVA за полезный алгоритм, но ,похоже, я сам виноват: не совсем корректно описал вопрос.

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Не понятно что значит " отредактировать под текущий проект". А так скопируй просто 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)

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Если непременно надо с открытием в Автокаде

(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

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

VVA, Огромное спасибо за помощь!!  А как все это завязать на кнопку? И файл 11.dwg обязательно надо открыть, кое-что в нем изменить и сохранить в папку <11>, но под другим именем. Реально все эти функции повесить на одну кнопку? Вот как? smile)

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

> septima
Нереально. Потому как в программном режиме (по крайней мере лисповом) после активизации другого документа выполнение функции прерывается. В общем, некорректно оно себя вести начинает

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

В виде макроса на кнопке совсем никак? Но почему? Я же могу по-отдельности выполнить все эти функции: Находясь в одном файле открыть 11.dwg, "сохранить его как",скажем, 11.000.5 (файл для проекта 11.000.5)в постоянную папку <11>, и со спокойной душой работать в теперь уже 11.000.5? Затем его просто сохранить и закрыть. В итоге получаем файл 11.000.5 в папке <11>, созданный из 11.dwg.

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Опять, непонятно что значит "кое-что в нем изменить"? Если просто открыть->сохранить как, то сохраняешь этот код под именем
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 Как сохранить программный код на своем компьютере?

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

> septima
Вот именно, по отдельности. "Слабое звено" здесь - фраза "Находясь в одном файле...". Т.е., чтобы открыть нужный файл, вы сначала открываете другой. А зачем? Разве вы можете начать рисовать, скажем, отрезок в одном рисунке, а закончить в другом? Нет, конечно. Так же и Лисп-программа или макрос не могут, начав выполнение в одном рисунке, закончить в другом. И нечего мудрить. Открывайте рисунок двойным кликом на имени файла в проводнике или где там еще и выполняйте "Сохранить как...".

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Уважаемый 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 ждет своей очереди.

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

> septima
Так в том то и дело, что вы хотите начать выполнение макроса в файле "RS.00.dwg", а закончить в "D:/11.dwg". Вам нужно 2 кнопки, IMHO. Одна для открытия файла "D:/11.dwg" из любого файла и другая для "Сохранения как..." уже текущего файла "D:/11.dwg" в файл "D:/11/11.dwg".

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

> 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)
)

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

> VVA
Попробовал программу. Сначала создал два файла RS.00.dwg и 11.dwg на диске D:. Создал папку D:\11. Открыл файл RS.00.dwg, выполнил программу. В папке D:\11 образовался файл 11a.dwg, только текущим-то и единственно загруженным файлом оказался все-таки RS.00.dwg.

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Чтобы файл не выгружался, надо закоментировать строку

(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)
)

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

> VVA
Эта программа сработала. Однако, здесь заданы фиксированные имена файлов. А septima нужен запрос имени файла для "Сохранения как...".

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Короче так. Постановка задачи такая.
Есть некий файл-шаблон. Его имя задается явно.
На том же диске, создается папка с именем=имени шаблона. Запрашивается имя файла для сохранения, шаблон сохраняется как и становится текущим документом.
Реализация

(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)
)

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Вот вариант с запросом выбора шаблона.

(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)
)

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Господа, Всем огромное человеческое Спасибо!! Все работает!! Помогли сэкономить кучу времени!!!

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Уважаемый VVA,выручите последний раз:  Все то же самое, но чтобы файл сохранялся ВСЕГДА на D:\ (без создания папки с именем шаблона). Как сделать?

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Закоментарь (vl-mkdir dest) вот так

;;;(vl-mkdir dest)

И вместо (setq to (getfiled "Файл для сохранения проекта" dest "dwg" 17)

(setq to (getfiled "Файл для сохранения проекта""D:\\" "dwg" 17))

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

VVA, Но все равно при запросе на сохранение создается папка с именем шаблона.

Re: Как сделать кнопку открытия и "Сохранения как" конкретного файла?

Приведи код, на котором остановился