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

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

Как переместить отрезки различных слоев из одного слоя в другие слои по цветам?

Ответ
Поиск в этой теме
Непрочитано 25.03.2013, 20:46 #1
Как переместить отрезки различных слоев из одного слоя в другие слои по цветам?
Dyuk
 
ПГС
 
Санкт-Петербург
Регистрация: 25.11.2007
Сообщений: 280

Здравствуйте. Помогите с решением такой задачи:

Имеется чертеж, в котором все отрезки находятся в нулевом слое. Различные отрезки имеют свой цвет. (например синий, красный и зеленый).

Необходимо переместить эти отрезки из нулевого слоя в отдельные слои соответствующие цветам отрезкам.
например отрезки с цветом "синий" переместить в "слой 1", "красный" в "слой 2" и зеленый соответственно в "слой 3".

Всё это нужно сделать в автоматизированном режиме.

Может быть есть какой плагин подходящий? : Помощь: Спасибо за внимание.

Зачем мне это надо?
Я обнаружил, что из Sketchup можно экспортировать в автокад любые виды и разрезы (аналог команды flatshot, sectionplane).
Но преимущество Sketchup в том, что при экспорте в автокад можно задать линиям цвет соответствующий определенному слою.

более подробно об этом можно посмотреть ссылке в видео ниже
http://youtu.be/0Qd4z5t0Ns8
Просмотров: 13297
 
Непрочитано 25.03.2013, 21:31
#2
sasha_lif

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


изучай команду
QSELECT
выбираешь там color
задаешь цвет
В итоге получаешь выделенными все примитивы одного цвета - и их закидываешь на нужный слой

Дальше опять QSELECT, и выбираешь другой цвет
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 25.03.2013, 21:44
#3
Dyuk

ПГС
 
Регистрация: 25.11.2007
Санкт-Петербург
Сообщений: 280


Спасибо за ответ, эту команду я знаю.
Если так нужно в 10-20 слоев перекинуть линии, то это очень неудобно.
Dyuk вне форума  
 
Непрочитано 25.03.2013, 23:29
#4
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,349
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от Dyuk Посмотреть сообщение
Но преимущество Sketchup в том, что при экспорте в автокад можно задать линиям цвет соответствующий определенному слою.
Ну уж если совсем сильно хочется, может поможет "Model Studio CS" ("Трубопроводы" точно), там при разрезах все примитивы по своим родным слоям располагаются и все свойства наследуют. Только мудрёно всё слишком.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 25.03.2013, 23:30
#5
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 501
<phrase 1=


Посмотрите Selsim от Александра Ривилиса, можно в макросе забить выбор по образцу, а потом переброс на новый слой
__________________
Алексей
bargool вне форума  
 
Непрочитано 26.03.2013, 05:02
#6
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 794


bargool, Автор не указал версию када.
Но, с 2011 (может и раньше) появилась своя команда _SelectSimilar подобная Selsim.
__________________
AutoCad 2011 -> AutoCad 2013
Astartes вне форума  
 
Непрочитано 26.03.2013, 09:43
#7
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 501
<phrase 1=


Цитата:
Сообщение от Astartes Посмотреть сообщение
с 2011 (может и раньше) появилась своя команда _SelectSimilar подобная Selsim.
У меня 2010, такой команды нет
__________________
Алексей
bargool вне форума  
 
Непрочитано 26.03.2013, 10:02
#8
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,663


Цитата:
Сообщение от Dyuk Посмотреть сообщение
например отрезки с цветом "синий" переместить в "слой 1", "красный" в "слой 2" и зеленый соответственно в "слой 3".
А если цвет объекта RGB 20,50,100?
Profan вне форума  
 
Автор темы   Непрочитано 26.03.2013, 12:20
#9
Dyuk

ПГС
 
Регистрация: 25.11.2007
Санкт-Петербург
Сообщений: 280


Цитата:
Сообщение от maratovich Посмотреть сообщение
Ну уж если совсем сильно хочется, может поможет "Model Studio CS"
Спасибо, нужно всё же это в ACAD реализовать.

