fathihvac 发表于 2022-7-6 07:59:16

按线型过滤的选择

大家好§,
请帮我纠正这个Lisp程序。
(定义c:测试(/层名称)
;; 按线型在特定图层上选择对象的函数过滤器
(setq ent(car(entsel“\n选择对象以获取其层名称:”));
 
(setq layername(cdr(assoc 8(entget ent)))
(setq layerinf(tblsearch“LAYER”l_名称))
(setq layerltype(cdr(assoc 6 LAYERNF)))
 
(setq lay(列表(cons 0“*线”)(cons 8 layername)(cons 6 layerltype));;进行选择,然后输入并高亮显示OBJEST
(普林斯)
)

MSasu 发表于 2022-7-6 08:04:56

你想用它实现什么?选择一个项目,获取其图层,然后从该图层中选择其线型直接关联的所有直线/多段线?
 
同时,请在摘录中添加代码标签。

fathihvac 发表于 2022-7-6 08:12:29

我想在一个按线型过滤的图层上选择对象。
某些对象由具有“连续”线型的线绘制。而不是以“虚线”为例

MSasu 发表于 2022-7-6 08:17:11

我对您的代码做了一些更正:
(defun c:TEST ( / ent layername layerinf linetype lay index)
;; FUNCTION FILTER SELECTION OF OBJECT ON SPECIFIC LAYER BY LINE TYPE
(if (setq ent (car (entsel "\nSelect object to get its layer name : ")))
(progn
(setq layername (cdr (assoc 8 (entget ent))))
(setq layerinf (tblsearch "LAYER" layername))
(setq linetype (cdr (assoc 6 layerinf)))

;; MAKE THE SELECTION SELECTION THEN ENTER AND OBJEST HIGHLIGHTED
(if (setq lay (ssget "_X" (list '(0 . "*LINE") (cons 8 layername) (cons 6 linetype))))
   (progn
    (setq index 0)
    (repeat (sslength lay)
   (redraw (cdr (assoc -1 (entget (ssname lay index))))3)
   (setq index (1+ index))
    )
   )
)
)
)
(princ)
)

MSasu 发表于 2022-7-6 08:19:52

真实、简单、高效!尤其是当用户打算访问其例程之外的选择集时。我总是忘记这个功能,也许是时候把它贴在我的显示器上了。。。

Lee Mac 发表于 2022-7-6 08:29:07

@MSasu,
 
考虑:
 
(defun c:test ( / en la )
   (if (setq en (car (entsel)))
       (progn
         (setq en (entget en)
               la (tblsearch "LAYER" (cdr (assoc 8 en)))
         )
         (sssetfirst nil (ssget "_X" (list '(0 . "*LINE") (assoc 8 en) (assoc 6 la))))
       )
   )
   (princ)
)

fathihvac 发表于 2022-7-6 08:30:36

谢谢你没有工作。
选择特定图层上按线型过滤的对象,并使其高亮显示,以允许我进行一些修改。

SLW210 发表于 2022-7-6 08:36:38

fathihvac,
 
请编辑您的帖子,包括代码标签!

MSasu 发表于 2022-7-6 08:42:09

你试过李提出的那个吗?
或者考虑到李的观察,可能会改变我所改变的。

btraemoore 发表于 2022-7-6 08:44:59



(defun namedfunction( / ss_lay cnt i nm ent lt nlt)
(setq ss_lay (ssget "X" (list (cons 0 "LINE")(cons 8 "layer name"))))
(if ss_lay
(progn
   (setq Cnt (sslength ss_lay))
(setq i 0)
(repeat Cnt
   (setq NM (ssname ss_lay i))
   (setq ENT (entget NM))
          (setq LT (cdr (assoc 6 ent)) NLT "Continuous")
          (while (< i cnt)
             (if (= LT NLT)
             (what ever you want to do with the lines)
             );if
          );while
      (setq i (+ i 1))
      );repeat
);progn
);if
);defun
页: [1] 2
查看完整版本: 按线型过滤的选择