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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как прописать путь к каталогу по умолчанию в кнопке команды

Как прописать путь к каталогу по умолчанию в кнопке команды

Ответ
Поиск в этой теме
Непрочитано 21.02.2025, 10:36 #1
Как прописать путь к каталогу по умолчанию в кнопке команды
berstrider
 
инженер-проектировщик автомобильных дорог
 
Йошкар-Ола
Регистрация: 30.08.2017
Сообщений: 78

Здравствуйте.
Есть несколько лисп, которые как выгружают данные в файл, так и загружают данные из файла.
Можно ли прямо в кнопке прописать путь по умолчанию к каталогу? Ещё лучше, если это будет условный путь.

Например.
У меня добавлен в доверенные каталог D:\\my_panel
В меню адаптации оттуда подгружается моя панель с автозагрузкой лиспов, например, (load "./Lisp/lisp1/open10.VLX")
Хотелось бы, например, чтобы при нажатии на кнопку с командой "open10" открывался каталог "./Lisp/lisp1/".
Возможно ли на кнопке прописать такой макрос?

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

Последний раз редактировалось berstrider, 21.02.2025 в 11:01.
Просмотров: 726
 
Непрочитано 21.02.2025, 14:42
1 | #2
name02


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


Можно попробовать так:
Код:
[Выделить все]
 (setq dir (vl-filename-directory (findtrustedfile "QQQ.lsp")))
(startapp "explorer" (strcat "/e,\"" dir))
Файл "QQQ.lsp" ищется по путям поддержки. Соответственно, если в путях поддержки есть файлы с одинаковыми именами, то будет возвращен путь к первому найденному. Т.е. может быть ошибка
Иными словами, он проходит по всем путям поддержки, добавляет к ним имя файла и проверяет его наличие.
Если ты запишешь имя файла в виде "/Lisp/lisp1/open10.VLX", то автокад будет последовательно проходить по следующим адресам:
D:\TrustedFolder_1\\Lisp\lisp1\open10.VLX
G:\TrustedFolder_2\TrustedFolder_A\\Lisp\lisp1\open10.VLX
D:\my_panel\Lisp\lisp1\open10.VLX
F:\\Lisp\lisp1\open10.VLX
D:\TrustedFolder_4\\Lisp\lisp1\open10.VLX

Последний раз редактировалось name02, 21.02.2025 в 14:49.
name02 вне форума  
 
Автор темы   Непрочитано 21.02.2025, 16:24
#3
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
Можно попробовать так:
Спасибо. Интересное решение, попробую.
Но как можно связать с командой данное решение?
berstrider вне форума  
 
Непрочитано 24.02.2025, 07:47
#4
name02


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


Как кнопку сделать писать не буду, а вот дальше есть два пути:
1.1 Создать lisp-файл со следующим кодом:
Код:
[Выделить все]
 (defun c:EXOP ()
   (startapp "explorer" (strcat "/e,\"" (vl-filename-directory (findtrustedfile "QQQ.lsp"))))
   (princ)
)
1.2 Поставить его в автозагрузку
1.3 В кнопку прописать ^C^CEXOP

2 Сразу в кнопку прописать: ^C^C(startapp "explorer" (strcat "/e," (vl-filename-directory (findtrustedfile "QQQ.lsp"))))

Обрати внимание, что во 2-м варианте код немного отличается от первого - выделил красным.
name02 вне форума  
 
Автор темы   Непрочитано 24.02.2025, 11:29
#5
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
Как кнопку сделать писать не буду, а вот дальше есть два пути:
1.1 Создать lisp-файл со следующим кодом:
Код:
[Выделить все]
 (defun c:EXOP ()
   (startapp "explorer" (strcat "/e,\"" (vl-filename-directory (findtrustedfile "QQQ.lsp"))))
   (princ)
)
1.2 Поставить его в автозагрузку
1.3 В кнопку прописать ^C^CEXOP

2 Сразу в кнопку прописать: ^C^C(startapp "explorer" (strcat "/e," (vl-filename-directory (findtrustedfile "QQQ.lsp"))))

