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

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

Импорт палитры блоков при помощи LISP

Ответ
Поиск в этой теме
Непрочитано 06.03.2008, 05:29 #1
Импорт палитры блоков при помощи LISP
TwoZero
 
Программист
 
г.Иркутск
Регистрация: 06.03.2008
Сообщений: 52

Здравствуйте.

Такой вопрос:
Как можно импортировать палитру с блоками в AutoCAD при помощи ЛИСПА.
Интересует именно импорт так как необходимо обновлять палитру при загруженном AutoCAD-е.

Текущая палитра AutoCAD находится в папке:
X:\Documents and Settings\ИМЯ_ПОЛЬЗОВАТЕЛЯ\Application Data\Autodesk\AutoCAD 2007\R17.0\enu\Support\ToolPalette\
Путь может отличаться в зависимости от версии AutoCAD

Если AutoCAD не запущен тогда можно без труда заменить эти файлы, и в AutoCAD-е будет соответствующая палитра, но мне необходимо обновлять палитру при загруженном AutoCAD-е, этот метод с банальной заменой файлов не подходит.

Кто че знает подскажите!
Просмотров: 9275
 
Непрочитано 06.03.2008, 08:40
#2
Кулик Алексей aka kpblc
Moderator

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


По-моему, проще будет создавать палитры в своем каталоге, и просто внутри лиспа уже менять пути доступа к ToolPalettes.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.03.2008, 09:47
#3
TwoZero

Программист
 
Регистрация: 06.03.2008
г.Иркутск
Сообщений: 52
<phrase 1= Отправить сообщение для TwoZero с помощью Skype™


Спасибо так и сделал, на сервере создал отдельную папку где будут содержаться различные наборы палитр (в разных папках).

В AutoCAD-е задал пути к палитре
Options->Вкладка File
Изменяем пути в
Tool Palettes File Locations
и в
Authoring Palette File Locations
Палитры хранятся на сервере следовательно пути забиваем на сервер где лежат палитры (на определенную палитру)

Пока все работает
TwoZero вне форума  
 
Автор темы   Непрочитано 06.03.2008, 10:01
#4
TwoZero

Программист
 
Регистрация: 06.03.2008
г.Иркутск
Сообщений: 52
<phrase 1= Отправить сообщение для TwoZero с помощью Skype™


Еще вопрос, а возможно ли динамическое обновление палитры не перезагружая AutoCAD.

Допустим есть палитра которая находится на сервере.
Есть один человек который занимается формированием самой палитры на сервере (полный доступ на файлы палитры).
Ну и есть просто проектировщики которые просто грузят готовую палитру с сервера, то есть AutoCAD сам грузит у проектировщиков все пути уже заданы (у проектировщиков доступ только на чтение).
Возможно ли динамическое обновление палитры у проектировщиков не перезагружая AutoCAD если возможно то как (LISP, VBA или чтото другое)

Подскажите.
TwoZero вне форума  
 
Непрочитано 06.03.2008, 10:54
#5
Кулик Алексей aka kpblc
Moderator

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


Я говорил про то, что в ToolPalettes File Location добавить путь к серверным палитрам.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.01.2013, 15:02
#6
overband

Инженер-конструктор
 
Регистрация: 25.02.2008
Москва
Сообщений: 142


Хотелось бы поднять эту тему, так как существует такая же проблема.
Вопрос остается тем же. Можно ли с помощью lisp перезагрузить палитры НЕ ПЕРЕЗАГРУЖАЯ Автокад?
К примеру есть папка с корпоративными палитрами и все компьютеры в сети настроены на чтение палитр из нее. НО! Если внести в эти палитры изменения, то пользователи увидят обновленные палитры только когда закроют и откроют Автокад. А иногда очень важно чтобы палитры обновились в процессе работы. Например в палитру был добавлен сделанный под конкретную задачу блок который нужен рабочей группе, что называется "здесь и сейчас". К примеру очень удобно создавать палитры под текущий проектируемый объект, в которой помещаются блоки осей, блокировочные схемы, штампы, различные таблицы, уникальные для этого объекта и т.д. И такие палитры обычно приходится часто обновлять в процессе работы и крайне неудобно по несколько раз на дню закрывать и открывать Автокад, чтобы в палитре отобразились добавленные блоки. А многие вообще используют при работе "Режим сна" и не перезагружают компьютеры по несколько дней и обновленные палитры не увидят даже утром на следующий рабочий день, так как компьютер не перезагружался. В общем есть такая технологическая проблема...

