选择集与表

选择集是一种特殊结构的表,只能通过特定的函数进行操作,但这些函数对大量重复的操作只能通过循环实现,显得力不从心,不能体现Lisp语言表结构的优越性。
    其实我们只要通过存取实体名或实体句柄,将它们存为一个普通结构的表,完全可以通过常规表操作函数实现对实体的操作。
    例四是一段使用apply、mapcar函数联合求文本选择集中文本基点最大y值得代码,只是一个示例,如果结合VL-sort函数,可轻松实现对文本的排序。
************************************************
;;例四
  (setq    sl nil i  -1)
  (repeat (sslength (setq ss (ssget ((0 . "TEXT")))))      ;选择文本
    (setq i  (1+ i)
           en (ssname ss i)                                  ;从选择集中取出文本
           sl (cons en sl)                                   ;构造包含实体名的表
    )
  )
  (setq    maxy (apply max                                    ;求文本基点最大y值
            (mapcar
              (lambda (x)
                 (caddr (assoc 10 (entget x)))              ;提取y值
               )
              sl
            )
         )
  )
************************************************
    当然,选择集也有其优势的一面,比如对选择集中实体的删除操作非常简单、选择集中的实体不会重复及选择集可以与Acad命令交互使用等特征是一般表所不具备的,所以,编程时应根据程序要求,灵活运用。

标签:选择