edata 发表于 2022-5-19 23:46:42

也谈Lisp生成二维码之调用命令行exe版

本帖最后由 edata 于 2022-5-21 22:31 编辑

以前写了一个用于DCL版本基于MFC的二维码生成程序,有人说不能动态生成。
这不动态的他来了。
exe附件,例子解压到D盘,
2022-05-21更新附件,隐蔽运行

代码更新,添加边框,指定左上角点,单个方块大小


(defun c:tt(/ wscript stdout wsreturn outstr pt n k lst ptbase h ptleftdown ptleftup ptrightdown ptrightup size w)
(setq WScript (vlax-get-or-create-object "WScript.Shell"))
(setq WSreturn (vlax-invoke WScript 'exec "\"D:\\QRencodeForLisp.exe\" \"明经通道\r\ncode by edata\r\n\""))
(setq stdout (vlax-get WSreturn 'StdOut))
(setq outstr (vlax-invoke stdout 'Readall))
        (setq lst(read outstr))
        (if (and lst (setq ptbase(getpoint "\n左上角点:")))
                (progn
                        ;(setq ptbase '(0 0))
                        (setq h(length lst) w(length (car lst)))
                        ;;方块的大小
                        (setq size 100.0)
                        (setq ptLeftUp (polar ptbase (* pi 1.75) (* (sqrt 2.0) (* size 0.5))))
                        (setq ptRightUp(polar ptLeftUp 0 (+ (* w size) size )))
                        (setq ptLeftDown(polar ptLeftUp (* pi 1.5) (+ (* w size) size )))
                        (setq ptRightDown(polar ptRightUp(* pi 1.5) (+ (* w size) size )))
                        (mkFrame ptLeftUp ptLeftDown ptRightDown ptRightUp 16777215 size)
                        (setq ptbase(polar (polar ptLeftUp 0 (* 0.5 size)) (* pi 1.5) size))
                        (foreach n lst
                                (setq pt ptbase)
                                (foreach k n                                       
                                        (if (= k 1) (mkpline pt 0 size) (mkpline pt 16777215 size))
                                        (setq pt(polar pt 0 size))
                                        )                               
                                (setq ptbase(polar ptbase (* pi 1.5) size))
                                )                       
                        )
                )
        (princ)
)
(defun mkpline(pt col size)
        (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 420 col) (cons 90 2) (cons 10 pt) (cons 10 (polar pt 0 size))(cons 43 size)))
        )
(defun mkFrame(p1 p2 p3 p4 col size / lst pt)
        (setq lst(list p1 p2 p3 p4))
        (entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 420 col)(cons 90 (length lst))(cons 70 1)(cons 43 size))
                                               (mapcar '(lambda (pt)(cons 10 pt)) lst ))
                                       )
        )
       

效果:




历史版本
2022-05-20更新附件,会有闪现


测试代码
;;例子简单的生成黑白色二维码,可以根据需求。
;;本质上调用就是 exe路径 空格 字符串
;;字符串参数换行可以使用\r\n 符合windows回车换行标准
;;字符串参数建议使用转义包裹 \" ,防止参数中有空格导致参数截断
;;路径建议使用转义包裹 \" ,防止路径中有空格导致参数截断


;;注 源码中原来的链接地址在论坛代码高亮中会被转义,去掉了链接地址



(defun c:tt(/ wscript stdout wsreturn outstr pt n k lst ptbase)
(setq WScript (vlax-get-or-create-object "WScript.Shell"))
(setq WSreturn (vlax-invoke WScript 'exec "\"D:\\QRencodeForLisp.exe\" \"明经通道\r\ncode by edata\r\n\""))
(setq stdout (vlax-get WSreturn 'StdOut))
(setq outstr (vlax-invoke stdout 'Readall))
(setq lst(read outstr))
(if lst
    (progn
      (setq ptbase '(0 0))
      (foreach n lst
      (setq pt ptbase)
      (foreach k n         
          (if (= k 1) (mkpline pt 0) (mkpline pt 16777215))
          (setq pt(polar pt 0 1))
          )      
      (setq ptbase(polar ptbase (* pi 1.5) 1))
      )
      )
    )
(princ)
)
(defun mkpline(pt col)
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 420 col) (cons 90 2) (cons 10 pt) (cons 10 (polar pt 0 1))(cons 43 1)))
)

生成结果:


识别结果





补充
命令行手工操作生成二维码列表值txt文件,
QRencodeForLisp.exe "建设单位:明经通道\r\n设计单位:edata" >test.txt











cq4920 发表于 2022-11-9 02:07:32

自贡黄明儒 发表于 2022-5-20 11:03
等你发个应用示例,我等好照虎画猫。

(defun c:rrt (/ xlien util str strlst )
        (vl-load-com)
        (setq str (cdr (assoc 1 (entget (car(entsel"点击文本"))))))
        (setq WScript (vlax-get-or-create-object "WScript.Shell"))
(setq WSreturn (vlax-invoke WScript 'exec (strcat "\"QRencodeForLisp.exe\" \"" str "\"")))
(setq stdout (vlax-get WSreturn 'StdOut))
(setq outstr (vlax-invoke stdout 'Readall))
    (setq strlst (read outstr))
(setq x (length strlst))
(setqlw 1 ll lw pt (getpoint"指定插入点"))
(repeat x
   (setq xlist (car strlst))
       (setq n x)
                (repeat x
                        (setq ptn (polar pt 0 (* lw n)))
                        (setq n (1- n))
                        (setq ptx (rtos (nth n xlist) 2 0 ))
                (if (= ptx "1") (Mc:pl1-1fk ptn lw ll))
        )
        (setq pt (polar pt (* pi 1.5) lw))
        (setq strlst (vl-remove (car strlst) strlst))
)
(redraw)
)



;;(Mc:pl1-1fk pt1 lw ll) 多义线起点 宽度 长度
(defun Mc:pl1-1fk (pt lw ll / pta)
(setq pta (polar pt 0 ll))
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 43LW)(cons 90 2) (cons 10 pt) (cons 10 pta)))
        )

vitalgg 发表于 2022-5-21 23:41:58

edata 发表于 2022-5-21 21:32
更新了附件,你试试。。
                                                                           ...

完美。

https://atlisp.cn/stable/qrencode/readme.mp4

qrencode 源代码见:
https://gitee.com/atlisp/atlisp-packages/blob/main/qrencode/qrencode.lsp

edata 发表于 2022-5-21 21:32:00

vitalgg 发表于 2022-5-20 22:14
https://atlisp.cn/package-info/qrencode-stable.html

屏幕会闪一下。


更新了附件,你试试。。
                                                                                    





guosheyang 发表于 2022-5-20 07:49:17

感谢长老共享资料!

guosheyang 发表于 2022-5-20 08:14:23

本帖最后由 guosheyang 于 2022-5-20 08:16 编辑

长老 请问这个具体要咋操作呢QRencodeForLisp.exe 已放在D盘根目录下了。 这句好像运行出错   我用的是win11家庭版   CAD2017       (setq WSreturn (vlax-invoke WScript 'exec "\"D:\\QRencodeForLisp.exe\" \"明经通道\r\n<a href="http://bbs.mjtd.com" target="_blank">http://bbs.mjtd.com</a>\r\ncode by edata\r\n\""))   谢谢!

guosheyang 发表于 2022-5-20 08:42:10

我运行后   QQ 自动生成了一个智能备份文件夹 qqpcmgr_docpro好像是防止勒索病毒加密的   

自贡黄明儒 发表于 2022-5-20 09:23:12

E大,现在是二维码的天下,什么都要扫码。我有过问题,你这程序每次用“明经通道”生成的二维是否相同?假如我的图纸上,用自己的名字,而不是“明经通道”,那么这个二维码怎么同我自己联系起来?

vectra 发表于 2022-5-20 09:33:52

自贡黄明儒 发表于 2022-5-20 09:23
E大,现在是二维码的天下,什么都要扫码。我有过问题,你这程序每次用“明经通道”生成的二维是否相同?假 ...

https://www.zhihu.com/question/65253283

这里有文章教大家用钛合金眼人工解码;P

自贡黄明儒 发表于 2022-5-20 09:39:45

vectra 发表于 2022-5-20 09:33
https://www.zhihu.com/question/65253283

这里有文章教大家用钛合金眼人工解码
可否用于图纸签名?

edata 发表于 2022-5-20 10:39:10

自贡黄明儒 发表于 2022-5-20 09:39
可否用于图纸签名?

一般图纸上用来存储各类信息的,具体运用还要看行业需求,比如有的人用来存储项目信息,电子图档链接。

自贡黄明儒 发表于 2022-5-20 11:03:24

edata 发表于 2022-5-20 10:39
一般图纸上用来存储各类信息的,具体运用还要看行业需求,比如有的人用来存储项目信息,电子图档链接。

等你发个应用示例,我等好照虎画猫。

edata 发表于 2022-5-20 11:12:37

guosheyang 发表于 2022-5-20 08:14
长老 请问这个具体要咋操作呢QRencodeForLisp.exe 已放在D盘根目录下了。 这句好像运行出错   我用的是wi ...

lisp源代码中的链接在论坛的代码高亮中会出现了异常,刚刚更新了帖子中的lisp源码,去掉了链接地址。
页: [1] 2 3 4 5
查看完整版本: 也谈Lisp生成二维码之调用命令行exe版