Подскажите, если кто-нибудь знает, как программно (lisp) заставить Автокад прочитать палитры заново? Напрямую такой команды я не нашел. Может есть какой-то способ выполнить это косвенно. К примеру, может быть при выполнении какой-либо операции Автокад перезагружает настроечные файлы и в том числе файлы палитр?

Конечная цель - сделать кнопку в Автокаде "Обновить палитры".

P.S. Сам нашел решение, благодаря аналогичной теме на caduser.ру. Несколько неполноценное, но все же... Спасибо kpblc-у за наводку с переменной "_TOOLPALETTEPATH".
Принцип действия основан на смене в настройках пути расположения инструментальных палитр. После чего палитры считываются заново.
Код получился такой:
Код:
[Выделить все]
 ;;;Команда обновления инструментальных палитр без перезагрузки Autocad
(defun c:refrtoolpal (/ curtpp)
      (setq curtpp (getvar "_toolpalettepath"))             ;записываем в переменную curtpp текущий путь к инструментальным палитрам
	  (setvar "_toolpalettepath" "C:\\")                    ;меняем путь расположения инструментальных палитр на "С:\"
	  (setvar "_toolpalettepath" curtpp)                    ;возвращаем старый путь палитры - она перезагружаеся
	  (princ "\nОбновление палитр выполнено успешно...")
	  (princ)
) ;_  defun
К сожалению у такого способа есть большой недостаток.
При смене пути к файлам палитр слетают стираются все настройки групп палитр. Слетают настройки параметров отображения блоков(инструментов) в палитре. Также не передается порядок расположения блоков(инструментов) в палитре. Порядок расположения не учитывается при любом способе обновления палитр, а вот удаление настроек групп и параметров отображения связаны исключительно с изменением пути расположения палитр. При простой замене файла и перезагрузке Autocad такого не происходит.
Все это связано с тем, что все эти слетающие настройки хранятся в файле профиля Profile.aws, который уникален для каждого рабочего места.
Как с этим бороться не знаю и судя по другим темам на форуме, не знает никто. Но если у кого есть идеи - большая просьба поделиться с сообществом .

Макрос на кнопку:
Код:
[Выделить все]
 ^C^Crefrtoolpal;

Последний раз редактировалось overband, 26.01.2013 в 23:15.
overband вне форума  
 
Непрочитано 27.01.2013, 10:16
#7
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Предлагаю просто добавить путь к папке
Library это папка с файлами из которых ты наполняешь палитру
если без добавления пути, ТОЛЬКО для себя поэкспериментируй с копированием в папку
c:\Program Files\AutoCAD 2010\Sample\
Палитра будет работать

Код:
[Выделить все]
 (setenv"ACAD"(strcat(getenv"ACAD")";"myRootFolder"\\Library"))
Код:
[Выделить все]
 
   (setq answer_TP (c:getstring "\nОтключить подключенные палитры?" (list "Да" "Нет") "д")); 28.02.12 добавил выбор и поменял порядок палитр
   (if(= answer_TP "Д")
;|1|; (vla-put-ToolPalettePath files (strcat myRootFolder "\\ToolPalette")) ;/ vla-put-ToolPalettePath
;|2|; (progn     
       (vla-put-ToolPalettePath          ; папка с палитрами ToolPalettePath
    files
        (strcat
     myRootFolder
     "\\ToolPalette"
     ";" 
         (vla-get-ToolPalettePath files) ; инструментальные палитры по умолчанию
        ) ;/ strcat
       ) ;/ vla-put-ToolPalettePath
      ) ;/ progn
   ) ;/ if


