明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6969|回复: 14

[源码] 发两个带过滤及亮显等功能的 entsel 函数

[复制链接]
发表于 2013-6-29 20:01:30 | 显示全部楼层 |阅读模式
本帖最后由 yxp 于 2013-6-29 20:19 编辑


不知有没有人写过这个功能,写过的话我就把原创去了。
注意,Lisp 原来的 entsel 函数是没有过滤和亮显功能的。

  1. ;;================================================================
  2. ;;原创: 明经通道 yxp  qq:9034598
  3. ;;功能:单选 + 提示信息 + 过滤 + 亮显 + 回车退出的仿 entsel 函数
  4. ;;      鼠标移动时,将亮显符合过滤项的图元,拾取后,返回对象图元
  5. ;;      当左键拾取对象为空时,将结束选择,返回 nil
  6. ;;语法: (xensel msg filter-list)
  7. ;;示例:
  8. ;;(setq ss (xensel "\n请选择文本,直线 或<退出>:" '("TEXT" "LINE")))
  9. ;;================================================================

  10. (defun xensel (msg f / en ent own txt xen)
  11. (if (and (= (type msg) 'STR) (listp f))(progn
  12. (princ (strcat "\n" msg))
  13. (while (or (= (car (setq mouse (grread t 5 2))) 5)(= (car mouse) 2))
  14.   (setq own (nentselp (trans (cadr mouse) 0 1))
  15.            en (cons (car own) (car en)))
  16.   (if own (progn
  17.             (setq ent (car own)
  18.                   txt (cdr (assoc 0 (entget ent))))
  19.             (if (apply 'or (mapcar '(lambda(x)(= txt x)) f))(progn
  20.                 (setq xen (car en))
  21.                 (redraw (car en) 3)
  22.                 (if (and (cdr en)(null (eq (car en)(cdr en))))
  23.                     (redraw (cdr en) 4))
  24.             )))
  25.    (if (cdr en)(redraw (cdr en) 4))
  26.   ))
  27. (if (setq ent (car en)) (redraw ent 4))
  28. (if (eq ent xen) xen)
  29. )(progn
  30. (princ "\n函数 xensel 参数类型错误")
  31. (princ)))
  32. )


  33. ;;========================================================
  34. ;;原创: 明经通道 yxp  qq:9034598
  35. ;;功能:单选 + 提示信息 + 过滤 + 回车退出的仿 entsel 函数
  36. ;;      当拾取对象不符合过滤项图元时,将循环选择
  37. ;;      当左键拾取对象为空时,将结束选择,返回 nil
  38. ;;语法: (xensel2 msg filter-str)
  39. ;;示例:
  40. ;;(setq ss (xensel2 "\n请选择文本 或<退出>:" "TEXT"))
  41. ;;========================================================
  42. (defun xensel2 (msg f)
  43. (while (if (setq el (car (entsel msg)))
  44.        (if (= (cdr (assoc 0 (entget el))) f) nil t)
  45. nil)) el
  46. )




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2016-10-22 10:01:16 | 显示全部楼层
  1. ;;功能:带提示、关键字、过滤表、选择错误时的提示并且会亮显所选对像的entsel
  2. ;;用法:(entselEx  提示信息 过滤表)
  3. ;;举例:(entselEx  "\r请选择一个圆:" '((0 . "circle")) )
  4. (defun entselEx (msg fil / el ss)
  5.         (while (and (setvar "errno" 0)
  6.                                          (not (and (setq el  (entsel msg))
  7.                                                                         (if (= (type el) 'str)
  8.                                                                                 el
  9.                                                                                 (if (setq ss (ssget (cadr el) fil))
  10.                                                                                         ss
  11.                                                                                         (progn (princ ermsg) (setq ss nil))
  12.                                                                                 );if
  13.                                                                         );if
  14.                                                                 );and
  15.                                          );not
  16.                                          (/= (getvar "errno") 52)
  17.                                  );and
  18.   );while
  19.   (if (= (type el) 'list) (redraw (car el) 3));亮显选中的对像
  20.   el
  21. )
发表于 2018-11-10 13:05:07 | 显示全部楼层
这个好。刚想自己写个,在这个搜了一下。不错赞一个。
发表于 2013-6-29 20:16:45 来自手机 | 显示全部楼层
过虑的很多人写过,亮显的没听过,怎么亮显法?等电脑上网寸下载来看看,支持。

点评

yxp
黄兄,有动画截图,不能显示吗?  发表于 2013-6-29 20:21
发表于 2013-6-29 20:17:39 | 显示全部楼层
又是沙发,顶一个,楼主最近高产啊,
发表于 2013-6-29 20:21:52 | 显示全部楼层
发个我在用的:
;;;;        (sel "物体")
(defun sel (msg / ent)
  (while (not ent)
    (cond
      ((setq ent (entsel (strcat "\r选择" msg ":"))))
      ((= (getvar "ErrNo") 7)(princ))
      ((= (getvar "ErrNo") 52)(t (setq *Error* Strcat)))
    )
  )
  ent
)

点评

大师能斛释下吧,谢谢了!  发表于 2015-8-18 23:08
这个好使,谢谢!  发表于 2015-8-18 22:16
发表于 2013-6-29 22:56:42 | 显示全部楼层
下载试用,谢谢楼主
发表于 2013-8-22 17:44:59 | 显示全部楼层
谢谢楼主的分享!太好用了!收藏备用。
发表于 2014-3-30 01:06:18 | 显示全部楼层
过滤功能还不够强,亮显很特别也实用,空了好好学习下
发表于 2014-3-30 11:58:48 | 显示全部楼层
谢谢楼主的分享!很有用啊!
发表于 2015-8-18 22:17:34 | 显示全部楼层
谢谢分享!这个很特别,学习了!
发表于 2015-8-18 22:57:57 | 显示全部楼层
lz这个亮显比较特别,不过好像不支持左键选择时选空后自动重复。个人感觉cad里面,单选文字特别容易选空
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-9 11:33 , Processed in 0.194080 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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