tazzzz 发表于 2022-7-5 23:44:26

根据t填充属性

大家好,
考虑具有3个属性的块:
A1名称
A2数量
A3说明
 
你能帮我用一个LISP,将提取和填写A3根据A1。
要从中提取A3的数据(所有块都包含A1和A3)可以在另一个Excel或Acad文件中(LISP更容易查找的文件)。
 
谢谢你的帮助。

BIGAL 发表于 2022-7-5 23:50:15

lisp查找最简单的方法是一个普通的txt文件,使用lisp插入块,这样可以在创建时添加属性。你可以有一个弹出的信息拨号等,所以没有拼写错误。还要研究工具选项板。我想我是说你想要一个多复杂的答案?
 
一个简单的方法是通过lisp输入名称,打开txt文件查找名称,然后检索A3,然后只需一个简单的插入命令。这大约有10行长。
拨号选择方法示例。

tazzzz 发表于 2022-7-5 23:51:26

嗨,比格尔
感谢您对本主题的兴趣。我真正想要的是像excel中的VLOOKUP一样工作的东西。我尝试了工具选项板,但没有按我希望的方式工作。如果你想一个。txt文件最好使用LISP,然后顺其自然。txt。由于我不精通LISP,也许您可以帮助我编写代码。
非常感谢。
P、 S.插入img。看起来真的很有趣。这是怎么一回事?

ymg3 发表于 2022-7-5 23:56:07

塔兹,
 
你有多少种不同的A1?
 
因为它可以用一个小的Lisp和一个适合你各种名字的assoc列表来完成。
 
ymg公司

tazzzz 发表于 2022-7-5 23:57:33

嗨,ymg3
A1属性在100到150之间。
非常感谢。

ymg3 发表于 2022-7-6 00:00:40

塔兹,
 
上传一张样图怎么样,也许我们能帮上忙。
 
ymg公司

BIGAL 发表于 2022-7-6 00:06:25

对于100-150个值,您可能需要输入第一个字母作为开始,然后可以用这些值填充对话列表。
 
我仍然会使用一个单独的txt文件YMG,因为添加额外文件比编写代码更容易。
 
Image是使用Image选项的部分菜单文件,现在首选的方法是使用选项板,这些选项板可以称为lisp程序。这些图像是由MSLIDE捕获当前屏幕视图创建的。
 
返回任务
首先,弹出块名称的dcl列表,选择块或幻灯片,如图像或调色板。可以使用另一个包含块名列表的TXT文件。
第二,通过键盘或未来版本a字母dcl输入第一个字符
第三,阅读txt文件,列出A3的弹出对话框并选择答案。
 
这里编码的一个重要部分是生成一系列小的defuns,这样就不需要重复代码(readfile1stchar)(dialoglist)(alphadcl)等。最大的优点是可以在其他例程中使用。
 
 
你能提供一个包含两个块的dwg以及一个包含A1、A3的txt文件吗?比如说10个值,part561234 part564567等等。
 
我是在幻灯片上长大的,所以使用起来很容易。下面是一个调用lisp的示例。
 

***MENUGROUP=BIGALS
***POP15
**CADLIB
            
            [->Stddwgs]
            $I=BIGALSTDS.TRENCH $I=*
            $I=BIGALSTDS.PIPES $I=*






***image
**TRENCH

^C^C(openblk "P:/ACADSTDS/CIVIL STANDARDS/CGG101")
^C^C(openblk "P:/ACADSTDS/CIVIL STANDARDS/CGG102")
**PIPES

^C^C(openblk "P:/ACADSTDS/CIVIL STANDARDS/CGG201")
^C^C(openblk "P:/ACADSTDS/CIVIL STANDARDS/CGG202")
^C^C(openblk "P:/ACADSTDS/CIVIL STANDARDS/CGG203")

tazzzz 发表于 2022-7-6 00:08:50

你好
我将上传一个dwg,其中包含一些具有属性的块,但我只能在周一早上完成。我有acad 2011。你觉得可以还是应该保存为以前的版本?
谢谢你们对这篇文章的兴趣,也谢谢你们投入的时间。

ymg3 发表于 2022-7-6 00:12:25

 
我可以,但其他人可以参与到线程中。
 
ymg公司

BIGAL 发表于 2022-7-6 00:14:06

这是一个开始,感谢Alan JT的listselect。
 
 


; menu line ^c^c^p(if (not AT:ListSelect)(load "listselect"))(load "myblockinsert")


; maybe call this code myblockinsert.lsp

(setq lst (list "b1" "b2" "b3" "b54")); change this to read from file your block names
(if (not AT:ListSelect)(load "listselect")) ; only needed if not running from menu
(setq ansback (car (AT:ListSelect "Set new blockname" "Select block" 10 10 "false" lst)))
(Alert (strcat "The block picked was " ansback))


(defun AT:ListSelect (title label height width multi lst / fn fo d item f)
;; List Select Dialog (Temp DCL list box selection, based on provided list)
;; title - list box title
;; label - label for list box
;; height - height of box
;; width - width of box
;; multi - selection method ["true": multiple, "false": single]
;; lst - list of strings to place in list box
;; Alan J. Thompson, 09.23.08 / 05.17.10 (rewrite)
(setq fo (open (setq fn (vl-filename-mktemp "" "" ".dcl")) "w"))
(foreach x (list (strcat "list_select : dialog { label = \"" title "\"; spacer;")
                  (strcat ": list_box { label = \"" label "\";" "key = \"lst\";")
                  (strcat "allow_accept = true; height = " (vl-princ-to-string height) ";")
                  (strcat "width = " (vl-princ-to-string width) ";")
                  (strcat "multiple_select = " multi "; } spacer; ok_cancel; }")
            )
   (write-line x fo)
)
(close fo)
(new_dialog "list_select" (setq d (load_dialog fn)))
(start_list "lst")
(mapcar (function add_list) lst)
(end_list)
(setq item (set_tile "lst" "0"))
(action_tile "lst" "(setq item $value)")
(setq f (start_dialog))
(unload_dialog d)
(vl-file-delete fn)
(if (= f 1)
   ((lambda (s / i s l)
      (while (setq i (vl-string-search " " s))
      (setq l (cons (nth (atoi (substr s 1 i)) lst) l))
      (setq s (substr s (+ 2 i)))
      )
      (reverse (cons (nth (atoi s) lst) l))
    )
   item
   )
)
)


页: [1] 2
查看完整版本: 根据t填充属性