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

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

Как создать кнопку, чтобы ее иконка менялась в зависимости от значения переменной автокада?

Ответ
Поиск в этой теме
Непрочитано 07.01.2015, 22:12 #1
Как создать кнопку, чтобы ее иконка менялась в зависимости от значения переменной автокада?
Колян
 
Самозанятый КМ+КМД
 
Раменское
Регистрация: 09.09.2004
Сообщений: 1,852

Как создать кнопку, чтобы ее иконка менялась в зависимости от значения переменной автокада?
Я такое в атокаде не видел, но думаю это можно сделать.. может быть какое-то выпадающее меню как стиль текста или стиль размера?? можно ли это сделать для кнопки (не путать с лентной)?
Просмотров: 9094
 
Непрочитано 07.01.2015, 22:31
#2
Кулик Алексей aka kpblc
Moderator

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


Думаю, только программно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.01.2015, 22:42
#3
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


на Lispе?
В нижнем правом углу есть кнопки, которые меняют свой вид.. и в Архитектурном автокаде, есть кнопка, которая мне нужна.
Как называет программа чтобы сделать такую кнопку?
Можно ли перенести её из Архитектурного автокада? Или где они там вообще хранятся?
На сколько всё сложно? День работы, два дня?
Миниатюры
Нажмите на изображение для увеличения
Название: AutoCAD Architecture 2010 UI_Contextual_Tabs.JPG
Просмотров: 227
Размер:	139.2 Кб
ID:	141666  
Колян вне форума  
 
Непрочитано 07.01.2015, 22:52
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Колян Посмотреть сообщение
на Lispе?
Совсем необязательно.
Цитата:
Сообщение от Колян Посмотреть сообщение
В нижнем правом углу есть кнопки, которые меняют свой вид..
Вот такое на лиспе вряд ли удастся реализовать.
Цитата:
Сообщение от Колян Посмотреть сообщение
в Архитектурном автокаде, есть кнопка, которая мне нужна.
Ну так и используй его, кто мешает?
Цитата:
Сообщение от Колян Посмотреть сообщение
Можно ли перенести её из Архитектурного автокада?
Вряд ли.
Цитата:
Сообщение от Колян Посмотреть сообщение
На сколько всё сложно? День работы, два дня?
В любом случае, получается, что ты ошибся с разделом. Тебе в "Поиск исполнителей" надо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.01.2015, 23:36
#5
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


Нашел приложение http://www.jtbworld.com/osnapzbg.htm
не понятно, как эти кнопки должны появиться и где?.. вот сижу разбираюсь.

Если исполнителя искать, то нужно хотя бы примерно знать, что нужно.

Эта кнопка хранится в ARX файлах архитектурного автокада?

Последний раз редактировалось Колян, 08.01.2015 в 00:55.
Колян вне форума  
 
Непрочитано 08.01.2015, 17:45
#6
VVA

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


К сведению кнопки лиспом меняли еще здесь
Возможно ли ЛИСПом посадить иконку на кнопку
Как ЛИСПом поменять цвет текста нажатием кнопки мышки
PS Раз там Малявка разобралась, может и не придется идти в "Поиск исполнителей"
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 08.01.2015 в 17:53.
VVA вне форума  
 
Автор темы   Непрочитано 08.01.2015, 19:46
#7
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


Цитата:
Сообщение от VVA Посмотреть сообщение
К сведению кнопки лиспом меняли еще здесь
Здесь кнопка меняется при нажатие на неё, а у меня задача, менять кнопку в зависимости от значения переменной.
Понятно, что можно менять кнопку, если применить такую команду, которая сразу будет менять значение переменной и картинку кнопки. (только я не знаю как это сделать)
Я порылся в программе osnapzbg, она действительно работает, есть возможность менять цвет фона, или цвет закладки, цвет перекрестия. Протестирую, а потом запишу видео, на эту тему. Пока работает удобно!
Колян вне форума  
 
Непрочитано 21.01.2015, 08:18
#8
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Колян Посмотреть сообщение
у меня задача, менять кнопку в зависимости от значения переменной
Колян, кажется, я знаю, как это сделать. Расскажи, какая нужна переменная и предоставь иконки на эту кнопку. И еще надо понять: по нажатию этой кнопки нужно переменную менять или кнопка нужна только для индикации. Зависит еще от того, сколько возможных значений у этой переменной. В общем, продумай хорошенько все нюансы и опиши подробней. Я постараюсь состряпать код по мере возможности. На лиспе. Если это еще актуально.
skkkk вне форума  
 
