编辑框中的过滤器选项
嘿,我想知道是否有人可以帮我修改我下载的图层创建程序。这是“t.spangler”的一个很棒的节目(完全归功于他),但我想再加一点,我不知道怎么加。我想创建一个过滤器,所以如果我开始在退出框中输入“plas”,我只想看到一些层,例如石膏板墙、石膏板标高、石膏板屋顶(或者任何其他层描述中都有字母plas。有意义吗?希望如此!哈哈基本上我添加了一行。。。
初始焦点=“textval”;
}
:boxed_列{
:编辑框{
key=“textval”;
label=“快速选择-->”;
编辑宽度=30;
值=“”;
}
这在dcl文件中起作用-当我在CAD中运行程序时,会出现编辑框,现在我只需要知道lsp文件中的编码来进行过滤。
提前感谢您的帮助和时间。 您需要在编辑框的action\u tile语句中包含一个表达式,该语句将仅用与筛选器匹配的项目重新填充列表框。
以下是此类功能的示例:
(defun c:test ( / d l )
(while (setq d (tblnext "LAYER" (null d)))
(setq l (cons (cdr (assoc 2 d)) l))
)
(_GetLayerSelection (acad_strlsort l))
)
(defun _GetLayerSelection ( layerlist / _PopulateListBox dch file layers return tmp )
;; Example by Lee Mac 2011-www.lee-mac.com
(defun _PopulateListBox ( key alist )
(start_list key)
(mapcar 'add_list alist)
(end_list)
alist
)
(cond
(
(not
(and
(setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))
(write-line
(strcat
"layers : dialog { label = \"Select Layer\"; spacer;"
": list_box { key = \"layers\"; width = 50; fixed_width = true; height = 15; fixed_height = true; allow_accept = true; }"
": edit_box { key = \"filter\"; width = 50; fixed_width = true; value = \"*\"; label = \"Filter:\"; }"
"spacer; ok_cancel;"
"}"
)
file
)
(not (close file))
(< 0 (setq dch (load_dialog tmp)))
(new_dialog "layers" dch)
)
)
)
(
t
(_PopulateListBox "layers" (setq layers layerlist))
(set_tile "layers" (setq return "0"))
(set_tile "filter" "*")
(action_tile "layers" "(setq return $value)")
(action_tile "filter"
(vl-prin1-to-string
(quote
(progn
(setq filter (strcat "*" (strcase $value) "*"))
(_PopulateListBox "layers"
(setq layers
(vl-remove-if-not '(lambda ( layer ) (wcmatch (strcase layer) filter)) layerlist)
)
)
(set_tile "layers" (setq return (cond ( (< (atoi return) (length layers)) return ) ( "0" ))))
)
)
)
)
(setq return (if (= 1 (start_dialog)) (nth (atoi return) layers)))
)
)
(if (< 0 dch) (unload_dialog dch))
(if (setq tmp (findfile tmp)) (vl-file-delete tmp))
return
) 谢谢李麦克!
事实上,我在一周前用过你的网站上的教程!(这表明我对整个lisp编程是多么的新手,我在几个不同的网站上完成了教程,但我知道我离编写自己的程序还有很长的路要走-给了我一个很好的开始tho!)
我在中尝试了您的代码示例。lsp文件,但没有太大的成功。
我真的很想学习tho,但我认为这段代码对我来说可能还是有点太高级了。
你能告诉我如何在下面的lsp文件中应用这个代码示例吗?
LAYER_CREATOR。lsp 嗨,李,
我设计了一个对话框,其功能与图层列表框示例相同(其中有一个过滤器字符串的编辑框)。我希望这个过滤器字符串像一个。net窗体,其中有一个TextChanged事件,可用于根据筛选器字符串实时更新列表。我尝试了几个选项(while循环、if语句等),但都没有成功。能否请您确认这是否可行,并提供一个代码片段来指导我正确的方向。
提前感谢,
科林·霍洛韦
Sedgman有限公司 嗨,科林,
遗憾的是,使用标准DCL无法实现您描述的功能,因为DCL中的编辑框磁贴仅注册两个事件(回调原因):1=用户按下enter键/2=磁贴失去焦点。
下面是一个示例来演示这些事件:
DCL代码(另存为test.DCL):
LISP代码:
(定义c:测试(/id)(条件(( 嗨,李,
感谢您的快速回复。我已经做了进一步的调查,并决定使用OpenDCLhttp://www.opendcl.com/来解决这个问题。
科林·霍洛韦
Sedgman有限公司
页:
[1]