乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 15|回复: 13

[编程交流] 带提示帮助的Lisp

[复制链接]

35

主题

140

帖子

108

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
177
发表于 2022-7-5 18:41:28 | 显示全部楼层 |阅读模式
我试图创建一个简单的lisp,它将显示一个弹出菜单,用户将选择一个绘图大小。
 
我有流行菜单。我只是不知道如何调用选择,无论我在谷歌上搜索什么,我都找不到任何东西。
 
有人能给我指一下正确的方向吗?
 
  1. (defun c:test ()
  2. (initget 1 "11x17 PDF 22x34")
  3. (setq psize (getkword (strcat "\nSelect Plot [11x17/PDF/22x34]:"))))
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:48:38 | 显示全部楼层
RLXls。LSP
 
在该lisp中,您可以从xls中进行选择,然后将其粘贴到autocad中,您将发现一个名为RLXLs\u-Kul的函数。此函数将列表作为参数,并允许您选择其中一项。我不知道你的技能水平,但我希望其中的一些代码会对你有所帮助。
 
顺便说一句,kul是荷兰语,意思是“kies uit lijst”,可以翻译成“choose from list”,别忘了dcl部分。。。
 
gr.Rlx
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:55:19 | 显示全部楼层
另一个来自Alan JT,他启发了我,lst是传递给defun的列表(第1项第2项第3项)
 
  1.   ;; List Select Dialog (Temp DCL list box selection, based on provided list)
  2. ;; title - list box title
  3. ;; label - label for list box
  4. ;; height - height of box
  5. ;; width - width of box
  6. ;; multi - selection method ["true": multiple, "false": single]
  7. ;; lst - list of strings to place in list box
  8. ;; Alan J. Thompson, 09.23.08 / 05.17.10 (rewrite)
  9. (defun AT:ListSelect (title label height width multi lst / fn fo d item f)
  10. (setq fo (open (setq fn (vl-filename-mktemp "" "" ".dcl")) "w"))
  11. (foreach x (list (strcat "list_select : dialog { label = "" title ""; spacer;")
  12.                   (strcat ": list_box { label = "" label "";" "key = "lst";")
  13.                   (strcat "allow_accept = true; height = " (vl-princ-to-string height) ";")
  14.                   (strcat "width = " (vl-princ-to-string width) ";")
  15.                   (strcat "multiple_select = " multi "; } spacer; ok_cancel; }")
  16.             )
  17.    (write-line x fo)
  18. )
  19. (close fo)
  20. (new_dialog "list_select" (setq d (load_dialog fn)))
  21. (start_list "lst")
  22. (mapcar (function add_list) lst)
  23. (end_list)
  24. (setq item (set_tile "lst" "0"))
  25. (action_tile "lst" "(setq item $value)")
  26. (setq f (start_dialog))
  27. (unload_dialog d)
  28. (vl-file-delete fn)
  29. (if (= f 1)
  30.    ((lambda (s / i s l)
  31.       (while (setq i (vl-string-search " " s))
  32.         (setq l (cons (nth (atoi (substr s 1 i)) lst) l))
  33.         (setq s (substr s (+ 2 i)))
  34.       )
  35.       (reverse (cons (nth (atoi s) lst) l))
  36.     )
  37.      item
  38.    )
  39. )
  40. )
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:56:06 | 显示全部楼层
另一个重要来源是:http://web2.airmail.net/terrycad/Tutorials/MyDialogs.htm
 
 
在页面的一半左右,函数“my multilist”
 
 
玩得高兴
回复

使用道具 举报

35

主题

140

帖子

108

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
177
发表于 2022-7-5 19:02:50 | 显示全部楼层
我想我可能被误解了。
 
这不使用DCL。
 
激活命令时,光标处会显示弹出菜单
 
194128i2zm52mw6zko07r9.jpg
 
正如你所见,我有菜单显示,它设置了变量。
 
