乐筑天下

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

[编程交流] 获取一个属性,然后使用它

[复制链接]

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:51:42 | 显示全部楼层 |阅读模式
下午好
我对LISP很陌生,需要你们的帮助,目前我只能对现有代码做一些小改动,但很多代码对我来说仍然很神奇。
 
我有一个带有属性“CIRCID”的块“ULTRA INFO”,可以用来帮助关闭在末尾添加“-DATA”的层。我认为我们需要做的是获取属性变量并存储它,然后在末尾添加通配符*,最后让它关闭具有该名称的层。
 
以下是我的想法:
如果找到名为“CIRCID”的属性,则如何扫描图形以将其存储为“LAName”以供以后使用。
然后关闭图层:(命令“-layer”“off”“(LAName)*”“)
 
非常感谢任何可能的帮助。
提前谢谢大家。
布瑞恩
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:57:30 | 显示全部楼层
您是否计划在屏幕上选取1个块,否则它将找到第一个出现的标记CIRCID,并在不为空的情况下使用该标记。
 
其次(命令“-Layer”“off”LAName”“)您可以通过lisp(setq LAName(strcat LAName“*”)将*添加到层名称中。
 
发布带有块的dwg,使其更容易匹配100%非常简单的任务。
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:58:14 | 显示全部楼层
附件是需要更改的许多图纸之一的示例。
 
需要做的两件事是:
1) 打开“快照”层,我可以使用:
(命令“-layer”“O”“SHOTS”“”)
 
2) 抓取ULTRA INFO块的CIRCID属性,在其中添加一个*然后关闭该层。
 
如果打开“快照”层,您将看到第二条注释指向同一点,显示数字和管道壁厚。该公司决定回到以前的方式,用数字显示一个圆圈,该圆圈将引用excel电子表格,该电子表格将显示每个点的壁厚腐蚀历史。
非常感谢你的帮助!!!
实例图纸
回复

使用道具 举报

10

主题

598

帖子

594

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-5 16:02:58 | 显示全部楼层
难道你不能只使用“layouf”命令并在需要时选择图层上的一个项目来关闭吗
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:05:27 | 显示全部楼层
该层上的文本和引线将在不同的位置,从一个图形到另一个图形,我想用脚本文件运行它,这样我就可以一次将更改应用到数百个,而不需要用户做任何事情。如果我必须包含一个交叉拾取来抓取块“ULTRA INFO”,我可以,至少它在所有图形中都位于同一位置。"6.047,1.214" "5.689,1.291"
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:08:35 | 显示全部楼层
我看到“CIRCID”是一个标记值,而不是属性值!此外,图形中没有任何以该标记值开始的图层可以将其关闭!
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:12:29 | 显示全部楼层
是的,CIRCID是ULTRA INFO块的标记,但我需要做的是从该标记中获取属性值。在前面的示例图纸中,值为“H1-023”,在所附示例2中,值为“H2-020”。通过获取该值,我们可以连接“*”或层的实际结束名称-数据”,并能够自动关闭层。我只是不太了解LISP,无法:
1) 从块的标记中获取值。
2) 将“*”或“-DATA”连接到标记的值
3) 然后使用该存储值关闭图层。
我想以这种方式使用标记的值,因为它是图形编号的简化形式,过去曾用于创建多个图层,现在需要关闭这些图层,尤其是以数据结尾的图层。我附上了第二个例子,让你明白我的意思。
示例2.dwg
回复

使用道具 举报

10

主题

598

帖子

594

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-5 16:15:47 | 显示全部楼层
“layer”“off”“*-data”怎么样
layer命令接受通配符
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:19:28 | 显示全部楼层
如果层与目标块名称中的属性值的值匹配,则应根据层名称的状态打开和关闭层。
 
试试看,让我知道。
 
  1. (defun c:Test (/ s i l lst e n a)
  2. ;;    Tharwat 12.9.2014    ;;
  3. (if (setq s (ssget "_X" '((0 . "INSERT") (66 . 1) (2 . "ULTRA INFO"))))
  4.    (repeat (setq i (sslength s))
  5.      (mapcar
  6.        '(lambda (u)
  7.           (if
  8.             (eq (strcase (vla-get-tagstring u)) "CIRCID")
  9.              (setq lst (cons (vla-get-textstring u) lst))
  10.           )
  11.         )
  12.        (vlax-invoke
  13.          (vlax-ename->vla-object (ssname s (setq i (1- i))))
  14.          'getAttributes
  15.        )
  16.      )
  17.    )
  18. )
  19. (if lst
  20.    (while (setq a (tblnext "LAYER" (not a)))
  21.      (foreach x lst
  22.        (if (wcmatch (setq n (cdr (assoc 2 a))) (strcat x "*"))
  23.          (entmod
  24.            (subst (cons 62 (- (cdr (assoc 62 a))))
  25.                   (assoc 62 (setq e (entget (tblobjname "LAYER" n))))
  26.                   e
  27.            )
  28.          )
  29.        )
  30.      )
  31.    )
  32. )
  33. (princ)
  34. )(vl-load-com)
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:22:26 | 显示全部楼层
现在这个想法会起作用。。。
我陷入了Lisp程序的状态,想着这样一个简单的答案可能永远不会出现。
 
 
你听说过“你看不到森林,只看到树木……”我的想法似乎更像是“你看不到落叶针叶树的森林……”
 
 
如果还有人能给我举一个LISP风格的例子,这将帮助我理解在这个领域可能更重要的其他东西。至少现在我可以完成我的任务。
 
 
谢谢你,史蒂文,你救了我的理智!!!
我知道我整个周末都在忙这个。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 20:31 , Processed in 0.511277 second(s), 72 queries .

© 2020-2025 乐筑天下

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