乐筑天下

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

[编程交流] 匹配块的特性

[复制链接]

1

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2022-7-6 10:37:23 | 显示全部楼层 |阅读模式
我需要一个或多个lisp来匹配块的属性。
当我选择一个“源块”时,我将选择多个目标
块以匹配比例、颜色、线型、旋转、文字样式,
等每件事
谢谢
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

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

铜币
362
发表于 2022-7-6 10:43:31 | 显示全部楼层
 
块没有文字样式属性。
颜色和线型应使用MATCHPROP命令。
 
这就留下了一些与比例和旋转相匹配的东西。。。。。。
 
您没有更改*所有*插入的属性,对吗?
回复

使用道具 举报

1

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2022-7-6 10:46:26 | 显示全部楼层
对的
只是我选择的块。
回复

使用道具 举报

1

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2022-7-6 10:48:03 | 显示全部楼层
以下是有效的代码。。。
 
;;  匹配块
;;  将doner块的特性匹配到选定块
;;  特性包括x、y、z比例因子、旋转、颜色、图层、,
;;    线型和线型比例
(默认c:mb(/srcblk ensel srcobj prop blkobj blk color linetype
旋转x比例y比例z比例图层线型比例线宽打印样式名称
)
 
(if(setq srcblk(car(entsel“\n选择源块:”))
(setq srcobj(vlax ename->vla object srcblk)
x比例(vla get xscalefactor srcobj)
y比例(vla get yscalefactor srcobj)
z尺度(vla get zscalefactor srcobj)
旋转(vla get rotation srcobj)
颜色(vla get color srcobj)
线型(vla get linetype srcobj)
层(vla get layer srcobj)
线型比例(vla get linetypescale srcobj)
线宽(vla get lineweight srcobj)
 
)
)
 
(while(progn
(提示“\n选择目标块:”)
(setq blk(ssget“+:E:S”))
)
(setq blkobj(vlax ename->vla对象(ssname blk 0)))
 
(提示“\***有一个。***”)
(vla put xscalefactor blkobj x-scale)
(vla put yscalefactor blkobj y标尺)
(vla put zscalefactor blkobj z尺度)
(vla put rotation blkobj rotation)
(vla put Color blkobj Color)
(vla put线型blkobj线型)
(vla put layer blkobj layer)
(vla put linetypescale blkobj linetypescale)
(vla put线宽blkobj线宽)
 
 
)
(普林斯)
)
(提示“\***匹配加载的块,输入MB以运行。***”)
(普林斯)
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 10:51:15 | 显示全部楼层
您好-
嗯。。。这听起来正是我需要的
但我不明白你在底部“代码”上写的所有东西
那是什么?
当我看到这样的东西时,我通常只是放松,然后慢慢后退
看起来很复杂!
我是否要将其复制到记事本中并像Lisp程序一样“运行”它?
 
谢谢-
总费用
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-6 10:55:47 | 显示全部楼层
您也可以尝试以下方法:
加载此lisp后,从命令行将其调用为:
  1. Command: mpr_block
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-6 10:58:13 | 显示全部楼层
多亏了Katty测试了代码。修正了一些愚蠢的错误:
  1. (defun c:mpr_block (/              *kpblc-activedoc*
  2.            selset          ent
  3.            item          _kpblc-layer-status-restore
  4.            _kpblc-layer-status-save
  5.            *error*
  6.            )
  7. (defun *error* (msg)
  8.    (_kpblc-layer-status-restore)
  9.    (vla-endundomark *kpblc-activedoc*)
  10.    (princ msg)
  11.    (princ)
  12.    ) ;_ end of defun
  13. (defun _kpblc-layer-status-restore (/ item)
  14.    (if    *kpblc-list-layer-status*
  15.      (progn
  16.    (foreach item *kpblc-list-layer-status*
  17.      (vla-put-layeron (car item) (cdr (assoc "on" (cdr item))))
  18.      (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
  19.      (if (not (equal (vla-get-activelayer *kpblc-activedoc*) (car item)))
  20.        (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
  21.        ) ;_ end of if
  22.      ) ;_ end of foreach
  23.    (setq *kpblc-list-layer-status* nil)
  24.    ) ;_ end of progn
  25.      ) ;_ end of if
  26.    ) ;_ end of defun
  27. (defun _kpblc-layer-status-save (layers-on / item)
  28.    (if    *kpblc-list-layer-status*
  29.      (setq *kpblc-list-layer-status* nil)
  30.      ) ;_ end of if
  31.    (vlax-for item (vla-get-layers *kpblc-activedoc*)
  32.      (setq *kpblc-list-layer-status*
  33.         (append *kpblc-list-layer-status*
  34.             (list
  35.               (list item
  36.                 (cons "freeze" (vla-get-freeze item))
  37.                 (cons "lock" (vla-get-lock item))
  38.                 (cons "on" (vla-get-layeron item))
  39.                 ) ;_ end of list
  40.               ) ;_ end of list
  41.             ) ;_ end of append
  42.        ) ;_ end of setq
  43.      (if layers-on
  44.    (progn
  45.      (vla-put-layeron item :vlax-true)
  46.      (vla-put-lock item :vlax-false)
  47.      (if (not (equal (vla-get-activelayer *kpblc-activedoc*) item))
  48.        (vla-put-freeze item :vlax-false)
  49.        ) ;_ end of if
  50.      ) ;_ end of progn
  51.    ) ;_ end of if
  52.      ) ;_ end of vlax-for
  53.    ) ;_ end of defun
  54. (vl-load-com)
  55. (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
  56. (vla-startundomark *kpblc-activedoc*)
  57. (if (and (setq ent (entsel "\nSelect the block for source prop <Exit> : "))
  58.       (= (cdr (assoc 0 (entget (car ent)))) "INSERT")
  59.       (setq ent (vlax-ename->vla-object (car ent)))
  60.       ) ;_ end of and
  61.    (progn
  62.      (_kpblc-layer-status-save t)
  63.      (if (setq selset (ssget '((0 . "INSERT"))))
  64.    (while (and selset
  65.            (> (sslength selset) 0)
  66.            ) ;_ end of and
  67.      (setq item (ssname selset 0))
  68.      (ssdel item selset)
  69.      (foreach prop    '("color"        "layer"          "xscalefactor"
  70.              "yscalefactor"    "zscalefactor"    "rotation"
  71.              "linetype"        "lineweight"      "linetypescale"
  72.              )
  73.        (if    (and (vlax-property-available-p ent prop t)
  74.             (vlax-property-available-p (vlax-ename->vla-object item) prop t)
  75.             ) ;_ end of and
  76.          (vlax-put-property (vlax-ename->vla-object item) prop (vlax-get-property ent prop))
  77.          ) ;_ end of if
  78.        ) ;_ end of foreach
  79.      ) ;_ end of while
  80.    ) ;_ end of if
  81.      (_kpblc-layer-status-restore)
  82.      ) ;_ end of progn
  83.    ) ;_ end of if
  84. (vla-regen *kpblc-activedoc* acactiveviewport)
  85. (vla-endundomark *kpblc-activedoc*)
  86. (princ)
  87. ) ;_ end of defun
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 11:00:11 | 显示全部楼层
嘿,伙计们,太棒了。。。。。但是
 
可以对其进行修改以处理动态块吗?
回复

使用道具 举报

6

主题

30

帖子

24

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:02:47 | 显示全部楼层
非常好,非常感谢
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:08:20 | 显示全部楼层
只是为了好玩。。。
 
此外,kbplc的效率极低,因为它每次试图编辑一个选定块时都会检索源对象的属性。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:09 , Processed in 0.946779 second(s), 72 queries .

© 2020-2025 乐筑天下

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