http://www.afralisp.net/autolisp/tutorials/extended-entity-data-part-1.php
(setq ol (entget (car (entsel "Select Pipe"))))
(setq ln (cdr (assoc 8 ol)))
(setq sn (cdr (nth 17 ol)))
(command "clayer" ln)
(command "text" "0,0,0" "0" sn)
我还有很多工作要做,才能把它送到我想要的地方。敬请期待! 如果可能,请附着带有一个或两个对象的样例dwg。。。
编辑:太慢
亨里克 一个简单的解决方案就是重复使用Assoc 300。每次使用时,将检索下一次出现的DXF 300数据。
例如(使用您的数据):
(setq e(entget(car(entsel)))
(setq lay(cdr(assoc 8 e)))
(设置大小(cdr(assoc 300 e)))
(设置类型(cdr(assoc 300 e)))
(setq TheDia(cdr(assoc 300 e)))
(设置样式(cdr(assoc 300 e)))
DXF代码300是任意文本。有关DXF代码的列表,请在AutoCAD帮助中搜索“数字顺序参考中的DXF组码”。
你确定吗? 是的,试试看。我做到了。
_$ (setq lst '((1 . "a") (1 . "b") (1 . "c")))
((1 . "a") (1 . "b") (1 . "c"))
_$ (assoc 1 lst)
(1 . "a")
_$ (assoc 1 lst)
(1 . "a")
_$ (assoc 1 lst)
(1 . "a") 早上好。
那么,检索“b”或“c”的正确语法是什么??
Command: (setq lst '((1 . "a") (1 . "b")(1 . "c")))
((1 . "a") (1 . "b") (1 . "c"))
Command: !lst
((1 . "a") (1 . "b") (1 . "c"))
Command: (assoc 1 lst)
(1 . "a")
Command: (assoc 1 lst)
(1 . "a")
Command: (cdr lst)
((1 . "b") (1 . "c"))
Command: (cadr lst)
(1 . "b")
Command: (caddr lst)
(1 . "c")
这是如何检索Lee示例的第二个和第三个“assoc 1”。我认为这是最正确的方法,使用简单的列表操作函数可以做到这一点。
Jdiala已经发送了一个链接到这里,但我会再给它一次。。。
http://www.afralisp.net/autolisp/tutorials/list-manipulation.php
我不会说有“正确”的方法来处理它,因为使用的方法取决于情况、可以做出的假设和可用的信息量。
例如,如您所示,可以使用c*r函数或一般情况下的第n个函数检索项目“b”和“c”:
_$ (setq lst '((1 . "a") (1 . "b") (1 . "c")))
((1 . "a") (1 . "b") (1 . "c"))
_$ (cadr lst)
(1 . "b")
_$ (caddr lst)
(1 . "c")
_$ (nth 1 lst)
(1 . "b")
然而,这当然会假设列表中项目的顺序是一致的,并且可以依赖。
如果每个点对的值已知,我们也可以使用成员或vl位置函数,它们将独立于列表中项目的顺序进行操作,但是,如果具有谓词函数,则该方法通常采用vl成员的形式:
_$ (setq lst '((1 . 2) (1 . 3) (1 . 4)))
((1 . 2) (1 . 3) (1 . 4))
_$ (car (vl-member-if '(lambda ( x ) (= 1 (rem (cdr x) 2))) lst))
(1 . 3)
因为,如果精确值已知,则无需从关联列表中检索相同的值(当然,除非确定列表中是否存在该项或检索该项索引)。
嘿,李,
感谢您的及时回复。你的帖子对我来说很有意义,但我很难理解你展示的最后一个例子。
(car (vl-member-if '(lambda (x) (=1 (rem (cdr x) 2))) lst))
拿第二件物品和剩下的物品
(vl成员if)
使用以下功能
(λ(x)(=1(rem(cdr x)2)))lst)
是的,不确定这部分代码到底在做什么。。。。
由内而外。。。
(cdr x)=给出列表x的第二项,我们将其称为Y
(rem Y 2)。。。这是我不确定的地方,需要参考其他地方,或者更好,几分钟后再次检查此线程以获得响应
p、 在快速搜索之后,我看到(rem)对参数进行除法,并返回除法剩余的余数。
如何划分列表组件对我来说似乎有点奇怪,但可能(rem)函数的使用方式与我所想的不同-可能它只是返回列表的一部分,即使它没有点对值,例如。。
(setq lst’((1。“A”)(2。“BCD”)(3。“猫”)(4。“狗”)(5.))
rem函数以某种方式获得(5)的位置?我不想在这里假设太多,所以我会等待。。。提前感谢! 提示:
13
页:
1
[2]