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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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


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


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


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

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


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


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


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


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


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

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


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

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

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

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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<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,374


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

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

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


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


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


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

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


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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<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
Санкт-Петербург
Сообщений: 282


Цитата:
Сообщение от 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,990
<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
С.-Петербург
Сообщений: 39,787


там же добавь (vla-put-lineweight obj acLnWtByLayer)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переместить отрезки различных слоев из одного слоя в другие слои по цветам?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
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