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

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

Выделение примИтивов на слое одним кликом

Ответ
Поиск в этой теме
Непрочитано 12.07.2011, 05:44 1 | #1
Выделение примИтивов на слое одним кликом
Alex79
 
проектирование
 
Родом из солнечной системы
Регистрация: 06.12.2006
Сообщений: 60

Здравствуйте уважаемые участники форума.
У меня такой вопрос. Мне необходимо при помощи lisp программы или стандартной команды ( о которой я возможно не знаю) выделить все примитивы находящиеся на одном слое.
Можно конечно отключить все слои оставив один и посмотреть что на нем находится, но когда слоев очень много то это занимает время. У меня есть Лисп, который по примитиву изменяет название слоя. Еще раз поясню что мне нужно. Есть множество слоев, я запускаю ЛИСП, кликаю на один из объектов и автоматически выделяются все объекты, находящиеся на данном слое.
Только не нужно пинать, или советовать обратиться к мануалу, просто скажите, где нужно посмотреть.

PS - если ответ простой, не могли бы вы в скайп написать, буду очень признателен

Последний раз редактировалось Alex79, 12.07.2011 в 12:44.
Просмотров: 10813
 
Непрочитано 12.07.2011, 06:47
#2
Zezza


 
Регистрация: 22.10.2007
Челябинск->Москва<->Бомбей
Сообщений: 857


Как вариант, не в один клик, но все-таки, через быстрый выбор, предварительно выбрав все на чертеже (Ctrl+А по умолчанию), установить свойства объектов Слой, значение Название слоя необходимого, ну и оставить включить в новый набор птичку!
Zezza вне форума  
 
Непрочитано 12.07.2011, 07:17
#3
T-Yoke

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


Цитата:
Сообщение от Alex79 Посмотреть сообщение
Здравствуйте уважаемые участники форума.
У меня такой вопрос. Мне необходимо при помощи lisp программы или стандартной команды ( о которой я возможно не знаю) выделить все примитивы находящиеся на одном слое...
Название темы подправь А то они потому примИтивы, от того что примитивные, а не потому что приметные.
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I
T-Yoke вне форума  
 
Непрочитано 12.07.2011, 07:53
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Можно, с помощью фильтров ssget
gomer вне форума  
 
Непрочитано 12.07.2011, 08:20
#5
Profan


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


Полилиния и блок совсем не примитивы.
Profan вне форума  
 
Непрочитано 12.07.2011, 09:28
#6
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


Обход слоев не поможет никак?
angel-fear вне форума  
 
Непрочитано 12.07.2011, 09:35
1 | #7
Profan


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


Выделение объектов на слое выбранного объекта:
Код:
[Выделить все]
(defun C:SEL_LAY ( / echo sen ent lay ss len da)
      (setq echo (getvar "CMDECHO"))
      (setvar "CMDECHO" 0)
      (princ "\n Определение слоя по объекту.")
      (setq sen (entsel " Выберите нужный объект: "))
(if sen
      (progn
      (setq ent (entget (car sen)))
      (setq lay (cdr (assoc 8 ent)))
      (setvar "CLAYER" lay)
      (setq ss (ssget "_X" (list (cons 8 lay))))
      (setq len (sslength ss))
      (sssetfirst nil ss)
      (initget 6 "Да Нет Yes No _ Yes No Yes No")
      (setq da (getkword "\n Отключить остальные слои? [Да/Нет] <Да>: "))
      (if (or (= da "Yes") (= da nil))
          (progn
          (vl-cmdf "_-LAYER" "_OF" "*" "_Y" "")
          (vl-cmdf "_-LAYER" "_ON" LAY "")
      )); if da
      (sssetfirst ss ss)
      (princ "\n Слой: ") (princ lay)
      (princ "  Количество объектов = ") (princ len)
      )
      (princ "\n Объект не выбран!")
); if sen
      (setvar "cmdecho" echo)
      (princ)
)
Profan вне форума  
 
Автор темы   Непрочитано 12.07.2011, 12:53
#8
Alex79

проектирование
 
Регистрация: 06.12.2006
Родом из солнечной системы
Сообщений: 60
<phrase 1= Отправить сообщение для Alex79 с помощью Skype™


Profan
Большое спасибо - то что нужно!!!


T-Yoke
Спасибо за замечание, но не мешало бы еще блеснуть и знанием Автокада.
Alex79 вне форума  
 
