乐筑天下

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

[编程交流] 更改块中的属性

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:58:34 | 显示全部楼层 |阅读模式
好的,首先我Lisp程序。我的CAD管理课程向我们介绍了其中的一些内容,我还成功地创建了一些程序。也就是说,我在使用这段代码时遇到了不少麻烦。我们的教授提供了大部分/全部信息,我们必须通过标签修改它以更改其他属性。
 
  1. (defun C:chatts()
  2.         (setq Blk (ssget "X" '((2 . "AttributeTest"))))
  3.         (setq BlkName (ssname blk 0))
  4.         (defun attsearch()
  5.           (setq TagSearch (entnext BlkName))
  6. );;defun
  7.         (attsearch)
  8.         (setq TagFound (cdr(assoc 2(entget BlkName))))
  9.         (while (/= TagFound "DWG_TITLE")
  10.           (setq TagSearch (entnext TagSearch))
  11.         (setq TagFound (cdr(assoc 2 (entget TagSearch))))
  12. );;while
  13.         (setq old (assoc 1 (entget TagSearch)))
  14.         (setq new (cons 1 "Attribute Lisp"))
  15.         (setq NewList (subst new old (entget TagSearch)))
  16.         (entmod NewList)
  17.         (entupd (cdr (assoc -1 (entget TagSearch))))
  18. );;defun

 
他说,这主要是简单地重复代码,并将“TagFound”更改为其他属性标记,但无论出于何种原因,每次尝试都失败了。重复从哪里开始和结束?我认为这是一个“我已经看了太久”的问题。
 
谢谢你的帮助。
 
刻痕
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:08:02 | 显示全部楼层
毕竟这是一个家庭作业。所以一个提示就足够了:
 
Tagsearch变量的计算结果为零
TagFound变量结果的blockname不是标记名
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:12:56 | 显示全部楼层
嗯。也许我应该澄清一下。这是为了更改和插入块的属性。
 
LISP可以正常工作。我只是无法确定重复部分的开始。
 
此外,教授允许使用外部资源,因为从技术上讲,这不是一门LISP课程,而且我自己自学了大部分内容,所以没有必要因为这是“家庭作业”而犹豫。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:17:06 | 显示全部楼层
 
抱歉,尼克,无论如何,所以问题是通过选择迭代正确吗?
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:21:32 | 显示全部楼层
不确定这是否是问题所在。基本上,根据我的理解,我会将代码的一部分从say,(attsearch)复制到末尾,并将TagFound“DWG\u TITLE”更改为TagFound“COURSE\u NAME”,当然也会将相应的cons 1“Attribute Lisp”更改为cons 1“CAD Management”,重复标题栏中的所有标记。正如我所说的,他提到了一个简单的复制和粘贴,只需要很少的修改就可以完成。至少我是这样做的。
 
这有意义吗?对不起,有什么困惑。
 
谢谢
 
刻痕
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:28:29 | 显示全部楼层
“重复”开始于
  1. (while (/= TagFound "DWG_TITLE")
这一行,但它有嵌套语句,在查看(while)循环时必须考虑这些语句。
  1. (setq TagSearch (entnext TagSearch))
  2.         (setq TagFound (cdr(assoc 2 (entget TagSearch))))
  3. );;while

 
不会为你做这一切,但这应该会有所帮助
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:35:24 | 显示全部楼层
供参考
  1. (while)
  2. (if)
  3. (repeat)

是迭代(逐步)代码的常见方法吗
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:40:15 | 显示全部楼层
为了防止程序“崩溃”,这里有一种方法可以使用您已有的代码行“循环”。
  1. (defun C:chatts        ()
  2. (defun attsearch () (setq TagSearch (entnext BlkName)))    ;;defun
  3. [color="blue"](if [/color](setq Blk (ssget "X" '((2 . "AttributeTest")[color="blue"](66 . 1)[/color])))
  4.    [color="blue"](repeat (sslength blk)[/color]
  5.      (setq BlkName (ssname blk 0))
  6.       (attsearch)
  7.      (setq TagFound (cdr (assoc 2 (entget BlkName))))
  8.      [color="blue"](if [/color](while [color="blue"](and[/color] (/= TagFound[b][color="#8b0000"] "DWG_TITLE"[/color][/b])
  9.               [color="blue"](setq TagSearch (entnext TagSearch))
  10.          )[/color]
  11.     (setq TagFound (cdr (assoc 2 (entget TagSearch))))
  12.   )
  13. ;;while
  14. [color="blue"](progn[/color]
  15.   (setq old (assoc 1 (entget TagSearch)))
  16.   (setq new (cons 1 [b][color="#8b0000"]"Attribute Lisp"[/color][/b]))
  17.   (setq NewList (subst new old (entget TagSearch)))
  18.   (entmod NewList)
  19.   (entupd (cdr (assoc -1 (entget TagSearch))))
  20. [color="blue"])
  21.      )
  22.      (ssdel BlkName Blk)
  23.    )[/color]
  24. )
  25. )

 
 
哎呀。太晚了,我已经发布了代码,OP说没有必要保留。
 
粗体颜色的文本是您需要更改的“内容”,以用于另一个标记名和字符串值。
 
但是,您可以将函数更改为接受参数
  1. (defun [b][color="purple"]chatts (tag str)[/color][/b]
  2. (defun attsearch () (setq TagSearch (entnext BlkName)))    ;;defun
  3. (if (setq Blk (ssget "X" '((2 . "AttributeTest")(66 . 1))))
  4.    (repeat (sslength blk)
  5.      (setq BlkName (ssname blk 0))
  6.       (attsearch)
  7.      (setq TagFound (cdr (assoc 2 (entget BlkName))))
  8.      (if (while (and (/= TagFound [b][color="purple"]tag[/color][/b])
  9.               (setq TagSearch (entnext TagSearch))
  10.          )
  11.     (setq TagFound (cdr (assoc 2 (entget TagSearch))))
  12.   )
  13. ;;while
  14. (progn
  15.   (setq old (assoc 1 (entget TagSearch)))
  16.   (setq new (cons 1 [b][color="purple"]str)[/color][/b])
  17.   (setq NewList (subst new old (entget TagSearch)))
  18.   (entmod NewList)
  19.   (entupd (cdr (assoc -1 (entget TagSearch))))
  20. )
  21.      )
  22.      (ssdel BlkName Blk)
  23.    )
  24. )
  25. )

 
(chatts“ANOTHERTAG”“另一个字符串值”)
 
HTH公司
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:52:43 | 显示全部楼层
谢谢你的帮助!我会仔细看看这些东西,看看它能给我带来什么。
 
刻痕
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:58:24 | 显示全部楼层
 
很高兴我们能提供帮助,因为我正在再次阅读您的帖子,如果您需要单步浏览标签名称。您可以使用我发布的sub来指定标记及其相应的值。
 
  1. (foreach itm '(("DWG_TITLE" "Attribute Lisp")("COURSE_NAME" "CAD Management"))
  2.         (chatts (car itm)(cadr itm)))

 
HTH公司
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:02 , Processed in 0.398703 second(s), 72 queries .

© 2020-2025 乐筑天下

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