21 апреля 2009 г.

Tool Palettes. Enterprise Level

Созданные и размещенные в сетевом окружении Tool Palettes представляют собой довольно таки мощный инструмент для поддержания корпоративного стандарта предприятия. Они позволяют всем пользователям использовать одни и те же блоки, типы линий, штриховок и т.д. и т.п.. Но есть и свои минусы. Например, не получится сгруппировать должным образом палетки так, как мы привыкли их группировать, имея их на локальном диске. Поэтому приходится идти на кое-какие ухищрения, подробно расписанные неким John'ом из Австралии, здесь и здесь ;)
Итак, групировать будем просто раскидав палетки по папкам:
Имеем главную папку на сервере, например, \\Server\CADMAN\Toolpalettes. А в ней следующие папки, которые будут служить группами (рекомендую всегда называть папки на английском или использовать транслит, но для данной статьи оставляю имена на русском):
  • Генплан
  • Конструкторские
  • Архитектурные
  • ОВ и ВК
  • Электрика
  • и др.
В общем, создаем в каждой папке соответствующие palettes. Для этого в AutoCAD'е заходим в Options -> Files -> Tool Palettes File Locations и временно указываем ту папку, palettes которой в данный момент будем создавать. Проделываем все это для каждой из папок.
А теперь создадим быстрое переключение между Tool Palettes. Мы же в конце концов не так жестоки к пользователям чтоб принуждать их всякий раз заходить в Options и менять Tool Palettes File Locations на нужную в данный момент папку ;) Не знаю как у вас, но метод John'а, описанный во второй статье под названием Toolpalette Swapping у меня не сработал, но принцип остался тем же.
Вместо переключения папок с palettes посредством макроса типа "^C^C_ToolPalettesClose *_toolpalettepath "S:/!_ToolPalettes/ToolPalette" я использовал lisp-routine ToolPalettesPathSwapping.lsp следующего содержания:

;;;Глобальная перменная #CADMAN# назначается в acad.lsp
;;;и указывает на расположение главного каталога с файлами
;;;кастомизации на сервере (например "\\\\Server\\CADMAN")
;;;
;;;Загрузка ToolPalettes из папки "Конструкторские"
(defun C:TP_Structural (/ path)
(command "_ToolPalettesClose")
(setq path
(strcat
#CADMAN# "\\ToolPalettes\\Конструкторские"
)
)
(vla-put-ToolPalettePath
(vla-get-files (vla-get-preferences (vlax-get-acad-object)))
path
)
(command "_ToolPalettes")
)
;;;
;;;Загрузка ToolPalettes из папки "Архитектурные"
(defun C:TP_Architect (/ path)
(command "_ToolPalettesClose")
(setq path
(strcat
#CADMAN# \\ToolPalettes\\Архитектурные
)
)
(vla-put-ToolPalettePath
(vla-get-files (vla-get-preferences (vlax-get-acad-object)))
path
)
(command "_ToolPalettes")
)
;;;Я думаю суть ясна, проделываем то же самое для остальных папок.
;;;Естественно, что этот файл должен находится в соответствующей папке,
;;;путь к которой прописан в Support Files Search Paths AutoCAD'a.

Создаем панель инструментов, называем соответствующим образом, располагаем на ней кнопки, обозначающие группы palettes. К кнопкам прикручиваем макрос вида: ^C^C(if (not C:TP_Structural) (load "ToolPalettesPathSwapping"));TP_Structural;
Можно также последовать примеру John'а и сделать кнопку для загрузки локальных пользовательских palettes с таким макросом: ^C^C(command "ToolPalettesClose" "*_toolpalettepath" (strcat (getvar "ROAMABLEROOTPREFIX") "Support/ToolPalette") "ToolPalettes")
В итоге должно получиться что-то в этом роде ;-D

18 апреля 2009 г.

AutoCAD 2010 Express Icons

