明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: bloodtempt

带关键字的ssget,个人修改版,可自定义函数进行后续操作

  [复制链接]
发表于 2021-7-6 16:43 | 显示全部楼层
没有用,浪费一个币
发表于 2021-7-6 17:41 | 显示全部楼层
发现问题所在了少了一个定义doc的过程,但是还是不能自动执行函数,只返回了文本
  1. (defun c:tt ()
  2.   (setq        Msg        "\n 选择目标对象或 [读取图层(s b)]:"
  3.         keylist        (list (cons "s" "ssFun_1") (cons "b" "ssFun_1"))
  4.         Fil        '((0 . "line"))
  5.   )
  6.   (ssget-key Msg keylist Fil)
  7. )
  8. (defun ssFun_1 ()
  9.   (alert "现在是函数1")
  10.   )
  11. (defun ssFun_2 ()
  12.   (alert "现在是函数1")
  13.   )
  14. ;;带关键字的ssget
  15. ;|(setq Msg     "\n 选择目标对象或 [读取图层(S)]:"
  16.       keylist (list (cons "S" "ssFun_1") (cons "S" "ssFun_1"))
  17.       Fil     (append layfil '((100 . "AcDbText")))
  18. )|;
  19. ;;(defun ssFun_1 ()) 可自定义函数进行后续操作
  20. (defun ssget-key (Msg keylist Fil / enp fun kwd myentsel pt2str ret)
  21.   (setq
  22.     *ACAD* (vlax-get-acad-object)
  23.     *DOC*  (vla-get-ActiveDocument *ACAD*)
  24.   )
  25.   ;;带过滤器的entsel
  26.   (if (eq (type keylist) 'str)
  27.     (setq Kwd keylist)
  28.     (setq
  29.       Kwd (apply 'strcat
  30.                  (mapcar '(lambda (x) (strcat (car x) " ")) keylist)
  31.           )
  32.     )
  33.   )
  34.   (defun MyEntsel (msg fil /)
  35.     (princ "\n")
  36.     (setq enp (entsel msg))
  37.     (cond
  38.       ((equal (type enp) 'STR)
  39.        (princ enp)
  40.       )
  41.       (T
  42.        (and enp (ssget (cadr enp) fil))
  43.       )
  44.     )
  45.     enp
  46.   )
  47.   ;;点化字串
  48.   (defun Pt2Str        (pt)
  49.     (strcat
  50.       (rtos (car pt) 2 3)
  51.       ","
  52.       (rtos (cadr pt) 2 3)
  53.       ","
  54.       (rtos (caddr pt) 2 3)
  55.       "\n"
  56.     )
  57.   )
  58.   (cond
  59.     ((cadr (ssgetfirst))
  60.      (ssget "_P" fil)
  61.     )
  62.     (t
  63.      (initget Kwd)                        ;随后调用entsel时
  64.      (cond
  65.        ((and (listp (MyEntsel Msg Fil))
  66.              (/= 52 (getvar "errno"))
  67.         )
  68.         (vla-sendcommand *DOC* (Pt2Str (cadr (grread t))))
  69.         (setq ENP (ssget Fil))
  70.        )
  71.        ((equal (TYPE enp) 'STR)
  72.         (setq ret (cdr (assoc enp keyList))
  73.               fun (eval (read ret))
  74.               enp (if (and (eq (type fun) 'SUBR) (wcmatch ret "ssFun_*"))
  75.                     (fun)
  76.                     ret
  77.                   )
  78.         )
  79.        )
  80.      )
  81.     )
  82.   )
  83.   (princ "\n")
  84.   enp
  85. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 06:45 , Processed in 0.189915 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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