Автор темы   Непрочитано 21.01.2015, 16:20
#9
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


Цитата:
Сообщение от skkkk Посмотреть сообщение
Колян, кажется, я знаю, как это сделать.
Программа эта работает и меняет цвет курсора, но работает она с маленькими глюками: меняет вид курсора, убирает эскизы курсоров из настроек.
Плюс к этому она меняет цвет слова Model, что оказалось удобней цвета курсора.
Поэтому я попросил бы сделать такую команду, которую можно было повесить на кнопку, которая бы при изменение переменной osnapz на 0 меняла бы цвет слова Model на красный, а при osnapz = 1 на черный (при этом эта кнопка бы меняла бы и переменную с 0 на 1, или с 1 на 0).
Просто команда, может быть маленький лисп, иначе люди не поймут, что и к чему.

вот скрипт, чтобы нажимая на кнопку переключалось с 0 на 1 или с 1 на 0
osnapz $M=$(-,1,$(getvar,osnapz))
Миниатюры
Нажмите на изображение для увеличения
Название: osnapz.JPG
Просмотров: 112
Размер:	20.8 Кб
ID:	142304  

Последний раз редактировалось Колян, 21.01.2015 в 20:51.
Колян вне форума  
 
Непрочитано 21.01.2015, 21:23
#10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Слово "Model" на вкладке, как и названия всех листов, всегда принимают цвет, равный цвету курсора. Можно убедиться в этом, если поменять цвет курсора в настройках. Поэтому черный цвет будет означать такой же и у перекрестья, как оно (гипотетически) тогда будет видно на черном же фоне? Фактически же при черном цвете фона не получится поставить черный курсор, разве только темно-серый, но можно глаза сломать.
А в остальном проблем быть не должно. Попробую что-нибудь сделать по мере возможности.
Цитата:
Сообщение от Колян Посмотреть сообщение
Просто команда, может быть маленький лисп, иначе люди не поймут, что и к чему.
Насколько он должен быть маленьким? Думаю, те, кто захотят, поймут. Но одним, хоть и не очень большим лиспом тут не отделаться. Нужны будут еще иконки и настройка панелей, придется с этим разобраться. Вот, кстати, похожая тема.
skkkk вне форума  
 
Автор темы   Непрочитано 21.01.2015, 23:16
#11
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


Я записал видео, на тему чего я хочу ))
http://youtu.be/u-JYUzATjn4
Колян вне форума  
 
Непрочитано 22.01.2015, 02:21
#12
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Колян Посмотреть сообщение
сделать такую команду, которую можно было повесить на кнопку, которая бы при изменение переменной osnapz на 0 меняла бы цвет слова Model на красный, а при osnapz = 1 на черный (при этом эта кнопка бы меняла бы и переменную с 0 на 1, или с 1 на 0).
Получилось сделать все в точности так. Даже при включении OSNAPZ надпись модель становтся черной (невидимой на черном фоне). Это видимо, глюк, но раз душе угодно... Курсор при этом остается белым.

Все что я сделал - это слегка доработал код VVA, по указанной им выше ссылке.
Во вложении комплект необходимых файлов и инструкция, подправленная под данный случай. Кнопки - оставил те же: красный крестик и зеленая галочка, по-моему красивее скучных 1 и 0. Но можно их вставить туда любые, поменяв им имена на On.bmp (1) и Off.bmp (2), или исправить имена в коде.
Вложения
Тип файла: rar OSNAPZ-OnOff.rar (1.6 Кб, 56 просмотров)

Последний раз редактировалось skkkk, 22.01.2015 в 17:46.
skkkk вне форума  
 
Автор темы   Непрочитано 22.01.2015, 15:19
#13
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


Спасибо! Работает, буду тестировать!
Колян вне форума  
 
Непрочитано 22.01.2015, 17:13
#14
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


skkkk,

1.если нажимать несколько раз на кнопку- не переключается.
Но если раз нажал на кнопку, а потом выбрал например _line, то после такой манипуляции- кнопка уже переключается.
если еще раз нажать кнопку- опять не срабатывает.

2. Кроме того, в readme есть

Цитата:
5. Создать кнопку на этой панели. В приведенном коде она должна быть 1-й. Если это не так, номер нужно заменить.
Фрагмент кода: 0 ;_Номер кнопки, начиная с 0
и поменять число на нужное
а в коде такой строки нет
__________________
Kiev, Ukraine

Последний раз редактировалось sasha_lif, 22.01.2015 в 17:23.
sasha_lif вне форума  
 
