乐筑天下

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

[编程交流] 块颜色

[复制链接]

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 08:02:53 | 显示全部楼层
 
如果有多个块具有相同的标记,该程序将仅更改拾取块中属性的颜色。其中,使用“attsync”将更改所有类似块的属性颜色。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:05:35 | 显示全部楼层
我的错误是,我没有首先测试代码。
 
看看这个。。。。。。。
 
  1. (defun c:test (/ attribute b blk color i lst name obj sn ss do)
  2. ;;;;;            Tharwat 01. June. 2012                 ;;;;;
  3. ;;;;;              This peice of code to change all           ;;;;;
  4. ;;;;;  selected objects (Blocks / Attribted Block / Objects)   ;;;;;
  5. (if (not acdoc)
  6.    (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  7. )
  8. (if (and (setq color (acad_colordlg 7 t))
  9.           (setq ss (ssget "_:L"))
  10.      )
  11.    (progn
  12.      (vla-startundomark acdoc)
  13.      (repeat (setq i (sslength ss))
  14.        (setq obj (vlax-ename->vla-object
  15.                    (setq sn (ssname ss (setq i (1- i))))
  16.                  )
  17.        )
  18.        (cond
  19.          ((eq (cdr (assoc 66 (entget sn))) 1)
  20.           (progn
  21.             (setq do t)
  22.             (vlax-for block (setq b (vla-item (vla-get-blocks acdoc)
  23.                                               (cdr (assoc 2 (entget sn)))
  24.                                     )
  25.                             )
  26.               (vlax-for x b (vla-put-color x color))
  27.             )
  28.             (foreach attribute (vlax-invoke obj 'Getattributes)
  29.               (vla-put-color attribute color)
  30.             )
  31.           )
  32.          )
  33.          ((and (eq (cdr (assoc 0 (entget sn))) "INSERT")
  34.                (not (member (cdr (assoc 2 (entget sn))) lst))
  35.           )
  36.           (progn
  37.             (setq lst (cons (cdr (assoc 2 (entget sn))) lst))
  38.             (vlax-for block
  39.                       (setq blk (vla-item (vla-get-blocks acdoc)
  40.                                           (cdr (assoc 2 (entget sn)))
  41.                                 )
  42.                       )
  43.               (if (eq :vlax-false (vla-get-isXref blk))
  44.                 (vlax-for x blk
  45.                   (if
  46.                     (not
  47.                       (eq "AcDbBlockReference" (vla-get-objectname x))
  48.                     )
  49.                      (vla-put-color x color)
  50.                   )
  51.                 )
  52.               )
  53.             )
  54.           )
  55.          )
  56.          (t (vla-put-color obj color))
  57.        )
  58.      )
  59.      (if do
  60.        (vl-cmdf "_.attsync"
  61.                 "_name"
  62.                 (cdr (assoc 2 (entget sn)))
  63.                 ""
  64.        )
  65.      )
  66.      (vla-regen acdoc acAllViewports)
  67.      (vla-endundomark acdoc)
  68.    )
  69.    (princ)
  70. )
  71. (princ "\n Written by Tharwat Al Shoufi ")
  72. (princ)
  73. )
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 08:09:51 | 显示全部楼层
@塔尔瓦特。。。现在很好。。。非常感谢。
S
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:11:24 | 显示全部楼层
 
谢谢你Steve
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:15:52 | 显示全部楼层
我对您的代码Tharwat有一些评论和警告,请从中吸取您的经验:
 
1)
 
如果用户选择三维多段线会怎样?
 
2)
 
我特别关注你们节目的这两部分。
 
因为,对于选定的每个不同的非属性块或属性块,您首先检索文档块集合,但更令人担忧的是,您正在重复迭代块定义中包含的每个对象,迭代次数等于块中对象的数量。
 
这是您的代码当前正在执行的操作:
 
因此,如果一个块包含100个对象(并非罕见,如果有任何情况,这可能是一个较低的估计值),代码将在10000个对象上迭代,因为每个对象被处理100次。。。!!!
 
3)
 
由于AttSync操作更新块引用以反映对块定义内属性所做的任何更改,因此此过程只需执行一次,而不是针对每个块引用。
 
编辑:我看到你已经更新了你的代码来解决这个问题,因为写这篇文章。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:19:37 | 显示全部楼层
值得一提的是,附件是我对这项任务的看法。
 
附加的程序将允许用户修改图形中定义的多个块内所有对象(位于解锁层上)的颜色特性。
 
该程序将使用标准块、属性块和动态块。
 

BlockColorV1-0。lsp
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 08:20:10 | 显示全部楼层
谢谢李,这很好用。Tharwat的代码和你的代码产生了相同的结果,但将用于不同的场景。你的两个代码将使我的生活更轻松。现在我只需要将其重命名为“BCT”和“BCL”,我是一个快乐的球童。
 
请注意,您将其命名为bcolor_2;1.0版。这是否意味着您稍后将改进此代码并将其添加到您的程序(网站)?如果是这样,是否可以添加最后选定块的预览。我不需要它,但它可能会很酷。再次感谢各位!
 
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:24:45 | 显示全部楼层
 
哎呀,我忘了3D多边形。
 
 
这是正确的,它的循环比需要的要多。所以今天晚些时候我会继续研究,然后再回来。
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:27:31 | 显示全部楼层
我认为现在效率要高得多。。。。
 
  1. 5
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:32:07 | 显示全部楼层
快速查看您的代码:
 
建议您交换订单。首先选择对象,然后提示输入颜色:
当前代码无法在选择时根据匿名名称识别有效名称:
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 04:48 , Processed in 0.943400 second(s), 70 queries .

© 2020-2025 乐筑天下

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