Обрати внимание, что во 2-м варианте код немного отличается от первого - выделил красным.
Спасибо. Создание своей панели и кнопки ан ней делать умею.
Но данная команда у меня не заработала:
Цитата:
Команда: EXOP
; ошибка: неверный тип аргумента: stringp nil
Есть DOBT.VLX, у него три команды, две для чертежа, а третья "DOBT!" открывает проводник для загрузки файла с настройками. Настроенный файл лежит рядом с DOBT.VLX или ещё где то, т.к. их несколько для разных чертежей свой набор параметров. У меня и возник вопрос, можно ли как то дать команде понять, по какому пути открывать проводник. Просто рядом с командой разместить путь в скобочках не помогает (с обратными слешами /).
Попробовал
Код:
[Выделить все]
 (defun c:EXOP ()
   (DOBT!)
   (startapp "explorer" (strcat "/e,\"" (vl-filename-directory (findtrustedfile "/LISP/Слои - Порядок слоёв через файл конфигурации/DOBT.VLX"))))
   (princ)
)
Система выдала
Цитата:
Команда: EXOP
; ошибка: no function definition: DOBT!
Я так понял, что лисп не знает такой функции внутри себя.
berstrider вне форума  
 
Непрочитано 24.02.2025, 12:08
#6
Кулик Алексей aka kpblc
Moderator

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


Попробуй заменить (DOBT!) на (C:DOBT!)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.02.2025, 12:28
#7
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй заменить (DOBT!) на (C:DOBT!)
Нет, команда выполняется в данном случае отдельно, потом начинает работать следующая часть, которая так же возвращает
Цитата:
Команда: EXOP
; ошибка: неверный тип аргумента: stringp nil
Может и нельзя вообще подставить путь в открываемый проводник.
И проводник ли это? Команда "DOBT!" от DOBT.vlx открывает окно открытия файла для выбора файла с параметрами.

Последний раз редактировалось berstrider, 24.02.2025 в 13:35.
berstrider вне форума  
 
Непрочитано 24.02.2025, 14:04
#8
name02


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


Все можно подставить - у меня работает же!
Проверь доверенные папки - там есть подходящий адрес до "/LISP/Слои - Порядок слоёв через ..." ?
То есть если DOBT.VLX лежит по адресу:
C:/Users/MEGAUSER/Для Работы/LISP/Слои - Порядок слоёв через файл конфигурации/DOBT.VLX
и ты в лиспе пишешь адрес
/LISP/Слои - Порядок слоёв через файл конфигурации/DOBT.VLX
то в доверенных путях должно быть
C:/Users/MEGAUSER/Для Работы
name02 вне форума  
 
Автор темы   Непрочитано 24.02.2025, 15:16
#9
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
Все можно подставить - у меня работает же!
Заработало по короткой схеме
Цитата:
Сообщение от name02 Посмотреть сообщение
^C^C(startapp "explorer" (strcat "/e," (vl-filename-directory (findtrustedfile "QQQ.lsp"))))
Работать через лисп не смог заставить.
Ну как заработало, проводник открывает по подставленной строке поиска, но моя проблема осталась в том, что данный путь никак не передаётся функции "DOBT!", которая открывает окно выбора файла
berstrider вне форума  
 
Непрочитано 24.02.2025, 15:19
#10
name02


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


Так может DOBT! и не принимает никакие пути? Судя по твоим примерам DOBT! не получает никаких входных параметров. Или у тебя есть пример где принимает?
name02 вне форума  
 
Автор темы   Непрочитано 24.02.2025, 15:22
#11
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
Так может DOBT! и не принимает никакие пути? Судя по твоим примерам DOBT! не получает никаких входных параметров. Или у тебя есть пример где принимает?
Да, я пытался просто на прямую указать путь рядом с функцией, ни в какую. Поэтому и спросил тут, вдруг может что то помочь
berstrider вне форума  
 
Непрочитано 24.02.2025, 15:27
#12
name02


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


Ну начнем с того, что про передачу в DOBT! ты не говорил
Передача параметров функциям в лиспе выглядит так:
(ИМЯ_ФУНКЦИИ параметр1 ... параметрN)
А то, как ты это записал интерпретируется так:
1 Срабатывает DOBT!
1.1 Открывается окно выбора файла
1.2 Файл выбран - окно закрыто
2 Открытие проводника по адресу файла

Тебе что нужно - подумай и сформулируй прям очень-понятно-для-других!
name02 вне форума  
 
Автор темы   Непрочитано 24.02.2025, 15:39
#13
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
Тебе что нужно - подумай и сформулируй прям очень-понятно-для-других!
Значит я не правильно выразился. )))
Да, думал как на шаг 1.1 передать путь к расположению файлов с настройками, чтобы уже там выбрать требуемый для данного чертежа
Цитата:
Сообщение от name02 Посмотреть сообщение
1 Срабатывает DOBT!
1.1 Открывается окно выбора файла
Что интересно, если создать новый чертёж то практически всегда открывается окно выбора с расположением файла DOBT.VLX, а если открыть имеющийся чертёж, то папка чертежа.