Непрочитано 22.01.2015, 17:45
#15
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
1.если нажимать несколько раз на кнопку- не переключается.
Но если раз нажал на кнопку, а потом выбрал например _line, то после такой манипуляции- кнопка уже переключается.
если еще раз нажать кнопку- опять не срабатывает.
Тестировал на 2011-м - все замечательно срабатывает хоть сто раз подряд... Странно. Какая версия Автокада? Что при этом пишется в командной строке?
Впрочем, я догадываюсь, что дело может быть в том глюке, который делает цвет слова "Модель" на вкладке черным. Тестируя сейчас, обнаружил, что черным становится не только это слово, но и рамка выбора. Поэтому изменил на белый.
Цитата:
Сообщение от sasha_lif Посмотреть сообщение
а в коде такой строки нет
Правда, затер случайно комментарий. Однако в коде одна единственная цифра "0"
В общем, в #12 перезалил архив.
skkkk вне форума  
 
Непрочитано 22.01.2015, 17:59
#16
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


skkkk,
такое впечатление, что где-то лишний раз вызывается команда

за ОДНО нажатие дает
Цитата:
Command: OSNAPZ-ONOFF

Новое значение OSNAPZ: 0

Command:
Command:
Command:
Command: OSNAPZ-OnOff
Новое значение OSNAPZ: 1
автокад 2013 eng SP2

Вначале на тулбар иконку какую присваивать- on или off?

А подскажите ,что нужно поменять, чтобы наооборот, при osnapz 0- все было стандартным белым,а при osnapz=1- красным так привычней работать
__________________
Kiev, Ukraine

Последний раз редактировалось sasha_lif, 22.01.2015 в 18:06.
sasha_lif вне форума  
 
Непрочитано 22.01.2015, 18:14
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,041


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
1.если нажимать несколько раз на кнопку- не переключается.
Но если раз нажал на кнопку, а потом выбрал например _line, то после такой манипуляции- кнопка уже переключается.
если еще раз нажать кнопку- опять не срабатывает.
На 2012 было тоже самое, когда пробовал исходный вариант с caduser. Кнопка обновляла внешний вид только после выполнения какого-то действия по рисованию.
Сергей812 вне форума  
 
Непрочитано 22.01.2015, 18:23
#18
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
Вначале на тулбар иконку какую присваивать- on или off?
Не важно. Можно вообще никакую не вешать, лисп сам разберется потом, что к чему
Тут важнее другое: пока не нажмешь кнопку во вновь открытом файле, не факт, что она будет показывать правильную информацию. Выхода тут два: либо подключать реактор, что не очень охота для такой пустячковой задачи, либо прописать каждому юзеру некую строку в файле acaddoc20ХХ.lsp, но у Коляна аллергия на все, что сложнее обычной загрузки лиспа . Если будет интерес, смогу эту строчку соорудить. А пока я сделал у себя так: вообще в адаптации картинку на кнопку не вешал. При открытии файла на этой кнопке у меня вопросик. При первом нажатии все встает на свои места - переменная включается, появляется зеленая галочка.
Цитата:
Сообщение от sasha_lif Посмотреть сообщение
что нужно поменять, чтобы наооборот, при osnapz 0- все было стандартным белым,а при osnapz=1- красным
в коде поменять местами строки (для обновленной версии):
Код:
[Выделить все]
(vlax-make-variant 255 19)
и
Код:
[Выделить все]
(vlax-make-variant 16777215 19)
Эти строки я сознательно не комментировал, однако они отвечают за значение присваимого цвета. Если есть желание по другим цветам, проще спросить у меня, чем я объясню всю теорию о том где и что, и главное - на что нужно поменять, чтобы был такой-то цвет.

Последний раз редактировалось skkkk, 22.01.2015 в 18:31.
skkkk вне форума  
 
Непрочитано 22.01.2015, 18:30
#19
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


skkkk, спасибо, да, я в acaddoc20ХХ.lsp,допишу
(Command "OSNAPZ" "0")
У вас не глючит, если несколько раз вподряд нажимать на кнопку, как я писал в №14?
У меня такое впечатление что гд-то лишний раз ENTER в лиспе срабатывает. Проверьте код
Например, если я открою второй документ, тут же закрою его, и в первом нажму на вашу кнопку, то сработает команда open и ваш лисп
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 22.01.2015, 19:20
#20
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


