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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD: как сохранить файл через диалоговое окно ?

NanoCAD: как сохранить файл через диалоговое окно ?

Ответ
Поиск в этой теме
Непрочитано 11.04.2024, 10:41 #1
NanoCAD: как сохранить файл через диалоговое окно ?
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 616

Всем привет!

В Автокаде для этого служила конструкция:

(command "_.save" "~")

но в nanoCAD'е этот способ не работает.

Подскажите, плиз, как вызвать диалоговое окно для ввода
имени файла при сохранении ? Может быть, "хитрый ключ"
есть или системная переменная какая-нибудь?

И - "чтобы два раза не вставать" - обратная задача.

Как вызвать (из ЛИСПа, разумеется) диалоговое окно для
ввода (фактически - выбора) имени файла, чтобы потом
можно было использовать его "куда-нибудь по своему
усмотрению" ?
__________________
Счастливо, Алексей!
Просмотров: 3693
 
Непрочитано 11.04.2024, 10:52
#2
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
как вызвать диалоговое окно для ввода
имени файла при сохранении ?
filedia ?

Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
вызвать (из ЛИСПа, разумеется) диалоговое окно для
ввода (фактически - выбора) имени файла, чтобы потом
можно было использовать его "куда-нибудь по своему
усмотрению" ?
См. getfiled
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.04.2024, 11:08
#3
===AAA===


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


Цитата:
filedia ?
Не, её я в первую очередь проверил...

Ну, в принципе, связка

(setq a1 (getfiled ...))
(command "save" a1)


задачу вроде бы как решает...

Кривовато, конечно (нужно будет ещё проверку а1 делать),
но для начала - сойдёт.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 11.04.2024 в 11:21.
===AAA=== вне форума  
 
Непрочитано 11.04.2024, 11:28
1 | #4
Кулик Алексей aka kpblc
Moderator

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


И кто мешает использовать vla-save - вопрос...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.04.2024, 11:46
#5
===AAA===


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


Да фиг его знает. Я спокойно к командным методам отношусь.
Главное - реакторы не забывать отключать перед ними. :-)

Хотя именно для nanoCAD у командных методов есть ещё один
маленький недостаток.

Эстетический.

Полного исследования не проводил, но предварительно его
можно сформулировать так:

Если где-то в начале программа (или функция - неважно) не
провела "интерактив" с пользователем, т.е. не спросила его
что-нибудь выбрать через DCL-окно или ввести какой-нибудь
(getxxxx ...) с клавиатуры/мыши, то при работе программы
"след" от первого встреченного командного метода отразится
в командной строке.

Ну, допустим, появилась у нас по ходу кода строка типа

(command "_zoom" "_w" точка1 точка2)

тогда при выполнении программы мы (если присмотримся)
увидим:

Команда:_zoom

Разумеется, cmdecho=0

Это ни на что не влияет, программа отработает штатно и это
"_zoom" без следа пропадёт после нескольких долей
секунд по завершению её работы.

Т.е. именно так - "без следа", а не уйдёт на текстовый экран.

Лучше бы они поддержку "\r" для печати реализовали, могут
ведь написанное из командной строки убирать! :-)
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 11.04.2024 в 13:58.
===AAA=== вне форума  
 
Непрочитано 11.04.2024, 14:10
#6
Кулик Алексей aka kpblc
Moderator

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


cmdecho мало. Надо еще nomutt. И не забывать их восстанавливать.
Как пример: https://autolisp.ru/2011/12/01/selec...ts-custom-msg/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.04.2024, 14:23
#7
===AAA===


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


