了解列表
是否有资源或人员可以解释列表?我看到一个点有x,y,z元素。编码时,我如何知道哪个变量中有多个实体,以及如何访问某些实体。我知道这听起来不像我在解释对了。假设我想改变与多行文字有关的内容,我如何知道如何使用lisp处理组成多行文字的属性。我假设多行文字有textsize、style、color和layer,那么我该如何在列表中处理它们,比如更改选定文本实体的textsize。看起来你必须知道x,y,z,我猜在列表中会被引用为0,1,2个位置? 列表很容易理解和操作,但也有一些更好的地方可以让真正的大师做一些非常有趣的事情。“lisp”这个名字本身来自“列表处理”
简而言之,这只是一种数据。你有实数,整数,字符串,还有列表。如果您有过其他代码语言的经验,那么它类似于数组。
你要处理的最常见的列表是一个点,它只不过是一个由三个数字(实数或整数,或两者)组成的列表。有时会使用两个,第三个数字(用于z坐标)默认为零。
可以使用AutoCAD函数“list”形成列表,例如:
有一种更高级的技术,它使用逗号或“quote”函数,但可以等待。
要在创建列表数据后访问它,您可能会经常使用/看到以下四个主要功能:
car-返回列表中的第一项
cadr-返回列表中的第二项
caddr-返回列表中的第三项
nth num-返回作为“num”索引的项
assoc sym-对于关联列表,返回以“sym”开头的列表项
有关这些功能的更深入解释,请参阅AutoCAD帮助文件。
同样,还有更高级的功能,car、cadr和caddr功能本身是一个更大整体的一部分,然而这三个功能是您经常会看到的。从列表中获取数据的其他方法有“last”或“member”
有几个函数可以修改列表,一个常见的函数是“mapcar”此外,还有几个有趣的Visual Lisp函数,可以对列表进行操作。然而,如果你要处理一个实体的位置,这应该是你所需要的全部。
更改实体的属性确实需要列表操作,您可以使用这段代码查看您正试图处理的列表:
Entsel以列表的形式返回实体名称和拾取的点。但是,您只需要实体名称,因此您可以获得列表中的第一项(请参见“car”函数)。将实体名称传递给“entget”函数将以关联列表的形式返回实体属性。您可以使用“assoc”和“cdr”获得您想要的任何属性。例如,如果要获取对象的层,可以执行以下操作:
因为8是“层”的DXF代码。一旦你得到了,你可以使用“subst”来改变图层,但是你也需要使用“entmod”和“entupd”。对于实际更改对象的属性,使用Visual Lisp函数要简单得多。 我不确定这是否是对我们其他线程的参考,但这里是DXF代码的一个很好的参考:
http://autodesk.com/techpubs/autocad/acad2000/dxf/
对于列表:
Car/Cadr/Caddr解释:
http://ronleigh.info/autolisp/afude09.htm
http://www.theswamp.org/index.php?topic=31473.0
撇号的解释:
http://www.cadtutor.net/forum/showpost.php?p=258390&postcount=20
希望这有帮助,
李 您提到更改所选实体的TextHeight,下面是一些值得思考的问题,您可以如何处理它。
以下每一项都以不同的效率获得了相同的结果,展示了如何以多种不同的方式处理一个问题。
DXF代码修改
(defun c:tHgt1 (/ i ss Hgt ent)
(if (and (setq i -1 ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
(setq Hgt (getdist "\nSpecify New Height: ")))
(while (setq ent (ssname ss (setq i (1+ i))))
(entmod (subst (cons40 Hgt)
(assoc 40 (entget ent)) (entget ent)))))
(princ))
ActiveX属性修改
(defun c:tHgt2 (/ i ss Hgt ent)
(vl-load-com)
(if (and (setq i -1 ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
(setq Hgt (getdist "\nSpecify New Height: ")))
(while (setq ent (ssname ss (setq i (1+ i))))
(vla-put-Height (vlax-ename->vla-object ent) Hgt)))
(princ))
使用ActiveX选择集
(defun c:tHgt3 (/ ss Hgt)
(vl-load-com)
(if (and (ssget "_:L" '((0 . "TEXT,MTEXT")))
(setq Hgt (getdist "\nSpecify New Height: ")))
(progn
(vlax-for obj (setq ss (vla-get-ActiveSelectionSet
(vla-get-ActiveDocument
(vlax-get-acad-object))))
(vla-put-Height obj Hgt))
(vla-delete ss)))
(princ))
使用ActiveX进行选择
6 这对我来说毫无意义。
我想,为了学习,如果我写一个程序,它可以做到以下几点:
1.选择块或任何实体
2.以列表形式显示有关该块的所有信息。
当我通过Autocad中的列表编辑器查看人们的代码时,不同的东西会改变颜色,很难知道什么是dxf代码、变量等,我是一个视觉学习者,我一直在阅读,这些东西没有点击。
我从之前发布的类似文章开始,但我肯定错过了一些东西。
7
有没有办法使DXF代码呈现某种颜色,系统变量呈现不同的颜色,用户定义的变量呈现不同的颜色?
据我所知,你只需要学习它们/认识到它们是如何使用的。
我建议您阅读Visual LISP帮助文件或AfraLISP/Jeffrey Sanders。 我提供的那些其他链接一点帮助都没有吗?
如果您正在启动LISP,这里有几个链接:
http://www.afralisp.net/
http://www.jefferypsanders.com/autolisptut.html
http://ronleigh.info/autolisp/index.htm 他们似乎是很好的网站,会有所帮助,但我只是无法理解这个概念,就像他们在和一个对医学领域一无所知的人谈论医学术语一样。我需要视觉教具来学习,我需要逐字查看一串代码在做什么,每一步都在做什么,因为它会被计算机评估。我有一本关于Visual Lisp的书,一直在阅读你给我的那些网站。灯泡不亮了。 尝试在Visual LISP控制台中进行实验,看看有什么不同的东西返回-这应该会给你一个视觉帮助。 是的,这就是我一直在做的,我想我们会看到我的大脑将保留什么,而不是变老:震惊:
页:
[1]
2