Непрочитано 12.07.2011, 15:21
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Alex79 Посмотреть сообщение
Есть множество слоев, я запускаю ЛИСП, кликаю на один из объектов и автоматически выделяются все объекты, находящиеся на данном слое.
тогда можно и покороче
Код:
[Выделить все]
 (sssetfirst nil (ssget "_x" (list (assoc 8 (entget (car (entsel "\nВыберите объект")))))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.07.2011, 16:20
#10
Profan


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


Дима_, а если ты промахнешься и не попадешь по объекту? А наборы обнилять?
Profan вне форума  
 
Непрочитано 12.07.2011, 16:44
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Если промахнешся - напишет "неверный тип аргумента: lentityp nil" и ничего не "обнилиться" (я так понял что это не орфографическая ошибка, а от слова nil) - из любви к искуству можно конечно проверять выбор но ИХМО в данном конкретном случае это не нужно кроме как другой надписи НИЧЕГО не изменится про ту, в общем наверно полезную, добавку которую Вы "самододумали" - вот она ихмо недоделенна - если уж все слои выключил - то надоб и придумать, чтоб как-то все включить (или по меньшей мере startundomark предусмотреть).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 12.07.2011 в 16:52.
Дима_ вне форума  
 
Непрочитано 12.07.2011, 17:07
#12
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Дорабатывайте давайте свои проги оба, недодельщики
Nike вне форума  
 
Непрочитано 12.07.2011, 18:56
1 | #13
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Тему пора переносить в раздел программирования
Мой вариант
Код:
[Выделить все]
 
; Примеры вызова:
; (fast_select 8) - выбрать по слою
; (fast_select 62) - выбрать по цвету
; (fast_select 0) - выбрать по типу
; (fast_select 2) - выбрать по имени блока

(defun fast_select(mode / )
  (vl-load-com)
  ((lambda(obj)
     (if (and obj
	      (not (vl-catch-all-error-p obj))
	      )
       ((lambda(nbr)
	  (sssetfirst nil nbr)
	  (prompt (strcat "Найдено объектов : " (if nbr (itoa (sslength nbr)) "0")))
	  )
	 (cond ((or (= mode 0)
		    (= mode 8)
		    )
		(ssget "_X" (list (cons mode (cdr (assoc mode (entget (car obj)))))))
		)
	       ((= mode 62)
		((lambda(color)
		   (if color
		     (ssget "_X" (list color))
		     (ssget "_X" (list (cons mode 256)))
		     )
		   )
		  (assoc mode (entget (car obj)))
		  )
		)
	       ((and (= mode 2)
		     (= (cdr (assoc 0 (entget (car obj)))) "INSERT")
		     )
		((lambda(nbr)
		   (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex nbr)))
		     (if (/= (vla-get-EffectiveName (vlax-ename->vla-object item)) (vla-get-EffectiveName (vlax-ename->vla-object (car obj))))
		       (ssdel item nbr)
		       )
		     )
		   )
		  (ssget "_X" (list (cons 0 "INSERT") (cons 2 (strcat "`*U*," (cdr (assoc mode (entget (car obj))))))))
		  )
		)
	       )
	 )
       )
     )
    (vl-catch-all-apply 'entsel
      (list "\nВыберете объект: ")
      )
    )
  (princ)
  ); end fast_select
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 12.07.2011, 19:09
#14
Profan


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


Цитата:
Сообщение от Nike Посмотреть сообщение
Дорабатывайте давайте свои проги оба, недодельщики
А чего там дорабатывать? Есть штатная команда включения всех слоев.
Profan вне форума  
 
Непрочитано 12.07.2011, 19:11
#15
VVA

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


Мой вариант
1. Выделяет все объекты со слоя образца. Позволяеть использовать SHIFT для добавления / удаления
2. Наличие установленного Express Tools обязательна
3. Вызывать на исполнетие так (layselect)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.07.2011, 20:23
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Alex79 Посмотреть сообщение
или стандартной команды ( о которой я возможно не знаю) выделить все примитивы находящиеся на одном слое.
честно говоря, несколько удивлён велосипедостроению предложенным выше вариантам решения... А что, кто-то предал анафеме использование _qselect?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.07.2011, 20:36
#17
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Alex79 Посмотреть сообщение
Мне необходимо при помощи lisp программы или стандартной команды ( о которой я возможно не знаю) выделить все примитивы находящиеся на одном слое.
А можно было бы и Select Similar доусовершенствовать...
АлексЮстасу вне форума  
 
Непрочитано 12.07.2011, 20:39
#18
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


1. GETSEL а затем PSELECT и P
2. Layiso
Vova вне форума  
 
Непрочитано 12.07.2011, 20:42
#19
Profan


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


hwd, речь шла об 1 (одном) клике. Сколько надо кликов, чтобы применить команду "_qselect" ("бвыбор")?
Profan вне форума  
 
