乐筑天下

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

[编程交流] 我的DCL的Lisp

[复制链接]

78

主题

207

帖子

129

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
395
发表于 2022-7-6 12:03:24 | 显示全部楼层 |阅读模式
大家好,我最近学习了一些DCL。我买了一些书,在网上读了一些东西。我使对话框看起来很容易,我的大问题是写LISP使其工作。
 
我的对话框附在下面。我想发生的是,当我在第一个popup_列表框中选择一个项目时,第二个列表将可用。该列表将取决于第一个popup\u列表框的选择。同样,第三个popup_列表框中将显示一个列表。该列表将取决于在第二个弹出框中选择的内容。
 
最后,当我按下插入按钮时,它将在第三个popup\u列表中插入该项目
 
这可能吗?我还附上了我的DCL和LSP文件。
130331zp92sgs49t9799s7.jpg
检验。DCL
检验。LSP
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 12:15:11 | 显示全部楼层
这可能有助于您解决第一个问题:
  1. ;routine to fill values from a list to a pop-up list tile
  2. (defun FillPopUpList( theTile theList / )
  3. (start_list theTile)                                                    ;start pop-up tile fill operation
  4. (mapcar 'add_list theList)                                             ;load items from list to pop-up tile
  5. (end_list)
  6. )
  7. ;routine to fill a pop-up list tile based on selection on another
  8. (defun ActionOnMy1stList( / theUserSelection )
  9. (setq theUserSelection (get_tile "My1stList"))                          ;read which entry user selected
  10. ;fill second pop-up list with a content related to current selection in first one
  11. (cond
  12. ((= theUserSelection "1") (FillPopUpList "My2ndList" '("a" "b" "c")))
  13. ((= theUserSelection "2") (FillPopUpList "My2ndList" '("A" "B" "C")))
  14. ((= theUserSelection "3") (FillPopUpList "My2ndList" '("X" "Y" "Z")))
  15. )
  16. )
  17. (FillPopUpList "My1stList" '("1" "2" "3"))                              ;prepare first pop-up list
  18.                        
  19. (action_tile "My1stList" "(ActionOnMy1stList)")                         ;define associated action on pop-up tile

 
请记住,互动程序的每个动作都应作为字符串提供。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 12:18:16 | 显示全部楼层
第二个问题:要从第三个弹出互动程序中获得选择,请注意互动程序将以字符串形式返回所选项目的索引:
 
  1. (setq The3rdSelection (nth (atoi (get_tile "My3rdList")) the3rdListContent))

 
其中第三个listcontent变量存储当前加载到互动程序中的列表。
回复

使用道具 举报

78

主题

207

帖子

129

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
395
发表于 2022-7-6 12:24:52 | 显示全部楼层
哇,你是个聪明人。我真的很感激。现在给我时间试着理解它。再次感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:29:59 | 显示全部楼层
Msasu-不需要get_tile,只需使用$value:wink:
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:38:04 | 显示全部楼层
另一种方式:
 
  1. (defun mk_lst (key lst)
  2. (start_list key)
  3. (mapcar 'add_list lst)
  4. (end_list))
  5. (defun get_lst (key code)
  6. (cond (  (eq key "lvl1")
  7.           (cond (  (eq code 0) '("A" "B" "C" "D"))
  8.                 (  (eq code 1) '("E" "F" "G" "H"))))
  9.        (  (eq key "lvl2")
  10.           (cond (  (eq code 0) '("I" "J" "K" "L"))
  11.                 (  (eq code 1) '("M" "N" "O" "P"))))))                  
  12. (action_tile "lvl1" (vl-prin1-to-string (quote (progn (mk_lst "lvl2" (get_lst "lvl1" $value))))))
  13. (action_tile "lvl2" (vl-prin1-to-string (quote (progn (mk_lst "lvl2" (get_lst "lvl2" $value))))))
回复

使用道具 举报

78

主题

207

帖子

129

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
395
发表于 2022-7-6 12:43:55 | 显示全部楼层
这看起来我走对了吗?我缩写了一些变量
 
到目前为止,我唯一的问题是,在选择第四个框后,如果我返回并更改框1中的选项,其他框将不会重置。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 12:49:14 | 显示全部楼层
列表已重置–唯一的问题是在此之后没有默认选择。为了在填充互动程序后选择的弹出列表中获取条目,需要使用所需条目的索引(作为字符串)调用set\u互动程序:
  1. (set_tile "lvl#" "0")

 
同样,当重新设置第二个列表时,最好清除第三个列表,因为第三个列表的内容已过时-只需调用start\u list/end\u list而不填充:
  1. (defun ActL1( / theUserSelection )    ;;;ActL1 is Action on List #1
  2. (setq US1 (get_tile "lvl1"))        ;;;read which entry user selected.  US1 is User Selection for pop_up lst #1
  3. ;;;fill second pop-up list with a content related to current selection in first one
  4. (cond
  5. ((= US1 "1") (FillPopUpList "lvl2" '("[select Part Type]" "2.1A" "2.1B" "2.1C")))   
  6. ((= US1 "2") (FillPopUpList "lvl2" '("[select Part Type]" "2.2A" "2.2B" "2.2C")))
  7. ((= US1 "3") (FillPopUpList "lvl2" '("[select Part Type]" "2.3A" "2.3B" "2.3C")))
  8. ((= US1 "4") (FillPopUplist "lvl2" '("[select Part Type]" "2.4A" "2.4B" "2.4c")))
  9. ((= US1 "5") (FillPopUplist "lvl2" '("[select Part type]" "2.5A" "2.5B" "2.5C")))
  10. )                ;;;close condition
  11. [color=red] (set_tile "lvl2" "0")[/color]
  12. [color=red] (foreach TempTile '("lvl3" "lvl4") (start_list TempTile) (end_list))[/color]
  13. )                ;;;close ActionOnMy1stList function
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 12:53:22 | 显示全部楼层
另一个建议是为done\u对话框操作使用参数–使用1表示确定(在您的案例中插入),0表示取消:
 
  1. 6

 
该值将存储在“DIASTAT”系统变量中;使用它来测试结束对话框并相应执行操作的方式:继续处理或退出例程。
回复

使用道具 举报

78

主题

207

帖子

129

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
395
发表于 2022-7-6 13:00:58 | 显示全部楼层
那么,msasu,你是在哪里学会Lisp程序的?书籍、课程还是试错?我的意思是,您使用的函数在AutoCAD帮助主题中甚至找不到。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:31 , Processed in 0.917530 second(s), 75 queries .

© 2020-2025 乐筑天下

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