明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2010|回复: 21

[提问] 请教下使用lisp或者VBA获取动态块中的阵列参数和修改

[复制链接]
发表于 2023-9-18 14:56:35 | 显示全部楼层 |阅读模式



如图所示,可以使用编程获取到行列偏移的值吗






本帖子中包含更多资源

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

x
发表于 2023-9-18 16:45:46 | 显示全部楼层
  1. (defun c:tt()
  2. (SETQ E          (CAR (ENTSEL))
  3.       BLK (vlax-ename->vla-object E)
  4. )
  5. (princ(LM:getdynpropvalue blk "标注"))
  6. (LM:setdynpropvalue  blk "标注" 2000 )
  7. )
  8. ;; Get Dynamic Block Property Value  -  Lee Mac
  9. ;; Returns the value of a Dynamic Block property (if present)
  10. ;; blk - [vla] VLA Dynamic Block Reference object
  11. ;; prp - [str] Dynamic Block property name (case-insensitive)

  12. (defun LM:getdynpropvalue ( blk prp )
  13.     (setq prp (strcase prp))
  14.     (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value)))
  15.         (vlax-invoke blk 'getdynamicblockproperties)
  16.     )
  17. )




  18. ;; Set Dynamic Block Property Value  -  Lee Mac
  19. ;; Modifies the value of a Dynamic Block property (if present)
  20. ;; blk - [vla] VLA Dynamic Block Reference object
  21. ;; prp - [str] Dynamic Block property name (case-insensitive)
  22. ;; val - [any] New value for property
  23. ;; Returns: [any] New value if successful, else nil
  24. ;; 设置动态块特性值-Lee Mac
  25. ;; 修改动态块特性的值(如果存在)
  26. ;; blk-[vla]vla动态块引用对象
  27. ;; prp-[str]动态块属性名称(不区分大小写)
  28. ;; val-[any]属性的新值
  29. ;; 返回:[any]如果成功,则返回新值,否则返回nil
  30. ;;;设置动态块属性值
  31. (defun LM:setdynpropvalue (blk prp val)
  32.   (setq prp (strcase prp))
  33.   (vl-some
  34.     '(lambda (x)
  35.        (if (= prp (strcase (vla-get-propertyname x)))
  36.          (progn
  37.            (vla-put-value
  38.              x
  39.              (vlax-make-variant
  40.                val
  41.                (vlax-variant-type (vla-get-value x))
  42.              )
  43.            )
  44.            (cond (val)
  45.                  (t)
  46.            )
  47.          )
  48.        )
  49.      )
  50.     (vlax-invoke blk 'getdynamicblockproperties)
  51.   )
  52. )



可以去找找leemac的函数


注意:vba和lisp只能是获取改变已经有的参数,无法创建新的。想要创建动态块需要net和arx

点评

瞎引导,需要数据在列阵动作上,从块参照能获取个鬼。  发表于 2023-9-18 17:01
 楼主| 发表于 2023-9-18 17:25:30 | 显示全部楼层
liuhe 发表于 2023-9-18 16:45
可以去找找leemac的函数

好像不行,要获取的数据不在块参照上,我要获取动态块里面指定的阵列动作的列偏移的数据。这个数据好像是不显示在块参照的特性面板上显示的,我并不是要获取“标注”这个属性的数据,而是图片中箭头处的数据
 楼主| 发表于 2023-9-22 17:28:46 | 显示全部楼层
guankuiwu 发表于 2023-9-22 16:16
感觉这个块有些问题吧,那个阵列固定了1500间隔了。这样的块在cad里做不出来的话程序应该不能实现。

你不用管那个标注的1500,标注的那个1500和这个列偏移的1500是有本质区别的,只要获取到列偏移中的这个数值即可
发表于 2023-9-18 16:26:47 | 显示全部楼层
不能,桌子没有开放提供接口
发表于 2023-9-18 17:06:50 | 显示全部楼层
liuhe 发表于 2023-9-18 16:45
可以去找找leemac的函数

那能不能算出来阵列个数呢?
 楼主| 发表于 2023-9-18 18:00:36 | 显示全部楼层
kozmosovia 发表于 2023-9-18 16:26
不能,桌子没有开放提供接口

这偏移的值是新建阵列动作时指定的。  官方没有开放获取和修改这个值的接口是吗

本帖子中包含更多资源

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

x
发表于 2023-9-18 23:42:27 | 显示全部楼层
是的,这个数据是附着在参数动作实体上的,没有函数能获取动作实体。
要获取,只能进入块编辑器,遍历所有实体找
发表于 2023-9-19 09:47:27 | 显示全部楼层
ObjectARX 有接口。
发表于 2023-9-19 15:51:29 | 显示全部楼层
本帖最后由 guankuiwu 于 2023-9-19 16:54 编辑

可以的,做好动态块,用修改动态块属性值的就可以修改。搜下,论坛里有相关的函数
 楼主| 发表于 2023-9-19 16:38:50 | 显示全部楼层

通过什么方式实现?请教下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 06:42 , Processed in 0.196291 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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