明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4941|回复: 40

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

[复制链接]
发表于 2022-5-19 23:46 | 显示全部楼层 |阅读模式
本帖最后由 edata 于 2022-5-21 22:31 编辑

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

代码更新,添加边框,指定左上角点,单个方块大小
  1. (defun c:tt(/ wscript stdout wsreturn outstr pt n k lst ptbase h ptleftdown ptleftup ptrightdown ptrightup size w)
  2.   (setq WScript (vlax-get-or-create-object "WScript.Shell"))
  3.   (setq WSreturn (vlax-invoke WScript 'exec "\"D:\\QRencodeForLisp.exe\" \"明经通道\r\ncode by edata\r\n\""))
  4.   (setq stdout (vlax-get WSreturn 'StdOut))
  5.   (setq outstr (vlax-invoke stdout 'Readall))
  6.         (setq lst(read outstr))
  7.         (if (and lst (setq ptbase(getpoint "\n左上角点:")))
  8.                 (progn
  9.                         ;(setq ptbase '(0 0))
  10.                         (setq h(length lst) w(length (car lst)))
  11.                         ;;方块的大小
  12.                         (setq size 100.0)
  13.                         (setq ptLeftUp (polar ptbase (* pi 1.75) (* (sqrt 2.0) (* size 0.5))))
  14.                         (setq ptRightUp(polar ptLeftUp 0 (+ (* w size) size )))
  15.                         (setq ptLeftDown(polar ptLeftUp (* pi 1.5) (+ (* w size) size )))
  16.                         (setq ptRightDown(polar ptRightUp  (* pi 1.5) (+ (* w size) size )))
  17.                         (mkFrame ptLeftUp ptLeftDown ptRightDown ptRightUp 16777215 size)
  18.                         (setq ptbase(polar (polar ptLeftUp 0 (* 0.5 size)) (* pi 1.5) size))
  19.                         (foreach n lst
  20.                                 (setq pt ptbase)
  21.                                 (foreach k n                                       
  22.                                         (if (= k 1) (mkpline pt 0 size) (mkpline pt 16777215 size))
  23.                                         (setq pt(polar pt 0 size))
  24.                                         )                               
  25.                                 (setq ptbase(polar ptbase (* pi 1.5) size))
  26.                                 )                       
  27.                         )
  28.                 )
  29.         (princ)
  30.   )
  31. (defun mkpline(pt col size)
  32.         (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)))
  33.         )
  34. (defun mkFrame(p1 p2 p3 p4 col size / lst pt)
  35.         (setq lst(list p1 p2 p3 p4))
  36.         (entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 420 col)(cons 90 (length lst))(cons 70 1)(cons 43 size))
  37.                                                  (mapcar '(lambda (pt)(cons 10 pt)) lst ))
  38.                                          )
  39.         )
  40.        
  41.   

效果:




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


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


;;注 源码中原来的链接地址在论坛代码高亮中会被转义,去掉了链接地址
  1. (defun c:tt(/ wscript stdout wsreturn outstr pt n k lst ptbase)
  2.   (setq WScript (vlax-get-or-create-object "WScript.Shell"))
  3.   (setq WSreturn (vlax-invoke WScript 'exec "\"D:\\QRencodeForLisp.exe\" \"明经通道\r\ncode by edata\r\n\""))
  4.   (setq stdout (vlax-get WSreturn 'StdOut))
  5.   (setq outstr (vlax-invoke stdout 'Readall))
  6.   (setq lst(read outstr))
  7.   (if lst
  8.     (progn
  9.       (setq ptbase '(0 0))
  10.       (foreach n lst
  11.         (setq pt ptbase)
  12.         (foreach k n         
  13.           (if (= k 1) (mkpline pt 0) (mkpline pt 16777215))
  14.           (setq pt(polar pt 0 1))
  15.           )        
  16.         (setq ptbase(polar ptbase (* pi 1.5) 1))
  17.         )
  18.       )
  19.     )
  20.   (princ)
  21.   )
  22. (defun mkpline(pt col)
  23.   (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)))
  24.   )

生成结果:


识别结果





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












本帖子中包含更多资源

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

x

评分

参与人数 5明经币 +7 金钱 +100 收起 理由
ludaweb + 1 很给力!
lucas_3333 + 1 + 50 好久没来,密码都差点忘记了,想念E大
菜卷鱼 + 1 + 50 一键三连,你币有了
1028695446 + 1 很给力!
xyp1964 + 3 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-11-9 02:07 | 显示全部楼层
自贡黄明儒 发表于 2022-5-20 11:03
等你发个应用示例,我等好照虎画猫。
  1. (defun c:rrt (/ x  lien util str strlst )
  2.         (vl-load-com)
  3.         (setq str (cdr (assoc 1 (entget (car(entsel"点击文本"))))))
  4.         (setq WScript (vlax-get-or-create-object "WScript.Shell"))
  5.   (setq WSreturn (vlax-invoke WScript 'exec (strcat ""QRencodeForLisp.exe" "" str """)))
  6.   (setq stdout (vlax-get WSreturn 'StdOut))
  7.   (setq outstr (vlax-invoke stdout 'Readall))
  8.     (setq strlst (read outstr))
  9. (setq x (length strlst))
  10. (setq  lw 1 ll lw pt (getpoint"指定插入点"))
  11. (repeat x  
  12.    (setq xlist (car strlst))
  13.          (setq n x)
  14.                 (repeat x  
  15.                         (setq ptn (polar pt 0 (* lw n)))
  16.                         (setq n (1- n))
  17.                         (setq ptx (rtos (nth n xlist) 2 0 ))
  18.                 (if (= ptx "1") (Mc:pl1-1fk ptn lw ll))
  19.         )
  20.         (setq pt (polar pt (* pi 1.5) lw))
  21.         (setq strlst (vl-remove (car strlst) strlst))
  22. )
  23.   (redraw)
  24. )



  25. ;;(Mc:pl1-1fk pt1 lw ll) 多义线起点 宽度 长度
  26. (defun Mc:pl1-1fk (pt lw ll / pta)
  27. (setq pta (polar pt 0 ll))
  28. (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 43  LW)(cons 90 2) (cons 10 pt) (cons 10 pta)))
  29.         )
发表于 2022-5-21 23:41 | 显示全部楼层
edata 发表于 2022-5-21 21:32
更新了附件,你试试。。
                                                                           ...

完美。



qrencode 源代码见:
https://gitee.com/atlisp/atlisp- ... encode/qrencode.lsp

 楼主| 发表于 2022-5-21 21:32 | 显示全部楼层
vitalgg 发表于 2022-5-20 22:14
https://atlisp.cn/package-info/qrencode-stable.html

屏幕会闪一下。

更新了附件,你试试。。
                                                                                    





发表于 2022-5-20 07:49 | 显示全部楼层
感谢长老共享资料!
发表于 2022-5-20 08:14 | 显示全部楼层
本帖最后由 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\""))   谢谢!
发表于 2022-5-20 08:42 | 显示全部楼层
我运行  后   QQ 自动生成了一个智能备份文件夹 qqpcmgr_docpro  好像是防止勒索病毒加密的   
发表于 2022-5-20 09:23 | 显示全部楼层
E大,现在是二维码的天下,什么都要扫码。我有过问题,你这程序每次用“明经通道”生成的二维是否相同?假如我的图纸上,用自己的名字,而不是“明经通道”,那么这个二维码怎么同我自己联系起来?
发表于 2022-5-20 09:33 | 显示全部楼层
自贡黄明儒 发表于 2022-5-20 09:23
E大,现在是二维码的天下,什么都要扫码。我有过问题,你这程序每次用“明经通道”生成的二维是否相同?假 ...

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

这里有文章教大家用钛合金眼人工解码
发表于 2022-5-20 09:39 | 显示全部楼层
vectra 发表于 2022-5-20 09:33
https://www.zhihu.com/question/65253283

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

可否用于图纸签名?
 楼主| 发表于 2022-5-20 10:39 来自手机 | 显示全部楼层
自贡黄明儒 发表于 2022-5-20 09:39
可否用于图纸签名?

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

等你发个应用示例,我等好照虎画猫。
 楼主| 发表于 2022-5-20 11:12 | 显示全部楼层
guosheyang 发表于 2022-5-20 08:14
长老 请问这个具体要咋操作呢  QRencodeForLisp.exe 已放在D盘根目录下了。 这句好像运行出错   我用的是wi ...

lisp源代码中的链接在论坛的代码高亮中会出现了异常,刚刚更新了帖子中的lisp源码,去掉了链接地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 19:18 , Processed in 2.876591 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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