Увы, той версии nanoCAD'а, что установлен у меня (23.1)
установки nomutt тоже по барабану. :-(

И, кстати, на характер этого следа влияет префикс "точка".
Т.е. поведение при:

(command "_zoom" ...)

будет отличаться от поведения

(command "_.zoom" ...)

В первом случае слово _zoom будет "висеть" на протяжении
всей работы программы, во втором - через какое-то время уступит
место следующему встреченному командному методу, допустим,
это будет:

Команда:_insert

Так они и будут мелькать после слова "Команда:" - только сами
названия команд, без конкретных параметров.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 11.04.2024 в 14:31.
===AAA=== вне форума  
 
Непрочитано 11.04.2024, 14:40
#8
Кулик Алексей aka kpblc
Moderator

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


Приведи пример кода, где там у тебя все мелькает как не в себя.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.04.2024, 14:46
#9
===AAA===


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


Он длинный - сотни строк (потому и хватает время "на рассмотреть").
Ходит по Модели и Листу, настройки всякие делает. Может быть,
сподоблюсь что-нибудь "тестовое" с задержками между командами
сделать - выложу.

P.S. См. личку
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 11.04.2024 в 14:59.
===AAA=== вне форума  
 
Непрочитано 11.04.2024, 15:58
#10
Кулик Алексей aka kpblc
Moderator

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


В качестве задерживателя и проверки
Код:
[Выделить все]
 ((lambda (/ sysvar) 
   (setq sysvar (vl-remove nil 
                           (mapcar 
                             (function 
                               (lambda (x / temp) 
                                 (if (setq temp (getvar (car x))) 
                                   (progn 
                                     (setvar (car x) (cdr x))
                                     (cons (car x) temp)
                                   )
                                 )
                               )
                             )
                             '(("cmdecho" . 0) ("menuecho" . 0) ("nomutt" . 1))
                           )
                )
   )
   (alert "Start")
   (vl-cmdf "_.delay" 1000)
   (alert "End")
   (foreach item sysvar 
     (setvar (car item) (cdr item))
   )
   (princ)
 ) 
)
Проверил на 23.1 - работает без шумов в ком.строке
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2024, 03:39
#11
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069


Вроде как раз в DOSLIB такое мельком видел, пока сборку ковырял:
(dos_getfilem "Select a file" "C:\\Program Files\\Autocad 2010\\" "Drawing files (*.dwg)|*.dwg|All files (*.*)|*.*||")
Или оно под наной не законтачило?
Нубий-IV вне форума  
 
Автор темы   Непрочитано 12.04.2024, 05:32
#12
===AAA===


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


То Кулик Алексей aka kpblc

Покопался ещё с этим "эхом".

Та-дам !!!

Если добавить в начало кода строку типа (alert "Сообщение"),
то все эхо/артефакты из командной строки пропадают !
Теперь бы найти функцию, которая молча, без диалога
с пользователем также глушит этот "косяк" NK.

Добавлено:

Если повесить вызов на кнопку панели задач, то эти "шумы"
тоже исчезают. Они появляются, только если запускать программу
с клавиатуры, так сказать - "в отладочном режиме".
Ну, косяк и косяк, Бог бы с ним. Может быть - и поправят когда-
нибудь...

То Нубий-IV

Да, эта функция в DOSLIB есть. Запустилась и прекрасно
работает (я её использую) - за что ещё раз огромное
спасибо
! Просто я немного опасаюсь, что на очередной
версии nanoCADа (под Виндовс или Линукс) я останусь
без этой замечательной библиотеки и - уже неспешно
и в "фоновом режиме" - пытаюсь найти стандартные
средства для нужных мне операций.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 12.04.2024 в 09:52.
===AAA=== вне форума  
 
Непрочитано 12.04.2024, 15:42
1 | 1 #13
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
опасаюсь, что на очередной версии nanoCADа (под Виндовс или Линукс) я останусь без этой замечательной библиотеки
Я программил по-маленькому под акады, по-моему, начиная с 2006.

Сначала это был VBA - простой язык, удобная встроенная IDE с отладчиком. На нем склепал всяких мелочей - сумматоры длин, с графической выдачей по слоям/цветам; очистка форматирования мтекстов с выбором конкретных кодов (цвета, шрифты, курсив и т.п. отдельно по выбору), и прочие подобные мелочи. А потом VBA отломали: при независимой установке часть использованных функций VBA стала недоступна, и все эти мелочи перестали работать.

Дальше надо было выбирать, куда переехать. Лисп учить не хотелось вообще - он слишком не похож на VBA/С++, которые я немного знал; да еще из него мало куда можно дотянуться. Шарп тогда только начинался, и я в нем тоже ничего не понимал; да и после того, как микрософт только что выбросил один язык, чтобы тут же сделать такой же, но другой, желания с ним возиться не было.

Интересу ради перенес несколько команд на C++: сумматоры, измерители, округлялки, чистилки. В результате на сегодня у меня в коллекции эти команды собраны под все акады с 2005 по 2025, и вполне себе работают, практически без внесения изменений в исходники. Некоторые пляски с бубном при сборке, конечно, бывали, но не слишком сложные: в старых бесплатных студиях не было библиотеки MFC, и пришлось малость подмухлевать, чтобы сборка проходила без нее; сегодня этой проблемы нет.

Думаю, раз уж под нанокад doslib собрался - видимо, он и дальше будет под него собираться. Всего сложностей - обновить студию, обновить пути к SDK, и запустить сборку. Будут какие проблемы - на форуме подскажут, как что подкрутить. Все, что эта библиотека делает - вызывает стандартные виндовые функции доступа к файлам/диалогам и т.п. Что под виндой, что в линуховой виртуалке они, видимо, будут работать и дальше, столько же, сколько и сам нанокад.

Еще вроде как C#/NET должен переживать обновление версий, но под него придется сначала написать нужные команды, подглядывая в исходники doslib. Это надо уметь читать плюсы, и программить на шарпе. Это по-любому дольше, чем собрать уже готовую библиотеку. Я бы завел отдельную тему "научите собирать простые команды на C++ под кад", от установки студии до настройки проекта. Как получится собрать doslib под пару-тройку разных версий нанокада - можно будет перестать пить успокоительное, и перейти уже на шампанское.
Нубий-IV вне форума  
 
Непрочитано 12.04.2024, 19:11
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Просто я немного опасаюсь, что на очередной
версии nanoCADа (под Виндовс или Линукс) я останусь
без этой замечательной библиотеки
ну как бы поддержка autolisp в новых версиях нанокада тоже не 100% гарантирована, конкурент то ушел с оф. рынка ПО...
Сергей812 вне форума  
 
Непрочитано 12.04.2024, 19:29
#15
Кулик Алексей aka kpblc
Moderator

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


Пока поддерживается. Со своими тонкостями, конечно, но пока живет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.04.2024, 12:39
#16
===AAA===


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


Цитата:
И кто мешает использовать vla-save - вопрос...
Тут вот ещё какое дело.

Если дать vla-save, то NK будет думать, что чертёж ещё
не сохранялся и при закрытии выдаст "контрольный вопрос",
а не желаете ли, мол, сохраниться?

А вот после (command "save") будет молчать, как партизан.
Который всё про всех знает.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 16.04.2024, 12:44
1 | 1 #17
Кулик Алексей aka kpblc
Moderator

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


Ну тогда пользуй vla-saveas, он на НК23.1 корректно сработал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.04.2024, 09:06
#18
===AAA===


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


Ещё один вопросик.

Если я открыл файл *.dwg в режиме "только чтение" (например, с сетевого
диска или просто имеющего этот атрибут), то как можно узнать про это
и даже не пытаться его сохранить?

Системная переменная там или ещё чего...

Примечание:

1) Системная переменная "WRITESTAT" в NK23.1 не определена

