Тема: Макрос фильтр выбора

Здравствуйте .
Уважаемые , подскажите ,пожалуйста как напмсать на кнопку макрос , чтобы при нажатии на эту кнопку и выделении рамкой подсвечивались только примитивы определенного типа , например только line , 3dsolid , pline ...
Раньше где-то я видел пару примеров . Поиском найти не получилось . Если кто-то знает - ткните носом , пожалуйста .

Re: Макрос фильтр выбора

На выбор (ЯТД):
^C^C(defun mfunc(/ selset) (if (setq (ssget '((0 . "LINE")))) (sssetfirst selset selset)));mfunc;
^C^C(defun mfunc(/ selset) (if (setq (ssget '((0 . "INSERT")))) (sssetfirst selset selset)));mfunc;
^C^C(defun mfunc(/ selset) (if (setq (ssget '((0 . "*LINE")))) (sssetfirst selset selset)));mfunc;

Re: Макрос фильтр выбора

> APavl
И для каждого объекта AutoCAD'а своя кнопка? Или же выбирать из списка? Тогда программа мало чем будет отличаться от "_qselect" ("бвыбор"), IMHO.

Re: Макрос фильтр выбора

> Владимир Громов
Эт точно :)

Re: Макрос фильтр выбора

Да , для каждого примитива отдельная кнопка нужна. KPBLС , кажется макросы были в виденных ранее примерах покороче .

Re: Макрос фильтр выбора

> APavl
Посмотри:
https://www.caduser.ru/forum/topic20138.html

Re: Макрос фильтр выбора

> APavl
Я огреб проблем с невозможностью выбора, теперь стараюсь делать именно так, как я показал :)

Re: Макрос фильтр выбора

P.S. Другой вопрос, что код неправильно написан:

^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "LINE")))) (sssetfirst selset selset)));mfunc;
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "INSERT")))) (sssetfirst selset selset)));mfunc;
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "*LINE")))) (sssetfirst selset selset)));mfunc;

Вот так по идее должно быть (спасибо Евгению Елпанову, указал на ошибку)

Re: Макрос фильтр выбора

KPBLC, у меня ни одни , и не вторые коды не срабатывают . Может в синтаксисе неправильно что-то , или я скопировал где с лишним пробелом , но у меня сбрасывает команду .
А по ссылке https://www.caduser.ru/forum/topic20138.html именно то , что я и хотел : ^C^C(sssetfirst nil (ssget '((0 . "TEXT,MTEXT")))) - это работает .
Спасибо Вам всем .

Re: Макрос фильтр выбора