Последний раз редактировалось sdv79, 27.01.2013 в 10:29.
sdv79 вне форума  
 
Непрочитано 27.01.2013, 17:06
#8
overband

Инженер-конструктор
 
Регистрация: 25.02.2008
Москва
Сообщений: 142


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Предлагаю просто добавить путь к папке
Library это папка с файлами из которых ты наполняешь палитру
Добавить куда? Как еще один путь к инструментальным палитрам? Не совсем понятно как это может решить проблему с группами или параметрами отображения. К тому же все пути к файлам откуда наполняются мои палитры добавлены в перечень вспомогательных файлов. Так что ситуацию это не меняет.
Цитата:
Сообщение от sdv79 Посмотреть сообщение
если без добавления пути, ТОЛЬКО для себя поэкспериментируй с копированием в папку
c:\Program Files\AutoCAD 2010\Sample\
Палитра будет работать
Поэксперементировал. Только что из этого должно получится я не совсем понял. Если речь идет о самих файлах на которые ссылаются блоки в палитрах, то с ними проблем нет. Если обновить блок в этом файле и сохранить его(файл), то можно спокойно переопределить все блоки на рабочих местах пользователей и для этого перезагружать палитры необязательно. Их надо перезагружать когда: добавились новые палитры, или добавились новые инструменты(блоки) в палитрах, либо нужно поменять описание и свойства инструментов(блоков) и их картинки предв. просмотра на палитре. В принципе все.
По поводу кодов. Я хоть и неплохо разрибаюсь в lisp, но все-таки не программист. Если можно поясните пожайлуста, что должен делать первый и второй. И при их правильном использовании решается ли проблема с настройками групп или это просто альтернативный вариант моего решения?
Я пробовал менять путь к палитрам с помощью vla-put-ToolPalettePath, но результат тот же - группы пропадают. Как сделать так, чтобы Автокад не менял файл Profile.aws при смене пути я так и не нашел.
overband вне форума  
 
Непрочитано 27.01.2013, 19:20
#9
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Файлы в \ToolPalette\Palettes\*.atc -это xml для изменения пути нужно научиться работать с данным типом файлов. Можете открыть в блокноте и ручками поправить самостоятельно
<BlockName>SA 1P OY 2 IP(44-55)(Lght)</BlockName><SourceFile>D:\Sologubov_D\mySchema\Library\Выключатели.dwg</SourceFile>
Первый фрагмент - имя блока в файле Выключатели.dwg.
Вторая часть путь к этому файлу (ее и правишь).
Достаточно ручками добавить путь в Настройки-Файлы-Путь доступа к вспомогательным файлам или воспользоваться первым кодом, чтобы не редактировать файлы *.atc
Код:
[Выделить все]
 


(prompt "\nИнициализация приложения ")
;| исходное состояние ACAD включил для Капстроя НАЧАЛО|;
(setvar "cmdecho"  1)
(setvar "menuecho" 0)
(setvar "nomutt"   0)
;| исходное состояние ACAD включил для Капстроя КОНЕЦ|;
(vl-load-com)
(setq    name_program        "mySchema"        ; название программы
    name_program_UnInstall    "mySchemaMenuUnInstall" ; название программы удаления
    expansion        ".fas"            ; расширение программы
) ;/ setq

(defun Win_x86 ()(wcmatch (getenv "PROCESSOR_ARCHITECTURE") "*86") ) ; (getvar "platform")
;|
----------------------------------------------------
 Программа определяет путь к программе, т.к при установке путь выбирает
 пользователь и в коде лиспа нет возможности указать куда установили
 программу, то читаем из раздела RootFolder который формирует
 программа setup.exe
 Final 05.06.10
 [rev.1 от xx.xx.10]
 Процедура_обращения    (c:myRootFolder)
 Выдаст_типа        "C:\\Program Files (x86)\\mySchema"
 ----------------------------------------------------