如果选择pdf,我希望它运行以下操作:
 
  1. (defun PDF(/)
  2. (if (setq filename (getfiled "Specify Save Location" "" "pdf" 1))
  3. (progn
  4. (command "tilemode" "0")
  5. (command "-plot" "y" "" "Dwg To PDF.pc3" "ANSI expand D (34.00 x 22.00 Inches)" "I"
  6. "L" "N" "E" "1:1" "C" "Y" "CMS_d_black.ctb" "Y" "N" "N" "N" filename "N" "Y")
  7. )
  8. )
  9. (princ)
  10. )

 
我的问题是我不知道谁该用cond。
 
像这样的??
 
  1. (if psize
  2. (cond
  3. ((= psize "11x17)
  4. (defun PDF ()
  5. blah
  6. blah
  7. blah
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 19:08:49 | 显示全部楼层
您的代码是:
 
 
  1. (cond
  2. ((= psize "11x17") (plot11x17))
  3. ((= psize "PDF")(plotPdF))
  4. ((= psize "22x34")(plot22x34))
  5. (t (princ "\nPlot cancelled"))
  6. )

 
 
gr.Rlx
回复

使用道具 举报

35

主题

140

帖子

108

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
177
发表于 2022-7-5 19:13:15 | 显示全部楼层
谢谢你rlx!可以看出,我对编写lisp还是相当陌生的。
 
我以前从未使用过cond,所以我试图理解它的概念,它有点令人困惑。特别是当我不知道去哪里找信息的时候!
 
到目前为止我有这个
  1. (defun c:test ()
  2. (initget 1 "11x17 PDF 22x34"); [1 = no enter allowed]
  3. (setq psize (getkword (strcat "\nSelect Plot [11x17/PDF/22x34]:"))))
  4. (cond
  5. ((= psize "11x17") (11x17))
  6. ((= psize "PDF")(PDF))
  7. ((= psize "22x34")(22x34))
  8. (t (princ "\nPlot cancelled"))
  9. )

 
现在,我如何合并pdf代码:
  1. (defun PDF(/)
  2. (if (setq filename (getfiled "Specify Save Location" "" "pdf" 1))
  3. (progn
  4. (command "tilemode" "0")
  5. (command "-plot" "y" "" "Dwg To PDF.pc3" "ANSI expand D (34.00 x 22.00 Inches)" "I"
  6. "L" "N" "E" "1:1" "C" "Y" "CMS_d_black.ctb" "Y" "N" "N" "N" filename "N" "Y")
  7. )
  8. )
  9. (princ)
  10. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:14:41 | 显示全部楼层
大致如下:
  1. (defun c:test ( / psize )
  2.    (initget "11x17 PDF 22x34")
  3.    (setq psize (getkword "\nSelect Plot [11x17/PDF/22x34] <PDF>: "))
  4.    (cond
  5.        (   (= psize "11x17") (11x17))
  6.        (   (= psize "22x34") (22x34))
  7.        (   (pdf)   )
  8.    )
  9.    (princ)
  10. )
  11. (defun pdf ( / fnm )
  12.    (if (setq fnm (getfiled "Specify Save Location" "" "pdf" 1))
  13.        (progn
  14.            (setvar 'tilemode 0)
  15.            (command "-plot" "y" "" "Dwg To PDF.pc3" "ANSI expand D (34.00 x 22.00 Inches)" "I" "L" "N" "E" "1:1" "C" "Y" "CMS_d_black.ctb" "Y" "N" "N" "N" fnm "N" "Y")
  16.        )
  17.    )
  18. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:18:32 | 显示全部楼层
另一种方法是在P下面寻找情节
 
194129c6nzomi8n66mf2n8.jpg
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 19:26:40 | 显示全部楼层
 
别担心,我20年前就开始了,像李这样的人仍然让我觉得我是个初学者。但这可能是因为我唯一一个仍在运作的脑细胞开始显示出早衰的迹象;-)(这就是婚姻对男人的影响,可怕的哈哈)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:37 , Processed in 0.565127 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表