乐筑天下

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

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

[复制链接]

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-5 23:38:05 | 显示全部楼层 |阅读模式
首先,我向所有继续帮助我的人道歉。我一直在努力学习Lisp程序,但我的工作一直在吸引我,并把注意力集中在其他任务上,这使得我很难保留我试图学习的任何信息。也就是说,我觉得我回到了开始。。。。再一次
 
这就是我要做的。我使用(entget(car(entsel))从图形中的对象返回信息。
 
003812fr1jnuwb1bb9grtz.png
 
如何使用返回的信息?我知道有一种方法可以使用dxf代码,并将其设置为一个可以稍后调用的变量,但我似乎不记得是怎么做的。谁能帮帮我吗?
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:41:51 | 显示全部楼层
  1. (setq e (car (entsel)))
;;将实体名称存储到变量“e”
 
用于dxf代码。使用try提取图层名,即dxf 8
 
  1. (setq lay (cdr (assoc 8 (entget e))))

 
“entget”函数将检索“e”的实体数据
“assoc 8”将获得实体上的关联值8
它将返回一个类似的列表
(8.“P-SSWR-PIPE”)
表示实体的层位于“mylayer”层上
使用“cdr”函数提取列表中的第二项
这就是“mylayer”。
“setq lay”将层名称存储在lay变量上。
 
现在试着回忆变量lay
 
[code]2;;将返回“P-SSWR-PIPE”
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-5 23:47:43 | 显示全部楼层
谢谢你的详细回答!我想我明白了。经过你的解释,我现在明白了如何使用图层执行某些命令。
 
如上图所示,有300个代码。如果我有“assoc 300”,我如何计算它将使用哪300个代码?
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:48:46 | 显示全部楼层
 
我不确定这些代码是什么,因为我没有与您使用的autocad相同的风格。一个肯定会出现,并帮助你与那些dxf 300。
 
试着尝试一下:
 
  1. (setq e (car (entsel)) ;; selected object must be a maps_solid
  2.      elist (entget e))
  3.   
  4. (setq newlist (vl-remove-if-not '(lambda (x) (= 300 (car x))) elist))
  5. (princ newlist)

 
使用car、cdr、last或nth函数提取要提取的值。
阅读此或
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-5 23:52:35 | 显示全部楼层
这就是我目前所拥有的。我可以改变图层,但无法显示文字。当我只使用“assoc 300”DXF代码时,我只能得到第一个300来填充文本。如果我试着用“nth”,我就写不出任何东西。
  1. (setq e (car (entsel "Select Pipe: ")))
  2. (setq lay (cdr (assoc 8 (entget e))))
  3. (setq spl (nth 17 (entget e)))
  4. (command "-layer" "s" lay "")
  5. (command "text" "0,0,0" "" spl)
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:55:34 | 显示全部楼层
根据上面的图片,您试图提取什么价值?Itemnumber-1?
 
  1. (defun C:test (/ )
  2. (if
  3. (setq e   (car (entsel "\nSelect a pipe :"))
  4.      lay (cdr (assoc 8 (entget e)))
  5.      spl (cadr (nth 7 (vl-remove-if-not '(lambda (x) (= 300 (car x))) (entget e))))
  6. )
  7. (progn
  8. (setvar "clayer" lay)
  9. (command "_.text" (getpoint) (getvar 'textsize) 0 spl "")
  10. )
  11. )
  12. (princ)
  13. )
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-5 23:58:59 | 显示全部楼层
我试图得到值“spool-1”。在阅读了Afralisp上的页面后,我想我可以用上面的代码得到我想要的。我只是不知道为什么它不起作用。我会尽力理解你的代码在做什么。非常感谢。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 00:01:32 | 显示全部楼层
@吉迪亚拉-
 
你的代码不起作用。它不会更改图层或放置文字。
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:06:09 | 显示全部楼层
 
对不起,我的错。我没有实体来测试代码。另一个。。。
 
  1. (defun C:test (/ lay e )
  2. (setq lay nil)
  3. (while (not lay)
  4. (setvar 'errno 0)
  5. (setq e (car (entsel "\nSelect a pipe :")))
  6. (cond
  7.    ( (= 7 (getvar 'errno))
  8.      (princ "\nMissed, Try Again.")
  9.    )
  10.    ( (not (= "MAPS_SOLID" (cdr (assoc 0 (entget e)))))
  11.      (princ "\nInvalid selection! Try again.")
  12.    )
  13.    (  (= "MAPS_SOLID" (cdr (assoc 0 (entget e))))
  14.       (setq lay (cdr (assoc 8 (entget e))))
  15.    )
  16. )
  17. )
  18. (entmakex
  19. (list
  20.    (cons 0 "TEXT")
  21.    (cons 1 (cadr (nth 8 (vl-remove-if-not '(lambda (x) (= 300 (car x))) (entget e)))))
  22.    (cons 8 lay)
  23.    (cons 10 (getpoint "\nPick insertion point:"))
  24.    (cons 40 (getvar 'textsize))
  25. )
  26. )
  27. (princ)
  28. )
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 00:08:59 | 显示全部楼层
对不起,我知道如果没有测试,这很难。这就是为什么我真的很想学习如何做到这一点自己。我知道并不是每个人都有这个AutoCad插件。谢谢你的尝试。第二个代码也不起作用。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:19 , Processed in 0.614352 second(s), 75 queries .

© 2020-2025 乐筑天下

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