В справке пишут, что значение OSNAPZ не сохраняется, и начальное значение 0. Поэтому я и выбрал такой путь, не ставить иконку вручную, а доверил все лиспу, он в любом случае ее включает при первом нажатии.
Нужно бы, чтоб кнопка менялась и при изменении этой переменной вручную, через комстроку. А это только через реактор. Подумайте, если вам это будет нужно, сделать это несложно. Тестируйте пока так, может, еще какие будут замечания.

----- добавлено через ~4 мин. -----
sasha_lif, у меня работает четко. Команды в лиспе не задействованы, поэтому энтер там нажимать нечему. По идее. А там кто знает... Может, это что-то из уже загруженных лиспов конфликтует? Есть лиспы в автозагрузке? А с реакторами? Может, попробовать выгрузить всё для чистоты эксперимента?

Последний раз редактировалось skkkk, 23.01.2015 в 00:46.
skkkk вне форума  
 
Непрочитано 23.01.2015, 13:12
#21
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


skkkk, та да, реактор не нужно...
В Автозагрузке полно, сейчас повыгружаю, попробую
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 23.01.2015, 15:37
#22
VVA

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


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
У меня такое впечатление что гд-то лишний раз ENTER в лиспе срабатывает. Проверьте код
Например, если я открою второй документ, тут же закрою его, и в первом нажму на вашу кнопку, то сработает команда open и ваш лисп
Вполне возможно, что в макросе на кнопку затесался лишний пробел
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 24.02.2015, 22:57
#23
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


Пробовал на 2015 автокаде и не работает
Почти всё работает..
можно ли перенести панель из "панели" на "панель быстрого доступа" ?
и убрать изменения цветов, т.к. они не работают на 2015 автокаде

Последний раз редактировалось Колян, 25.02.2015 в 13:55.
Колян вне форума  
 
Непрочитано 26.02.2015, 16:42
1 | #24
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Насчет панели быстрого доступа с наскоку не скажу, надо разбираться. Проверить на 2015-м смогу, когда будет возможность, попробую понять, почему не работает.
Вот пока вариант кода без изменения цвета курсора
Код:
[Выделить все]
 (defun C:OSNAPZ-OnOff ()
  (vl-load-com)
  (setq cz (vla-item
	     (vla-item
	       (vla-get-toolbars
		 (vla-item (vla-get-menugroups (vlax-get-acad-object))
			   "ACAD"   ;_Группа меню
		 )
	       )
	       "Моя_панель" ;_Имя панели
	     )
	     0              ;_Номер кнопки, начиная с 0
	   )
  )
  (vla-getbitmaps cz 'SmallBitmapName 'BigBitmapName)
  (if (= (strcase(vl-filename-base SmallBitmapName)) "ON")
    (progn
      (if (setq icon (findfile "off.bmp"))
		  (vla-setbitmaps cz icon icon)
		  (alert "Не могу найти off.bmp")	
       )
      (setvar "OSNAPZ" 0)
	  (princ "\nНовое значение OSNAPZ: 0")
	  (princ)
    )
    (progn
      (if (setq icon (findfile "on.bmp"))
		  (vla-setbitmaps cz icon icon)
		  (alert "Не могу найти on.bmp")	
      )
      (setvar "OSNAPZ" 1)
	  (princ "\nНовое значение OSNAPZ: 1")
	  (princ)
    )
  )
)
(princ)
skkkk вне форума  
 
Автор темы   Непрочитано 28.02.2015, 10:52
#25
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


На ленте есть большие кнопки, хорошо бы настроить так, чтобы эта кнопка появилась именно на месте больших кнопок на панели ленты
Спасибо за помощь!
Колян вне форума  
 
Автор темы   Непрочитано 03.03.2015, 10:45
#26
Колян

Самозанятый КМ+КМД
 
Регистрация: 09.09.2004
Раменское
Сообщений: 1,852


Путем долгих мучений родилось две идеи
1. Менять цвет фона в зависимости от привязки 2д или 3д. Не реализовано. Есть проблема в том, что цвет фона есть в 2д виде и 3д виде и это разные переменные.
2. Менять цвет курсора в зависимости от привязки 2д и 3д. Частично реализовано. Есть проблема в том, что цвет курсора в 2д и 3д виде это разные переменные. При этом в 3д виде нужно убрать галочку "оттенок X,Y,Z"
3. Уже реализованный вариант изменение иконки кнопки. Хорошо бы сделать ее изменение (иконки) даже в случае изменения переменной osnapz через переменную osnapz.
Реализован только в части кнопки на панели меню, не реализовано в быстрой панели (в самом верху) и ленте.
Скриншоты на тему цвета курсора, тоже и по цвету фона.
Миниатюры
Нажмите на изображение для увеличения
Название: 001.JPG
Просмотров: 37
Размер:	52.4 Кб
ID:	145008  Нажмите на изображение для увеличения
Название: 002.JPG
Просмотров: 27
Размер:	54.9 Кб
ID:	145009  