Непрочитано 12.07.2011, 20:53
#20
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Profan Посмотреть сообщение
hwd, речь шла об 1 (одном) клике. Сколько надо кликов, чтобы применить команду "_qselect" ("бвыбор")?
Я процитировал вопрос на который ответил. Что тут может быть не понятного? А это:
Цитата:
Еще раз поясню что мне нужно. Есть множество слоев, я запускаю ЛИСП, кликаю на один из объектов и автоматически выделяются все объекты, находящиеся на данном слое.
произрастает от незнания о _qselect. Причём начал автор с того, что ему без разницы, что это будет - лисп или стандартная команда, а закончил тем, что "ещё раз поясняет" что это должен быть лисп. Откуда растут ножки у обозначенной проблемы - я пояснил выше.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 12.07.2011 в 20:59.
hwd вне форума  
 
Непрочитано 12.07.2011, 21:03
#21
Profan


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


Ничего там не растет. Заранее имя слоя неизвестно, поэтому "_qselect" не поможет.
Profan вне форума  
 
Непрочитано 12.07.2011, 21:12
#22
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Profan Посмотреть сообщение
Ничего там не растет. Заранее имя слоя неизвестно, поэтому "_qselect" не поможет.
а что мешает посмотреть, выделив интересующий примитив? Или это идёт совместное "додумывание" мысли автора топика, мол одним кликом, да чтоб за пивом сбегала и носки заодно постирала?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.07.2011, 21:20
#23
Profan


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


Мешает пустой и нелепый сарказм некоего субъекта, который вместо того, чтобы использовать стандартные команды AutoCAD'а, зачем-то программирует в .NET.
Profan вне форума  
 
Непрочитано 12.07.2011, 21:26
#24
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Profan Посмотреть сообщение
Мешает пустой и нелепый сарказм некоего субъекта, который вместо того, чтобы использовать стандартные команды AutoCAD'а, зачем-то программирует в .NET.
Пожалуй открою глаза другому "субъекту": _qselect - не написана мною на .Net, а является стандартной командой AutoCAD. Иначе как незнанием сего факта не могу объяснить наличие выше процитированного текста (дотнет зачем-то приплёл...)...

п.с. всё что написано выше (во всех моих постах топика) - писалось без сарказма (недоумение и сарказм - разные вещи). Обидчивых просьба особо не обижаться...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.07.2011, 22:02
#25
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от hwd Посмотреть сообщение
честно говоря, несколько удивлён велосипедостроению предложенным выше вариантам решения... А что, кто-то предал анафеме использование _qselect?
hwd, при всем уважении, у меня сложилось впечатление, что Вы даже не изучили должным образом варианты решения предложенные другими участниками форума, а просто не увидев предложения использовать _qselect назвали их "велосипедостроением". Да, согласен с тем, что автор темы не совсем точно сформулировал свои потребности, однако выскажусь в защиту своего "велосипеда" из поста #13. Лично я сделал его изначально для своих нужд по работе, в виде панельки с несколькими кнопками которые позволяют, как здесь говорили, выполнить выбор группы объектов в один клик по различным критериям (в моем примеры - это: слой, цвет, тип объекта или вхождения блока).
К тому же я несколько раз убеждался, что если чертеж очень насыщен (т. е. число около 100 тысяч.), то ssget с фильтрами работает гораздо быстрее, чем _qselect
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 12.07.2011, 22:07
#26
Profan


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


hwd, что-то ты не туда загнул. Посмотри, что получается: есть набор команд работы со слоями. Мы можем кликнуть на объекте и слой, на котором отрисован объект, отключается. Или замораживается. Или блокируется. Или изолируется. А зачем нужны эти команды практически одного клика? Ведь следуя твоей логике, можно выделить объект, посмотреть его слой и потом в диспетчере слоев сделать этот слой текущим. Или заморозить его. Или заблокировать его. Или изолировать его. Но это не самый короткий путь. Команда "_qselect" - мощная команда выбора объектов по многим параметрам. У нас же требуется простейшая по выполнению команда, которая, к сожалению, не вошла в тот набор команд работы со слоями, который я упомянул выше. Я думаю, что такая команда "Выбор всех объектов на слое выбранного объекта" вполне могла бы войти в набор штатных команд. Поэтому автор темы и спрашивал, есть ли такая команда в AutoCAD'е...
Profan вне форума  
 
Непрочитано 13.07.2011, 08:59
#27
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


TararykovDG надо бы таблицы добавить в список выделяемого

Или это у меня чего-то не пашет....

Да, точно с экспрессовским Fastsel спуталось, а _fast_select почему-то работать отказыватся хм...

