Тема: Выбор всех объектов слоя

День добрый.
Вот задался вопросом и так и не понял, есть в CAD такая команда или нет?
Или здесь LISP нужен?
Помогите, люди добрые. Спасибо.

Re: Выбор всех объектов слоя

_qselect

Re: Выбор всех объектов слоя

Спасибо.

Re: Выбор всех объектов слоя

От имени "добрых людей":
Можно, конечно, накатать соответствующий макрос или LISP- программку, это несложно. Но еще проще воспользоваться Автокадовскими командами:
_layiso, _ai_selall(Ctrl + A)

Re: Выбор всех объектов слоя

> LeonidSN
Команды "_layiso" в AutoCAD нет, это в "Express Tools" и она оставляет включенным только слои, выбранные пользователем. Про выбор объектов там ни слова (можно, конечно, после этого вручную все выбрать). А _ai_selall(Ctrl + A) выбирает все объекты на всех слоях, а не на указанном. Так что, от имени "добрых людей" как-то не очень...

Re: Выбор всех объектов слоя

Владимир Громов (2005-10-04 13:43:39)
А думать не на шаг, а на два проблемма?

Re: Выбор всех объектов слоя

> Jura
Не понял я, куда думать, т.е. в каком направлении? Я ведь пока не отвечал Макс'у, а его вопрос таков:
Выбор всех объектов слоя
Думается так: ткнул курсором в объект и подсветились или обзавелись ручками объекты, находящиеся на слое "ткнутого" объекта. Или выбрал слой из списка и произошло тоже самое. Без отключения (изоляции) слоев, без задания параметров в "_qselect", без стандартной команды выбора объектов. Это на сколько шагов?

Re: Выбор всех объектов слоя

Ликбез > Владимир Громов (2005-10-04 14:33:59)
Как бы, ответ был расчитан на тех, кто хоть немного знает AutoCAD:
1. _layiso  - как Вы сказали...
2. дальше надо знать AutoCAD, тогда не будешь впустую утвержать, что надо выбирать вручную... В менеджере слоев создаешь фильтр на выключенные слои, замораживаешь их...
3. Дальше _ai_selall(Ctrl + A) (нужно ли объяснять как поменять слой после команды _ai_selall wink  )
И причем здесь, когда Вы начнете отвечать Макс'у? Вы бы действительно начали, что-то дельное отвечать Макс'у, а не хаяли, то чему еще не научились...

Re: Выбор всех объектов слоя