Последний раз редактировалось Колян, 04.03.2015 в 19:16.
Колян вне форума  
 
Непрочитано 14.04.2015, 02:50
#27
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Несколько доработал программу. Теперь вместе с фоном чертежа меняется и цвет фона командной строки, а вместе с курсором меняется цвет текста командной строки.

Программа ведет себя следующим образом (нужно заменить файл OSNAPZ-OnOff.lsp на новый):


1. Принцип создания кнопки на панелях остается таким же, как в предыдущей версии: пользователь создает самостоятельно пустую кнопку в нужном меню с нужным именем, затем прописывает имена "в теле" лисп-файла. Кнопки могут располагаться:

а) на обычной панели инструментов (реализовано);
б) на "быстрой" панели инструментов; (скорее всего нереализуемо в LISP)
в) в ленте. (скорее всего также нереализуемо в LISP)

2. Для изменения набора цветов фона и перекрестья в той или иной конфигурации пользователь выясняет номер цвета в Автокаде и вписывает его значение "в тело" файла *.lsp в соответствующие места, отмеченные комментариями, примерно в таком виде
Код:
[Выделить все]
  (setq cursor-color-osnapz-on (rgb->ole 255 0 0)         ;;; цвет курсора при OSNAPZ=1
		cursor-color-osnapz-off (rgb->ole 255 255 255)    ;;; цвет курсора при OSNAPZ=0
		background-color-osnapz-on (rgb->ole 132 132 132) ;;; цвет фона при OSNAPZ=1
		background-color-osnapz-off (rgb->ole 0 0 0)      ;;; цвет фона при OSNAPZ=0
Для каждого из цветов нужно поменять три группы чисел на свои от нужного цвета по шкале RGB. Эти три группы чисел можно увидеть в стандартном окне выбора цветов Автокада (например, если нажать на изменение цвета слоя в Диспетчере слоев) при наведении мышью на цвет они мелькают (через запятую) в правой части окна посередине. Только в код их нужно вписывать без запятых, просто через пробел. Таким образом можно использовать цвета не только трехзначные, не только из первой вкладки окна выбора цветов, но и вообще, выбрать любой оттенок из второй и третьей вкладок. Число ведь уже девятизначное!
3. При открытии Автокада, а также при открытии нового окна (нового сеанса), кнопке на панели присваивается иконка "Off". Все цвета приводятся в соответствие режиму OSNAPZ-off, какими бы они не были до предудыщего закрытия Автокада. Это обусловлено тем, что значение OSNAPZ по умолчанию при открытии любого чертежа равно 0.
4. При открытии другого файла в этом сеансе значение переменной OSNAPZ наследуется из последнего открытого файла в текущем сеансе (это также "встроенное" поведение Автокада). Все цвета приводятся в соответствие с режимом.
5. При нажатии на кнопку:

а) переменная OSNAPZ меняет значение на противоположное (реализовано),
б) меняется цвет курсора на значение, установленное "в теле" лисп-файла (реализовано, только для 2D, для 3D в LISP не реализуемо);
в) меняется цвет фона на значение, установленное "в теле" лисп-файла (реализовано 2D+3D-видов);
г) меняется иконка на панели (если существует).

6. При вводе переменной OSNAPZ с клавиатуры пункты 4б, 4в, 4г выполняются автоматически.

Вот код:
Код:
[Выделить все]
 (vl-load-com)