Цитата:
Сообщение от Astartes Посмотреть сообщение
Но, с 2011 (может и раньше) появилась своя команда _SelectSimilar подобная Selsim.
Действительно, есть такая команда - уже веселее =)

Цитата:
Сообщение от bargool Посмотреть сообщение
У меня 2010, такой команды нет
у меня 2013-ый

Цитата:
Сообщение от Profan Посмотреть сообщение
А если цвет объекта RGB 20,50,100?
Да, нужно, чтобы можно было и по такой кодировке цвета перенести на нужный слой.
Dyuk вне форума  
 
Непрочитано 26.03.2013, 13:54
1 | #10
VVA

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


Код:
[Выделить все]
(defun C:C2L (/ tmp txt count TrueColor layFilter lay _makelayer)
;;; Color To Layer
;;; layFilter - список фильтров слоев
;;; Как переместить отрезки различных слоев из одного слоя в другие слои по цветам?
;;; http://forum.dwg.ru/showthread.php?p=1067614#post1067614
(defun _makelayer ( name color)
    (cond
      ((not (numberp color))(setq color 7))
      ((minusp color)(setq color 7))
      ((zerop color)(setq color 7))
      ((> color 255)(setq color 7))
      (t nil)
      )
     (or (tblobjname "LAYER" name)
     (entmakex
                (list
                    (cons 0 "LAYER")
                    (cons 100 "AcDbSymbolTableRecord")
                    (cons 100 "AcDbLayerTableRecord")
                    (cons 2 name)
                    (cons 70 0)
                    (cons 62 color)
                )
            )
     )
)
  (setq layFilter
         (list
           '((143 134 112) "МойСлой1") ;_ (143 134 112) - примитив с цветом R=143 G=134 B=112 перенесется на слой Мойслой1
           '((110 87 168) "МойСлой2") ;_ (110 87 168) - примитив с цветом R=110 G=87 B=168 перенесется на слой Мойслой2
           '((1) "Красный") ;_ (1) - примитив с цветом ACI=1 перенесется на слой Красный
           '((2) "Желтый") ;_ (2) - примитив с цветом ACI=2 перенесется на слой Желтый
           '((3) "Зеленый") ;_ (3) - примитив с цветом ACI=3 перенесется на слой Зеленый
) ;_ end of list
  ) ;_ end of setq
  (vl-load-com)
  (vlax-for Blk (vla-get-blocks
                  (vla-get-activedocument (vlax-get-acad-object))
                ) ;_ end of vla-get-Blocks
    (if (eq (vla-get-isxref Blk) :vlax-false)
      (progn
        (setq count 0
              txt   (strcat "Changed " (vla-get-name Blk))
        ) ;_ end of setq
        (grtext -1 txt)
        (vlax-for Obj Blk
          (setq count (1+ count))
          (if (zerop (rem count 10))
            (grtext -1 (strcat txt " : " (itoa count)))
          ) ;_ end of if
          (if (and (vlax-write-enabled-p Obj)
                   (vlax-property-available-p Obj 'Color)
              ) ;_ end of and
            (setq tmp
                   (if
                     (= (vla-get-colormethod
                          (setq TrueColor (vla-get-truecolor Obj))
                        ) ;_ end of vla-get-ColorMethod
                        accolormethodbyrgb
                     ) ;_ end of =
                      (list (vla-get-red TrueColor)
                            (vla-get-green TrueColor)
                            (vla-get-blue TrueColor)
                      ) ;_ end of list
                      (cond ((eq (vla-get-color obj) acbyblock)
                             nil
                            )
                            ((eq (vla-get-color obj) acbylayer)
                             nil
                            )
                            (t (list (vla-get-color obj)))
                      ) ;_ end of cond
                   ) ;_ end of if
            ) ;_ end of setq
            (setq tmp nil)
          ) ;_ end of if
          (or (setq lay (cadr (assoc tmp layFilter)))
              (setq
                lay (strcat
                      "Color"
                      (apply
                        'strcat
                        (mapcar '(lambda (x) (strcat "_" (itoa x))) tmp)
                      ) ;_ end of apply
                    ) ;_ end of strcat
              ) ;_ end of setq
          ) ;_ end of or
          (_makelayer lay (car tmp))
          (if (and tmp (listp tmp) (vlax-write-enabled-p Obj))
            (progn
            (entmod
              (subst
                (cons
                  8
                  lay
                ) ;_ end of cons
                (assoc 8 (entget (vlax-vla-object->ename obj)))
                (entget (vlax-vla-object->ename obj))
              ) ;_ end of subst
            ) ;_ end of entmod
            (vla-put-Color obj acByLayer) ;_Color
            ;;; (vla-put-linetype obj "BYLAYER") ;_LineType
            )
          ) ;_ end of if
        ) ;_ end of vlax-for
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of vlax-for
  (vl-cmdf "_regenall")
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 30.11.2015 в 14:58. Причина: внесены изменения по #24
VVA вне форума  
 
Непрочитано 26.03.2013, 14:02
#11
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,340


VVA, у меня почему-то программа не запускается.
Прошу прощения, не досмотрел. Все работает.
__________________
Как-то так.

Последний раз редактировалось sertor, 26.03.2013 в 16:08.
sertor вне форума  
 
Автор темы   Непрочитано 26.03.2013, 16:03
#12
Dyuk

ПГС
 
Регистрация: 25.11.2007
Санкт-Петербург
Сообщений: 280


Цитата:
Сообщение от VVA Посмотреть сообщение
Особо не тестировал
Здорово! Лисп работает.
Перемещает отрезки с цветом "R" "G" "B" в слой с названием: Color_"R"_"G"_"B".
А возможно сделать так, чтобы можно было заранее назначать свои названия слоёв соответствующее определенному цвету?
Dyuk вне форума  
 
Непрочитано 26.03.2013, 16:04
#13
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,663


А цвета фиксированные, что ли?
Profan вне форума  
 
Автор темы   Непрочитано 26.03.2013, 16:23
#14
Dyuk

ПГС
 
Регистрация: 25.11.2007
Санкт-Петербург
Сообщений: 280


Цитата:
Сообщение от Profan Посмотреть сообщение
А цвета фиксированные, что ли?
Да, я могу при экспорте из sketchup назначить любой нужный мне цвет, т.е. цвета могут быть фиксированными.
Dyuk вне форума  
 
Непрочитано 28.03.2013, 14:16
1 | #15
VVA

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


Цитата:
Сообщение от Dyuk Посмотреть сообщение
А возможно сделать так, чтобы можно было заранее назначать свои названия слоёв соответствующее определенному цвету?
Описал в комментариях. Должно быть понятно
Код:
[Выделить все]
(defun C:C2L (/ tmp txt count TrueColor layFilter lay)
;;; Color To Layer
;;; layFilter - список фильтров слоев
  (setq layFilter
         (list
           '((143 134 112) "МойСлой1") ;_ (143 134 112) - примитив с цветом R=143 G=134 B=112 перенесется на слой Мойслой1
           '((110 87 168) "МойСлой2") ;_ (110 87 168) - примитив с цветом R=110 G=87 B=168 перенесется на слой Мойслой2
           '((1) "Красный") ;_ (1) - примитив с цветом ACI=1 перенесется на слой Красный
           '((2) "Желтый") ;_ (2) - примитив с цветом ACI=2 перенесется на слой Желтый
           '((3) "Зеленый") ;_ (3) - примитив с цветом ACI=3 перенесется на слой Зеленый
) ;_ end of list
  ) ;_ end of setq
  (vl-load-com)
  (vlax-for Blk (vla-get-blocks
                  (vla-get-activedocument (vlax-get-acad-object))
                ) ;_ end of vla-get-Blocks
    (if (eq (vla-get-isxref Blk) :vlax-false)
      (progn
        (setq count 0
              txt   (strcat "Changed " (vla-get-name Blk))
        ) ;_ end of setq
        (grtext -1 txt)
        (vlax-for Obj Blk
          (setq count (1+ count))
          (if (zerop (rem count 10))
            (grtext -1 (strcat txt " : " (itoa count)))
          ) ;_ end of if
          (if (and (vlax-write-enabled-p Obj)
                   (vlax-property-available-p Obj 'Color)
              ) ;_ end of and
            (setq tmp
                   (if
                     (= (vla-get-colormethod
                          (setq TrueColor (vla-get-truecolor Obj))
                        ) ;_ end of vla-get-ColorMethod
                        accolormethodbyrgb
                     ) ;_ end of =
                      (list (vla-get-red TrueColor)
                            (vla-get-green TrueColor)
                            (vla-get-blue TrueColor)
                      ) ;_ end of list
                      (cond ((eq (vla-get-color obj) acbyblock)
                             nil
                            )
                            ((eq (vla-get-color obj) acbylayer)
                             nil
                            )
                            (t (list (vla-get-color obj)))
                      ) ;_ end of cond
                   ) ;_ end of if
            ) ;_ end of setq
            (setq tmp nil)
          ) ;_ end of if
          (or (setq lay (cadr (assoc tmp layFilter)))
              (setq
                lay (strcat
                      "Color"
                      (apply
                        'strcat
                        (mapcar '(lambda (x) (strcat "_" (itoa x))) tmp)
                      ) ;_ end of apply
                    ) ;_ end of strcat
              ) ;_ end of setq
          ) ;_ end of or
          (if (and tmp (listp tmp) (vlax-write-enabled-p Obj))
            (entmod
              (subst
                (cons
                  8
                  lay
                ) ;_ end of cons
                (assoc 8 (entget (vlax-vla-object->ename obj)))
                (entget (vlax-vla-object->ename obj))
              ) ;_ end of subst
            ) ;_ end of entmod
          ) ;_ end of if
        ) ;_ end of vlax-for
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of vlax-for
  (vl-cmdf "_regenall")
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 27.11.2015 в 12:30.
VVA вне форума  
 
Автор темы   Непрочитано 28.03.2013, 17:21
#16
Dyuk

ПГС
 
Регистрация: 25.11.2007
Санкт-Петербург
Сообщений: 280


Цитата:
Сообщение от VVA Посмотреть сообщение
Описал в комментариях. Должно быть понятно
круто, огромное спасибо, буду проверять =)
Dyuk вне форума  
 
Непрочитано 23.05.2013, 12:32
#17
pers2

Конструктор
 
Регистрация: 18.02.2005
Москва
Сообщений: 125


Работает отлично!
Вот если б сразу, кроме цвета, присваивать вес и тип линии по слою? Пожалуйста!!!!
pers2 вне форума  
 
Непрочитано 23.05.2013, 13:00
2 | #18
VVA

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


Добавочку выделил красным
Код:
[Выделить все]
(defun C:C2L1 (/ tmp txt count TrueColor layFilter lay)
;;; Color To Layer
;;; layFilter - список фильтров слоев
  (setq layFilter
         (list
           '((143 134 112) "МойСлой1") ;_ (143 134 112) - примитив с цветом R=143 G=134 B=112 перенесется на слой Мойслой1
           '((110 87 168) "МойСлой2") ;_ (110 87 168) - примитив с цветом R=110 G=87 B=168 перенесется на слой Мойслой2
           '((1) "Красный") ;_ (1) - примитив с цветом ACI=1 перенесется на слой Красный
           '((2) "Желтый") ;_ (2) - примитив с цветом ACI=2 перенесется на слой Желтый
           '((3) "Зеленый") ;_ (3) - примитив с цветом ACI=3 перенесется на слой Зеленый
) ;_ end of list
  ) ;_ end of setq
  (vl-load-com)
  (vlax-for Blk (vla-get-blocks
                  (vla-get-activedocument (vlax-get-acad-object))
                ) ;_ end of vla-get-Blocks
    (if (eq (vla-get-isxref Blk) :vlax-false)
      (progn
        (setq count 0
              txt   (strcat "Changed " (vla-get-name Blk))
        ) ;_ end of setq
        (grtext -1 txt)
        (vlax-for Obj Blk
          (setq count (1+ count))
          (if (zerop (rem count 10))
            (grtext -1 (strcat txt " : " (itoa count)))
          ) ;_ end of if
          (if (and (vlax-write-enabled-p Obj)
                   (vlax-property-available-p Obj 'Color)
              ) ;_ end of and
            (setq tmp
                   (if
                     (= (vla-get-colormethod
                          (setq TrueColor (vla-get-truecolor Obj))
                        ) ;_ end of vla-get-ColorMethod
                        accolormethodbyrgb
                     ) ;_ end of =
                      (list (vla-get-red TrueColor)
                            (vla-get-green TrueColor)
                            (vla-get-blue TrueColor)
                      ) ;_ end of list
                      (cond ((eq (vla-get-color obj) acbyblock)
                             nil
                            )
                            ((eq (vla-get-color obj) acbylayer)
                             nil
                            )
                            (t (list (vla-get-color obj)))
                      ) ;_ end of cond
                   ) ;_ end of if
            ) ;_ end of setq
            (setq tmp nil)
          ) ;_ end of if
          (or (setq lay (cadr (assoc tmp layFilter)))
              (setq
                lay (strcat
                      "Color"
                      (apply
                        'strcat
                        (mapcar '(lambda (x) (strcat "_" (itoa x))) tmp)
                      ) ;_ end of apply
                    ) ;_ end of strcat
              ) ;_ end of setq
          ) ;_ end of or
          (if (and tmp (listp tmp) (vlax-write-enabled-p Obj))
            (progn
            (entmod
              (subst
                (cons
                  8
                  lay
                ) ;_ end of cons
                (assoc 8 (entget (vlax-vla-object->ename obj)))
                (entget (vlax-vla-object->ename obj))
              ) ;_ end of subst
            ) ;_ end of entmod
            (vla-put-Color obj acByLayer) ;_Color
            (vla-put-linetype obj "BYLAYER") ;_LineType
           (vla-put-lineweight obj acLnWtByLayer) ;_LineWeight

            )
          ) ;_ end of if
        ) ;_ end of vlax-for
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of vlax-for
  (vl-cmdf "_regenall")
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.06.2016 в 10:59.
VVA вне форума  
 
Непрочитано 23.05.2013, 13:46
#19
pers2

Конструктор
 
Регистрация: 18.02.2005
Москва
Сообщений: 125


Цитата:
Сообщение от VVA Посмотреть сообщение
Добавочку выделил красным
Ай да человек, Человечище!! Спасибо Огромное!!!
А раз пошла такая пьянка... нельзя ли и вес тоже по слою?...
pers2 вне форума  
 
Непрочитано 23.05.2013, 13:53
1 | #20
Кулик Алексей aka kpblc
Moderator

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


там же добавь (vla-put-lineweight obj acLnWtByLayer)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.05.2013, 14:02
#21
pers2

Конструктор
 
Регистрация: 18.02.2005
Москва
Сообщений: 125


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
там же добавь (vla-put-lineweight obj acLnWtByLayer)
и Вам поклон низкий!!!

Ну и что б два раза не вставать (сам-то уже пробывал - не получилось...)
Всё в слой 0, цвет остаётся, тип и вес линий по слою... Можно??? Пожалуйста

Последний раз редактировалось pers2, 23.05.2013 в 15:13.
pers2 вне форума  
 
Непрочитано 27.11.2015, 11:32
#22
Bjarki

геолог
 
Регистрация: 27.11.2015
Сообщений: 2


Огромное человеческое спасибо, необходимость в подобной функции была очень давно.
И еще большая просьба, может кто помочь модернизировать код, чтобы цвет слоя был от отрезка.
Bjarki вне форума  
 
Непрочитано 27.11.2015, 12:35
#23
VVA

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



Так там вроде так и делается?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.11.2015, 06:35
#24
Bjarki

геолог
 
Регистрация: 27.11.2015
Сообщений: 2


Дома autocad нет под рукой, у меня несколько расширенная задача.
Так же постоянно экспортируем в dfx из горно-геологического программного комплекса, все вылезает отрезками, для своего удобства выгоняем различными цветами (зачастую более одного десятка цветов), потом ручками разносим послоям и дальше работаем. Времени уходит уйма.
Пробовал Lisp из сообщения #18 работает идеально, создает слои Color_"номер цвета", все разносит, но цвет слоя белый.
Только сейчас увидел, что нужно был попробовать нужно код из #10. На работе все попробую.
Еще раз огромное спасибо, сократили нам огромный объем работы.
Bjarki вне форума  
 
Непрочитано 30.11.2015, 15:01
1 | #25
VVA

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


Цитата:
Сообщение от Bjarki Посмотреть сообщение
что нужно был попробовать нужно код из #10. На работе все попробую
Обрати внимание, я внес в #10 небольшие изменения.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.06.2016, 10:44
#26
sergeev_2005

Проектирование гражданских зданий
 
Регистрация: 25.03.2010
Санкт-Петербург
Сообщений: 85


К VVA
А вот можно ли переименовать слой, но не в соответствии с цветом объекта, а в соответствии с цветом самого слоя?
sergeev_2005 вне форума  
 
Непрочитано 03.06.2016, 11:08
#27
VVA

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


sergeev_2005,
Кратко - можно.
А дальше одни вопросы.
Есть слой "0", цвет слоя "красный", его нужно переименовать в "0_1", где 1 - красный?
Есть слой "Стена", цвет слоя "синий",его нужно переименовать в "Стена_5"?
Есть слой "Оси", цвет слоя "119,213,34",его нужно переименовать в "Оси_119_213_34"?
Что делать, если есть слой "Стена", цвет слоя "синий" и слой "Стена_5" так же еcть в перечне слоев?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.06.2016, 11:29
#28
sergeev_2005

Проектирование гражданских зданий
 
Регистрация: 25.03.2010
Санкт-Петербург
Сообщений: 85


VVA, спасибо!
Нет, не так.
Как в твоей программе C2L иметь возможность самому давать название слоя для переименования в зависимости от цвета.
Если цвет слоя с любым названием "119,213,34", то дать слою новое название (вручную), например "Мойслой1", как в твоей программе C2L.
Если цвет слоя с любым названием "4", то дать слою новое название (вручную), например "Мойслой2".
sergeev_2005 вне форума  
 
Непрочитано 03.06.2016, 11:41
#29
VVA

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


Ну так а чем #18 не устраивает?
В коде есть коментарии. Создаешь layFilter по своим правилам и все
 
Код:
[Выделить все]
(defun C:L2LC (/ tmp txt count TrueColor layFilter lay)
;;; Layer To Layer by Color
;;; layFilter - список фильтров слоев
  (setq layFilter
         (list
           '((207 42 213) "МойСлой1") ;_ (207 42 213) - слой с цветом R=143 G=134 B=112 переименуется в слой Мойслой1
           '((5) "Синий")             ;_ (2) - слой с цветом 5 переименуется в слой Синий
         ) ;_ end of list
  ) ;_ end of setq
  (vl-load-com)
  (vlax-for Layer (vla-get-layers
                    (vla-get-activedocument (vlax-get-acad-object))
                  ) ;_ end of vla-get-layers
    (if (snvalid (vla-get-name Layer))
      (progn
        (setq tmp
               (if
                 (= (vla-get-colormethod
                      (setq TrueColor (vla-get-truecolor Layer))
                    ) ;_ end of vla-get-ColorMethod
                    accolormethodbyrgb
                 ) ;_ end of =
                  (list (vla-get-red TrueColor)
                        (vla-get-green TrueColor)
                        (vla-get-blue TrueColor)
                  ) ;_ end of list
                  (cond ((eq (vla-get-color Layer) acbyblock)
                         nil
                        )
                        ((eq (vla-get-color Layer) acbylayer)
                         nil
                        )
                        (t (list (vla-get-color Layer)))
                  ) ;_ end of cond
               ) ;_ end of if
        ) ;_ end of setq
        (or (setq lay (cadr (assoc tmp layFilter)))
;;;            (setq
;;;              lay (strcat
;;;                    "Color"
;;;                    (apply
;;;                      'strcat
;;;                      (mapcar '(lambda (x) (strcat "_" (itoa x))) tmp)
;;;                    ) ;_ end of apply
;;;                  ) ;_ end of strcat
;;;            ) ;_ end of setq
        ) ;_ end of or
        (if (and lay (not (tblobjname "Layer" lay)))
          (vl-catch-all-apply 'vla-put-name (list Layer lay))
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of vlax-for
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.06.2016 в 13:05.
VVA вне форума  
 
Непрочитано 03.06.2016, 12:01
#30
sergeev_2005

Проектирование гражданских зданий
 
Регистрация: 25.03.2010
Санкт-Петербург
Сообщений: 85


Все бы устраивало, но примитивы имеют цвет "по слою".
А в этом случае ничего не происходит.
А мне нужно все слои с цветом 119,213,34 назвать "Мойслой1" и т.д.
То есть все примитивы, "лежащие" на разный слоях с одним и тем же цветом, оказались на новом слое, название которому я сам могу дать.

----- добавлено через ~38 мин. -----
Да, именно это и нужно!
Но, наверное, я много хочу.
По программе L2LC самопроизвольно создались новые слои типа "Color_182_181_180" и "Color_7". Это не нужно.
А вот два "старых" слоя с одинаковым цветом повели себя следующим образом: первый получил новое название, которое я задал, а вот второй как был, так и остался с прежним названием.
А хотелось бы, чтобы слои с одинаковым цветом слились в один слой. И объекты с этих слоев попали на один новый слой.
Ну очень надо!

----- добавлено через ~58 мин. -----
VVA, можно надеяться на помощь?
sergeev_2005 вне форума  
 
Непрочитано 03.06.2016, 13:08
#31
VVA

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


Цитата:
Сообщение от sergeev_2005 Посмотреть сообщение
"Color_182_181_180" и "Color_7". Это не нужно
Исправил в #29
Цитата:
Сообщение от sergeev_2005 Посмотреть сообщение
два "старых" слоя с одинаковым цветом повели себя следующим образом
Это требует пояснения. Как появляются два слоя с одинаковым цветом?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.06.2016, 13:20
#32
sergeev_2005

Проектирование гражданских зданий
 
Регистрация: 25.03.2010
Санкт-Петербург
Сообщений: 85


Нет, они не появились. Они были. Конкретно, их названия были "A-WALL-PATT1" с цветом "133,169,214" и слой "A-WALL-PATT4" с цветом "133,169,214".
На первом и втором слое лежали "одинаковые" объекты (полилинии с заливкой). И мне надо в идеале, чтобы эти объекты перешли на новый слой "Мой слой...", а "A-WALL-PATT1" и "A-WALL-PATT4" удалились.
Фактически сейчас получается, что объекты, лежавшие на слое "A-WALL-PATT1" перешли на новый слой "Мой слой...", причем слой "A-WALL-PATT1" удалился. А вот слой "A-WALL-PATT4" остался, и объекты на нем остались.

----- добавлено через ~4 мин. -----
Может быть сформулировать иначе?
Все объекты, лежащие на слоях с одинаковым цветом, должны перейти на новый слой, название которому я задам вручную, а слои, на которых они лежали, удаляются.
sergeev_2005 вне форума  
 
Непрочитано 23.10.2019, 10:25
#33
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 399


немногог добавил чтобы в новом слое было имя исходного слоя и цвет нового слоя являлся цветом примитива
Код:
[Выделить все]
(defun C:C2L (/ tmp txt count TrueColor layFilter lay tmp_L_N)
;;;http://forum.dwg.ru/showthread.php?p=1069183
;;;http://www.cadtutor.net/forum/showthread.php?533-Lisp-colour-change-for-all-layers-and-blocks/page10
;;; Color To Layer
;;; layFilter - Layer List
;;;If the colors are not in the list of layers, the layer will be called Color_Number.
;;;For example, for 123 colors -> Layer name "Color _123"
;;;color R = 12 G = 32 B = 65  -> Layer name "Color _12_32_65"
 (setq layFilter
        (list
          '((143 134 112) "MyLay1") ;_entity with color R = 143 G = 134 B = 112 is transferred to the layer "MyLay1"
          '((110 87 168) "MyLay2")  ;_entity with color R = 110 G = 87 B = 168 is transferred to the layer "MyLay2"
          '((1) "Red")  ;_entity with color ACI = 1 is transferred to the layer "Red"
          '((2) "Yellow") ;_entity with color ACI = 2 is transferred to the layer "Yellow"
          '((3) "Green")  ;_entity with color ACI = 3 is transferred to the layer "Green"
) ;_ end of list
 ) ;_ end of setq
 (vl-load-com)
 (vlax-for Blk (vla-get-blocks
                 (vla-get-activedocument (vlax-get-acad-object))
               ) ;_ end of vla-get-Blocks
   (if (eq (vla-get-isxref Blk) :vlax-false)
     (progn
       (setq count 0
             txt   (strcat "Changed " (vla-get-name Blk))
       ) ;_ end of setq
       (grtext -1 txt)
       (vlax-for Obj Blk
         (setq count (1+ count))
         (if (zerop (rem count 10))
           (grtext -1 (strcat txt " : " (itoa count)))
         ) ;_ end of if
         (if (and (vlax-write-enabled-p Obj)
                  (vlax-property-available-p Obj 'Color)
             ) ;_ end of and
           (setq tmp
                  (if
                    (= (vla-get-colormethod
                         (setq TrueColor (vla-get-truecolor Obj))
                       ) ;_ end of vla-get-ColorMethod
                       accolormethodbyrgb
                    ) ;_ end of =
                     (list (vla-get-red TrueColor)
                           (vla-get-green TrueColor)
                           (vla-get-blue TrueColor)
                     ) ;_ end of list
                     (cond ((eq (vla-get-color obj) acbyblock)
                            nil
                           )
                           ((eq (vla-get-color obj) acbylayer)
                            nil
                           )
                           (t (list (vla-get-color obj)))
                     ) ;_ end of cond
                  ) ;_ end of if
				  tmp_L_N
						(vla-get-Layer Obj)
           ) ;_ end of setq
           (setq tmp nil)
         ) ;_ end of if
         (or (setq lay (cadr (assoc tmp layFilter)))
             (setq
               lay (strcat
                      tmp_L_N "_" "Color"
                     (apply
                       'strcat
                       (mapcar '(lambda (x) (strcat "_" (itoa x))) tmp)
                     ) ;_ end of apply
                   ) ;_ end of strcat
             ) ;_ end of setq
         ) ;_ end of or
         (if (and tmp (listp tmp) (vlax-write-enabled-p Obj))
           (entmod
             (subst
               (cons
                 8
                 lay
               ) ;_ end of cons
               (assoc 8 (entget (vlax-vla-object->ename obj)))
               (entget (vlax-vla-object->ename obj))
             ) ;_ end of subst
           ) ;_ end of entmod
         ) ;_ end of if
		 (setq tmp_L_N nil)
		 (vla-put-truecolor (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) (vla-get-layer obj)) (vla-get-truecolor obj))
		(vla-put-Color obj acByLayer)
       ) ;_ end of vlax-for
     ) ;_ end of progn
   ) ;_ end of if
 ) ;_ end of vlax-for
 (vl-cmdf "_regenall")
 (princ)
) ;_ end of defun

Последний раз редактировалось Composter, 23.10.2019 в 11:50.
Composter вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переместить отрезки различных слоев из одного слоя в другие слои по цветам?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 671 03.11.2019 16:26
1000 слоев. Нормально или плохо? И другие аспекты правильного черчения в автокаде Vova AutoCAD 96 07.09.2019 16:26
Для чего нужны фильтры слоев?Как ими пользоваться? Aysulu AutoCAD 43 17.04.2019 10:59
Unreconciled new layers при Xref Red Nova AutoCAD 17 10.01.2019 13:00
Почему не проходит теплорасчет? Suom Конструкции зданий и сооружений 15 10.08.2011 17:22