使用autolisp如何判断同一图层有不同类型的实体?

如题所述

需要循环判断才可以。

(defun C:ZX90 ( / &k1 &kw1 @k1 i ss1 tc ty1 ty2)
 (setq TC (entsel "\n请选择参考图层"))
 (if (/= TC nil)
  (progn
   (setq TC (cdr (assoc 8 (entget (car TC)))));得到图层
   (setq &kw1 (ssget "X" (list (cons 8 TC))));选择这个图层所有对象
   (setq ss1 '() &k1 (ssname &kw1 0) TY1 (cdr (assoc 0 (entget &k1))) ss1 (cons TY1 ss1));取得图元名
   (while &k1;进行判断
    (setq &kw1 (ssdel &k1 &kw1) i 0 @k1 "N1");判断变量为@k1
    (setq TY1 (cdr (assoc 0 (entget &k1))));取得图元名
    (repeat (length ss1);开始判断
     (setq TY2 (nth i ss1));提取图元名列表的数据
     (if (= TY1 TY2) (setq @k1 "Y1"));如果图元名相同就对变量@k1进行改变
     (setq i (+ i 1))
    )
    (if (= @k1 "N1") (setq ss1 (cons TY1 ss1)) );如果没有改变变量@k1,那么没有这个图元名所以图元名加入
    (setq &k1 (ssname &kw1 0));下一个对象
   )
   (princ "\n一共有") (princ (length ss1)) (princ "个类型");命令行显示类型个数
  )
 )
 (prin1)
)
温馨提示:答案为网友推荐,仅供参考
相似回答