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

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

Управление видимостью слоев

Ответ
Поиск в этой теме
Непрочитано 13.12.2006, 14:52
Управление видимостью слоев
Аshаs-ка
 
проектировсчик
 
Москва
Регистрация: 06.01.2006
Сообщений: 1,982

А вопрос созрел такой: возможно ли программно управлять интенсивностью цветов слоев на экране? Поясняю, для чего. Вот как приятно, например, в определенных ситуациях было бы нажать кнопочку с командой, подобной LAYISO, но чтоб слои не тушились до конца, а становились блееедненькими... залоооченными... и чтоб потом назад командой, подобной LAYUNISO можно было бы вернуться. Вот удобнее, если слои чуть видны... Вот чую я, что производительности такая кнопка прибавит существенно... Вот в архикаде есть показ предыдущего этажа - удобственно! И в автокаде должно быть такое! Только лучше! Есть мысли?
Просмотров: 20625
 
Непрочитано 16.12.2006, 08:00
#21
T-Yoke

Артиллерист - вертолётчик. Дипломированный инженер-механик. Technologist
 
Регистрация: 29.11.2004
Где-то около Москвы
Сообщений: 16,527
Отправить сообщение для T-Yoke с помощью Skype™


Идея с полупрозрачными слоями действитительно интересная, можно будет наконец в автокаде в сборках внутренности показывать без полного отключения наружных деталей.
T-Yoke вне форума  
 
Автор темы   Непрочитано 16.12.2006, 12:17
#22
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,982


Вот! Еще одно применение! Мне, например. часто на генпланах съемку векторную приглушать надо! Еще какие мысли по поводу применения есть?
Аshаs-ка вне форума  
 
Непрочитано 17.12.2006, 11:04
#23
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