> APavl
упс, сорри, скобки позабыл :(

^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "LINE")))) (sssetfirst selset selset)));(mfunc);
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "INSERT")))) (sssetfirst selset selset)));(mfunc);
^C^C(defun mfunc(/ selset) (if (setq selset (ssget '((0 . "*LINE")))) (sssetfirst selset selset)));(mfunc);

Так работает?

Re: Макрос фильтр выбора

Выделение и подсветка объектов одного типа, выбранного из списка.
Файл selobj.dcl

objlist:dialog {
    label = "Объекты.";
    fixed_width = true;
         :list_box {
         label = "Выбери объект";
         key = "obj";
         list = "Отрезок\nПолилиния\nСплайн\nДуга\nКруг\nЭллипс\nТочка\nБлок\nШтриховка\nОбласть\nТекст\nМТекст\nРастр";
         height = 15;
         }
ok_only;
}

Файл selobj.lsp

(defun C:SELOBJ ( / dcl_id obj ss1 ss ssn1 n pp pp1)
       (command "_select" "_r" "_all" "")
       (setq dcl_id (load_dialog "selobj"))
       (if (not (new_dialog "objlist" dcl_id)) (exit))
       (action_tile "obj" "(setq obj (read $value))")
       (action_tile "accept" "(done_dialog)")
       (start_dialog)
       (unload_dialog dcl_id)
(if obj
    (progn
       (cond
       ((= obj 0) (setq obj "LINE"))
       ((= obj 1) (setq obj "LWPOLYLINE"))
       ((= obj 2) (setq obj "SPLINE"))
       ((= obj 3) (setq obj "ARC"))
       ((= obj 4) (setq obj "CIRCLE"))
       ((= obj 5) (setq obj "ELLIPSE"))
       ((= obj 6) (setq obj "POINT"))
       ((= obj 7) (setq obj "INSERT"))
       ((= obj 8) (setq obj "HATCH"))
       ((= obj 9) (setq obj "REGION"))
       ((= obj 10) (setq obj "TEXT"))
       ((= obj 11) (setq obj "MTEXT"))
       ((= obj 12) (setq obj "IMAGE"))
       )
       (setq ss1 (ssget))
   (if ss1
       (progn
       (setq ss (ssadd))
       (setq ssn1 (sslength ss1) n 0)
         (repeat ssn1
           (setq pp (ssname ss1 n))
           (setq pp1 (entget pp))
           (if
           (= (cdr (assoc '0 pp1)) obj) (ssadd pp ss)
           )
           (setq n (+ n 1))
         ) ; repeat
         (if (/= (sslength ss) 0) (sssetfirst ss ss)
             (progn
             (princ "\n Нет объектов типа: ") (princ obj)
             )
       )
       ) ; progn
       (princ "\n Нет выбранных объектов." )
  )
)
(princ "\n Отмена.")
)
    (princ)
)

Оба файла должны находиться на пути доступа AutoCAD к файлам поддержки.
Возможный макрос для кнопки или пункта меню:

^C^C(if (not C:SELOBJ) (load "selobj")) SELOBJ

Re: Макрос фильтр выбора

Спасибо .
Все варианты работают . Каждый по-своему хорош . Забил пока все три на кнопки .

Re: Макрос фильтр выбора

Выбор объектов по образцу:
^C^C^P(defun C:tmp_Den ()(sssetfirst nil (ssget (list (assoc 0 (entget (car (entsel "Выберите образец:")))))))(princ))(princ);tmp_Den
Выбор объектов по слою образца:
^C^C^P(defun C:tmp_Den ()(sssetfirst nil (ssget (list (assoc 8 (entget (car (entsel "Выберите образец требуемого слоя:")))))))(princ))(princ);tmp_Den

Re: Макрос фильтр выбора

> Денис Флюстиков
Интересно и полезно но пишет что "лишняя закрывающая скобка на входе".  Акад 2007.

Re: Макрос фильтр выбора

> jonas
Попробовал в русском 2007. И из-под кнопки и из-под инструментальной палитры оба макроса работают нормально. Может при копировании в буфер обмена не вся строчка была захвачена?, проверь.

Re: Макрос фильтр выбора

> Денис Флюстиков
F2 пишет -
Команда:  Выберите образец:
Выберите объекты:
а далее ничего.
А вообще как должна работать команда?

Re: Макрос фильтр выбора

> jonas
При "Команда: Выберите образец:" указываем, например, на "размер".
Далее запрос "Выберите объекты:", здесь рамкой указываем нужную область, завершение правым кликом, пробелом и т.п. и после этого, если среди выбранных примитивов есть "размеры", то происходит их подсветка. Далее в панели "свойства" можно поменять их переменные, цвет, слой, текст и т.д., или запустить команду для работы с ними (перенести, копирование и т.д.).

Re: Макрос фильтр выбора

> Денис Флюстиков
Разобрался. Спасибо.
Не понимание было в том, что я хотел чтобы выбор можно было делать и по цвету.

Re: Макрос фильтр выбора

Ктобы показал макрос для выдедения останков текста, которые то видно то невидно,
через быстрое выделение обычно выделяю но и выделяется нормальный текст потом удаляю,
а хотчеца макрос

Re: Макрос фильтр выбора

> Денис Флюстиков
ACAD R14.Навесил ваши макросы на кнопку. Все работает, а я хочу сказать - СПАСИБО!

Re: Макрос фильтр выбора

> LeonidSN
Отлично, теперь на форумах после своих сообщений могу оставлять надпись:

А мои программы используются с 14-го ACADа

Re: Макрос фильтр выбора

> Денис Флюстиков
Когда в процессе профессиональной деградации дойду до ACADR12 или R10 поставлю и сообщу!