|;
(defun c:myRootFolder(/ ) ; myRootFolder
 (if(Win_x86)
;|1|;(setq myRootFolder (vl-registry-read(strcat"HKEY_CURRENT_USER\\SOFTWARE\\"name_program)"RootFolder"))        ; для х32
;|2|;(setq myRootFolder (vl-registry-read(strcat"HKEY_CURRENT_USER\\SOFTWARE\\Wow6432Node\\"name_program)"RootFolder"))    ; для x64
 ) ;/ if
 (setq lsp_file (findfile(strcat "d:\\Sologubov_D\\Tuning\\AutoCAD\\AutoLISP\\"name_program"\\"name_program".lsp")) )
 (cond((null myRootFolder)
  (cond
    
;|a|;((/= lsp_file nil)
      (setq myRootFolder (vl-filename-directory
                     (findfile
               (strcat
                "d:\\Sologubov_D\\Tuning\\AutoCAD\\AutoLISP\\"
                name_program
                "\\"
                name_program
                ".lsp"
               ) ;/ strcat
              ) ;/ findfile
                         ) ;/ vl-filename-directory
      ) ;/ setq
     ) ;/ (

;|b|;((findfile(strcat "d:\\Sologubov_D\\"name_program"\\"name_program expansion))
      (setq myRootFolder (vl-filename-directory
                          (findfile
               (strcat
                "d:\\Sologubov_D\\"
                name_program
                "\\"
                name_program
                expansion
               ) ;/ strcat
              ) ;/ findfile
                         ) ;/ vl-filename-directory
      ) ;/ setq
     ) ;/ (
  ) ;/ cond
 )) ;/ (cond((null myRootFolder)
 (cond((null myRootFolder)
  (setq  bag "Не определен путь запуска. Выход")
  (princ bag)
  (alert bag)
  (exit)
 )) ;/ cond
 myRootFolder      
) ;/ (c:myRootFolder)
(c:myRootFolder)



  (setq ; ОСНОВНЫЕ переменные
         preferences            (vla-get-Preferences    (vlax-get-acad-object))
    files                (vla-get-files        preferences)
        M-vla_PreferencesProfiles    (vla-get-profiles    preferences)
    ActiveProfile            (vla-get-ActiveProfile    M-vla_PreferencesProfiles)
    name_ARG            (vl-directory-files
                     (getvar"DGNMAPPINGPATH"); (vl-filename-directory(findfile"acad.dcl"))
                     "*.arg"
                     1
                    ) ;/ vl-directory-files
    temp_profile            name_program
   ) ;/ setq



Есть лишнее не стал чистить

Последний раз редактировалось sdv79, 04.05.2018 в 16:18.
sdv79 вне форума  
 
Непрочитано 27.01.2013, 20:38
#10
overband

Инженер-конструктор
 
Регистрация: 25.02.2008
Москва
Сообщений: 142


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Файлы в \ToolPalette\Palettes\*.atc -это xml для изменения пути нужно научиться работать с данным типом файлов. Можете открыть в блокноте и ручками поправить самостоятельно
<BlockName>SA 1P OY 2 IP(44-55)(Lght)</BlockName><SourceFile>D:\Sologubov_D\mySchema\Library\Выключатели.dwg</SourceFile>
Первый фрагмент - имя блока в файле Выключатели.dwg.
Вторая часть путь к этому файлу (ее и правишь).
Все понятно. Но возникает вопрос - а что это дает? Файлы atc считывается при открытии Автокада и записывается при его закрытии. Также он считывается и записывается (если файл палитры не защищен от редактирования) при смене пути доступа к палитрам. Причем в случае если у файла палитры не стоит аттрибут "только чтение", то если включить автокад, заменить файл atc на другой (или отредактировать его вручную) и затем закрыть автокад, то он перепишется в соответствии с состоянием палитры инструментов на момент закрытия автокада. Поэтому в процессе работы вручную менять файл atc не имеет смысла. Палитра от этого не обновится.
Проясню еще раз задачу. Есть файлы палитр (Палитра1.atc, Палитра2.atc и т.д.), которые лежат на сервере и защищены от перезаписи. Периодически они заменяются и надо чтобы пользователи на рабочих местах могли эти обновленные палитры перезагрузить не закрывая Автокад. Сам Автокад не отслеживает динамически изменение файлов atc.
overband вне форума  
 
Непрочитано 27.01.2013, 22:21
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


overband, В порядке бреда, все требует проверки
1. Если принцип действия основан на смене в настройках пути расположения инструментальных палитр, то что получится, если сослаться на эту же самую папку по другому. Поясню: Есть расшаренная папка на сервере ''\\Server\Toolpalette", создаем еще одну шару "\\Server\Toolpalette1" на эту же папку или обращается к ней же как "\\Server\D$\Toolpalette" (правда админы так для всех думаю не сделают)
2. Создать локальную копию серверной папки, сослаться на нее, а потом обратно.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.01.2013, 22:35
#12
overband

Инженер-конструктор
 
Регистрация: 25.02.2008
Москва
Сообщений: 142


VVA
Пробовал все эти варианты. К сожалению не прокатывает. Получается, что не важно КУДА мы ссылаемся и даже если конечное содержимое всех папок будет идентичное - без разницы. Сам факт смены пути к инструментальным палитрам тут же "убивает" все настройки групп и настройки внешнего вида палитр. Проблема в том, что как только мы сменили путь, тут же меняется Profile.aws на какие-то настройки по умолчанию. Видимо логика такая - если теперь путь к палитрам другой, то и настраивать внешний вид палитр и подборки групп надо заново.
В принципе у меня есть мысль, что проблему можно решить следующим образом.
1. Перед сменой пути можно сохранить часть файла (текст) Profile.aws отвечающую за настройки палитр (группы, внешний вид...).
2. Сменить путь туда и обратно. Соответственно палитра обновится
3. Подправить часть файла Profile.aws обратно.
Но возникает проблема, если мы серьезно обновим палитры (к примеру добавим новые или переименуем часть из них) то получим ошибки. К тому же не знаю, возможен ли такой ход конем технически.
overband вне форума  
 
Непрочитано 28.01.2019, 12:20
#13
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224


overband,
Цитата:
Все это связано с тем, что все эти слетающие настройки хранятся в файле профиля Profile.aws, который уникален для каждого рабочего места...
не сам файл уникален а GUID внутри него и помнится были трюки вокруг этого xml... + палитры и профиль кешируются на локальном диске.
Сам не пробовал (на Architecture нет таких проблем), но пишут, что на сервере не надо папку щитить от редактирования, а только сами палитры- .atc файлы!

Последний раз редактировалось VitalyAF, 28.01.2019 в 12:45.
VitalyAF вне форума  
 
Непрочитано 31.01.2019, 17:38
#14
overband

Инженер-конструктор
 
Регистрация: 25.02.2008
Москва
Сообщений: 142


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
overband,

не сам файл уникален а GUID внутри него и помнится были трюки вокруг этого xml... + палитры и профиль кешируются на локальном диске.
Сам не пробовал (на Architecture нет таких проблем), но пишут, что на сервере не надо папку щитить от редактирования, а только сами палитры- .atc файлы!
Да у нас по сути так и есть. В закрытой папке лежат только atc файлы. Файлы из которых берутся например блоки для этой палитры открыты для редактирования и их можно менять любому.
Проблема тут в другой плоскости. Файл Profile.aws индивидуален для каждого рабочего места и лежит например тут:
C:\Users\USERNAME\AppData\Roaming\Autodesk\AutoCAD 2016\R20.1\rus\Support\Profiles\Профиль без имени
И хранится там не только информация о настройке палитр, но и допустим название текущего рабочего пространства и т.д. Этот файл нельзя положить на сервер и расшарить.
А при удалении путей к палитрам удаляется и информация об их настройках отображения естественно. Эти настройки хранятся в файле Profile.aws.
Уже много лет прошло и видимо решения не будет. Все уже привыкли, что после обновления слетает настройка вида палитр на стандартный вариант)))
overband вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Импорт палитры блоков при помощи LISP

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
Простановка позиций... При помощи чего?... Chief Justice AutoCAD 38 27.12.2005 01:55
Ошибка при выполнении LISP Sergk LISP 3 26.08.2005 11:42