838510233 发表于 2018-8-18 01:47:26

entsel对象选择模式改为点选模式时<参数过多>,该如何改进

(defun c:AJ()
(command "line" '(100 -50) '(150 20) '(200 -50) '(250 50) "")
(setq qd'(100 -50))
(while(not(setq ss(entsel "nea" qd "\n请选择要闭合的物体:")));参数过多
;///////////entsel选取过程中,输入"nea"可该为点模式
    (princ"没有选择到,请再来一次。") )
(command "pedit" ss "y" "j" "all" "" ""))

namezg 发表于 2018-8-18 08:30:42

本帖最后由 namezg 于 2018-8-18 08:45 编辑

你的entsel方式有问题。用下面的方式。
;; [调用](zg-ss-entnext en)                     
;; [功能] 获取在图元 en 之后产生的图元的选择集   
;; [参数] en--图元名                              
;; [返回] 选择集                                 
;; [测试]1.(setq en (entlast))                  
;;         执行创建图元的命令,如 LINE,BOUNDARY   
;;         (setq ss (zg-ss-entnext en))         
;;       2.(setq ss (zg-ss-entnext (car(entsel))))
(defun zg-ss-entnext (en / ss)
      (if en
                (progn
                        (setq ss (ssadd))
                        (while (setq en (entnext en))
                              (if (not (member (cdr (assoc 0 (entget en))) '("ATTRIB" "VERTEX" "SEQEND")))
                                        (ssadd en ss)
                              )
                        )
                        (if (zerop (sslength ss)) (setq ss nil))
                )
                (setq ss (ssget "_x"))
      )
      ss
)

(setq en (entlast))
(command "line" "non" '(100 -50) "non" '(150 20) "non" '(200 -50) "non" '(250 50) "")
(setq ss (zg-ss-entnext en))
(command "pedit" "M" ss "" "Y" "J" 0.0 "")

838510233 发表于 2018-8-20 08:25:08

namezg 发表于 2018-8-18 08:30
你的entsel方式有问题。用下面的方式。
;; [调用](zg-ss-entnext en)                     
;; [功能]...

'("ATTRIB" "VERTEX" "SEQEND") ;搜索的这个列表是什么东西

byghbcx 发表于 2018-8-20 09:14:22

把这句(entsel "nea" qd "\n请选择要闭合的物体:")
换成(ssget "c" qd qd )

namezg 发表于 2018-8-20 09:28:07

ATTRIB 属性图元
VERTEX 顶点图元
SEQEND 开始序列的图元的名称。该图元标记多段线顶点的结束(顶点类型名),或具有属性(由插入图元中出现的非零 66 组表示)的插入图元的属性图元的结束(属性类型名)。
对于你来说,
(if (not (member (cdr (assoc 0 (entget en))) '("ATTRIB" "VERTEX" "SEQEND")))
                                        (ssadd en ss)
                              )
可改为 (ssadd en ss)即可.

838510233 发表于 2018-8-20 09:44:56

namezg 发表于 2018-8-18 08:30
你的entsel方式有问题。用下面的方式。
;; [调用](zg-ss-entnext en)                     
;; [功能]...


(defun c:AJ()
(command "line" '(100 -50) '(150 20) '(200 -50) '(250 50) "")
(setq qd'(100 -50))
(while(not(setq ss(ssget qd)));
;///////////entsel选取过程中,输入"nea"可该为点模式
    (princ"没有选择到,请再来一次。") )
(command "pedit" ss "y" "j" "all" "" ""))

namezg 发表于 2018-8-20 09:54:06

本帖最后由 namezg 于 2018-8-20 09:55 编辑

(setq ss (ssget "c" qd qd ))不理想,万一qd点处有别的图元,会多选。
如果你只是想获取通过一点的所有对象,用(setq ss (ssget "c" qd qd ))可以。
页: [1]
查看完整版本: entsel对象选择模式改为点选模式时<参数过多>,该如何改进