乐筑天下

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

[编程交流] 编辑框中的过滤器选项

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:36:13 | 显示全部楼层 |阅读模式
嘿,我想知道是否有人可以帮我修改我下载的图层创建程序。这是“t.spangler”的一个很棒的节目(完全归功于他),但我想再加一点,我不知道怎么加。我想创建一个过滤器,所以如果我开始在退出框中输入“plas”,我只想看到一些层,例如石膏板墙、石膏板标高、石膏板屋顶(或者任何其他层描述中都有字母plas。有意义吗?希望如此!哈哈
基本上我添加了一行。。。
 
初始焦点=“textval”;
}
:boxed_列{
:编辑框{
key=“textval”;
label=“快速选择-->”;
编辑宽度=30;
值=“”;
}
 
这在dcl文件中起作用-当我在CAD中运行程序时,会出现编辑框,现在我只需要知道lsp文件中的编码来进行过滤。
 
提前感谢您的帮助和时间。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:55:23 | 显示全部楼层
您需要在编辑框的action\u tile语句中包含一个表达式,该语句将仅用与筛选器匹配的项目重新填充列表框。
 
以下是此类功能的示例:
 
  1. (defun c:test ( / d l )
  2. (while (setq d (tblnext "LAYER" (null d)))
  3.    (setq l (cons (cdr (assoc 2 d)) l))
  4. )
  5. (_GetLayerSelection (acad_strlsort l))
  6. )
  7. (defun _GetLayerSelection ( layerlist / _PopulateListBox dch file layers return tmp )
  8. ;; Example by Lee Mac 2011  -  www.lee-mac.com
  9. (defun _PopulateListBox ( key alist )
  10.    (start_list key)
  11.    (mapcar 'add_list alist)
  12.    (end_list)
  13.    alist
  14. )
  15. (cond
  16.    (
  17.      (not
  18.        (and
  19.          (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))
  20.          (write-line
  21.            (strcat
  22.              "layers : dialog   { label = "Select Layer"; spacer;"
  23.              "  : list_box { key = "layers"; width = 50; fixed_width = true; height = 15; fixed_height = true; allow_accept = true; }"
  24.              "  : edit_box { key = "filter"; width = 50; fixed_width = true; value = "*"; label = "Filter:"; }"
  25.              "  spacer; ok_cancel;"
  26.              "}"
  27.            )
  28.            file
  29.          )
  30.          (not (close file))
  31.          (< 0 (setq dch (load_dialog tmp)))
  32.          (new_dialog "layers" dch)
  33.        )
  34.      )
  35.    )
  36.    (
  37.      t
  38.      (_PopulateListBox "layers" (setq layers layerlist))
  39.    
  40.      (set_tile "layers" (setq return "0"))
  41.      (set_tile "filter" "*")
  42.      (action_tile "layers" "(setq return $value)")
  43.      (action_tile "filter"
  44.        (vl-prin1-to-string
  45.          (quote
  46.            (progn
  47.              (setq filter (strcat "*" (strcase $value) "*"))
  48.             
  49.              (_PopulateListBox "layers"
  50.                (setq layers
  51.                  (vl-remove-if-not '(lambda ( layer ) (wcmatch (strcase layer) filter)) layerlist)
  52.                )
  53.              )
  54.             
  55.              (set_tile "layers" (setq return (cond ( (< (atoi return) (length layers)) return ) ( "0" ))))
  56.            )
  57.          )
  58.        )
  59.      )                  
  60.      (setq return (if (= 1 (start_dialog)) (nth (atoi return) layers)))
  61.    )
  62. )
  63. (if (< 0 dch) (unload_dialog dch))
  64. (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
  65. return
  66. )
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:05:51 | 显示全部楼层
谢谢李麦克!
事实上,我在一周前用过你的网站上的教程!(这表明我对整个lisp编程是多么的新手,我在几个不同的网站上完成了教程,但我知道我离编写自己的程序还有很长的路要走-给了我一个很好的开始tho!)
 
我在中尝试了您的代码示例。lsp文件,但没有太大的成功。
我真的很想学习tho,但我认为这段代码对我来说可能还是有点太高级了。
你能告诉我如何在下面的lsp文件中应用这个代码示例吗?
LAYER_CREATOR。lsp
回复

使用道具 举报

11

主题

31

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 08:18:30 | 显示全部楼层
嗨,李,
我设计了一个对话框,其功能与图层列表框示例相同(其中有一个过滤器字符串的编辑框)。我希望这个过滤器字符串像一个。net窗体,其中有一个TextChanged事件,可用于根据筛选器字符串实时更新列表。我尝试了几个选项(while循环、if语句等),但都没有成功。能否请您确认这是否可行,并提供一个代码片段来指导我正确的方向。
提前感谢,
科林·霍洛韦
Sedgman有限公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:29:57 | 显示全部楼层
嗨,科林,
 
遗憾的是,使用标准DCL无法实现您描述的功能,因为DCL中的编辑框磁贴仅注册两个事件(回调原因):1=用户按下enter键/2=磁贴失去焦点。
 
下面是一个示例来演示这些事件:
 
DCL代码(另存为test.DCL):
LISP代码:
[code](定义c:测试(/id)(条件((
回复

使用道具 举报

11

主题

31

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 08:37:10 | 显示全部楼层
嗨,李,
感谢您的快速回复。我已经做了进一步的调查,并决定使用OpenDCLhttp://www.opendcl.com/来解决这个问题。
科林·霍洛韦
Sedgman有限公司
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:13 , Processed in 0.904797 second(s), 64 queries .

© 2020-2025 乐筑天下

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