乐筑天下

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

[编程交流] 使用vl目录文件进行po

[复制链接]

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 10:34:02 | 显示全部楼层 |阅读模式
我试图学习lisp编程的vl路径,但在使用“vl directory files”命令填充列表框时遇到了一个小障碍。我正在使用的示例程序运行良好,lisp文件中指定的文件夹的内容确实显示在列表框中,但列表中还有两个额外的条目,“。”和“.”我假设这与使用vl有关(见下图)。
 
113406vipgew9ermup1mlr.jpg
 
以下是我的lisp中的代码:
  1. (defun c:notes ()
  2. (setq folderList (vl-directory-files "L:\\Scripts\\Notes\" nil -1))
  3. (setq dcl_id (load_dialog "notes1.dcl"))
  4. (if (not (new_dialog "NOTES1" dcl_id))(exit))
  5. (start_list "folderlist" 3)
  6. (mapcar 'add_list folderList)
  7. (end_list)
  8. (action_tile "cancel" "(setq ddiag 1)(done_dialog)")
  9. (action_tile "accept" "(setq ddiag 2)(done_dialog)")
  10. (start_dialog)
  11. (if (= ddiag 1)
  12.    (princ "\n \n ...Notes Cancelled. \n ")
  13.    )
  14. (if (= ddiag 2)
  15.    (foreach a retList
  16.      (princ "\n")(princ a)
  17.      )
  18.    )
  19. (princ)
  20. )

 
 
有人知道删除“”的方法吗和“.”所以他们没有出现在列表中?据我所知,vl目录文件的唯一选项是1(仅显示文件)、0(同时显示文件夹和文件)和-1(仅显示文件夹)。
 
朗尼
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

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

铜币
362
发表于 2022-7-6 10:38:18 | 显示全部楼层
“.”是当前目录,“.”是向上的一个目录,或父目录。
如果不需要,只需将其从列表中删除即可。
 
  1. (vl-remove-if
  2. '(lambda (x) (or (eq x ".") (eq x "..")))
  3. (vl-directory-files "C:\\temp" nil -1)
  4. )
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 10:42:45 | 显示全部楼层
谢谢,效果很好!我刚才实际上在玩vl remove命令,但无法使其工作。我浏览了vl remove if和vl remove if的说明,但我对这些命令都没有经验,我想我应该先试试基本命令。
 
朗尼
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:46:29 | 显示全部楼层
嗨,朗尼,
 
也许这也会帮助你-注意我是如何构造函数的,以及使用start\u对话框返回缺少action\u tile语句的。
 
  1. (defun c:notes ( / folders dcl_id sel flag )
  2. (cond ( (not (setq folders (vl-remove "." (vl-remove ".." (vl-directory-files "L:\\Scripts\\Notes\" nil -1))))))
  3.        ( (<= (setq dcl_id (load_dialog "notes1.dcl")) 0)
  4.          (princ "\n** Unable to Locate DCL **")
  5.        )
  6.        ( (not (new_dialog "NOTES1" dcl_id))
  7.          (princ "\n** Unable to Load Dialog **")
  8.        )
  9.        (t
  10.          (start_list "folderlist")
  11.          (mapcar 'add_list folders)
  12.          (end_list)
  13.          (setq sel (set_tile "folderlist" "0"))
  14.         
  15.          (action_tile "folderlist" "(setq sel $value)")
  16.          (setq flag (start_dialog) dcl_id (unload_dialog dcl_id))
  17.          (if (= 1 flag)
  18.            (princ (strcat "\nUser Selected: " (nth (atoi sel) folders)))
  19.            (princ "\nCancelled")
  20.          )
  21.        )
  22. )
  23. (princ)
  24. )

 
在ACAD开发帮助中
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 10:52:12 | 显示全部楼层
所以我一直在研究代码,我想我知道你在做什么,但从编码的角度来看,当你试图让我跑马拉松时,我仍然在爬行,哈哈。
 
我的意图是从一个列表框例程开始,然后转到两个列表框例程,然后是一个三列表框程序。我有一些2列表程序的代码,但是第二个列表框的内容不会根据第一个列表框中选择的内容而改变,这也是我想要做的。
  1. Working with  Programmable Dialog Boxes > Managing Dialog  Boxes > Action  Expressions and Callbacks > Action Expressions

 
 
我采用了一个列表框的原则,并尝试将其应用于两个列表框,但第二个列表框从未填充,并且错误:错误参数类型:stringp nil”在选择第一个列表框中的任何项目后,AutoCAD会立即返回。
 
如何将这两个列表链接在一起,以便在第一个列表中选择某个内容会改变第二个列表中的内容?谢谢
 
朗尼
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:54:14 | 显示全部楼层
只是猜测一下,可能是说“显示第二个列表框”有问题,但它没有什么可显示的,所以在第一次打开dcl时,只需在其中输入一个空白条目“Pick box 1 first”,然后在框3和框4中输入一个if Pick box 1 change box 2,依此类推
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:02:04 | 显示全部楼层
嗨,朗尼,我在这里的某个地方贴了一个例子,完全符合你的要求,我会帮你找到的
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 11:05:55 | 显示全部楼层
实际上,你似乎在这里找到了:
http://www.cadtutor.net/forum/showthread.php?47747-列表框如何突出显示值/页面5
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:08:58 | 显示全部楼层
是的,我确实在那个页面上看过你的代码,但我恐怕对我来说都是希腊语,哈哈,这就是为什么我试图从头开始,构建一个单列表框例程,然后逐步实现一个3列表框程序。我很沮丧,试图让两个列表框的例行工作,所以我开始工作的一些其他想法,我有。我希望从代码中抽出一两天的时间,当我回到它的时候,它会给我一个全新的视角。
 
朗尼
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:11:11 | 显示全部楼层
你好
 
还有,你可以写
  1. (defun saveVars    ()
  2. (setq fStr (get_tile "folderlist"))
  3. (if (/= fStr "")
  4.    (progn
  5.      (setq fIndex (atoi fStr))
  6.      (setq fName (nth fIndex folderList))
  7.      )
  8.    
  9.    (progn
  10.      (setq fIndex -1)
  11.      (setq fName nil)
  12.    )
  13. )
  14. (setq nStr (get_tile "noteslist"))
  15. (if (/= nStr "")
  16.    (progn
  17.      (setq nIndex (atoi nStr))
  18.      (setq nName (nth nIndex notesList))
  19.      )
  20.    (progn
  21.      (setq nIndex -1)
  22.      (setq nName nil)
  23.      )
  24.    )
  25. )
  26. (defun c:notes ()
  27. (setq    folderList
  28.     (vl-remove-if
  29.       '(lambda (x) (or (eq x ".") (eq x "..")))
  30.       (vl-directory-files "L:\\Scripts\\Notes\" nil -1)
  31.     )
  32. )
  33. (cond
  34.    (= fName "Electrical")(setq folderpath "L:\\Scripts\\Notes\\Electrical\")
  35.    (= fName "General")(setq folderpath "L:\\Scripts\\Notes\\General\")
  36.    (= fName "Outfitting")(setq folderpath "L:\\Scripts\\Notes\\Outfitting\")
  37.    (= fName "Piping")(setq folderpath "L:\\Scripts\\Notes\\Piping\")
  38.    (= fName "Removal")(setq folderpath "L:\\Scripts\\Notes\\Removal\")
  39.    (= fName "Structure")(setq folderpath "L:\\Scripts\\Notes\\Structure\")
  40.    (= fName "Test")(setq folderpath "L:\\Scripts\\Notes\\Test\")
  41.    )
  42. (setq notesList
  43.     (vl-directory-files folderpath nil 1)
  44.    )
  45. (setq dcl_id (load_dialog "notes1.dcl"))
  46. (if (not (new_dialog "NOTES1" dcl_id))
  47.    (exit)
  48. )
  49. (start_list "folderlist" 3)
  50. (mapcar 'add_list folderList)
  51. (end_list)
  52. (start_list "notelist" 3)
  53. (mapcar 'add_list noteList)
  54. (end_list)
  55. (action_tile "cancel" "(setq ddiag 1)(done_dialog)")
  56. (action_tile "accept" "(setq ddiag 2)(saveVars)(done_dialog)")
  57. (action_tile "folderlist" "(saveVars)")
  58. (start_dialog)
  59. (if (= ddiag 1)
  60.    (princ "\n \n ...Notes Cancelled. \n ")
  61. )
  62. (if (= ddiag 2)
  63.    (foreach a retList
  64.      (princ "\n")
  65.      (princ a)
  66.    )
  67. )
  68. (princ)
  69. )

 
@+
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:17 , Processed in 0.423409 second(s), 75 queries .

© 2020-2025 乐筑天下

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