Тема: LISP,DCL. Выбор и выделение объектов из списка по типу.
Файл 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МТекст\nРастр"; height = 17; } 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 "SOLID")) ((= obj 9) (setq obj "HATCH")) ((= obj 10) (setq obj "REGION")) ((= obj 11) (setq obj "TEXT")) ((= obj 12) (setq obj "MTEXT")) ((= obj 13) (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) (progn (princ "\n Найдено ") (princ (sslength ss)) (princ " объектов типа ") (princ obj) (sssetfirst ss ss) ) (progn (princ "\n Нет объектов типа: ") (princ obj) ) ) ) ; progn (princ "\n Нет выбранных объектов." ) ) ) (princ "\n Отмена.") ) (princ) )
Оба файла должны находиться на пути доступа AutoCAD к файлам поддержки.
Возможный макрос для кнопки или пункта меню:
^C^C^P(if (not C:SELOBJ) (load "selobj")) SELOBJ