(ИМХО) идея предложенная AY по данному вопросу лично мне кажется более правильной и простой в воплощении, по сравнению с изменением цвета у объектов на определенном слое.
Была у меня мысль сделать таблицу соответствия - (ЦВЕТ . ТУСКЛЫЙ_ЦВЕТ), однако дальше семи основных цветов(1 . 16) (1 . 56) (3 . 96) (4 . 136) (5 . 176) (6 . 216) ничего хорошего не получилось (можете попрововать например подобрать бледный_цвет для цвета 11?). А если на слое есть куча блоков, каждый примитив и атрибут которого надо заставить "побледнеть"... :roll:
Вот вариант идеи AY, правда в ACAD'е 2002 не работает, т.к. не смог разобраться с опциями команды ".-refedit" (работает только в таком виде
Код:
[Выделить все]
(vl-cmdf ".-refedit" sel_point "_Ok" '(245.236 46.626 0.0) '(199.61 159.446 0.0) '(129.011 72.0706 0.0) "" "Y")
и больше никак (список характерных точек примитивов не берет :cry: )
Код:
[Выделить все]
(defun start_view ( / doc ent_obj OBJ layer-obj obj_Current_layer)
  (vl-load-com)
  (setvar "cmdecho" 0)
  (setq	doc (vla-get-activedocument
	      (vlax-get-acad-object)
	    ) ;_ end of vla-get-activedocument
  ) ;_ end of setq
  (setq ent_obj (ENTSEL))
  (setq obl_vla (vlax-ename->vla-object (CAR ent_obj))
  ) ;_ end of setq
  (setq layer-obj (vla-get-layer obl_vla))
  (setq	obj_Current_layer
	 (ssget "X" (list (cons 8 layer-obj))
	 ) ;_ end of ssget
  ) ;_ end of setq
  (vl-cmdf ".-block" "temp" '(0 0) obj_Current_layer "")
  (vl-cmdf "_insert" "temp" '(0 0) "" "" "")
  (vl-cmdf ".-refedit" (cadr ent_obj) "_Ok" "All" "Y")
  (princ)
) ;_ end of defun


(defun end_view (/ doc obj_temp)
  (setvar "cmdecho" 0)
  (setq	doc (vla-get-activedocument
	      (vlax-get-acad-object)
	    ) ;_ end of vla-get-activedocument
  ) ;_ end of setq
  (vl-cmdf "_refclose" "_D")
  (setq
    obj_temp (ssget "X" (list (cons 2 "temp")))
  ) ;_ end of setq
  (vl-cmdf "_explode" obj_temp)
  (vla-delete
    (vla-item (vla-get-Blocks doc) "temp")
  ) ;_ end of vla-delete
  (princ)
) ;_ end of defun
Правда и здесь надо разобраться с командой ".-block" - в диалоговом режиме есть опция Convert to block, как сделать чтобы в командном режиме создаваемый блок не удалялся - не знаю, поэтому в коде дополнительная команда "_insert"...
Естественно можно сделать наоборот - чтобы "бледнели" примитивы выбираемого слоя...
CB вне форума  
 
Непрочитано 18.12.2006, 12:24
#24
VVA

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


Вариант с блокировкой слоев, запоминанием/восстановлением RGB, ACI-color
Код:
[Выделить все]
;|=========== RGB2HSL ================
* Ф-ция переводит значения цветовой модели RGB в HSL
* Алгоритм взят http://www.easyrgb.com/math.html
* Параметры вызова :
   Значения цветов R G B в диапазоне 0 - 255
   Where RGB values = 0 ? 255
* Возвращает список цветовой модели H S L
* в долях единицы (HSL results = 0 ? 1)
* Соответствие
     H  - Hue (оттенок )
     S  - Saturation (насыщенность)
     L  - Luminance (яркость)
* Для перевода в целые значения Автокада использовать
* преобразование
  R = 56 G = 184 B = 188
  (setq HSL (RGB2HSL 56 184 188)) ;_(0.505051 0.540984 0.478431)
  (princ (strcat "\nЦвета HSL:" "\nH="
            (rtos (* (car HSL) 360) 2 0) "\nS="
            (rtos (* (cadr HSL) 100) 2 0) "\nL="
            (rtos (* (caddr HSL) 100) 2 0)))
|;
(defun RGB2HSL ( R G B / var_R var_G var_B var_Min var_Max del_Max H S L del_R del_G del_B )
(setq var_R  (/ R 255.))
(setq var_G  (/ G 255.))
(setq var_B  (/ B 255.))
(setq var_Min (min var_R var_G var_B ));    //Min. value of RGB
(setq var_Max (max var_R var_G var_B ));    //Max. value of RGB
(setq del_Max (- var_Max var_Min))     ;    //Delta RGB value
(setq L (/ (+ var_Max var_Min ) 2.0))
(if (= del_Max 0 )(setq H 0 S 0) ; //This is a gray, no chroma...
(progn  
  (if (< L 0.5)(setq S (/ del_Max (+ var_Max var_Min)))
               (setq S (/ del_Max (- 2 var_Max var_Min))))
(setq del_R (/ (+(/ (- var_Max var_R) 6.0)(/ del_Max 2.0)) del_Max))
(setq del_G (/ (+(/ (- var_Max var_G) 6.0)(/ del_Max 2.0)) del_Max))
(setq del_B (/ (+(/ (- var_Max var_B) 6.0)(/ del_Max 2.0)) del_Max))
(cond
  ((equal var_R var_Max 1e-6)(setq H (- del_B del_G)))
  ((equal var_G var_Max 1e-6)(setq H (- (+ (/ 1.0 3) del_R) del_B)))
  ((equal var_B var_Max 1e-6)(setq H (- (+ (/ 2.0 3) del_G) del_R)))
  (t (setq H 0)))
  (if (< H 0)(setq H (1+ H)))(if (> H 1)(setq H (1- H)))));_if
(list H S L))

;|=========== HSL2RGB ================
* Ф-ция переводит значения цветовой модели HSL в RGB
* Алгоритм взят http://www.easyrgb.com/math.html
* http://130.113.54.154/~monger/hsl-rgb.html
* Параметры вызова:
  Значения цветовой модели H S L
  в долях единицы (HSL results = 0 ? 1)
* Возврат:
    Список значения цветов R G B в диапазоне 0 - 255
|;
(defun HSL2RGB (H S L / R G B temp1 temp2 temp3)
(defun hh ( temp1 temp2 temp3)
(if (< temp3 0)(setq temp3 (+ temp3 1)))
(if (> temp3 1)(setq temp3 (- temp3 1)))
(if (< (* 6 temp3) 1)(setq color (+ (* (- temp2 temp1) 6.0 temp3) temp1))
  (if (< (* 2.0 temp3) 1)(setq color temp2)
    (if (< (* 3.0 temp3) 2)(setq color (+ temp1 (* (- (/ 2.0 3.0) temp3) 6 (- temp2 temp1))))
      (setq color temp1)))) color)
(if (= S 0)(setq R L G L B L)(progn
    (if (< L 0.5)(setq temp2 (* L (+ 1.0 S)))
      (setq temp2 (- (+ L S)(* L S))))
    (setq temp1 (- (* 2.0 L) temp2))
    (setq R (hh temp1 temp2 (+ H (/ 1.0 3.0))))
    (setq G (hh temp1 temp2 H ))
    (setq B (hh temp1 temp2 (- H (/ 1.0 3.0))))))
  (mapcar '(lambda(x)(fix(* 255 x)))(list R G B)))

(defun C:CHLA (/ adoc selset lst_layer_selected) 
  (vl-load-com) 
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (not *kpblc-layer-list-hide*) 
    (if (setq selset (ssget))(progn (setq
lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
;; Для начала слои выбранных примитивов:   
  lst_layer_selected (mapcar '(lambda (x)(strcase (cdr (assoc 8 (entget x))))) lst) ;_mapcar 
;; Теперь слои "не попавшие в выбор" 
 *kpblc-layer-list-hide* (append *kpblc-layer-list-hide* 
      ((lambda (/ res)(vlax-for lay (vla-get-layers adoc) 
         (if (not(member (strcase (vla-get-name lay)) lst_layer_selected))
           (setq res (append res (list (list (vla-get-handle lay)
	(if (= (vla-get-ColorMethod(setq TrueColor(vla-get-TrueColor lay))) acColorMethodByRGB)
	(list  (vla-get-red TrueColor)(vla-get-Green TrueColor)(vla-get-Blue TrueColor))
	(vla-get-color lay))(vla-get-lock lay))))))) res)))) ;_ end of setq 
  (foreach item *kpblc-layer-list-hide* 
   (vl-catch-all-apply
     (function
       (lambda (/ obj TrueColor RGB HSL H S L)
	 (setq obj (vlax-ename->vla-object(handent (nth 0 item))))
	 (setq TrueColor (vla-get-TrueColor obj))
	 (setq RGB (list (vla-get-red TrueColor)
			 (vla-get-Green TrueColor)
			 (vla-get-Blue TrueColor)))
	 (setq HSL (apply 'RGB2HSL RGB))
	 (setq H (car HSL) S (cadr HSL) L (caddr HSL))
	 (if (< L 0.2)(progn				  ;:_Яркость меньше 20 Смещаем оттенок на 45 градусов
	  (setq H (+ H 0.125))
	  (if (> H 1)(setq H (1- H)))))
	 (setq L (* 0.4 L)) ;_Уменьшаем яркость
	 (setq RGB (apply 'HSL2RGB (list H S L)))
	 (vla-setRGB TrueColor (nth 0 RGB) (nth 1 RGB) (nth 2 RGB))
	 (vla-put-TrueColor obj TrueColor)
 	 (if (= (vla-get-ObjectName obj) "AcDbLayerTableRecord")(vla-put-lock obj :vlax-true))
       )
     )
   ) ;_ end of vl-catch-all-apply
  ) ;_ end of foreach 
 ) ;_ end of progn 
 ) ;_ end of if 
 (progn
   (princ "\nВосстанавливаю состояние слоев...")
   (foreach item *kpblc-layer-list-hide* 
     (vl-catch-all-apply (function (lambda ( / obj xx)
     (setq obj (vlax-ename->vla-object(handent (nth 0 item))))
     (setq TrueColor (vla-get-TrueColor obj))
     (setq xx (nth 1 item))
     (if (listp xx)(progn
       (vla-setRGB TrueColor (nth 0 xx) (nth 1 xx) (nth 2 xx))
       (vla-put-TrueColor obj TrueColor))
       (vla-put-color obj xx))
     (if (setq xx (nth 2 item))(vla-put-Lock obj xx)))))
   ) ;_ end of foreach
   (princ " ok")(setq *kpblc-layer-list-hide* nil) 
  ) ;_ end of progn 
 ) ;_ end of if 
(vla-endundomark adoc)(princ)) ;_ end of defun
(princ "\nНаберите в командной строке CHLA")
Измененена структура списка *kpblc-layer-list-hide*
Список имеет вид (("42" 7 :vlax-true) ("45" (223 118 83) :vlax-false))
1-й элемент - метка (поле 5) примитива
2-й - число - ACI-color, список - коды R G B для true-color
3-й элемент - если слой, то его состояние блокировки
За "потемнение" отвечает эта строка в коде
Код:
[Выделить все]
(setq L (* 0.4 L)) ;_Уменьшаем яркость
можно поиграться с коэффициетном.
Пока что не решен вопрос (надо ли?) с примитивами с явным заданием цвета и с явным заданием цвета примитивов в определении блока.
VVA вне форума  
 
Непрочитано 18.12.2006, 15:16
#25
VVA

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


Уменьшение яркости справедливо, если рисовать белым по черному. Если наоборот, то, наверное, надо увеличивать. У кого какие мысли?
VVA вне форума  
 
Непрочитано 18.12.2006, 15:20
#26
Кулик Алексей aka kpblc
Moderator

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


Может, попробовать получить цвет активного пространства (в котором выполняется рисование) и сдвигать цвета в сторону этого цвета?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.12.2006, 16:13
#27
VVA

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


> kpblc
Допустим есть цвет активного пространства в RGB. Как сдвигать цвета в сторону этого цвета?
VVA вне форума  
 
Автор темы   Непрочитано 18.12.2006, 16:47
#28
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,982


Дас ист фантастишь! Сбылась мечта идиота!!! Жаль, что идиот чертит на белом Маленький недочет - не меняет явно заданные примитивам цвета. ТАК ИМ И НАДО!!! А вообще - огромный респектище!!! Это точно будет мой любимый струмент. Лэйисо- на свалку истории! Здорово то как!
Аshаs-ка вне форума  
 
Непрочитано 18.12.2006, 16:57
#29
Кулик Алексей aka kpblc
Moderator

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


> VVA : Ну это ж была идея, не больше. Если честно, ответа на твой вопрос у меня нет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.12.2006, 17:02
#30
VVA

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


Вот последний( :?: ) вариант с блокировкой слоев, запоминанием/восстановлением RGB, ACI-color + примитивы с явным заданием цвета. Примитивы, входящие в блоки с явным задание цвета, не рассматриваются. Блоки должны быть "правильные".
В области потемнения/осветления делается так: Вычисляем цвет фона, если черный (0), то делаем затемнение, иначе- осветление.
Затемнение: Если яркость меньше 20%, сдвигаем оттенок на 45 градусов. Яркость уменьшаем на треть.
Осветление: к яркости добавляем 25%. Если яркость > 100% сдвигаем оттенок на 45 градусов, яркость устанавливаем на уровне 90%.
Код:
[Выделить все]
;http://forum.dwg.ru/showthread.php?p=108497#post108497
;|=========== RGB2HSL ================
* Ф-ция переводит значения цветовой модели RGB в HSL
* Алгоритм взят http://www.easyrgb.com/math.html
* Параметры вызова :
   Значения цветов R G B в диапазоне 0 - 255
   Where RGB values = 0 ? 255
* Возвращает список цветовой модели H S L
* в долях единицы (HSL results = 0 ? 1)
* Соответствие
     H  - Hue (оттенок )
     S  - Saturation (насыщенность)
     L  - Luminance (яркость)
* Для перевода в целые значения Автокада использовать
* преобразование
  R = 56 G = 184 B = 188
  (setq HSL (RGB2HSL 56 184 188)) ;_(0.505051 0.540984 0.478431)
  (princ (strcat "\nЦвета HSL:" "\nH="
            (rtos (* (car HSL) 360) 2 0) "\nS="
            (rtos (* (cadr HSL) 100) 2 0) "\nL="
            (rtos (* (caddr HSL) 100) 2 0)))
|;
(defun RGB2HSL ( R G B / var_R var_G var_B var_Min var_Max del_Max H S L del_R del_G del_B )
(setq var_R  (/ R 255.))
(setq var_G  (/ G 255.))
(setq var_B  (/ B 255.))
(setq var_Min (min var_R var_G var_B ));    //Min. value of RGB
(setq var_Max (max var_R var_G var_B ));    //Max. value of RGB
(setq del_Max (- var_Max var_Min))     ;    //Delta RGB value
(setq L (/ (+ var_Max var_Min ) 2.0))
(if (= del_Max 0 )(setq H 0 S 0) ; //This is a gray, no chroma...
(progn  
  (if (< L 0.5)(setq S (/ del_Max (+ var_Max var_Min)))
               (setq S (/ del_Max (- 2 var_Max var_Min))))
(setq del_R (/ (+(/ (- var_Max var_R) 6.0)(/ del_Max 2.0)) del_Max))
(setq del_G (/ (+(/ (- var_Max var_G) 6.0)(/ del_Max 2.0)) del_Max))
(setq del_B (/ (+(/ (- var_Max var_B) 6.0)(/ del_Max 2.0)) del_Max))
(cond
  ((equal var_R var_Max 1e-6)(setq H (- del_B del_G)))
  ((equal var_G var_Max 1e-6)(setq H (- (+ (/ 1.0 3) del_R) del_B)))
  ((equal var_B var_Max 1e-6)(setq H (- (+ (/ 2.0 3) del_G) del_R)))
  (t (setq H 0)))
  (if (< H 0)(setq H (1+ H)))(if (> H 1)(setq H (1- H)))));_if
(list H S L))

;|=========== HSL2RGB ================
* Ф-ция переводит значения цветовой модели HSL в RGB
* Алгоритм взят http://www.easyrgb.com/math.html
* http://130.113.54.154/~monger/hsl-rgb.html
* Параметры вызова:
  Значения цветовой модели H S L
  в долях единицы (HSL results = 0 ? 1)
* Возврат:
    Список значения цветов R G B в диапазоне 0 - 255
|;
(defun HSL2RGB (H S L / R G B temp1 temp2 temp3)
(defun hh ( temp1 temp2 temp3)
(if (< temp3 0)(setq temp3 (+ temp3 1)))
(if (> temp3 1)(setq temp3 (- temp3 1)))
(if (< (* 6 temp3) 1)(setq color (+ (* (- temp2 temp1) 6.0 temp3) temp1))
  (if (< (* 2.0 temp3) 1)(setq color temp2)
    (if (< (* 3.0 temp3) 2)(setq color (+ temp1 (* (- (/ 2.0 3.0) temp3) 6 (- temp2 temp1))))
      (setq color temp1)))) color)
(if (= S 0)(setq R L G L B L)(progn
    (if (< L 0.5)(setq temp2 (* L (+ 1.0 S)))
      (setq temp2 (- (+ L S)(* L S))))
    (setq temp1 (- (* 2.0 L) temp2))
    (setq R (hh temp1 temp2 (+ H (/ 1.0 3.0))))
    (setq G (hh temp1 temp2 H ))
    (setq B (hh temp1 temp2 (- H (/ 1.0 3.0))))))
  (mapcar '(lambda(x)(fix(* 255 x)))(list R G B)))

(defun C:CHLA (/ adoc selset lst_layer_selected lst lst-hide mc) 
  (vl-load-com) 
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (not *kpblc-layer-list-hide*) 
    (if (setq selset (ssget))(progn (setq
lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
lst-hide (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "_X" (list(assoc 410(entget(car lst))))))))
;; Для начала слои выбранных примитивов:   
lst_layer_selected (mapcar '(lambda (x)(strcase (cdr (assoc 8 (entget x))))) lst) ;_mapcar
lst-hide (vl-remove-if '(lambda(x)(member (strcase(cdr(assoc 8 (entget x)))) lst_layer_selected)) lst-hide)
lst-hide (vl-remove-if-not '(lambda(x)(assoc 62 (entget x))) lst-hide) ;_Объекты с Явным цветом
;; Теперь !!! Объекты (Слои - частный случай) "не попавшие в выбор" 
 *kpblc-layer-list-hide* (append *kpblc-layer-list-hide* 
      ((lambda ( / res)(vlax-for lay (vla-get-layers adoc) 
         (if (not(member (strcase (vla-get-name lay)) lst_layer_selected))
           (setq res (append res (list (list (vla-get-handle lay)
	(if (= (vla-get-ColorMethod(setq TrueColor(vla-get-TrueColor lay))) acColorMethodByRGB)
	(list  (vla-get-red TrueColor)(vla-get-Green TrueColor)(vla-get-Blue TrueColor))
	(vla-get-color lay))(vla-get-lock lay))))))) res)))
 *kpblc-obj-list-hide* (append *kpblc-layer-obj-hide*
((lambda ( / res)(foreach lay (mapcar 'vlax-ename->vla-object lst-hide)
(setq res (append res (list (list (vla-get-handle lay)
  (if (= (vla-get-ColorMethod(setq TrueColor(vla-get-TrueColor lay))) acColorMethodByRGB)
  (list  (vla-get-red TrueColor)(vla-get-Green TrueColor)(vla-get-Blue TrueColor))
 (vla-get-color lay))))))))))
) ;_ end of setq
(setq mc (vlax-variant-value (vlax-variant-change-type
      (vla-get-graphicswinmodelbackgrndcolor
        (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
      vlax-vblong))) ;_Цвет модели в OLE
;;;Если цвет 0 - понижаем яркость в 3 раза иначе добавляем 25
(if (zerop mc)
  (defun chL ( )
    (if (< L 0.2)(progn				  ;:_Яркость меньше 20 Смещаем оттенок на 45 градусов
	  (setq H (+ H 0.125))(if (> H 1)(setq H (1- H)))
	  )
	   )
   (setq L (* 0.3 L))) ;_Для черного фона
  (defun chL ( )
    (setq L (+ 0.25 L))
    (if (> L 1)
	   (progn
	    (setq H (+ H 0.125))(if (> H 1)(setq H (1- H))) 
            (setq L 0.9)
	   )
	   )
    );_Для остальных
  )
  (foreach item *kpblc-layer-list-hide* 
   (vl-catch-all-apply
     (function
       (lambda (/ obj TrueColor RGB HSL H S L)
	 (setq obj (vlax-ename->vla-object(handent (nth 0 item))))
	 ;;Разблокируем слои
 	 (vla-put-lock obj :vlax-false)
	 (setq TrueColor (vla-get-TrueColor obj))
	 (setq RGB (list (vla-get-red TrueColor)
			 (vla-get-Green TrueColor)
			 (vla-get-Blue TrueColor)))
	 (setq HSL (apply 'RGB2HSL RGB))
	 (setq H (car HSL) S (cadr HSL) L (caddr HSL))
	 
	 (chL) ;_Изменяем яркость
	 
	 (setq RGB (apply 'HSL2RGB (list H S L)))
	 (vla-setRGB TrueColor (nth 0 RGB) (nth 1 RGB) (nth 2 RGB))
	 (vla-put-TrueColor obj TrueColor)
       )
     )
   ) ;_ end of vl-catch-all-apply
  ) ;_ end of foreach
(foreach item *kpblc-obj-list-hide* 
   (vl-catch-all-apply
     (function
       (lambda (/ obj TrueColor RGB HSL H S L)
	 (setq obj (vlax-ename->vla-object(handent (nth 0 item))))
	 (setq TrueColor (vla-get-TrueColor obj))
	 (setq RGB (list (vla-get-red TrueColor)
			 (vla-get-Green TrueColor)
			 (vla-get-Blue TrueColor)))
	 (setq HSL (apply 'RGB2HSL RGB))
	 (setq H (car HSL) S (cadr HSL) L (caddr HSL))
	 
	 (chL) ;_Изменяем яркость
	 
	 (setq RGB (apply 'HSL2RGB (list H S L)))
	 (vla-setRGB TrueColor (nth 0 RGB) (nth 1 RGB) (nth 2 RGB))
	 (vla-put-TrueColor obj TrueColor)
       )
     )
   ) ;_ end of vl-catch-all-apply
  )			       
(foreach item *kpblc-layer-list-hide*
(setq obj (vlax-ename->vla-object(handent (nth 0 item))))
 ;;блокируем слои
(vla-put-lock obj :vlax-true)
  ) ;_ end of foreach 
 ) ;_ end of progn 
 ) ;_ end of if 
 (progn
(princ "\nВосстанавливаю состояние слоев...")
(foreach item *kpblc-layer-list-hide* 
     (vl-catch-all-apply (function (lambda ( / obj xx)
     (setq obj (vlax-ename->vla-object(handent (nth 0 item))))
     (setq TrueColor (vla-get-TrueColor obj))
     (setq xx (nth 1 item))
     (if (listp xx)(progn
       (vla-setRGB TrueColor (nth 0 xx) (nth 1 xx) (nth 2 xx))
       (vla-put-TrueColor obj TrueColor))
       (vla-put-color obj xx))
 ;;Разблокируем слои
    (vla-put-lock obj :vlax-false)
   )
  )))
(foreach item *kpblc-obj-list-hide* 
     (vl-catch-all-apply (function (lambda ( / obj xx)
     (setq obj (vlax-ename->vla-object(handent (nth 0 item))))
     (setq TrueColor (vla-get-TrueColor obj))
     (setq xx (nth 1 item))
     (if (listp xx)(progn
       (vla-setRGB TrueColor (nth 0 xx) (nth 1 xx) (nth 2 xx))
       (vla-put-TrueColor obj TrueColor))
       (vla-put-color obj xx))))))
(setq *kpblc-obj-list-hide* nil)
 (foreach item *kpblc-layer-list-hide*
     (setq obj (vlax-ename->vla-object(handent (nth 0 item))))
     (if (setq xx (nth 2 item))(vla-put-Lock obj xx)))
   (princ " ok")(setq *kpblc-layer-list-hide* nil) 
  ) ;_ end of progn 
 ) ;_ end of if 
(vla-endundomark adoc)(princ)) ;_ end of defun
(princ "\nНаберите в командной строке CHLA")

Последний раз редактировалось VVA, 19.09.2015 в 21:06.
VVA вне форума  
 
Автор темы   Непрочитано 18.12.2006, 17:11
#31
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,982


Все! Леплю кнопку!!! VVA! Спасибо! Kpblc! Спасибо! СВ! Тоже спасибо! Я пойду и скажу всем! VVA! А не хотите в готовые программы на autocad.ru? Или в dwg.ru в download?
Аshаs-ка вне форума  
 
Непрочитано 18.12.2006, 18:02
#32
VVA

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


Можно, если считать вопрос с потемнением/осветвлением завершенным
VVA вне форума  
 
Непрочитано 18.12.2006, 18:39
#33
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Цитата:
Или в dwg.ru в download?
Код:
[Выделить все]
Неверно ориентируете, 
                     товарищь! 
Готовые программы 
              у нас 
		  	     кладутся на autolisp.ru 
										        :)
AY вне форума  
 
Непрочитано 19.12.2006, 17:49
#34
VVA

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


Оптимизированный вариан. На тестовом чертеже с 17658 примитивами и 236 объектов с явным заданием цвета производительность увеличилась в 4,5 раза.
Код:
[Выделить все]
;http://forum.dwg.ru/showthread.php?p=108672#post108672
;|=========== RGB2HSL ================
* Ф-ция переводит значения цветовой модели RGB в HSL
* Алгоритм взят http://www.easyrgb.com/math.html
* Параметры вызова :
   Значения цветов R G B в диапазоне 0 - 255
   Where RGB values = 0 ? 255
* Возвращает список цветовой модели H S L
* в долях единицы (HSL results = 0 ? 1)
* Соответствие
     H  - Hue (оттенок )
     S  - Saturation (насыщенность)
     L  - Luminance (яркость)
* Для перевода в целые значения Автокада использовать
* преобразование
  R = 56 G = 184 B = 188
  (setq HSL (RGB2HSL 56 184 188)) ;_(0.505051 0.540984 0.478431)
  (princ (strcat "\nЦвета HSL:" "\nH="
            (rtos (* (car HSL) 360) 2 0) "\nS="
            (rtos (* (cadr HSL) 100) 2 0) "\nL="
            (rtos (* (caddr HSL) 100) 2 0)))
|;
(defun RGB2HSL ( R G B / var_R var_G var_B var_Min var_Max del_Max H S L del_R del_G del_B )
(setq var_R  (/ R 255.))
(setq var_G  (/ G 255.))
(setq var_B  (/ B 255.))
(setq var_Min (min var_R var_G var_B ));    //Min. value of RGB
(setq var_Max (max var_R var_G var_B ));    //Max. value of RGB
(setq del_Max (- var_Max var_Min))     ;    //Delta RGB value
(setq L (/ (+ var_Max var_Min ) 2.0))
(if (= del_Max 0 )(setq H 0 S 0) ; //This is a gray, no chroma...
(progn  
  (if (< L 0.5)(setq S (/ del_Max (+ var_Max var_Min)))
               (setq S (/ del_Max (- 2 var_Max var_Min))))
(setq del_R (/ (+(/ (- var_Max var_R) 6.0)(/ del_Max 2.0)) del_Max))
(setq del_G (/ (+(/ (- var_Max var_G) 6.0)(/ del_Max 2.0)) del_Max))
(setq del_B (/ (+(/ (- var_Max var_B) 6.0)(/ del_Max 2.0)) del_Max))
(cond
  ((equal var_R var_Max 1e-6)(setq H (- del_B del_G)))
  ((equal var_G var_Max 1e-6)(setq H (- (+ (/ 1.0 3) del_R) del_B)))
  ((equal var_B var_Max 1e-6)(setq H (- (+ (/ 2.0 3) del_G) del_R)))
  (t (setq H 0)))
  (if (< H 0)(setq H (1+ H)))(if (> H 1)(setq H (1- H)))));_if
(list H S L))

;|=========== HSL2RGB ================
* Ф-ция переводит значения цветовой модели HSL в RGB
* Алгоритм взят http://www.easyrgb.com/math.html
* http://130.113.54.154/~monger/hsl-rgb.html
* Параметры вызова:
  Значения цветовой модели H S L
  в долях единицы (HSL results = 0 ? 1)
* Возврат:
    Список значения цветов R G B в диапазоне 0 - 255
|;
(defun HSL2RGB (H S L / R G B temp1 temp2 temp3)
(defun hh ( temp1 temp2 temp3)
(if (< temp3 0)(setq temp3 (+ temp3 1)))
(if (> temp3 1)(setq temp3 (- temp3 1)))
(if (< (* 6 temp3) 1)(setq color (+ (* (- temp2 temp1) 6.0 temp3) temp1))
  (if (< (* 2.0 temp3) 1)(setq color temp2)
    (if (< (* 3.0 temp3) 2)(setq color (+ temp1 (* (- (/ 2.0 3.0) temp3) 6 (- temp2 temp1))))
      (setq color temp1)))) color)
(if (= S 0)(setq R L G L B L)(progn
    (if (< L 0.5)(setq temp2 (* L (+ 1.0 S)))
      (setq temp2 (- (+ L S)(* L S))))
    (setq temp1 (- (* 2.0 L) temp2))
    (setq R (hh temp1 temp2 (+ H (/ 1.0 3.0))))
    (setq G (hh temp1 temp2 H ))
    (setq B (hh temp1 temp2 (- H (/ 1.0 3.0))))))
  (mapcar '(lambda(x)(fix(* 255 x)))(list R G B)))
(defun C:CHLA (/ adoc selset lst_layer_selected lst lst-hide mc filter) 
  (vl-load-com) 
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (not *kpblc-layer-list-hide*) 
    (if (setq selset (ssget))(progn (setq
lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
;; Для начала слои выбранных примитивов:   
lst_layer_selected (mapcar '(lambda (x)(strcase (cdr (assoc 8 (entget x))))) lst)
filter (apply 'strcat (mapcar '(lambda(x)(strcat x ",")) lst_layer_selected))
lst-hide (ssget "_X" (list (assoc 410(entget(car lst)))
       '(-4 . "<NOT")(cons 8 filter) '(-4 . "NOT>") '(-4 . "<NOT") '(62 . 256) '(-4 . "NOT>")))
lst-hide (if lst-hide (vl-remove-if 'listp (mapcar 'cadr (ssnamex lst-hide))) nil)
;_!!! lst-hide (vl-remove-if '(lambda(x)(member (strcase(cdr(assoc 8 (entget x)))) lst_layer_selected)) lst-hide)
;_!!! lst-hide (vl-remove-if-not '(lambda(x)(assoc 62 (entget x))) lst-hide) ;_Объекты с Явным цветом
;; Теперь !!! Объекты (Слои - частный случай) "не попавшие в выбор" 
 *kpblc-layer-list-hide* (append *kpblc-layer-list-hide* 
      ((lambda ( / res)(vlax-for lay (vla-get-layers adoc) 
         (if (not(member (strcase (vla-get-name lay)) lst_layer_selected))
           (setq res (append res (list (list lay
	(if (= (vla-get-ColorMethod(setq TrueColor(vla-get-TrueColor lay))) acColorMethodByRGB)
	(list  (vla-get-red TrueColor)(vla-get-Green TrueColor)(vla-get-Blue TrueColor))
	(vla-get-color lay))(vla-get-lock lay))))))) res)))
 *kpblc-obj-list-hide* (append *kpblc-obj-list-hide*
((lambda ( / res)(foreach lay lst-hide
		   (setq lay (vlax-ename->vla-object lay))
(setq res (append res (list (list lay
  (if (= (vla-get-ColorMethod(setq TrueColor(vla-get-TrueColor lay))) acColorMethodByRGB)
  (list  (vla-get-red TrueColor)(vla-get-Green TrueColor)(vla-get-Blue TrueColor))
 (vla-get-color lay))))))))))
) ;_ end of setq
(setq mc (vlax-variant-value (vlax-variant-change-type
      (vla-get-graphicswinmodelbackgrndcolor
        (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
      vlax-vblong))) ;_Цвет модели в OLE
;;;Если цвет 0 - понижаем яркость в 3 раза иначе добавляем 25
(if (zerop mc)
  (defun chL ( )
    (if (< L 0.2)(progn  ;:_Яркость меньше 20 Смещаем оттенок на 45 градусов
	  (setq H (+ H 0.125))(if (> H 1)(setq H (1- H))))) (setq L (* 0.4 L))) ;_Для черного фона
  (defun chL ( )(setq L (+ 0.25 L))
    (if (> L 1)(progn
      (setq H (+ H 0.125))(if (> H 1)(setq H (1- H))) 
      (setq L 0.9))));_Для остальных
  )
  (foreach item *kpblc-layer-list-hide* 
   (vl-catch-all-apply
     (function
       (lambda (/ obj TrueColor RGB HSL H S L)
	 (setq obj (nth 0 item))
	 ;;Разблокируем слои
 	 (vla-put-lock obj :vlax-false)
	 (setq TrueColor (vla-get-TrueColor obj))
	 (setq RGB (list (vla-get-red TrueColor)
			 (vla-get-Green TrueColor)
			 (vla-get-Blue TrueColor)))
	 (setq HSL (apply 'RGB2HSL RGB))
	 (setq H (car HSL) S (cadr HSL) L (caddr HSL))
	 
	 (chL) ;_Изменяем яркость
	 
	 (setq RGB (apply 'HSL2RGB (list H S L)))
	 (vla-setRGB TrueColor (nth 0 RGB) (nth 1 RGB) (nth 2 RGB))
	 (vla-put-TrueColor obj TrueColor)
       )
     )
   ) ;_ end of vl-catch-all-apply
  ) ;_ end of foreach
(foreach item *kpblc-obj-list-hide* 
   (vl-catch-all-apply
     (function
       (lambda (/ obj TrueColor RGB HSL H S L)
	 (setq obj (nth 0 item))
	 (setq TrueColor (vla-get-TrueColor obj))
	 (setq RGB (list (vla-get-red TrueColor)
			 (vla-get-Green TrueColor)
			 (vla-get-Blue TrueColor)))
	 (setq HSL (apply 'RGB2HSL RGB))
	 (setq H (car HSL) S (cadr HSL) L (caddr HSL))
	 
	 (chL) ;_Изменяем яркость
	 
	 (setq RGB (apply 'HSL2RGB (list H S L)))
	 (vla-setRGB TrueColor (nth 0 RGB) (nth 1 RGB) (nth 2 RGB))
	 (vla-put-TrueColor obj TrueColor)
       )
     )
   ) ;_ end of vl-catch-all-apply
  )			       
(foreach item *kpblc-layer-list-hide* (setq obj (nth 0 item))
 ;;блокируем слои
(vla-put-lock obj :vlax-true)) ;_ end of foreach
) ;_ end of progn 
 ) ;_ end of if 
(progn (princ "\nВосстанавливаю состояние слоев...")
(foreach item *kpblc-layer-list-hide* 
     (vl-catch-all-apply (function (lambda ( / obj xx)
     (setq TrueColor (vla-get-TrueColor (setq obj (nth 0 item))))
     (setq xx (nth 1 item))
     (if (listp xx)(progn
       (vla-setRGB TrueColor (nth 0 xx) (nth 1 xx) (nth 2 xx))
       (vla-put-TrueColor obj TrueColor))
       (vla-put-color obj xx))
 ;;Разблокируем слои
    (vla-put-lock obj :vlax-false)))))
(foreach item *kpblc-obj-list-hide* 
     (vl-catch-all-apply (function (lambda ( / obj xx)
     (setq TrueColor (vla-get-TrueColor (setq obj (nth 0 item))))
     (setq xx (nth 1 item))
     (if (listp xx)(progn
       (vla-setRGB TrueColor (nth 0 xx) (nth 1 xx) (nth 2 xx))
       (vla-put-TrueColor obj TrueColor))
       (vla-put-color obj xx))))))
(setq *kpblc-obj-list-hide* nil)
 (foreach item *kpblc-layer-list-hide*
      (setq obj (nth 0 item))
     (if (setq xx (nth 2 item))(vla-put-Lock obj xx)))
   (princ " ok")(setq *kpblc-layer-list-hide* nil) 
  ) ;_ end of progn 
 ) ;_ end of if 
(vla-endundomark adoc)(princ))
(princ "\nНаберите в командной строке CHLA")

Последний раз редактировалось VVA, 19.09.2015 в 21:00.
VVA вне форума  
 
Непрочитано 19.12.2006, 21:10
#35
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 686


Спасибо, а то не кисло загружал систему на геоподоснове, а программа действительно шикарная )
gest вне форума  
 
Автор темы   Непрочитано 19.12.2006, 21:47
#36
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,982


Наблюдается пока некоторая неравномерность посветления цветов...все равно классно! Еще раз благодарю!
Аshаs-ка вне форума  
 
Непрочитано 20.12.2006, 09:57
#37
VVA

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


>Гест. Оптимизировал после того как попробывал на реальных чертежах (геоподоснова).
VVA вне форума  
 
Непрочитано 20.12.2006, 20:30
#38
luser


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


VVA
Спасибо за интересное решение, программа замечательная.
Разведка доложила, что у Вас день рождения поздравляю!
Успехов во всем :!:
luser вне форума  
 
Автор темы   Непрочитано 20.12.2006, 22:58
#39
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,982


VVA Присоединяюсь!
:wink: А в 2002 не пашет.. он труколоров не знает.. :wink: :wink:
Аshаs-ка вне форума  
 
Непрочитано 21.12.2006, 11:16
#40
VVA

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


>Аshаs-ка
>luser
Спасибо. Хотя надо признать для варианта черным по белому не очень. Мне не нравиться как они "бледнеют", а мыслей никаких
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Управление видимостью слоев

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

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