Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Балиев от 27-04-2016, 15:44:35

Название: Причуды AutoCAD 2017
Отправлено: Балиев от 27-04-2016, 15:44:35
Скачал триал версию AutoCAD 2017 и обнаружил, что в папке для сохранения по умолчанию он не видит (не находит функцией "findfile") файлы с расширением "dcl".  При этом файлы с другими расширениями (я проверял расширения "dwg" и "txt") он видит. Если же папку по умолчанию прописать еще и в настройках ("Путь доступа к вспомогательным файлам"), то он начинает видеть и dcl-файлы.
Проверял на реальной и виртуальной машинах.
Если это не мои галлюцинации, то хорошо бы об этом сообщить разработчику.
Спасибо.
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 27-04-2016, 15:50:09
Что такое "папка для сохранения по-умолчанию" и почему findfile там должен что-то находить?
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 27-04-2016, 16:01:55
Папка для сохрананения по умолчанию эта папка в которую сохраняются dwg-файлы по команде "save" без указания пути. Если AutoCAD запускается без указания dwg - файла, то это папка МоиДокументы, если с указанием, то это папка, в которой лежит указанный файл.
Почему findfile должен там что-то находить я точно не знаю, но, видимо, потому что при запуске AutoCAD'а эти папки (пути к ним) включаются в список путей, по которым findfile производит поиск. Но в любом случае, то, что файлы (из одной и той же папки) с одним расширением findfile находит, а с другим нет, выглядит странно, ты не находишь?
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 27-04-2016, 19:14:47
Но в любом случае, то, что файлы (из одной и той же папки) с одним расширением findfile находит, а с другим нет, выглядит странно, ты не находишь?
Да. Странновато. Проверил - действительно так. На досуге отправлю в ADN DevHelp. Хотя есть очень простой способ, как это ограничение обойти - достаточно к имени файла добавить точку в конце:
Command: (findfile "111.dcl") nil
Command: (findfile "111.dcl.") "C:\\Users\\Rivilis-AN\\Documents\\111.dcl"
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 27-04-2016, 22:39:12
достаточно к имени файла добавить точку в конце
Интересное решение...
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 27-04-2016, 23:22:37
достаточно к имени файла добавить точку в конце
Интересное решение...
Главное, что оно работает.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 28-04-2016, 12:55:04
Главное, что оно работает.
Да, конечно. Но напрягает то, что это недокументированная возможность, а, значит, любой update программы может привести к тому, что она перестанет работать...
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 28-04-2016, 13:00:39
Но напрягает то, что это недокументированная возможность, а, значит, любой update программы может привести к тому, что она перестанет работать...
Вообще это должно работать всегда и везде, так как добавление точки к имени файла в его конце не меняет имя файла. Проверил из спортивного интереса в AutoCAD 2008 x86 в Windows XP:
Command: (findfile "1.dcl")
"D:\\Documents and Settings\\RIVILIS\\Мои документы\\1.dcl"
Command: (findfile "1.dcl.")
"D:\\Documents and Settings\\RIVILIS\\Мои документы\\1.dcl"
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 28-04-2016, 13:05:17
Вообще это должно работать всегда и везде, так как добавление точки к имени файла в его конце не меняет имя файла. Проверил из спортивного интереса в AutoCAD 2008 x86 в Windows XP:
Ну, чтож, это убеждает. Спасибо!
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 29-04-2016, 13:11:17
"Все чудесатее и чудесатее!"(С) Алиса в стране чудес.

Если запустить AutoCAD 2017 с указанием имени файла (т.е. кликнуть правой кнопкой мыши на имени файла, в открывшемся меню установить курсор на пункте "Открыть с помощью", а, затем, выбрать AutoCAD 2017 из предлагаемого списка программ), то в открывшейся сессии не будет работать функция "open":
Command: (open "tmp.txt" "w")
nil
Если же запустить AutoCAD 2017 без указания файла, или установить AutoCAD 2017 в качестве версии по умолчанию и запустить его двойным кликом на dwg-файле, то функция "open" работает:
Command: (open "tmp.txt" "w")
#<file "tmp.txt">

