tryhi 发表于 2018-8-27 18:03:29

yanshengjiang 发表于 2018-8-8 16:37
哥们我这只实现了词组的首一个字母。你在吗提取到“批量”=“PL“的呢?




;;获取汉字的拼音首字母,返回字母表
(defun pingyin (str / asc lst rt)
(setq lst (vl-string->list str))
(while lst
    (setq asc (+ (* (car lst) 256) (cadr lst) -65536)
    lst (cddr lst)
    )

    (setq rt (cons
         (cond
   ((<= -20319 asc -20284) "A")
   ((<= -20283 asc -19776) "B")
   ((<= -19775 asc -19219) "C")
   ((<= -19218 asc -18711) "D")
   ((<= -18710 asc -18527) "E")
   ((<= -18526 asc -18240) "F")
   ((<= -18239 asc -17923) "G")
   ((<= -17922 asc -17418) "H")
   ((<= -17922 asc -17418) "I")
   ((<= -17417 asc -16475) "J")
   ((<= -16474 asc -16213) "K")
   ((<= -16212 asc -15641) "L")
   ((<= -15640 asc -15166) "M")
   ((<= -15165 asc -14923) "N")
   ((<= -14922 asc -14915) "O")
   ((<= -14914 asc -14631) "P")
   ((<= -14630 asc -14150) "Q")
   ((<= -14149 asc -14091) "R")
   ((<= -14090 asc -13319) "S")
   ((<= -13318 asc -12839) "T")
   ((<= -12838 asc -12557) "W")
   ((<= -12556 asc -11848) "X")
   ((<= -11847 asc -11056) "Y")
   ((<= -11055 asc -10247) "Z")
   (t nil)
         )
         rt
       )
    )
)
(reverse rt)
)

纵横八方 发表于 2018-8-27 19:05:48

虽然看不懂,还是来捧场

菜卷鱼 发表于 2019-3-1 09:15:42

本帖最后由 菜卷鱼 于 2019-3-1 09:17 编辑

过来支持一下

qq1254582201 发表于 2019-3-7 15:52:53

确实很厉害,给楼主点个赞

timmy521 发表于 2020-3-2 09:35:31

谢谢,好东西,学习。

xvjiex 发表于 2020-3-2 11:08:23

本帖最后由 xvjiex 于 2020-3-2 11:13 编辑

命令:sc2可以正常使用,但是命令:sc.5就显示未知命令。我初学者,找不出原因。求大神帮忙!

timmy521 发表于 2020-3-4 22:54:00

在猫老师的指导下,这样改就行了。
;;命令反应器定义直接带数字缩放
(vl-load-com)
(or *lispvlr*(setq *lispvlr* (vlr-command-reactor nil '((:vlr-unknownCommand . _wzml_vlr)))));定义未知命令反应器
(defun _wzml_vlr ( vlrobj data );反应器触发函数/ send wzml
   (setq aa (getvar "LASTPROMPT"))
   (setq wzml (substr aa 7));输入的未知命令名称
   (defun send (str)(vla-sendcommand (vla-get-ActiveDocument (vlax-get-acad-object)) (strcat str"\n")));发送字符串到命令行
(cond ;采用cond来管理多种类型,本处只举例一种
    ((and;sc缩放带比例命令
      (wcmatch wzml "SC.*,SC#*");是否SC开头带数字
      (wcmatch (substr wzml 3)"~*[~`.-9]*");二次判断
      );通用命令
   (send (strcat "(-wzml-fyq \""wzml"\")"));触发命令(反应器里面无法使用command等多种函数,采取跳出反应器来突破函数限制)
                )
      )
)
;;触发通用函数(可以定义多个函数,也可以只用一个函数,自由发挥)
(defun -wzml-fyq (wzml / bili)
(cond ;采用cond来管理多种类型的命令,本处只举例一种
    ((wcmatch wzml "SC*,SC.*,SC#*");缩放命令
      (setq bili(atof (substr wzml 3)));取得数字
      (command "SCALE" (ssget) "" pause bili)
    )
)
)

cqu20104225 发表于 2020-3-4 23:12:32

发现宝藏了,先马住,闲下来认真学一下

xvjiex 发表于 2020-3-5 08:54:33

timmy521 发表于 2020-3-4 22:54
在猫老师的指导下,这样改就行了。
;;命令反应器定义直接带数字缩放
(vl-load-com)


感谢修改,这个sc.5也能用了。原先只能用sc2

magicheno 发表于 2021-10-26 19:18:48

学习啦,海哥
页: 1 2 3 [4] 5
查看完整版本: 使用反应器定义无限多种虚拟命令