К сожалению команда _QSELECT реализована в AutoCAD'е через ж@пу. Во всяком случае в AutoCAD 2002. В результате тот же список слоёв в выпадающем списке - выпадает в неотсортированном виде. И если слоёв много 200 или 300, то найти нужный слой - занятие для очень уравновешенных слоёв. Я - человек неуравновешеный. Поэтому _QSELECT не пользуюсь. Со своей стороны рекомендую альтернативу - прозрачную команду '_FILTER (или сокращённую '_FI). Если AutoCAD английский, то в ответ на запрос выбора примитивов достаточно набрать командной строке:
'fi
После чего в диалоговом окне "Object Selection Filters" нажат длинную кнопочку [Add Selected Object<] и указать один из подходящий примитивов.
Затем с помощью кнопочки [Delete] удалить из верхнего белого окошка лишие критерии, которые будут мешать отбору требуемых примитивов. После чего нажать кнопочку [Apply].
Затем задать опцию All или другую подходящую оцию выбора примитивов (Window, Crossing, WPolygon, CPolygon, Fence, Previous и т.д.) и отобрать примитивы. При этом всё лишнее будет отфильтровано, а "в сети" попадут только те примитивы, которые соответсвют заданным с помощью команды 'FILTER критериям.
Дальше просто хмём пустые вводы, пока примитивы не будут отобраны.
Кстати, в Вашем случае -дял отбора всех примитивов слоя нужно задавать именно опцию All. Она тут подойдёт лучше всего.
Я тут довольно кратко описал работу команды FILTER. Лучше почитайте в книжке её описание. Довольно гибкая команда, и кстати, выпадающий список слоёв у неё отсортированный! Нормальные программеры писали, а не недоделанные у#бки, которые по-быренькому сварганили QSELCT....

Re: Выбор всех объектов слоя

Только что проверил. В 2005-м у QSELECT слои сортируются уже нормально. Ошибку исправили. Однако, в отличие от FILTER,  QSELECT нельзя вызывать прозрачно. Т.е. её нужно вызывать предварительно, отбирать нужные примитивы. Ну а уже потом вызывать требуемую команду и указывать с помощью опции _Previous предыдущий наюор.
Словом, что кому нравится. Я, например, про изоляцию слоя знаю, но как правило для отбора примитивов со слоя ею не пользуюсь.

Re: Выбор всех объектов слоя

Команды "_layiso" в AutoCAD нет, это в "Express Tools"

Для 2006 уже можно считать, что экспресс и автокад срослись. Да и во всех автокадах, кроме 2002, кажется, экспрессы были на дисках автокада. Только кустари-одиночки этого не знали. Поэтому напомню еще один автокадовско-экспрессовский способ выделить все объекты слоя: 1a. _laywalk Здесь, в окне убрать птичку Restore on exit. Выбрать все объекты рамкой. Или 1б. _Layiso, Опять-же выделить все рамкой. 2. Вернуть прежний лееринг, команда _Layerp. 3. А теперь можно подсветить все ранее выделенные объекты командой _Select с опцией _Previous. При желании можно их копии или сами оригиналы отодвинуть в сторону на круглое расстояние.
Забыл, как можно пометить этот набор грипсами, то-ли команда pselect, то-ли еще как-то. Но подсветка уже есть.

Re: Выбор всех объектов слоя

> Макс
Вот программа выбора всех объектов на слое выбранного объекта.
Код надо сохранить в файле sel_lay.lsp

(defun C:SEL_LAY ( / echo slt sen ent lay ss len da)
      (setq echo (getvar "CMDECHO"))
      (setvar "CMDECHO" 0)
      (setq slt (getvar "CLAYER"))
      (princ "\n Определение слоя по объекту.")
      (setq sen (entsel " Выберите нужный объект: "))
(if sen
      (progn
      (setq ent (entget (car sen)))
      (setq lay (cdr (assoc 8 ent)))
      (setq ss (ssget "_X" (list (cons 8 lay))))
      (setq len (sslength ss))
      (sssetfirst nil ss)
      (initget 6 "Да Нет 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 "CLAYER" slt)
      (setvar "cmdecho" echo)
      (princ)
)

Возможный макрос для кнопки или пункта меню:

^C^C^P(if (not C:SEL_LAY) (load "sel_lay")) SEL_LAY

Re: Выбор всех объектов слоя

Второй вариант можно посмотреть здесь:
https://www.caduser.ru/forum/topic21272.html

Re: Выбор всех объектов слоя

Использую такой лисп:

(defun c:slayer (/ obj_in_lay lay selayer)
  (setq obj_in_lay (entget(car(entsel "\n select object in layer:"))))
  (setq lay (cdr (assoc 8 obj_in_lay)))
  (setq selayer (ssget "_x" (list (cons 8 lay))))
  (sssetfirst selayer selayer)
);defun

Re: Выбор всех объектов слоя

> Владимир Громов
IMHO браться за Лисб, когда возможности ACAD исчерпаны, или применение штатных инструментов больно накладны... В большинстве случаев, лучше потратить время на изучение AutoCAD...
Прочтите > Mosspower (2005-10-05 01:51:40) (про Filter), и сравните с возможностями Вашего кода... К тому же после замечания > Mosspower (2005-10-05 02:04:36) прозрачность точно бы не помешала...
Lisp бы здесь помог, например отобрать и поменять параметры у объектов по всем Layout`ам..., а зачем повторять в обрезаном виде возможности штатных инструментов?

Re: Выбор всех объектов слоя

> Jura
Да ну тебя, совсем озверел...IMHO.

Re: Выбор всех объектов слоя

> Владимир Громов
Leonid`у SN мимоходом отказали в принадлежности к "добрым людям", мне, походя вообще отказали в человеческом лице... Чувствуется Хозяин жизни...

Re: Выбор всех объектов слоя

Да, действительно, _ai_selall(Ctrl + A) выбирает ВСЕ объекты (век живи - век учись)... а жаль, хороший получался способ. Но не вижу проблем и в том, чтобы  оставшиеся после команды _layiso выбрать "ручками".

Re: Выбор всех объектов слоя

> Jura
Про LeonidSN не надо, просто он выразился как бы от имени ВСЕХ "добрых людей", а они ведь могут думать по-разному. Ну, а вы-то зачем такой злой, а? Ведь посмотрите, выбрать объекты на конкретном слое можно и без "Express tool", и без "_qselect", и без фильтров...
Вызвал диспетчер слоев, сделал нужный слой текущим, по правой кнопке выбрал все слои, кроме текущего, отключил их и делай с оставщимися на экране объектами что хочешь. 10, от силы 20 секунд. И что еще надо при текущей постановке задачи: "Выбор всех объектов слоя"?

Re: Выбор всех объектов слоя

> LeonidSN
Прошу прощения, что упомянул вас всуе, просто ваше сообщение появилось, пока я писал. Тут у меня произошол некий казус с командой "_layiso". Взял чужой рисунок, применил к нему эту команду и вместо того, чтобы на экране остались только объекты, находящиеся на слое выбранного объекта, а остальные слои выключились, случилось наоборот - другие слои остались, а выключился выбранный по объекту слой. Но потом отвлекся и не успел разобраться, в чем дело.