Да я все-таки сделал это, было не легко, а точнее скучно, но я справился! Искал в интернете их, но нигде не нашел, поэтому пришлось повозиться самому:)  А делал следующим образом. AutoCAD хранит свои иконки в файле acadbtn.xmx, который можно найти в папке "C:\Program Files\AutoCAD 2010". Открываем его с помощью утилитки Resource Hacker 3.4.0. Потом Actions -> Save all Resources, далее выбираем папку куда будут сохранены все иконки. После завершения процесса в выбранной папке появятся иконки с расширением bin и файл с расширением res. Открываем Paint и кидаем в него нужный файл bin, затем сохраняем как BMP. Возможно есть способ быстрее, но я его не нашел. Если вам он известен, то буду рад узнать:)
Далее, в сохраненных BMP фон иконок почему-то стал черным. Пришлось менять его в Photoshop'е инструментом Replace Color. Даже после того как я все это проделал, я остался неудовлетворен результатом, потому что какой только цвет фона я не подбирал, все равно мои иконки в AutoCAD'е появлялись на сером фоне, т.е. отличным от того какой фон подбирает AutoCAD  для своих родных иконок. Порывшись в интернете я узнал что цвет 192,192,192 AutoCAD воспринимает как прозрачный и что именно его нужно было использовать для фона моих иконок. Опять значит Photoshop и Replace Color на 192,192,192. Наконец-то нужный результат был получен, иконки выглядят словно родные AutoCAD'овские. Но меня не хватило на изменение цвета больших иконок, поэтому оставлю это занятие но то время, когда мне будет нечего делать...
Итак, что мы имеем:
  • измененный мною Express'овский acetmain.cui  с добавленными Ribbon Tabs и Panels как в AutoCAD 2010
  • ну и acetmain.dll к нему

13 апреля 2009 г.

Setting up AutoCAD Enterprise Environment. Part 1 (Настройка AutoCAD'a для корпоративной среды. Часть 1)

Долго искал оптимальный вариант для получения желаемого результата и в итоге остановился на связке программы Acad Install и небольшой lisp-routine под названием Enterprise_setup.lsp.
Итак схема такова:
1. Acad Install прописывает папки в Support Folders Search Paths AutoCAD'a, и первой в этом списке папок идет папка Admin, в которой лежат файлы acad.lsp и acaddoc.lsp. Он также устанавливает custom.cui пользователя в качестве Main CUI и создает новый профайл.
2. В acad.lsp есть строка на запуск Enterprise_setup.lsp. Routine устанавливает Enterprise.cui или Enterprise172.cui в качестве Enterprise CUI для версий AutoCAD'a 2008 и 2009 соответственно и подгружает остальные Partial CUI если необходимы.

Собственно Enterprise_setup.lsp:
;;;Глобальная перменная #CADMAN# назначается в acad.lsp
;;;и указывает на расположение главного каталога с файлами
;;;кастомизации на сервере (например "\\\\Server\\CADMAN")
;;;
;;;УСТАНОВКА КОРПОРАТИВНОГО CUI
;;;
(vl-load-com)
(defun whatAcadVer ()
(if (= 17.2 (atof (substr (getvar "ACADVER") 1 4)))
(vla-put-EnterpriseMenuFile
(vla-get-files (vla-get-Preferences (vlax-get-acad-object)))
(strcat #CADMAN# "\\CUI\\Enterprise172")
)
(vla-put-EnterpriseMenuFile
(vla-get-files (vla-get-Preferences (vlax-get-acad-object)))
(strcat #CADMAN# "\\CUI\\Enterprise")
)
)
)
;;;
(defun c:whatAcadVer ()
(WhatAcadVer)
(princ)
) ;_ end of defun
(whatAcadVer)
;;;
;;;УСТАНОВКА ДОПОЛНИТЕЛЬНЫХ PARTIAL МЕНЮ
;;;
(and (not (menugroup "PARTIAL1"))
(setq #fil_Partial1 (findfile "Partial1.cui"))
(command "menuload"
#fil_Partial1
)
)
(and (not (menugroup "PARTIAL2"))
(setq #fil_Partial2 (findfile "Partial2.cui"))
(command "menuload"
#fil_Partial2
)
)
(and (not (menugroup "PARTIAL3"))
(setq #fil_ Partial3 (findfile "Partial3.mnu"))
(command "menuload"
#fil_Partial3
)
)
(and (not (menugroup "EXPRESS"))
(setq #fil_acetmain (findfile "acetmain.cui"))
(command "menuload"
#fil_acetmain
)
)