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

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

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

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

А вопрос созрел такой: возможно ли программно управлять интенсивностью цветов слоев на экране? Поясняю, для чего. Вот как приятно, например, в определенных ситуациях было бы нажать кнопочку с командой, подобной LAYISO, но чтоб слои не тушились до конца, а становились блееедненькими... залоооченными... и чтоб потом назад командой, подобной LAYUNISO можно было бы вернуться. Вот удобнее, если слои чуть видны... Вот чую я, что производительности такая кнопка прибавит существенно... Вот в архикаде есть показ предыдущего этажа - удобственно! И в автокаде должно быть такое! Только лучше! Есть мысли?
Просмотров: 20628
 
Непрочитано 13.12.2006, 15:10
#2
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,753
Отправить сообщение для Огурец с помощью Skype™


Отличная мысль!
Огурец вне форума  
 
Непрочитано 13.12.2006, 15:48
#3
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


я тоже об такой мечтаю, чтоб было похоже на edit block in place
Dym вне форума  
 
Автор темы   Непрочитано 13.12.2006, 15:55
#4
Аshаs-ка

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


Вот бы Kpblc прочитал... одна на него надежда!
Аshаs-ка вне форума  
 
Непрочитано 13.12.2006, 16:20
#5
Кулик Алексей aka kpblc
Moderator

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


Ох, на крыса сегодня надежды почти нет - пьяный сидит за моником. Пальцами по клаве не попадает.
ИМХО сделать такое возможно, но уж больно гиморно. По идее надо всем слоям, кроме слоев выбранных примитивов, цвет поменять. Например, с 10 на 11; 11 на 12, с 23 на 24 и так далее. То есть добавить по 1. Если это возможно. А потом вернуть обратно. На написание кода меня чичас не хватат
Либо второй вариант - использовать временное скрытие объектов (есть на сайте у Alaspher'a и на autocad.ru).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.12.2006, 16:33
#6
Аshаs-ка

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


Сдается, что индексированными цветами тут не обойтиль, придется переходить на True Color... И LUMINANCE уменьшать раза в три...Да еще лочить слои. То есть брать за основу Layiso и вместо примитивного выключения слоев запускать эту бодягу. Но. Никакого layiso.lsp или чего-то похожего я не нашел, да и кишка тонка менять с лету. А струмент хороший может получиться. И назовем его - уже знаю как - СУПЕРКРЫС! (типа это я подлизываюсь...). SuperLayKpblcIso.lsp! Как вы яхту назовете, так она и поплывет!
Аshаs-ка вне форума  
 
Непрочитано 13.12.2006, 16:45
#7
AY

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


(В каестве идеи)
Мне кажется подобное, в принципе, можно оганизовать объединив объекты слоя во временный блок с точкой вставки в нуле и програмно запустив _refedit, по окончании которой переводить объекты обратно в модель и удалять блок.

Однако все это выглядит весьма не надежно и надумано, много подводных камней, да и в случае сложного чертежа наверняка тормоза будут.
AY вне форума  
 
Непрочитано 13.12.2006, 16:50
#8
Кулик Алексей aka kpblc
Moderator

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


> AY : я думаю, что такой вариант, например, при редактировании блока или внешней ссылки может кончиться плачевно (если только не анализировать на ходу cmdnames и вываливать предупреждения соответствующие)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.12.2006, 17:04
#9
Аshаs-ка

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


А что есть CMDNAMES? А что быстрее работать будет? Слоев обычно под 30 бывает и примитивов немеряно...
Аshаs-ка вне форума  
 
Непрочитано 13.12.2006, 17:08
#10
VVA

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


LAYISO живет в acetlayr.lsp
VVA вне форума  
 
Непрочитано 13.12.2006, 17:14
#11
AY

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


>крыс
Я, ведь не наставиваю, а предлагаю как идею :)

Впрочем я не предвижу оговоренных тобой трудностей поскольку думаю поступить проще, а именно:

- имеем две кнопки.

- при нажатии 1-ой, каким-либо образом выбирается слой, создается блок, зписывается в надежном месте информация что за блок и запускается _refedit.

- по окончании редактирования нажимаем 2-ую кнопку. Программа анализирует систуацию, а именно находимся ли мы в состоянии _refedit и какого именно блока сравнивает с данными записанными 1-ой кнопкой и соответствующим образом обрабатывает ситуацию. Если юзер самостоятельно вышел из _refedit то проверяется записи и если временный блок цел крушим его.
Вобщем в таком духе.

Оговорюсь, что мне впринципе подобные махинации не нравятся. Для таких серьезный приемов работы надо требовать штатные средства.
AY вне форума  
 
Автор темы   Непрочитано 13.12.2006, 17:23
#12
Аshаs-ка

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


А у AV идея хороша тем, что слои как раз уже бледнеют... и темнеют... :P
Аshаs-ка вне форума  
 