2) в NC-23.1 можно обойтись методом (vla-save ) - он ничего не сохранит,
но и ошибку не выдаст (в Автокаде, кстати, выдаст), но на это вряд ли
стоит рассчитывать, т.к. это дело могут и исправить.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 17.04.2024 в 09:34.
===AAA=== вне форума  
 
Непрочитано 17.04.2024, 09:42
1 | #19
Кулик Алексей aka kpblc
Moderator

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


(equal (vla-get-readonly (vla-get-activedocument (vlax-get-acad-object))) :vlax-true)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.04.2024, 12:35
#20
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,808


(zerop (getvar 'writestat))
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 17.04.2024, 17:19
#21
===AAA===


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


Тут ещё один глюк NC23.1 обнаружился.

Оба метода (vla-save ) и (vla-saveas ) после
сработки портят - кто бы мог подумать! - зону
отображения координат в статусной строке.

Она становится настолько узкой, что значения
Х в ней ещё видно, Y - уже наполовину, а для
Z вообще места не остаётся.

А вот (command "save") не только её не портит,
но и восстанавливает "зауженную зону",
испорченную предыдущими методами, до своего
нормального размера.

Причем делает это "в два прохода":

1-й (command "save") - делает зону "пошире", Y-координата
уже помещается, Z - ещё нет.
2-й (command "save") - делает зону "нормальной", помещаются
все три координаты - X, Y и Z

Ну как так-то? Глюкодром какой-то...

Добавлено:

Понял, "насколько" сжимается зона отображения координат.
Была в ней, скажем, "начальная ширина":

150.0000 200.0000 0.0000

и вся информация помещалась.

Начали чертить Отрезок, информация изменилась на
полярные координаты:

47.5289 < 72

Вот на этой-то ширине зона координат и зафиксируется
и декартовы "три числа" туда уже не влезут.

Если сейчас дать команду SAVE (скажем, из меню NC),
ширина восстановится.

Есть идеи, как можно ещё её восстановить?
С (grtext -2 ) игрался - пока решения не нашёл.

Решено.

Ну вот - пообщался сам с собой. :-)

Достаточно перед сохранением внутри функции
дать достаточно длинный вывод в зону координат, типа:

(grtext -2 "Резервируем зону координат по ширине")

и проблема исчезает.

Кстати, на изменение системной переменной COORDS
NC23.1 никак не реагирует, что тоже не есть удобно.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 18.04.2024 в 07:13.
===AAA=== вне форума  
 
Непрочитано 28.06.2024, 15:11
#22
kosmi


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


пост №12
Да, эта функция в DOSLIB есть. Запустилась и прекрасно
работает (я её использую) - за что ещё раз огромное
спасибо!

Можно поподробнее, как DOSLIB использовать для nanoCad ?
kosmi вне форума  
 
Автор темы   Непрочитано 28.06.2024, 15:59
#23
===AAA===


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


Цитата:
Можно поподробнее, как DOSLIB использовать для nanoCad ?
О, я тут долго головой об эту тему бился, пока добрый человек Нубий-IV
не перекомпилировал её под НК. Уже думал, что кроме меня, эта DosLib никому
и не нужна.

См. тему:

https://forum.dwg.ru/showthread.php?t=170802&page=3

заодно и проверь, пойдёт ли она под НК-24.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 28.06.2024, 16:13
#24
kosmi


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


Спасибо за ссылку. К сожалению пока проверить возможности нет. А как устанавливать, просто *.nrx из архива подгрузил и всё, или ещё какие-то телодвижения нужны?
kosmi вне форума  
 
Автор темы   Непрочитано 28.06.2024, 16:15
#25
===AAA===


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


Просто подгружаешь.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 28.06.2024, 16:26
#26
kosmi


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


Спасибо за участие, не теряйся, буду теперь особо внимательно смотреть твои темы. Ты теперь для меня "важный субъект для исследований". Удачи!
kosmi вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD: как сохранить файл через диалоговое окно ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать БОЛЬШОЙ файл через интернет? msv_mnv Разное 17 14.12.2018 14:34
Диалоговое окно solo123 Программирование 1 14.03.2015 07:43
Как сохранить в DOC файл, OLE2Frame объект Word вставленный в DWG? Enion Программирование 9 29.03.2013 07:52
Как восстоновить диалоговое окно "Генератор валов" в AutoCad Mechanikal-е? Армен Грачикович Вертикальные решения на базе AutoCAD 2 11.03.2013 13:49
Autocad 2012. Почему макрос подавляет диалоговое окно? vovkaf Программирование 24 10.09.2012 18:10