(defun C:OSNAPZ-OnOff ( / cursor-color-osnapz-on cursor-color-osnapz-off background-color-osnapz-on background-color-osnapz-off cz)
  (setq cursor-color-osnapz-on (rgb->ole 255 0 0)         ;;; цвет курсора при OSNAPZ=1
		cursor-color-osnapz-off (rgb->ole 255 255 255)    ;;; цвет курсора при OSNAPZ=0
		background-color-osnapz-on (rgb->ole 132 132 132) ;;; цвет фона при OSNAPZ=1
		background-color-osnapz-off (rgb->ole 0 0 0)      ;;; цвет фона при OSNAPZ=0
        cz (vla-Item
	         (vla-Item
	            (vla-get-Toolbars
		           (vla-Item 
				     (vla-get-MenuGroups (vlax-get-acad-object))
			         "ACAD" ;;; Группа меню
		           )
	            )
	            "Свойства"  ;;; Имя панели
	         )
	         0              ;;; Номер кнопки, начиная с 0
	       )
  )
  (vla-GetBitmaps cz 'SmallBitmapName 'BigBitmapName)
  (if (null reaction) 
	  (if (= (getvar "OSNAPZ") 0)
		  (progn (setvar "OSNAPZ" 1) (princ " Новое значение OSNAPZ: 1")(princ))
		  (progn (setvar "OSNAPZ" 0) (princ " Новое значение OSNAPZ: 0")(princ))
	  )
  )
  (if (= (getvar "OSNAPZ") 0)
    (progn
      (if (setq icon (findfile "off.bmp"))
		  (vla-SetBitmaps cz icon icon)
		  (alert "Не могу найти off.bmp")	
       )
	  (vla-put-ModelCrosshairColor
		(vla-get-Display
			(vla-get-Preferences
				(vlax-get-acad-object)))
		cursor-color-osnapz-off
	  )
	  (vla-put-TextWinTextColor
        (vla-get-Display
          (vla-get-Preferences
            (vlax-get-acad-object)))
        cursor-color-osnapz-off
      )
	  (vla-put-GraphicsWinModelBackgrndColor
		(vla-get-Display
			(vla-get-Preferences
				(vlax-get-acad-object)))
		background-color-osnapz-off
	  )
	  (vla-put-TextWinBackgrndColor
        (vla-get-Display
          (vla-get-Preferences
            (vlax-get-acad-object)))
        background-color-osnapz-off
      )
	  (princ)
    )
    (progn
      (if (setq icon (findfile "on.bmp"))
		  (vla-SetBitmaps cz icon icon)
		  (alert "Не могу найти on.bmp")	
      )
	  (vla-put-ModelCrosshairColor
		(vla-get-Display
			(vla-get-Preferences
				(vlax-get-acad-object)))
		cursor-color-osnapz-on
	  )
	  (vla-put-TextWinTextColor
        (vla-get-Display
          (vla-get-Preferences
            (vlax-get-acad-object)))
        cursor-color-osnapz-on
      )
	  (vla-put-GraphicsWinModelBackgrndColor
		(vla-get-Display
			(vla-get-Preferences
				(vlax-get-acad-object)))
		background-color-osnapz-on
	  )
	  (vla-put-TextWinBackgrndColor
        (vla-get-Display
          (vla-get-Preferences
            (vlax-get-acad-object)))
        background-color-osnapz-on
      )
	  (princ)
    )
  )
)
(princ)


(defun rgb->ole (R G B)
	(+ (* B (expt 16 4)) (* G (expt 16 2)) R)
)


;;; Реактор на завершение команд изменения текущего слоя или его свойств:
(vlr-command-reactor nil '((:vlr-commandEnded . commandEnded)))
(princ)
;;; Реакция на завершение команд изменения текущего слоя:
(defun commandEnded (reac data / reaction)
	(if 
		(vl-position (car data) 
			(list "SETVAR" 
				  "_SETVAR" 
			)
		)
		(reaction-function) 
    )
	(princ)
)


;;; Реактор на активацию файла 
(vlr-docmanager-reactor nil '((:VLR-documentToBeActivated . documentToBeActivated)))

;;; Реакция на активацию файла:
(defun documentToBeActivated (reac data / )
  (reaction-function) 
)


(defun reaction-function ()
			(setq reaction T)
			(C:OSNAPZ-OnOff)
			(setq reaction nil)
)
(reaction-function)
(princ)


Пока остается непонятным две вещи:
1. Можно ли все-таки как-то из лиспа добраться до программной настройки кнопок на ленте и в меню быстрого доступа? Или все же, учитывая, что лента (и вроде быстрое меню тоже) появилась в 2009-й версии, а лисп с тех пор, насколько я знаю, подвергся изменениям только в части command - command-s. Или я ошибаюсь?
2. Из лиспа не нашел доступа к цветам курсора и фона в 3D. В ActiveX свойство цвета курсора есть только для модели и листа, а если речь заходит о визуальных стилях, отличных от 2D-каркас, или в видах, отличных от 2D-вида сверху, то эти свойства цвет курсора не меняют. Из того, что удалось найти, цвета можно поменять только сменой профиля, а такой подход мне не нравится. Очень долго это.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать кнопку, чтобы ее иконка менялась в зависимости от значения переменной автокада?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19