明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1450|回复: 6

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

[复制链接]
发表于 2018-8-18 01:47:26 | 显示全部楼层 |阅读模式
(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" "" ""))
发表于 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 "")

回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2018-8-20 08:25:08 | 显示全部楼层
namezg 发表于 2018-8-18 08:30
你的entsel方式有问题。用下面的方式。
;; [调用](zg-ss-entnext en)                       
;; [功能]  ...

'("ATTRIB" "VERTEX" "SEQEND") ;搜索的这个列表是什么东西
发表于 2018-8-20 09:14:22 | 显示全部楼层
把这句(entsel "nea" qd "\n请选择要闭合的物体:")
换成(ssget "c" qd qd )
发表于 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)即可.
 楼主| 发表于 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" "" ""))
发表于 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 ))可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-30 14:31 , Processed in 0.189001 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表