|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
NanoCAD: как сохранить файл через диалоговое окно ?
г. Норильск
Регистрация: 15.08.2005
Сообщений: 616
|
||
Просмотров: 3693
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
filedia ?
См. getfiled
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Цитата:
Ну, в принципе, связка (setq a1 (getfiled ...)) (command "save" a1) задачу вроде бы как решает... Кривовато, конечно (нужно будет ещё проверку а1 делать), но для начала - сойдёт.
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 11.04.2024 в 11:21. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
И кто мешает использовать vla-save - вопрос...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Да фиг его знает. Я спокойно к командным методам отношусь.
Главное - реакторы не забывать отключать перед ними. :-) Хотя именно для nanoCAD у командных методов есть ещё один маленький недостаток. Эстетический. Полного исследования не проводил, но предварительно его можно сформулировать так: Если где-то в начале программа (или функция - неважно) не провела "интерактив" с пользователем, т.е. не спросила его что-нибудь выбрать через DCL-окно или ввести какой-нибудь (getxxxx ...) с клавиатуры/мыши, то при работе программы "след" от первого встреченного командного метода отразится в командной строке. Ну, допустим, появилась у нас по ходу кода строка типа (command "_zoom" "_w" точка1 точка2) тогда при выполнении программы мы (если присмотримся) увидим: Команда:_zoom Разумеется, cmdecho=0 Это ни на что не влияет, программа отработает штатно и это "_zoom" без следа пропадёт после нескольких долей секунд по завершению её работы. Т.е. именно так - "без следа", а не уйдёт на текстовый экран. Лучше бы они поддержку "\r" для печати реализовали, могут ведь написанное из командной строки убирать! :-)
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 11.04.2024 в 13:58. |
|||
![]() |
|
||||
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-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Увы, той версии nanoCAD'а, что установлен у меня (23.1)
установки nomutt тоже по барабану. :-( И, кстати, на характер этого следа влияет префикс "точка". Т.е. поведение при: (command "_zoom" ...) будет отличаться от поведения (command "_.zoom" ...) В первом случае слово _zoom будет "висеть" на протяжении всей работы программы, во втором - через какое-то время уступит место следующему встреченному командному методу, допустим, это будет: Команда:_insert Так они и будут мелькать после слова "Команда:" - только сами названия команд, без конкретных параметров.
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 11.04.2024 в 14:31. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Приведи пример кода, где там у тебя все мелькает как не в себя.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Он длинный - сотни строк (потому и хватает время "на рассмотреть").
Ходит по Модели и Листу, настройки всякие делает. Может быть, сподоблюсь что-нибудь "тестовое" с задержками между командами сделать - выложу. P.S. См. личку
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 11.04.2024 в 14:59. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В качестве задерживателя и проверки
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069
|
Вроде как раз в DOSLIB такое мельком видел, пока сборку ковырял:
(dos_getfilem "Select a file" "C:\\Program Files\\Autocad 2010\\" "Drawing files (*.dwg)|*.dwg|All files (*.*)|*.*||") Или оно под наной не законтачило? |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
То Кулик Алексей aka kpblc
Покопался ещё с этим "эхом". Та-дам !!! Если добавить в начало кода строку типа (alert "Сообщение"), то все эхо/артефакты из командной строки пропадают ! Теперь бы найти функцию, которая молча, без диалога с пользователем также глушит этот "косяк" NK. Добавлено: Если повесить вызов на кнопку панели задач, то эти "шумы" тоже исчезают. Они появляются, только если запускать программу с клавиатуры, так сказать - "в отладочном режиме". Ну, косяк и косяк, Бог бы с ним. Может быть - и поправят когда- нибудь... То Нубий-IV Да, эта функция в DOSLIB есть. Запустилась и прекрасно работает (я её использую) - за что ещё раз огромное спасибо! Просто я немного опасаюсь, что на очередной версии nanoCADа (под Виндовс или Линукс) я останусь без этой замечательной библиотеки и - уже неспешно и в "фоновом режиме" - пытаюсь найти стандартные средства для нужных мне операций.
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 12.04.2024 в 09:52. |
|||
![]() |
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,069
|
Цитата:
Сначала это был VBA - простой язык, удобная встроенная IDE с отладчиком. На нем склепал всяких мелочей - сумматоры длин, с графической выдачей по слоям/цветам; очистка форматирования мтекстов с выбором конкретных кодов (цвета, шрифты, курсив и т.п. отдельно по выбору), и прочие подобные мелочи. А потом VBA отломали: при независимой установке часть использованных функций VBA стала недоступна, и все эти мелочи перестали работать. Дальше надо было выбирать, куда переехать. Лисп учить не хотелось вообще - он слишком не похож на VBA/С++, которые я немного знал; да еще из него мало куда можно дотянуться. Шарп тогда только начинался, и я в нем тоже ничего не понимал; да и после того, как микрософт только что выбросил один язык, чтобы тут же сделать такой же, но другой, желания с ним возиться не было. Интересу ради перенес несколько команд на C++: сумматоры, измерители, округлялки, чистилки. В результате на сегодня у меня в коллекции эти команды собраны под все акады с 2005 по 2025, и вполне себе работают, практически без внесения изменений в исходники. Некоторые пляски с бубном при сборке, конечно, бывали, но не слишком сложные: в старых бесплатных студиях не было библиотеки MFC, и пришлось малость подмухлевать, чтобы сборка проходила без нее; сегодня этой проблемы нет. Думаю, раз уж под нанокад doslib собрался - видимо, он и дальше будет под него собираться. Всего сложностей - обновить студию, обновить пути к SDK, и запустить сборку. Будут какие проблемы - на форуме подскажут, как что подкрутить. Все, что эта библиотека делает - вызывает стандартные виндовые функции доступа к файлам/диалогам и т.п. Что под виндой, что в линуховой виртуалке они, видимо, будут работать и дальше, столько же, сколько и сам нанокад. Еще вроде как C#/NET должен переживать обновление версий, но под него придется сначала написать нужные команды, подглядывая в исходники doslib. Это надо уметь читать плюсы, и программить на шарпе. Это по-любому дольше, чем собрать уже готовую библиотеку. Я бы завел отдельную тему "научите собирать простые команды на C++ под кад", от установки студии до настройки проекта. Как получится собрать doslib под пару-тройку разных версий нанокада - можно будет перестать пить успокоительное, и перейти уже на шампанское. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Пока поддерживается. Со своими тонкостями, конечно, но пока живет
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Цитата:
Если дать vla-save, то NK будет думать, что чертёж ещё не сохранялся и при закрытии выдаст "контрольный вопрос", а не желаете ли, мол, сохраниться? А вот после (command "save") будет молчать, как партизан. Который всё про всех знает.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ну тогда пользуй vla-saveas, он на НК23.1 корректно сработал.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Ещё один вопросик.
Если я открыл файл *.dwg в режиме "только чтение" (например, с сетевого диска или просто имеющего этот атрибут), то как можно узнать про это и даже не пытаться его сохранить? Системная переменная там или ещё чего... Примечание: 1) Системная переменная "WRITESTAT" в NK23.1 не определена 2) в NC-23.1 можно обойтись методом (vla-save ) - он ничего не сохранит, но и ошибку не выдаст (в Автокаде, кстати, выдаст), но на это вряд ли стоит рассчитывать, т.к. это дело могут и исправить.
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 17.04.2024 в 09:34. |
|||
![]() |
|
||||
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-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 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. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Цитата:
не перекомпилировал её под НК. Уже думал, что кроме меня, эта DosLib никому и не нужна. См. тему: https://forum.dwg.ru/showthread.php?t=170802&page=3 заодно и проверь, пойдёт ли она под НК-24.
__________________
Счастливо, Алексей! |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как передать БОЛЬШОЙ файл через интернет? | 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 |