乐筑天下

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

[编程交流] 从一个块复制属性

[复制链接]

6

主题

19

帖子

7

银币

初来乍到

Rank: 1

铜币
38
发表于 2022-7-5 17:51:46 | 显示全部楼层 |阅读模式
我正在寻找一种方法,将属性从一个块复制到许多其他块,下面的内容非常接近,除了我需要选择几个目标块,而不是选择一个目标块。
 
感谢李·麦克:
 
  1. (defun c:sla ( / myentsel des src val )
  2.    (setq myentsel
  3.        (lambda ( msg / ent enx )
  4.            (while
  5.                (progn (setvar 'errno 0) (setq ent (car (entsel msg)))
  6.                    (cond
  7.                        (   (= 7 (getvar 'errno))
  8.                            (princ "\nMissed, try again.")
  9.                        )
  10.                        (   (null ent) nil)
  11.                        (   (/= "INSERT" (cdr (assoc 0 (setq enx (entget ent)))))
  12.                            (princ "\nSelected object is not a block.")
  13.                        )
  14.                        (   (/= 1 (cdr (assoc 66 enx)))
  15.                            (princ "\nSelected block is not attributed.")
  16.                        )
  17.                    )
  18.                )
  19.            )
  20.            (if ent (vlax-invoke (vlax-ename->vla-object ent) 'getattributes))
  21.        )
  22.    )
  23.    (if (and (setq src (myentsel "\nSelect source block: "))
  24.             (setq des (myentsel "\nSelect destination block: "))
  25.             (setq src (mapcar '(lambda ( x ) (cons (vla-get-tagstring x) (vla-get-textstring x))) src))
  26.        )
  27.        (foreach att des
  28.            (if (setq val (cdr (assoc (vla-get-tagstring att) src)))
  29.                (vla-put-textstring att val)
  30.            )
  31.        )
  32.    )
  33.    (princ)
  34. )
  35. (vl-load-com) (princ)
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:10:22 | 显示全部楼层
在普通AutoLisp中,可能:
 
  1. [color=#8b4513];;;COPY ATTRIButes From Source To Targets Based on TAGNAMES[/color]
  2. [b][color=BLACK]([/color][/b]defun c:atts2t [b][color=FUCHSIA]([/color][/b]/ ss sn an ad sl i tn td tg[b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not sn[b][color=NAVY])[/color][/b]
  4.         [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nSelect SOURCE Insert"[/color][b][color=MAROON])[/color][/b]
  5.              [b][color=MAROON]([/color][/b]setq ss [b][color=GREEN]([/color][/b]ssget '[b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=RED])[/color][/b][b][color=RED]([/color][/b]66 . 1[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  6.              [b][color=MAROON]([/color][/b]= [b][color=GREEN]([/color][/b]sslength ss[b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b]
  7.              [b][color=MAROON]([/color][/b]setq sn [b][color=GREEN]([/color][/b]ssname ss 0[b][color=GREEN])[/color][/b]
  8.                    an [b][color=GREEN]([/color][/b]entnext sn[b][color=GREEN])[/color][/b]
  9.                    ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  10. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]= [color=#2f4f4f]"ATTRIB"[/color] [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 0 ad[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  11.         [b][color=NAVY]([/color][/b]setq sl [b][color=MAROON]([/color][/b]cons [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 2 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 1 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] sl[b][color=MAROON])[/color][/b]
  12.               an [b][color=MAROON]([/color][/b]entnext an[b][color=MAROON])[/color][/b]
  13.               ad [b][color=MAROON]([/color][/b]entget an[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  14. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect TARGET Inserts"[/color][b][color=NAVY])[/color][/b]
  15.       [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]66 . 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  16.       [b][color=NAVY]([/color][/b]setq i 0[b][color=NAVY])[/color][/b]
  17.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq tn [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  18.              [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]not [b][color=BLUE]([/color][/b]eq tn sn[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  19.                  [b][color=GREEN]([/color][/b]progn
  20.                    [b][color=BLUE]([/color][/b]setq td [b][color=RED]([/color][/b]entget tn[b][color=RED])[/color][/b]
  21.                          an [b][color=RED]([/color][/b]entnext tn[b][color=RED])[/color][/b]
  22.                          ad [b][color=RED]([/color][/b]entget an[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  23.                    [b][color=BLUE]([/color][/b]princ [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\n"[/color] [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 2 td[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  24.                    [b][color=BLUE]([/color][/b]while [b][color=RED]([/color][/b]= [color=#2f4f4f]"ATTRIB"[/color] [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 0 ad[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
  25.                           [b][color=RED]([/color][/b]setq tg [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 2 ad[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
  26.                           [b][color=RED]([/color][/b]and [b][color=PURPLE]([/color][/b]assoc tg sl[b][color=PURPLE])[/color][/b]
  27.                                [b][color=PURPLE]([/color][/b]entmod [b][color=TEAL]([/color][/b]subst [b][color=OLIVE]([/color][/b]cons 1 [b][color=GRAY]([/color][/b]cdr [b][color=AQUA]([/color][/b]assoc tg sl[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b]
  28.                                               [b][color=OLIVE]([/color][/b]assoc 1 ad[b][color=OLIVE])[/color][/b] ad[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
  29.                           [b][color=RED]([/color][/b]setq an [b][color=PURPLE]([/color][/b]entnext an[b][color=PURPLE])[/color][/b]
  30.                                 ad [b][color=PURPLE]([/color][/b]entget an[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  31.                    [b][color=BLUE]([/color][/b]entupd tn[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  32.              [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  33. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:26:54 | 显示全部楼层
还有一个:
https://www.theswamp.org/index.php?topic=43082.msg483004#msg483004
回复

使用道具 举报

6

主题

19

帖子

7

银币

初来乍到

Rank: 1

铜币
38
发表于 2022-7-5 18:48:22 | 显示全部楼层
多亏了你们俩,他们都做了我需要的事。出于好奇,有什么方法可以自动化这个过程吗?我的意思是,如果我有一个具有特定名称的源块,比如具有名为ID的属性标记的设备和具有名为CONNECTION的属性标记的目标块,还有一个名为ID的属性标记,是否有一种方法,如果两个块接触,信息可以自动传输(当然,当lisp运行时)。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 19:06:15 | 显示全部楼层
不客气。
 
是的,你可以把它变成sinlge命令。这将是非常具体的项目,需要一个很好的错误捕捉和条件检查位-大卫
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 23:58 , Processed in 0.763503 second(s), 62 queries .

© 2020-2025 乐筑天下

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