Непрочитано 14.12.2006, 11:38
#13
Кулик Алексей aka kpblc
Moderator

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


Есть еще один вопрос - все же выбираются примитивы определенного слоя (слоев) или выбранные примитивы? А как быть с примитивами, имеющими такой же цвет, но лежащие на других слоях?
В общем, спробуйте (я не стал делать блоки):
Код:
[Выделить все]
;|
(chla) - и без параметров.
|;
(defun chla (/ adoc selset lst_layer_selected)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if (not *kpblc-layer-list-hide*)
    (if (setq selset (ssget))
      ;; Для начала слои выбранных примитивов:
      (progn
        (setq lst_layer_selected
                                      (mapcar
                                        '(lambda (x)
                                           (strcase (cdr (assoc 8 (entget x))))
                                           ) ;_ end of lambda
                                        (vl-remove-if
                                          'listp
                                          (mapcar 'cadr (ssnamex selset))
                                          ) ;_ end of vl-remove-if
                                        ) ;_ end of 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
                                                         ) ;_ end of MEMBER
                                                 ) ;_ end of not
                                                (setq res
                                                       (append
                                                         res
                                                         (list (cons (vla-get-name lay)
                                                                     (vla-get-color lay)
                                                                     ) ;_ end of cons
                                                               ) ;_ end of list
                                                         ) ;_ end of append
                                                      ) ;_ end of setq
                                                ) ;_ end of if
                                             res
                                             ) ;_ end of vlax-for
                                           ) ;_ end of lambda
                                         )
                                        ) ;_ end of append
              ) ;_ end of setq
        (foreach item *kpblc-layer-list-hide*
          ;; Меняем цвет. Если четный - то на "6" в конце. Для нечетных - "7"
          (vl-catch-all-apply
            (function
              (lambda ()
                (vla-put-color
                  (vla-item (vla-get-layers adoc) (car item))
                  (atoi (strcat
                          (substr (itoa (cdr item))
                                  1
                                  (1- (strlen (itoa (cdr item))))
                                  ) ;_ end of substr
                          (if (= (rem (cdr item) 2) 0)
                            "6"
                            (if (= (cdr item) 7)
                              "251"
                              "7"
                              ) ;_ end of if
                            ) ;_ end of if
                          ) ;_ end of strcat
                        ) ;_ end of atoi
                  ) ;_ end of vla-put-color
                ) ;_ end of lambda
              ) ;_ end of function
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of foreach
        ) ;_ end of progn
      ) ;_ end of if
    (progn
      (foreach item *kpblc-layer-list-hide*
        (vl-catch-all-apply
          (function (lambda ()
                      (vla-put-color
                        (vla-item (vla-get-layers adoc) (car item))
                        (cdr item)
                        ) ;_ end of vla-put-color
                      ) ;_ end of lambda
                    ) ;_ end of function
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of foreach
      (setq *kpblc-layer-list-hide* nil)
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Обнаружил глюк: иногда не обрабатываются слои, не содержащие примитивов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.12.2006, 12:27
#14
VVA

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


Есть соображения по поводу "побледнения" слоев.
1. Цвет переводим из ACI в RGB
2. RGB -> HSL
3. LUMINANCE (L) уменьшаем в N раз
4. HSL -> RGB
5.RGB-> ACI
Теперь по пунктам
1,5. ACI->RGB решается просто
Код:
[Выделить все]
(SETQ OBJ (vlax-ename->vla-object (CAR(ENTSEL))))
(setq ACI_col (vla-get-Color obj))
(setq RGB (list (vla-get-red (vla-get-truecolor obj))(vla-get-Green (vla-get-truecolor obj))(vla-get-Blue (vla-get-truecolor obj))))
2. Реализовать алгоритм http://www.easyrgb.com/math.php?MATH=M18#text18
4. Реализовать алгоритм http://www.easyrgb.com/math.php?MATH=M19#text19
Или найти что-нудь еще
Пункт 2 я попробывал. S и L считается нормально, а вот H что-то не совпадает. Посмотрю, может допуслил где ошибку
VVA вне форума  
 
Автор темы   Непрочитано 15.12.2006, 13:56
#15
Аshаs-ка

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


Kpblc!!!! Хелп ми! Грузицца и ни работаит! Анноун комнд грит :cry: :cry: :cry: Цвета меняет и все.... Я понимаю, что это только направлениедля поиска, а не законченный программный продукт. но. кишка тонка.
Аshаs-ка вне форума  
 
Непрочитано 15.12.2006, 14:11
#16
Кулик Алексей aka kpblc
Moderator

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


Только что специально провеил - нормально работает. С ком.строки вызов (chla).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.12.2006, 15:17
#17
VVA

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


Вроде реализовал алгоритм "побледнения" примитивов
Код:
[Выделить все]
;|=========== 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 ) ; //This is a gray, no chroma...
(setq H 0 S 0)
(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)))
  );progn
  );_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:TEST ( / obj ACI_col TrueColor RGB HSL H S L HSL_new RGB_new *error* )
