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

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

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

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

Как создать кнопку, чтобы ее иконка менялась в зависимости от значения переменной автокада?
Я такое в атокаде не видел, но думаю это можно сделать.. может быть какое-то выпадающее меню как стиль текста или стиль размера?? можно ли это сделать для кнопки (не путать с лентной)?
Просмотров: 9450
 
Непрочитано 23.01.2015, 13:12
#21
sasha_lif

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


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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от 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,680


Насчет панели быстрого доступа с наскоку не скажу, надо разбираться. Проверить на 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
Просмотров: 42
Размер:	52.4 Кб
ID:	145008  Нажмите на изображение для увеличения
Название: 002.JPG
Просмотров: 32
Размер:	54.9 Кб
ID:	145009  

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


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


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

Программа ведет себя следующим образом (нужно заменить файл 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