明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2364|回复: 11

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

  [复制链接]
发表于 2020-8-12 08:05 | 显示全部楼层 |阅读模式
本帖最后由 bloodtempt 于 2020-8-12 08:08 编辑

(defun C:s+ (/ ss ssfun)
        (defun ssFun_1 ()
                (setq layfil (list (assoc 8 (entget (car (entsel "\n 选择参照图元"))))))
                layfil
                (ssget-key "\n 选择目标对象或 [读取图层(S)]:" (list (cons "S" "ssFun_1")) (append layfil '((100 . "AcDbText"))))
        )
        (setq ss (ssget-key "\n 选择目标对象或 [读取图层(S)]:" (list (cons "S" "ssFun_1")) (append layfil '((100 . "AcDbText")))))
)

本帖子中包含更多资源

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

x
发表于 2020-8-13 10:10 | 显示全部楼层
提示vla-object nil
回复 支持 1 反对 0

使用道具 举报

发表于 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. )
发表于 2020-8-14 10:42 | 显示全部楼层
bloodtempt 发表于 2020-8-14 10:19
"AcDbText"改成"*Text"试试,AcDbText是天正文字

不单是天正的,我的字体100的组码也是AcDbText
 楼主| 发表于 2020-8-13 17:45 | 显示全部楼层
cghdy 发表于 2020-8-13 10:10
提示vla-object nil

前面添加(vl-load-com)
发表于 2020-8-13 22:49 | 显示全部楼层
bloodtempt 发表于 2020-8-13 17:45
前面添加(vl-load-com)

应该不是缺少这个,加载后试用还是有该问题
 楼主| 发表于 2020-8-14 07:46 | 显示全部楼层
cghdy 发表于 2020-8-13 22:49
应该不是缺少这个,加载后试用还是有该问题

把你的发上来我看一下
发表于 2020-8-14 09:34 | 显示全部楼层
就是使用你发的例子,没有改动。不知道是不是使用方法不对。
 楼主| 发表于 2020-8-14 10:19 | 显示全部楼层
"AcDbText"改成"*Text"试试,AcDbText是天正文字
发表于 2021-6-5 13:02 | 显示全部楼层
下载试用了下,只能点选,没法框选
发表于 2021-6-6 19:49 | 显示全部楼层
这个跟飞诗的差不多啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 07:33 , Processed in 0.346710 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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