(defun *error* (msg)(princ msg)(if OBJ (vla-put-Color obj ACI_col))(princ))
(SETQ OBJ (vlax-ename->vla-object (CAR(ENTSEL "\nВыберите объект для побледнения: "))))
(setq ACI_col (vla-get-Color obj))
(cond ((= ACI_col 256) ;_По слою
       (vla-put-Color obj (vla-get-color (vla-item (vla-get-layers(vla-get-ActiveDocument(vlax-get-acad-object)))(vla-get-layer obj))))
       )
      ((= ACI_col 0)(vla-put-Color obj 7))
      (t nil)
      )
  
(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) ;:_Яркость меньше 20
  ;Смещаем оттенок на 45 градусов
  (progn
    (setq H (+ H 0.125))
    (if (> H 1)(setq H (1- H)))
    ))
  (setq L (* 0.5 L))

(setq HSL_new (list H S L))
(setq RGB_new (apply 'HSL2RGB hsl_new))
(vla-setRGB TrueColor (nth 0 RGB_new)(nth 1 RGB_new)(nth 2 RGB_new))
(vla-put-TrueColor obj TrueColor)
(getstring "\nДля восстановления цвета нажмите любую клавишу...")
(vla-put-Color obj ACI_col)  
  )
В командной строке набрать TEST
Реализован следующий алгоритм:
Берем RGB примитива, преобразуем в HSL. L -Luminance (яркость) уменьшаем в 2 раза, получам новые значения RGB с уменьшенной яркостью, задаем цвет примитиву. Если яркость близка к темной (здесь 20% и меньше) смещаем оттенок.
VVA вне форума  
 
Непрочитано 15.12.2006, 17:01
#18
VVA

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


Вот вариан доработанной команды kpblc
Код:
[Выделить все]
;|=========== 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_layer_selected (mapcar '(lambda (x)(strcase (cdr (assoc 8 (entget x))))) ;_ end of lambda
                       (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))) ;_ end of 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 (cons (vla-get-name lay)(vla-get-color lay)))))))
	 res)))) ;_ end of setq 
  (foreach item *kpblc-layer-list-hide* 
     ;; Меняем цвет. Если четный - то на "6" в конце. Для нечетных - "7" 
   (vl-catch-all-apply (function (lambda ( / obj TrueColor RGB HSL H S L )
     (setq obj (vla-item (vla-get-layers adoc) (car 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) ;:_Яркость меньше 20 Смещаем оттенок на 45 градусов
      (progn (setq H (+ H 0.125))(if (> H 1)(setq H (1- H)))))
     (setq L (* 0.5 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)))) ;_ 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 () 
          (vla-put-color (vla-item (vla-get-layers adoc) (car item))(cdr item)))))) ;_ 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")
Состояние сохраняется в глобальной переменной (действительно в пределах сеанса работы). Можно рассмотреть вариант с записью в словарь.
Работает по принципу выключателя: понизили яркость -> восстановили состояние. Команда CHLA
VVA вне форума  
 
Автор темы   Непрочитано 16.12.2006, 00:31
#19
Аshаs-ка

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


VVA: -Прикольно. Правда, невыбранные слои не залочиваются пока. И вот бледнеет совершенно недостаточно, и подвирает с цветами... Не работает, если цвет задан примитиву явно. В режиме редактирования блока in place это как то хитрее организовано, там бледнеют -и сильно!- все не входящие в блок элементы. Идея организовать из выбранных примитивов блок, редактировать его находу... хороша, но функция редактирования блока - тормознутая, ногти изгрызешь, пока сработает, да и добавлять в набор примитивы ни к чему.. Layiso быстрее! В принципе, если добавть строки залочивания - и разлочивания! -невыбранных слоев- классная штука получается!
Kpblc: Заработало. Дописал букувку в начале ...defun c:chla (/... , только как то неустойчиво (и висит как-то неуверенно...). Но- не бледнеют, гады! Просто цвет меняют... И явно заданные цвета игнорируют. Сам я только "по слою" работаю, да в конторе я не один с кривыми ручками. 20% времени правкой занимаюсь...
Аshаs-ка вне форума  
 
Автор темы   Непрочитано 16.12.2006, 00:39
#20
Аshаs-ка

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


VVA: Еще глюк. Даю слоям трушные цвета, CHLA туда, обратно - и все цвета слоев стали индексированные. Существенно. У Kpblc-а аналогично. То есть в исходное состояние слои не восстанавливаются [sm1402]
Аshаs-ка вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Управление видимостью слоев

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