Ну, и последнее: при вызове текстового окна нажатием кнопки F2, оно не выходит на передний план (остается под графическим окном).
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 29-04-2016, 13:24:21
Про (open ...) это совершенно нормально. Какой каталог при этом является текушим известно только одному Богу. Не указывать полный путь к файлу - это признак очень плохого стиля программирования.

Ну, и последнее: при вызове текстового окна нажатием кнопки F2, оно не выходит на передний план (остается под графическим окном).
У меня выходит. Что я делаю не так?



Запиши видео при помощи Autodesk Screencast и выложи ссылку на него, как у меня написано в инструкции в подписи.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 29-04-2016, 17:10:46
Про (open ...) это совершенно нормально. Какой каталог при этом является текушим известно только одному Богу.
А вот ни разу не согласен! Если запускаешь AutoCAD с указанием файла, то текущим будет каталог, в котором расположен файл. Поэтому open обязана работать.

Цитировать
Не указывать полный путь к файлу - это признак очень плохого стиля программирования.
Не горячись, разные ситуации могут быть.

Цитировать
У меня выходит. Что я делаю не так?
Пока пытался записать видео (никаки не пойму, почему у меня действия мыши и клавиш не воспроизводятся на экране), выяснилось, что если набрать команду: textscr, то текстовый экран появляется и дальше работает штатно с кнопкой F2. Правда, после перегруженияAutoCad'а снова нужно набирать textscr.
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 29-04-2016, 18:21:17
Если запускаешь AutoCAD с указанием файла, то текущим будет каталог, в котором расположен файл.
Категорически нет. Это совершенно необязательно. Более того, приложения, загруженные в AutoCAD могут менять текущий каталог. Кстати, каталог в котором находится dwg-файл, может быть закрыт на запись...

Не горячись, разные ситуации могут быть.
Единственная ситуация, которая могла бы оправдать это - если не знаешь полный путь к файлу. Тем не менее его желательно вычислить.
никаки не пойму, почему у меня действия мыши и клавиш не воспроизводятся на экране
А они записывались?
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F51809%2F7842324.6%2F0_122882_d96201e8_orig.png&hash=c61da2cd90bc29c62ca80da470ab085e)
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F133056%2F7842324.6%2F0_122883_33b7ba7a_orig.png&hash=adf9b79c7904cfae1a46927f5d13d5ef)

Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 29-04-2016, 19:17:38
Если запускаешь AutoCAD с указанием файла, то текущим будет каталог, в котором расположен файл.
Цитировать
Категорически нет. Это совершенно необязательно.
Пример привести можешь?
Цитировать
А они записывались?
Оказалось, что они появляются только после загрузки на сервер...
Вот видео поведения F2, если предварительно не введена команда "textscr":


Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 29-04-2016, 19:42:02
Пример привести можешь?
Написать программу которая будет изменять текущий каталог после старта AutoCAD? Зачем? Не веришь что это возможно? ;)
Достаточно воспользоваться функцией SetCurrentDirectory (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365530%28v=vs.85%29.aspx) в arx-приложении или аналогом в .NET-приложении. Более того, если из AutoCAD запустить exe-файл, который поменяет рабочий каталог, то и у AutoCAD поменяется рабочий каталог.
Обрати также внимание на значение системной переменной REMEMBERFOLDERS - может быть полезным для определения текущего каталога AutoCAD.

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