Разобрался ) засада со скобочками, не обратил внимания сразу )

Последний раз редактировалось angel-fear, 13.07.2011 в 09:09.
angel-fear вне форума  
 
Непрочитано 13.07.2011, 09:00
#28
sbi


 
Регистрация: 27.04.2008
SPB
Сообщений: 3,285
Отправить сообщение для sbi с помощью Skype™


[quote=Profan;779051]hwd, что-то ты не туда загнул[/quote
ПримИтивы -в "слое" - What it is?
Пальцев жалко, для перехода на NET? Много лет ( без фильтра) - напишу на NET, жди!
__________________
С уважением sbi
sbi вне форума  
 
Непрочитано 13.07.2011, 09:09
#29
Profan


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


sbi, что это ты такое загнул?
[quote]
Цитата:
Сообщение от Profan Посмотреть сообщение
hwd, что-то ты не туда загнул[/quote
ПримИтивы -в "слое" - What it is?
Пальцев жалко, для перехода на NET? Много лет ( без фильтра) - напишу на NET, жди!
А я,собственно, вот что имел в виду: автор темы желает автоматизировать некую операцию при работе с AutoCAD'ом. И очень странно видить критику этого от человека, который сам автоматизирует работу в AutoCAD'е и уже давно.
Profan вне форума  
 
Непрочитано 13.07.2011, 11:15
#30
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: то TararykovDG - программа написанна классно (по крайней мере мне нравится) - но критика (не то чтоб критика но момент который лично мне "глаз резанул") есть - принимаешь?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.07.2011, 11:30
#31
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Offtop: то TararykovDG - программа написанна классно (по крайней мере мне нравится) - но критика (не то чтоб критика но момент который лично мне "глаз резанул") есть - принимаешь?
Offtop: конечно принимаю, говорите
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 13.07.2011, 11:39
#32
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Еще раз повторю - все красиво (это мои личные тараканы):
1. Строка 38 (vla-get-EffectiveName (vlax-ename->vla-object (car obj))) - это происходит на каждой итерации - "залямбдить" до цикла.
2. Тут уже более мелочное но - строка 39 ты уже в 37 все равно перевел набор в список - фильтруй его (и возращай из полученного списка набор) - ты же по сути на каждой итерации "крутишь" переменную nbr (не аргумент а именно переменную - и чистота функции теряется), если что-то впоследствии решить добавить в цикл - что там у тебя в наборе??? - потенциальная ошибка из серии хрен найдешь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.07.2011, 13:42
#33
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Э...
Select Similar бы усовершенствовать (пардон за повтор, но люди увлеклись дискуссией у кого код длиннее )
Есть же это замечательное творение Александра Ривилиса. Но в нем прошита чувствительность к типу указаного элемента-образца. Если в Select Similar Settings оставить только слой, то, в принципе она могла бы и находить все элементы слоя.
Почему бы хорошо усовершенствовать Select Similar:
1. чтобы не плодились кнопочки-лиспы,
2. потому что она решает очень похожую задачу ("одной кнопкой выделить некое все по указанному элементу").

Кстати, все это со всяческим глубоким уважением к создателям лиспов.

Последний раз редактировалось АлексЮстасу, 13.07.2011 в 15:55.
АлексЮстасу вне форума  
 
Непрочитано 13.07.2011, 13:53
#34
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Дима_, в общем, со всем согласен. 1-ый пунк более очевиден чем 2-ой, зато 2-ой потенциально более опасен, как Вы сказали при добавлении кода в цикл. Я бы еще добавил одну lambd'у, чтобы избавиться от постоянного (car obj) и (entget (car obj)). Еще нашел ошибку, в строке 43 (ssget "_X" (list (cons 0 "INSERT") (cons 2 (strcat "`*U*," (cdr (assoc mode (entget (car obj)))))))), если изначально выбранный блок был динамическим, то (cdr (assoc mode (entget (car obj)))) может вернут *U... и в фильтруемый набор не попадут те вхождения дин. блока у которых (cdr (assoc mode (entget (car obj)))) возвращает полноценное имя блока.

P. S. Еще один минус, в старых ACAD'ах нет свойства EffectiveName и код работать не будет, можно заменить EffectiveName, на это Имена динамических блоков

АлексЮстасу, Вашу просьбу может удовлетворить только Александр Ривилис, а наша дискуссия этому никак на мешает и не помогает
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Выделение примИтивов на слое одним кликом



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Справочный размер одним кликом Jonas AutoCAD 9 13.05.2011 13:42
Выбор всех примитивов одним кликом DANZZ AutoCAD 5 12.08.2006 17:49