乐筑天下

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

[编程交流] 使用对象信息

[复制链接]

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 00:12:28 | 显示全部楼层
我得到了它!在阅读了Afralisp的另一部分之后,我找到了我的解决方案。以下是链接和代码:
 
http://www.afralisp.net/autolisp/tutorials/extended-entity-data-part-1.php
 
  1. (setq ol (entget (car (entsel "Select Pipe"))))
  2. (setq ln (cdr (assoc 8 ol)))
  3. (setq sn (cdr (nth 17 ol)))
  4. (command "clayer" ln)
  5. (command "text" "0,0,0" "0" sn)

 
我还有很多工作要做,才能把它送到我想要的地方。敬请期待!
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:13:00 | 显示全部楼层
如果可能,请附着带有一个或两个对象的样例dwg。。。
 
编辑:太慢
 
亨里克
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-6 00:18:25 | 显示全部楼层
一个简单的解决方案就是重复使用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组码”。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:19:31 | 显示全部楼层
 
你确定吗?
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-6 00:24:20 | 显示全部楼层
是的,试试看。我做到了。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:27:41 | 显示全部楼层
 
  1. _$ (setq lst '((1 . "a") (1 . "b") (1 . "c")))
  2. ((1 . "a") (1 . "b") (1 . "c"))
  3. _$ (assoc 1 lst)
  4. (1 . "a")
  5. _$ (assoc 1 lst)
  6. (1 . "a")
  7. _$ (assoc 1 lst)
  8. (1 . "a")
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:30:25 | 显示全部楼层
早上好。
那么,检索“b”或“c”的正确语法是什么??
  1. Command: (setq lst '((1 . "a") (1 . "b")(1 . "c")))
  2. ((1 . "a") (1 . "b") (1 . "c"))
  3. Command: !lst
  4. ((1 . "a") (1 . "b") (1 . "c"))
  5. Command: (assoc 1 lst)
  6. (1 . "a")
  7. Command: (assoc 1 lst)
  8. (1 . "a")
  9. Command: (cdr lst)
  10. ((1 . "b") (1 . "c"))
  11. Command: (cadr lst)
  12. (1 . "b")
  13. Command: (caddr lst)
  14. (1 . "c")

 
这是如何检索Lee示例的第二个和第三个“assoc 1”。我认为这是最正确的方法,使用简单的列表操作函数可以做到这一点。
Jdiala已经发送了一个链接到这里,但我会再给它一次。。。
http://www.afralisp.net/autolisp/tutorials/list-manipulation.php
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:32:12 | 显示全部楼层
 
我不会说有“正确”的方法来处理它,因为使用的方法取决于情况、可以做出的假设和可用的信息量。
 
例如,如您所示,可以使用c*r函数或一般情况下的第n个函数检索项目“b”和“c”:
 
  1. _$ (setq lst '((1 . "a") (1 . "b") (1 . "c")))
  2. ((1 . "a") (1 . "b") (1 . "c"))
  3. _$ (cadr lst)
  4. (1 . "b")
  5. _$ (caddr lst)
  6. (1 . "c")
  7. _$ (nth 1 lst)
  8. (1 . "b")

 
然而,这当然会假设列表中项目的顺序是一致的,并且可以依赖。
 
如果每个点对的值已知,我们也可以使用成员或vl位置函数,它们将独立于列表中项目的顺序进行操作,但是,如果具有谓词函数,则该方法通常采用vl成员的形式:
 
  1. _$ (setq lst '((1 . 2) (1 . 3) (1 . 4)))
  2. ((1 . 2) (1 . 3) (1 . 4))
  3. _$ (car (vl-member-if '(lambda ( x ) (= 1 (rem (cdr x) 2))) lst))
  4. (1 . 3)

 
因为,如果精确值已知,则无需从关联列表中检索相同的值(当然,除非确定列表中是否存在该项或检索该项索引)。
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:37:53 | 显示全部楼层
 
嘿,李,
感谢您的及时回复。你的帖子对我来说很有意义,但我很难理解你展示的最后一个例子。
  1. (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)的位置?我不想在这里假设太多,所以我会等待。。。提前感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:39:26 | 显示全部楼层
提示:
  1. 13
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:33 , Processed in 0.608060 second(s), 71 queries .

© 2020-2025 乐筑天下

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