明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2740|回复: 14

[源码] 不用回车的KeyWord

[复制链接]
发表于 2021-2-18 14:13:09 | 显示全部楼层 |阅读模式
  1. ;;(MyKeyWord "对齐[左(Z)/右(Y)]<Z>:")
  2. (defun MyKeyWord (str / CODE FLAG RETURN STR1 STR2)
  3.   (princ (strcat "\n " str))
  4.   (setq str1 (xd::string:regexps "[\(].[\)]" str ""))
  5.   (setq str1(mapcar '(lambda(x) (xd::string:regexps "[^\(|\)]" x "")) str1))
  6.   (setq str1(apply 'strcat (mapcar 'car str1)))
  7.   (setq str2 (xd::string:regexps "[\<].[\>]" str ""))
  8.   (setq str2 (xd::string:regexps "[^\<|\>]" (car str2) ""))  
  9.   (setq str1 (strcat (strcase str1 nil) (strcase str1 t) " "))
  10.   (setq str1 (VL-STRING->LIST str1))
  11.   (while (not Flag)
  12.     (setq code (grread T 8))
  13.     (setq Flag (member (cadr code) str1))
  14.   )
  15.   (if (= (type Flag) 'LIST)
  16.     (setq return (strcase (VL-LIST->STRING (list (car Flag))) nil))
  17.   )
  18.   (if (= return " ")
  19.     (setq return (car str2))
  20.   )
  21.   return
  22. )

评分

参与人数 2明经币 +3 收起 理由
tigcat + 1 就是要装晓东api,有点不方便。
xyp1964 + 2 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-5-17 14:34:44 | 显示全部楼层
试一下这个,不记得原作者是谁了,应该是来源于本论坛。

  1. ;;;(Get_Key_Word "\n1实体/2钢筋砼/3素砼/4墙体/5阳台/6卫生间/7厨房:<1>"'("1" "2" "3" "4" "5" "6" "7") "1")
  2. (defun Get_Key_Word(pro lst def / kw val)
  3.   (setq lst (apply 'append (mapcar '(lambda(e) (list (ascii (strcase e)) (ascii (strcase e T)))) lst)) def (ascii def))
  4.   (prompt pro)
  5.   (while (not (and (setq kw (grread nil) val (car kw) kw (cadr kw)) (member val '(2 11 25))
  6.                    (if (or (= val 25) (and (= val 11) (= kw 0)) (member kw '(13 32))) (setq kw def) (member kw lst)))))
  7.   (strcase (vl-list->string (list kw))))


评分

参与人数 1明经币 +1 收起 理由
lee50310 + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2021-2-19 16:11:48 | 显示全部楼层
本帖最后由 小菜123 于 2021-2-19 16:13 编辑

  1. ;|
  2. 功能 对字符串进行正则表达式匹配测试.
  3. 参数:
  4. pat = 正则表达式模式 ,对应vbs正则表达式的模式(expression)。说明: \\号要用\\\\替代.
  5. str = 字符串
  6. key = "i" "g" "m" , "i"不区分大小写(Ignorecase),"g"全局匹配(Global).
  7.            "m"多行模式(Multiline),以上几个关键字可以组合使用,或用 "".
  8. 返回: 返回匹配的字符列表,或无一匹配返回nil

  9. |;
  10. (defun XD::String:RegExpS (pat str key / end keys matches x)
  11.   (if (not *xxvbsexp)
  12.     (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
  13.   )
  14.   (vlax-put *xxvbsexp 'Pattern pat)
  15.   (if (not key)
  16.     (setq key "")
  17.   )
  18.   (setq key (strcase key))
  19.   (setq keys '(("I" "IgnoreCase") ("G" "Global")
  20.          ("M" "Multiline")
  21.         )
  22.   )
  23.   (mapcar
  24.     '(lambda (x)
  25.        (if (wcmatch key (strcat "*" (car x) "*"))
  26.          (vlax-put *xxvbsexp (read (cadr x)) 0)
  27.          (vlax-put *xxvbsexp (read (cadr x)) -1)
  28.        )
  29.      )
  30.     keys
  31.   )
  32.   (setq matches (vlax-invoke *xxvbsexp 'Execute str))
  33.   (vlax-for x matches (setq end (cons (vla-get-value x) end)))
  34.   (reverse end)
  35. )

发表于 2021-2-19 08:02:11 | 显示全部楼层
黄大师还是按照自己的想法写完了,厉害厉害
发表于 2021-2-19 08:45:53 | 显示全部楼层
黄大师,求一个快速对齐的lisp,实现的功能就是选择一个对象,直线或者块,再点选该对象中的一条直线,然后选中要对齐的线就直接对齐到此线段了。

明经里有不少这样的lisp,但是都不太完善,求大师指点,多多谢谢,前排占座等候
发表于 2021-2-19 12:21:48 | 显示全部楼层
缺少xd::string:regexps函数
发表于 2021-2-19 17:59:23 | 显示全部楼层
谢谢! 黄大师分享学习!!!!!
发表于 2021-2-24 14:42:06 | 显示全部楼层

有了菜总的代码,省去了装晓东工具箱。
发表于 2022-5-17 13:53:30 | 显示全部楼层
很方便,多谢黄大师热心分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:51 , Processed in 0.162751 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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