ksperopoulos 发表于 2022-7-5 23:38:05

使用对象信息

首先,我向所有继续帮助我的人道歉。我一直在努力学习Lisp程序,但我的工作一直在吸引我,并把注意力集中在其他任务上,这使得我很难保留我试图学习的任何信息。也就是说,我觉得我回到了开始。。。。再一次
 
这就是我要做的。我使用(entget(car(entsel))从图形中的对象返回信息。
 

 
如何使用返回的信息?我知道有一种方法可以使用dxf代码,并将其设置为一个可以稍后调用的变量,但我似乎不记得是怎么做的。谁能帮帮我吗?

jdiala 发表于 2022-7-5 23:41:51

(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”

ksperopoulos 发表于 2022-7-5 23:47:43

谢谢你的详细回答!我想我明白了。经过你的解释,我现在明白了如何使用图层执行某些命令。
 
如上图所示,有300个代码。如果我有“assoc 300”,我如何计算它将使用哪300个代码?

jdiala 发表于 2022-7-5 23:48:46

 
我不确定这些代码是什么,因为我没有与您使用的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函数提取要提取的值。
阅读此或

ksperopoulos 发表于 2022-7-5 23:52:35

这就是我目前所拥有的。我可以改变图层,但无法显示文字。当我只使用“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)

jdiala 发表于 2022-7-5 23:55:34

根据上面的图片,您试图提取什么价值?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)
)

ksperopoulos 发表于 2022-7-5 23:58:59

我试图得到值“spool-1”。在阅读了Afralisp上的页面后,我想我可以用上面的代码得到我想要的。我只是不知道为什么它不起作用。我会尽力理解你的代码在做什么。非常感谢。

ksperopoulos 发表于 2022-7-6 00:01:32

@吉迪亚拉-
 
你的代码不起作用。它不会更改图层或放置文字。

jdiala 发表于 2022-7-6 00:06:09

 
对不起,我的错。我没有实体来测试代码。另一个。。。
 
(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)
)

ksperopoulos 发表于 2022-7-6 00:08:59

对不起,我知道如果没有测试,这很难。这就是为什么我真的很想学习如何做到这一点自己。我知道并不是每个人都有这个AutoCad插件。谢谢你的尝试。第二个代码也不起作用。
页: [1] 2
查看完整版本: 使用对象信息