使用对象信息
首先,我向所有继续帮助我的人道歉。我一直在努力学习Lisp程序,但我的工作一直在吸引我,并把注意力集中在其他任务上,这使得我很难保留我试图学习的任何信息。也就是说,我觉得我回到了开始。。。。再一次这就是我要做的。我使用(entget(car(entsel))从图形中的对象返回信息。
如何使用返回的信息?我知道有一种方法可以使用dxf代码,并将其设置为一个可以稍后调用的变量,但我似乎不记得是怎么做的。谁能帮帮我吗? (setq e (car (entsel)));;将实体名称存储到变量“e”
用于dxf代码。使用try提取图层名,即dxf 8
(setq lay (cdr (assoc 8 (entget e))))
“entget”函数将检索“e”的实体数据
“assoc 8”将获得实体上的关联值8
它将返回一个类似的列表
(8.“P-SSWR-PIPE”)
表示实体的层位于“mylayer”层上
使用“cdr”函数提取列表中的第二项
这就是“mylayer”。
“setq lay”将层名称存储在lay变量上。
现在试着回忆变量lay
2;;将返回“P-SSWR-PIPE” 谢谢你的详细回答!我想我明白了。经过你的解释,我现在明白了如何使用图层执行某些命令。
如上图所示,有300个代码。如果我有“assoc 300”,我如何计算它将使用哪300个代码?
我不确定这些代码是什么,因为我没有与您使用的autocad相同的风格。一个肯定会出现,并帮助你与那些dxf 300。
试着尝试一下:
(setq e (car (entsel)) ;; selected object must be a maps_solid
elist (entget e))
(setq newlist (vl-remove-if-not '(lambda (x) (= 300 (car x))) elist))
(princ newlist)
使用car、cdr、last或nth函数提取要提取的值。
阅读此或
这 这就是我目前所拥有的。我可以改变图层,但无法显示文字。当我只使用“assoc 300”DXF代码时,我只能得到第一个300来填充文本。如果我试着用“nth”,我就写不出任何东西。
(setq e (car (entsel "Select Pipe: ")))
(setq lay (cdr (assoc 8 (entget e))))
(setq spl (nth 17 (entget e)))
(command "-layer" "s" lay "")
(command "text" "0,0,0" "" spl) 根据上面的图片,您试图提取什么价值?Itemnumber-1?
(defun C:test (/ )
(if
(setq e (car (entsel "\nSelect a pipe :"))
lay (cdr (assoc 8 (entget e)))
spl (cadr (nth 7 (vl-remove-if-not '(lambda (x) (= 300 (car x))) (entget e))))
)
(progn
(setvar "clayer" lay)
(command "_.text" (getpoint) (getvar 'textsize) 0 spl "")
)
)
(princ)
) 我试图得到值“spool-1”。在阅读了Afralisp上的页面后,我想我可以用上面的代码得到我想要的。我只是不知道为什么它不起作用。我会尽力理解你的代码在做什么。非常感谢。 @吉迪亚拉-
你的代码不起作用。它不会更改图层或放置文字。
对不起,我的错。我没有实体来测试代码。另一个。。。
(defun C:test (/ lay e )
(setq lay nil)
(while (not lay)
(setvar 'errno 0)
(setq e (car (entsel "\nSelect a pipe :")))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, Try Again.")
)
( (not (= "MAPS_SOLID" (cdr (assoc 0 (entget e)))))
(princ "\nInvalid selection! Try again.")
)
((= "MAPS_SOLID" (cdr (assoc 0 (entget e))))
(setq lay (cdr (assoc 8 (entget e))))
)
)
)
(entmakex
(list
(cons 0 "TEXT")
(cons 1 (cadr (nth 8 (vl-remove-if-not '(lambda (x) (= 300 (car x))) (entget e)))))
(cons 8 lay)
(cons 10 (getpoint "\nPick insertion point:"))
(cons 40 (getvar 'textsize))
)
)
(princ)
) 对不起,我知道如果没有测试,这很难。这就是为什么我真的很想学习如何做到这一点自己。我知道并不是每个人都有这个AutoCad插件。谢谢你的尝试。第二个代码也不起作用。
页:
[1]
2