乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 14|回复: 14

[编程交流] 了解列表

[复制链接]

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 11:51:30 | 显示全部楼层 |阅读模式
是否有资源或人员可以解释列表?我看到一个点有x,y,z元素。编码时,我如何知道哪个变量中有多个实体,以及如何访问某些实体。我知道这听起来不像我在解释对了。假设我想改变与多行文字有关的内容,我如何知道如何使用lisp处理组成多行文字的属性。
 
我假设多行文字有textsize、style、color和layer,那么我该如何在列表中处理它们,比如更改选定文本实体的textsize。看起来你必须知道x,y,z,我猜在列表中会被引用为0,1,2个位置?
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:58:55 | 显示全部楼层
列表很容易理解和操作,但也有一些更好的地方可以让真正的大师做一些非常有趣的事情。“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函数要简单得多。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:01:18 | 显示全部楼层
我不确定这是否是对我们其他线程的参考,但这里是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
 
希望这有帮助,
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:05:23 | 显示全部楼层
您提到更改所选实体的TextHeight,下面是一些值得思考的问题,您可以如何处理它。
 
以下每一项都以不同的效率获得了相同的结果,展示了如何以多种不同的方式处理一个问题。
 
 
DXF代码修改
  1. (defun c:tHgt1 (/ i ss Hgt ent)
  2. (if (and (setq i -1 ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
  3.           (setq Hgt (getdist "\nSpecify New Height: ")))
  4.    
  5.    (while (setq ent (ssname ss (setq i (1+ i))))
  6.      (entmod (subst (cons  40 Hgt)
  7.                     (assoc 40 (entget ent)) (entget ent)))))
  8. (princ))

 
ActiveX属性修改
  1. (defun c:tHgt2 (/ i ss Hgt ent)
  2. (vl-load-com)
  3. (if (and (setq i -1 ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
  4.           (setq Hgt (getdist "\nSpecify New Height: ")))
  5.    (while (setq ent (ssname ss (setq i (1+ i))))
  6.      (vla-put-Height (vlax-ename->vla-object ent) Hgt)))
  7. (princ))

 
使用ActiveX选择集
  1. (defun c:tHgt3 (/ ss Hgt)
  2. (vl-load-com)
  3. (if (and (ssget "_:L" '((0 . "TEXT,MTEXT")))
  4.           (setq Hgt (getdist "\nSpecify New Height: ")))           
  5.    (progn
  6.      (vlax-for obj (setq ss (vla-get-ActiveSelectionSet
  7.                               (vla-get-ActiveDocument
  8.                                 (vlax-get-acad-object))))
  9.        (vla-put-Height obj Hgt))
  10.      (vla-delete ss)))
  11. (princ))

使用ActiveX进行选择
  1. 6
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:12:52 | 显示全部楼层
这对我来说毫无意义。
 
我想,为了学习,如果我写一个程序,它可以做到以下几点:
 
1.选择块或任何实体
2.以列表形式显示有关该块的所有信息。
 
当我通过Autocad中的列表编辑器查看人们的代码时,不同的东西会改变颜色,很难知道什么是dxf代码、变量等,我是一个视觉学习者,我一直在阅读,这些东西没有点击。
 
我从之前发布的类似文章开始,但我肯定错过了一些东西。
 
  1. 7

 
有没有办法使DXF代码呈现某种颜色,系统变量呈现不同的颜色,用户定义的变量呈现不同的颜色?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:13:50 | 显示全部楼层
 
据我所知,你只需要学习它们/认识到它们是如何使用的。
 
我建议您阅读Visual LISP帮助文件或AfraLISP/Jeffrey Sanders。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:17:46 | 显示全部楼层
我提供的那些其他链接一点帮助都没有吗?
 
如果您正在启动LISP,这里有几个链接:
 
http://www.afralisp.net/
http://www.jefferypsanders.com/autolisptut.html
http://ronleigh.info/autolisp/index.htm
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:22:05 | 显示全部楼层
他们似乎是很好的网站,会有所帮助,但我只是无法理解这个概念,就像他们在和一个对医学领域一无所知的人谈论医学术语一样。我需要视觉教具来学习,我需要逐字查看一串代码在做什么,每一步都在做什么,因为它会被计算机评估。我有一本关于Visual Lisp的书,一直在阅读你给我的那些网站。灯泡不亮了。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:26:12 | 显示全部楼层
尝试在Visual LISP控制台中进行实验,看看有什么不同的东西返回-这应该会给你一个视觉帮助。
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:33:52 | 显示全部楼层
是的,这就是我一直在做的,我想我们会看到我的大脑将保留什么,而不是变老:震惊:
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 10:12 , Processed in 0.405799 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表