Но и за эту функцию спасибо, можно использовать в полуручном режиме.
berstrider вне форума  
 
Непрочитано 24.02.2025, 15:57
#14
name02


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


Цитата:
Сообщение от berstrider Посмотреть сообщение
Что интересно, если создать новый чертёж то практически всегда открывается окно выбора с расположением файла DOBT.VLX, а если открыть имеющийся чертёж, то папка чертежа.
Видимо это прописано в коде программы - если файл не сохраненный ни разу, то пути сохранения нет и DOBT! открывает свою папку, а если адрес расположения файл есть - то папку чертежа
А что хоть DOBT! делает - может можно его самому написать? Чтобы прям удобно было
name02 вне форума  
 
Автор темы   Непрочитано 24.02.2025, 16:14
#15
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
А что хоть DOBT! делает - может можно его самому написать? Чтобы прям удобно было
Данное приложение позволяет управлять порядком отображение элементов (а не просто слоёв) через файл конфигурации по маскам.
Стандартно:
<Тип элемента>

Полная маска:
<Тип элемента> <Имя слоя> <Имя блока (только простого, а так же внешние ссылки)>

Отображение идёт сверху вниз, но можно в файле с определённого момента изменить направление порядка:
^^^^^

варианты:
TEXT
MTEXT
MULTILEADER
ARC
CIRCLE
LYLINE
POLYLINE
LWPOLYLINE
TRACE
HATCH
INSERT
INSERT * *окружен*
INSERT *окружен*
INSERT * *здан*
* * *здан*
* *карта*
OLE2FRAME *
Вложения
Тип файла: zip DOBT.zip (16.1 Кб, 3 просмотров)
berstrider вне форума  
 
Непрочитано 25.02.2025, 14:26
1 | 1 #16
name02


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


Что же ты до конца не прочитал хелп к программе?
Держи:
Код:
[Выделить все]
 (defun c:EXOP ()
  ;; Нужно указать расположение файла с расширением .tab с настройками порядка слоев
  (setq DO:DOBTTAB (findtrustedfile "DOBT.tab"))
  (if (null DO:DOBTTAB) (setq DO:DOBTTAB ""))
  (C:DOBT!)
  (princ)
)
name02 вне форума  
 
Автор темы   Непрочитано 25.02.2025, 15:31
#17
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
Что же ты до конца не прочитал хелп к программе?
Действительно, спасибо!
Да как то раньше не задумывался над тем, что там в конце написано. Помнил, что там правила, как записать маски.
berstrider вне форума  
 
Автор темы   Непрочитано 26.02.2025, 10:08
#18
berstrider

инженер-проектировщик автомобильных дорог
 
Регистрация: 30.08.2017
Йошкар-Ола
Сообщений: 78


Цитата:
Сообщение от name02 Посмотреть сообщение
Держи:
Странно, лисп не завёлся, а вот кнопка заработала
Код:
[Выделить все]
 ^C^C(setq DO:DOBTTAB (findtrustedfile "LISP/Слои - Порядок слоёв через файл конфигурации/settings/DOBT.tab"))
(if (null DO:DOBTTAB) (setq DO:DOBTTAB (findtrustedfile "LISP/Слои - Порядок слоёв через файл конфигурации/DOBT.vlx")))
DOBT!
Я тут, когда искал решение проблемы с путями в LISP находил тему, где тоже люди писали, что из командной строки автокада работает, а из LISP нет.

Последний раз редактировалось berstrider, 26.02.2025 в 11:02.
berstrider вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как прописать путь к каталогу по умолчанию в кнопке команды



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему метод CreateDatabase добавляет свой путь к имени базы данных DAO? МишаИнженер Программирование 1 07.11.2021 14:00
Что прописать в acad.lsp чтобы всегда загружались пользовательские лисп команды? overband LISP 43 07.02.2013 14:47
Варианты контекстного меню, вызываемого в процессе работы команды hwd Программирование 14 24.12.2012 11:02
Запомнить путь к открытому файлу? Ева Программирование 7 15.06.2012 12:27
Как программно подождать завершения команды DonVik Программирование 7 05.12.2008 15:23