乐筑天下

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

[编程交流] 给新人一点帮助。

[复制链接]

7

主题

29

帖子

22

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 15:19:32 | 显示全部楼层 |阅读模式
大家好!论坛新手。。。
 
好的,我对Autolisp进行了一些修补,但我从未创建过如此复杂的东西。我有很多想法,我想写的东西,以帮助工作中的事情更容易,但我只是跳进了一种深刻的结束后,学习狗桨。
无论如何,我目前正在使用的例程是一个函数,用于创建图形中块的所有实例的列表,并基于块中的某些信息创建明细表。我以为我有一个很好的出发点,但我在代码中的第一个小技巧是给我适合。每个块都位于一个单独的层上,该层只是一个数字。当我运行例程时,我试图更新块以更改其中的属性,以包含层名称。
 
我正在处理的代码看起来很正确,但我在替换值的部分中不断出现奇怪的错误,例如类型不匹配或其他。但我以为它们都是弦??!!??
 
哈哈,正如你们可能会说的,我已经用尽了我的资源试图找出这个特殊的障碍,并正在寻找一些其他人的观点。
 
这是我到目前为止得到的。
任何建议都会让我开心。不过,我承认我是个新手,你要温柔一点:?
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 15:34:25 | 显示全部楼层
是的,你的愚蠢表现出来了,但我们都经历过
 
-直到检索到块数据为止,都是正常的。看起来您正试图用图层名替换“组1”数据。但初始块数据不包含属性信息,您需要逐步遍历块数据(使用“entnext”直到到达特定标记,或到达“sequend”(GC 0))找到所需的属性标记后,替换GC 1数据。如果已知块只有一个属性,那么只需要一个“entnext”就可以访问属性数据,这将更简单。
 
此外,您没有使用正确的数据进行替换,在您的情况下,块数据位于“ED”变量中。(您还使用了错误的函数,substr vs subst-close)。假设有一个属性,那么属性数据可以是:
 
(setq Attdat(entget(entnext EN)))
 
那么替换线应该是这样的;
 
(setq curid)
(subst(cons 1“elayer”)(assoc 1 Attdata)Attdata)
 
 
希望这能让你在下一个版本之前有足够的时间使用-
享受
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:38:28 | 显示全部楼层
像这样的?
 
  1. (defun c:blkupd    (/ ss i bEnt bLay aEnt)
  2.    (if    (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 410 (getvar "ctab")))))
  3.    (progn
  4.        (setq i   (sslength ss) blk 0)
  5.        (while (not (minusp (setq i (1- i))))
  6.        (setq bEnt (ssname ss i)
  7.              bLay (cdr (assoc 8 (entget bEnt)))
  8.              aEnt (entget (entnext bEnt)))
  9.        (if (/= "SEQEND" (cdr (assoc 0 aEnt)))
  10.            (progn
  11.            (setq aEnt (subst (cons 1 bLay) (assoc 1 aEnt) aEnt))
  12.            (entmod aEnt))
  13.            (princ "\n<!> Block Contains No Attributes <!>")))
  14.        (vl-cmdf "_regenall"))
  15.    (princ "\n<!> No Blocks Found <!>"))
  16.    (princ)
  17. ) ;_  end defun
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:43:29 | 显示全部楼层
硬汉
 
这对新手来说很好。
 
正如Carl所指出的,假设这是您希望使用的第一个属性:
 
  1. [b][color=BLACK]([/color][/b]defun c:lay2att [b][color=FUCHSIA]([/color][/b]/ ss i en ed an ad[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b]
  3.                                 [b][color=BLUE]([/color][/b]cons 2 [color=#2f4f4f]"PARTID"[/color][b][color=BLUE])[/color][/b]
  4.                                 [b][color=BLUE]([/color][/b]cons 66 1[b][color=BLUE])[/color][/b]
  5.                                 [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=RED])[/color][/b]
  6.                                     [b][color=RED]([/color][/b]cons 410 [b][color=PURPLE]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
  7.                                     [b][color=RED]([/color][/b]cons 67 [b][color=PURPLE]([/color][/b]- 1 [b][color=TEAL]([/color][/b]getvar [color=#2f4f4f]"TILEMODE"[/color][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  8.       [b][color=NAVY]([/color][/b]setq i [b][color=MAROON]([/color][/b]sslength ss[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]minusp [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1- i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  10.              [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b]
  11.                    ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  12.                    an [b][color=GREEN]([/color][/b]entnext en[b][color=GREEN])[/color][/b]
  13.                    ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  14.              [b][color=MAROON]([/color][/b]entmod [b][color=GREEN]([/color][/b]subst [b][color=BLUE]([/color][/b]cons 1 [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 8 ed[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  15.                             [b][color=BLUE]([/color][/b]assoc 1 ad[b][color=BLUE])[/color][/b] ad[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  16.              [b][color=MAROON]([/color][/b]entupd en[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  17. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
(66.1)表示属性跟随
 
我仍然使用(0。“INSERT”),因为形状实体也有第2组字符串名称。你再也找不到它们了,但它们仍然存在。
 
祝你好运-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:53:56 | 显示全部楼层
 
很好的一个大卫,我完全错过了块名和属性dxf在我的ssget。。。我觉得我越来越粗心了。。
回复

使用道具 举报

7

主题

29

帖子

22

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 16:01:48 | 显示全部楼层
我看到我写了这封信,你所有的帮助都很有意义。就目前而言,我想我只需要编辑我的块,将所需的属性更改放在第一个位置,这将使我在我的例程中走得更远。但就在我们讨论这个问题的时候。如何循环遍历属性以找到我想要的属性?是否存在NEXTTAB变量或函数?或者我需要做一些LAMBDA代码来获得所有这些代码的列表,然后寻找我想要的?还是我只是把这条路弄得太复杂了?lol:D
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:06:18 | 显示全部楼层
如果您知道属性的名称,只需使用以下内容:
 
  1. (while (/= "SEQEND" (cdr (assoc 0 (entget Ent1))))
  2.    (cond (= "ATT1" (cdr (assoc 2 (entget Ent1))))
  3.      ... change this attribute ...
  4.      (= "ATT2" (....etc etc))
  5.    )
  6.    (setq Ent1 (entnext Ent1))
  7. )
  8.    

 
i、 e,循环遍历属性,直到达到sequend,如果属性名称与用户输入的名称匹配,则将其更改为其他名称。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:18:34 | 显示全部楼层
例如,这是David在这里为另一个人写的一封信,用于更改多个ATT:
 
  1. 4

[/color
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 16:26:24 | 显示全部楼层
这个请求不时出现,因此这里有一个简化的ATTEDIT,将指定ATTRIB标记名的所有实例更改为选定插入中的给定值:
大卫
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:27 , Processed in 1.152161 second(s), 70 queries .

© 2020-2025 乐筑天下

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