P.S.: Кстати, как я вижу в видео, кроме стандартных загружено еще и твое приложение. Проверь без него.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 29-04-2016, 19:49:26
Написать программу которая будет изменять текущий каталог после старта AutoCAD?
Я имею в виду штатную загрузку AutoCAD. Описываемый мной случай отказа функции open касается именно штатной загрузки. А программно и бабушку дедушкой переопределить можно.:)
Цитировать
В любом случае у меня это не воспроизводится ни в русской, ни в английской версии.
ОК, вопрос закрыт.
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 29-04-2016, 20:00:26
Заодно проверил по поводу (open "tmp.txt" "w"):

Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 29-04-2016, 22:25:23
Странно... А настройки у тебя "заводские" или что-то менял?
В любом случае, 4-го мая появлюсь на работе и попробую понять что не так...
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 29-04-2016, 23:18:40
А настройки у тебя "заводские" или что-то менял?
"Заводские". Для чистоты эксперимента создал новый профиль и сбросил его. Результат тот же.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 06-05-2016, 18:54:01
Я скинул все установки, даже миграцию профиля не стал делать, но, к сожалению, все то же самое - при запуске с указанием файла функция "open" не работает. Проверил еще и на виртуальной машине - то же самое. :(
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 06-05-2016, 18:59:40
Нужно понять с каким  каталогом пытается работать функция (open). Ты пытаешься открывать файл на запись. Соотвественно должны выполняться два условия:
1) каталог, в котором файл создаётся, должен существовать.
2) должны быть права на запись в этот каталог.
Запусти под Администратором, у которого есть права на запись в любой каталог.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 06-05-2016, 19:22:47
Если в функции "open" указать полный путь к файлу, то открывает... Что бы это значило? Нет каталога "по-умолчанию"?  Но в твоем случае, похоже, есть...
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 06-05-2016, 19:28:03
Что бы это значило? Нет каталога "по-умолчанию"?
Скорее нет прав на запись в этот каталог. Возможно это каталог с самим acad.exe, на который права на запись есть только у Администратора (я запускаю под административными правами).
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 06-05-2016, 19:40:36
Кстати, возможны еще варианты, когда будет ошибка (open "tmp.txt" "w"):
1) Этот файл "tmp.txt" уже есть и он открыт другой программой.
2) Этот файл "tmp.txt" уже есть и у него атрибут "read-only".
Впрочем у меня получилось так:
Command: (setq f (open "tmp.txt" "w")) #<file "tmp.txt">
Command: (close f) nil
Command: (findfile "tmp.txt") "C:\\Users\\Rivilis-AN\\Documents\\tmp.txt"
И это действительно именно тот только что созданный файл.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 06-05-2016, 22:09:09
я запускаю под административными правами
А как ты запускаешь под админом AutoCAD с указанием файла?
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 06-05-2016, 22:33:51
А как ты запускаешь под админом AutoCAD с указанием файла?
Просто работаю под пользователем с правами Администратора.
Но это уже оффтоп, не имеющий никакого отношения к теме.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 06-05-2016, 22:49:01
Просто работаю под пользователем с правами Администратора.
Я тоже. Так что это не решение...
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 07-05-2016, 01:23:51
Я тоже. Так что это не решение...
Решение - указывать правильный полный путь к файлу.
Название: Re: Причуды AutoCAD 2017
Отправлено: Алексей Кулик от 07-05-2016, 12:16:12
Off-Topic: показать
В порядке оффтопа: насколько я помню, можно проверить файл на режим ReadOnly через lisp с помощью vl-file-systime. Мой вариант, если интересно (написан очень давно, лет 7 назад):
Код - Auto/Visual Lisp [Выбрать]
  1. (defun _kpblc-is-file-read-only (file-name / file_hangle res)
  2.                                 ;|
  3. *    Проверяет, является ли файл "read-only". Возвращает t, если да. Проверки
  4. * наличия файла не выполняется.
  5. *    Параметры вызова:
  6. *  file-name  полное имя файла, с путем.
  7. (_kpblc-is-file-read-only "Z:\\КТО transit\\Разное\\Устройство молниезащиты.dwg")
  8. |;
  9.   (and file-name
  10.        (findfile file-name)
  11.        (or (not (vl-file-systime file-name))
  12.            ((lambda (/ svr obj res)
  13.               (setq svr (vlax-get-or-create-object "Scripting.FileSystemObject")
  14.                     obj (vlax-invoke-method svr 'getfile file-name)
  15.                     res (vlax-get-property obj 'attributes)
  16.                     ) ;_ end of setq
  17.               (vlax-release-object obj)
  18.               (vlax-release-object svr)
  19.               (setq obj nil
  20.                     svr nil
  21.                     ) ;_ end of setq
  22.               (/= (* 2 (/ res 2)) res)
  23.               ) ;_ end of lambda
  24.             )
  25.            ) ;_ end of or
  26.        ) ;_ end of and
  27.   ) ;_ end of defun
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 07-05-2016, 14:52:33
Решение - указывать правильный полный путь к файлу.
В том смысле, что это работает - да. Но, если для AutoCAD'а определено понятие "каталог по умолчанию", то это не решение, а "костыль". По-моему, существование или несуществование в AutoCAD'е каталога по умолчанию вопрос важный не только в связи с работоспособностью функции "open".
Название: Re: Причуды AutoCAD 2017
Отправлено: Алексей Кулик от 07-05-2016, 15:05:51
Надеяться на тот факт, что не будет смены каталога по умолчанию, с моей точки зрения непозволительная роскошь. Можно получить неработоспособное приложение на ровном месте.
Название: Re: Причуды AutoCAD 2017
Отправлено: Балиев от 07-05-2016, 15:23:10
Надеяться на тот факт, что не будет смены каталога по умолчанию, с моей точки зрения непозволительная роскошь. Можно получить неработоспособное приложение на ровном месте.
Если ты используешь этот каталог для временных файлов, то ничего страшного произойти не может. К тому же, вопрос о смене каталога по умолчанию решает сам программист.
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 07-05-2016, 15:55:27
По-моему, существование или несуществование в AutoCAD'е каталога по умолчанию вопрос важный не только в связи с работоспособностью функции "open".
Такого понятия в AutoCAD нет, не было и не будет. Точка. Больше это не обсуждается. Могу посоветовать пока установить появившиеся обновления для AutoCAD 2017 (есть уже HotFix 1 и HotFix 2) - возможно они помогут.
Если ты используешь этот каталог для временных файлов, то ничего страшного произойти не может.
Этот каталог может быть read-only, хотябы по той причине, что dwg-файл можно открыть с CD/DVD или из каталога с доступом read-only на сервере.
Так что никакие временные файлы там не создашь. Для временных файлов есть каталог %TEMP%, который всегда доступен для чтения/записи (иначе работать будет невозможно). Получить его путь можно при помощи (getenv "TEMP"):
Command: (getenv "TEMP") "C:\\Temp"
Название: Re: Причуды AutoCAD 2017
Отправлено: Дмитрий Загорулькин от 25-05-2016, 19:27:26
Для временных файлов в лиспе есть отличная функция vl-filename-mktemp.
Название: Re: Причуды AutoCAD 2017
Отправлено: Алексей Кулик от 25-05-2016, 20:26:04
Но какие результаты она возвращает! :) Уж лучше, мне кажется, вообще создавать свой подкаталог в %temp% и писать туда все что угодно ;)
Название: Re: Причуды AutoCAD 2017
Отправлено: Дмитрий Загорулькин от 26-05-2016, 10:33:22
У нее есть несколько плюсов:
- автоматически исключается конфликт названий
- автоматически обходятся проблемы с доступом
В результате гарантированно создается пустой временный файл.
У меня, по крайней мере, никогда не было проблем с ней. Насколько я помню, файл всегда создавался в папке "C:\Users\<UserName>\AppData\Local\Temp".
Название: Re: Причуды AutoCAD 2017
Отправлено: Алексей Кулик от 26-05-2016, 10:35:32
Хорошо, уточню ;) Полученный файл потом надо не забыть уничтожить, а то там такая свалка будет. :)
Название: Re: Причуды AutoCAD 2017
Отправлено: Александр Ривилис от 26-05-2016, 10:44:02
Насколько я помню, файл всегда создавался в папке "C:\Users\<UserName>\AppData\Local\Temp".
Ну в Windows XP такого каталога нет в принципе (это я ничего не сказал про то, что системный диск может быть не С: ). Так что или в заданном каталоге, или в %TMP%, или в %TEMP%, или в текущем каталоге: https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-F417A5EF-95BB-47EE-B60E-7C017635580D-htm.html
Название: Re: Причуды AutoCAD 2017
Отправлено: Дмитрий Загорулькин от 26-05-2016, 12:13:11
Полученный файл потом надо не забыть уничтожить, а то там такая свалка будет.
Естественно, так и делал :)
Ну в Windows XP такого каталога нет в принципе (это я ничего не сказал про то, что системный диск может быть не С: )
Ну я имел в виду путь %LOCALAPPDATA%\Temp. Вроде как по умолчанию именно этот путь в переменной %TEMP%. (в Windows Vista - 10)
https://www.microsoft.com/security/portal/mmpc/shared/variables.aspx