明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2101|回复: 5

[已解答] 怎么修改动态块属性

[复制链接]
发表于 2021-4-16 19:25:14 | 显示全部楼层 |阅读模式
本帖最后由 highflybir 于 2021-4-17 08:28 编辑

两个相同的动态块,将其中一个属性,赋值给另一个
  1. (defun c:copypps (/ obj ppts)
  2.   (setq  obj        (vlax-ename->vla-object (car (entsel)))
  3.   AllowedValues nil
  4.   ppts nil
  5.   )
  6.   (if (setq obj (vlax-invoke obj 'GetDynamicBlockProperties)
  7.       ent obj)
  8.     (progn
  9.       (repeat (length obj)
  10.   (if (= (vlax-get (car obj) 'show) -1)
  11.     (setq ppts (append ppts (list (vlax-get (car obj) 'Value))))
  12.   )
  13.   (setq obj (cdr obj))
  14.       )
  15.       (setq obj  (vlax-invoke
  16.       (vlax-ename->vla-object (car (entsel)))
  17.       'GetDynamicBlockProperties
  18.     )
  19.       i obj
  20.       )
  21.       (while ppts
  22.   (if (= (vlax-get (car obj) 'show) -1)
  23.     (progn
  24.       (vlax-put (car obj) 'Value (car ppts))
  25.       (setq obj  (cdr obj)
  26.       ppts (cdr ppts)
  27.       )
  28.     )
  29.     (setq obj (cdr obj))
  30.   )
  31.       )
  32.     )
  33.   )  
  34.   (princ)
  35. )
对于长度、可见性等属性都可以正常赋值,但如果是翻转属性,就会报错说参数错误,请教高老师,这种情况,怎么处理,谢谢。
 楼主| 发表于 2021-4-16 23:08:27 | 显示全部楼层
竟然自己找到答案了,函数修改如下:
  1. (defun c:copypps (/ obj ppts)
  2.   ;获取块的对象名
  3.   (setq        obj  (vlax-ename->vla-object (car (entsel)))
  4.         ppts nil
  5.   )
  6.   ;判断是否为动态块,如果是,获取动态块属性
  7.   (if (setq obj (vlax-invoke obj 'GetDynamicBlockProperties))
  8.     (progn
  9.       (repeat (length obj)
  10.         ;判断是否为只读属性,不是,则记录value值
  11.         (if (= (vlax-get (car obj) 'ReadOnly) 0)
  12.           (setq ppts (append ppts (list (vlax-get-property (car obj) 'Value))))
  13.         )
  14.         (setq obj (cdr obj))
  15.       )
  16.       ;获取要修改属性动态块的属性表,该块必须与需复制块是同类块
  17.       (setq obj        (vlax-invoke
  18.                   (vlax-ename->vla-object (car (entsel)))
  19.                   'GetDynamicBlockProperties
  20.                 )
  21.       )
  22.       ;将所有非只读属性,按第1个块的值进行修改
  23.       (while ppts
  24.         (if (= (vlax-get (car obj) 'ReadOnly) 0)
  25.           (progn
  26.             (vlax-put-property (car obj) 'Value (car ppts))
  27.             (setq obj  (cdr obj)
  28.                   ppts (cdr ppts)
  29.             )
  30.           )
  31.           (setq obj (cdr obj))
  32.         )
  33.       )
  34.     )
  35.   )
  36.   (princ)
  37. )
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-18 02:44:46 | 显示全部楼层
谢谢分享 学习了
发表于 2021-4-21 20:56:57 | 显示全部楼层
大佬是否可以改为框选模式,谢谢
发表于 2023-12-11 22:13:10 | 显示全部楼层
为何只能改一个拉伸长度,没有阵列?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:43 , Processed in 0.174443 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表