找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6071|回复: 10

[求助] 求教,获取动态块动态参数值后如何进行修改

[复制链接]

已领礼包: 16个

财富等级: 恭喜发财

发表于 2016-8-13 20:41:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
如题,在获取动态块参数值后  bp = objBlkDef.GetDynamicBlockProperties  可以得到 bp(0).Value 值,但是不会改,求教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6个

财富等级: 恭喜发财

发表于 2016-8-14 12:33:58 | 显示全部楼层
不用VBA,我这有个C# .NET的例子,你看下,修改到VBA下

读取和修改动态块的属性代码:

  1. Here is the C# version:

  2. [CommandMethod("SetDynamicBlkProperty")]
  3. static public void SetDynamicBlkProperty()
  4. {
  5.     Document doc = Application.DocumentManager.MdiActiveDocument;
  6.     Database db = doc.Database;
  7.     Editor ed = doc.Editor;

  8.     PromptEntityOptions prEntOptions = new PromptEntityOptions(
  9.         "Select a dynamic block reference...");

  10.     PromptEntityResult prEntResult = ed.GetEntity(prEntOptions);

  11.     if (prEntResult.Status != PromptStatus.OK)
  12.     {
  13.         ed.WriteMessage("Error...");
  14.         return;
  15.     }

  16.     using(Transaction Tx = db.TransactionManager.StartTransaction())
  17.     {
  18.         BlockReference bref = Tx.GetObject(
  19.             prEntResult.ObjectId,
  20.             OpenMode.ForWrite)
  21.                 as BlockReference;

  22.         if (bref.IsDynamicBlock)
  23.         {
  24.             DynamicBlockReferencePropertyCollection props =
  25.                 bref.DynamicBlockReferencePropertyCollection;

  26.             foreach (DynamicBlockReferenceProperty prop in props)
  27.             {
  28.                 object[] values = prop.GetAllowedValues();

  29.                 //Switch Property
  30.                 if (prop.PropertyName == "Visibility" && !prop.ReadOnly)
  31.                 {
  32.                     if (prop.Value.ToString() == values[0].ToString())
  33.                         prop.Value = values[1];

  34.                     else
  35.                         prop.Value = values[0];
  36.                 }
  37.             }
  38.         }

  39.         Tx.Commit();
  40.     }
  41. }

点评

感谢回帖,新手,勉强有些basic基础,只会一点VBA的东西,C#看不太懂,例子中似乎是先获取了可见性参数的允许值,然后赋值给参数,嗯,自己在做的是一个线性参数的动态块,不知这里是不是同样的处理手法,而且,刚才  详情 回复 发表于 2016-8-14 14:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 16个

财富等级: 恭喜发财

 楼主| 发表于 2016-8-14 14:58:08 | 显示全部楼层
CSharpBoy 发表于 2016-8-14 12:33
不用VBA,我这有个C# .NET的例子,你看下,修改到VBA下

读取和修改动态块的属性代码:

感谢回帖,新手,勉强有些basic基础,只会一点VBA的东西,C#看不太懂,例子中似乎是先获取了可见性参数的允许值,然后赋值给参数,嗯,自己在做的是一个线性参数的动态块,不知这里是不是同样的处理手法,而且,刚才在 AcadBlockReference 方法里面翻了下,也没有找到类似例子中的方法,求教。

点评

那还是建议学下VLISP吧,这个对新手来说容易上手,功能也强大。  详情 回复 发表于 2016-8-14 15:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-8-14 15:20:41 | 显示全部楼层
桃朱红 发表于 2016-8-14 14:58
感谢回帖,新手,勉强有些basic基础,只会一点VBA的东西,C#看不太懂,例子中似乎是先获取了可见性参数的 ...

那还是建议学下VLISP吧,这个对新手来说容易上手,功能也强大。

点评

VBA是之前用在excel里面做一些自定义函数时用的,之前的EXCEL与CAD交互都是用的VBA生成SCR再贴在CAD里面实现,是技术不多的我能想到最方便的办法了,之后在处理动态块属性时遇到了障碍,SCR无论如何都处理不了,于是  详情 回复 发表于 2016-8-14 19:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-8-14 15:38:19 | 显示全部楼层
把程序贴全了,只会简单修改

点评

楼下解决了我的问题,小打小闹的东西,上不了台面,就不在这里发了。  详情 回复 发表于 2016-8-14 19:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-8-14 16:11:04 | 显示全部楼层
VBA 很不顺手,修改拉伸参数的例子

  1. Sub Example_GetEntity()

  2.     Dim returnObj As AcadObject, i As Integer
  3.     Dim blkref As AcadEntity
  4.     Dim basePnt As Variant

  5.    
  6.     ' The following example waits for a selection from the user

  7.     ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object"
  8.    
  9.     If Err <> 0 Then
  10.         Err.Clear
  11.         MsgBox "Program ended.", , "GetEntity Example"
  12.         Exit Sub
  13.     Else
  14.         If Not returnObj.IsDynamicBlock Then
  15.           Exit Sub
  16.         End If
  17.         Set blkref = returnObj
  18.         
  19.         Dim dybprop As Variant
  20.         
  21.        dybprop = blkref.GetDynamicBlockProperties
  22.       
  23.        For i = LBound(dybprop) To UBound(dybprop) 'Goes through Results
  24.                     If dybprop(i).PropertyName = "距离1" Then 'Looks for the PropertyName
  25.                     dybprop(i).Value = 300#    'Change the Value of the PropertyName
  26.                     End If
  27.        Next i
  28.     End If

  29. End Sub

点评

感激不尽,问题解决了,网上这些东西非常少,实在是没有找到解决方法,请问在 varattributes(0).Value = 10# 中 “#” 这个是表达什么意思?嗯,在其他的比如可见性参数,翻转参数又该怎么解决呢?哪里可以找到这些  详情 回复 发表于 2016-8-14 19:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 16个

财富等级: 恭喜发财

 楼主| 发表于 2016-8-14 19:35:07 | 显示全部楼层
newer 发表于 2016-8-14 15:20
那还是建议学下VLISP吧,这个对新手来说容易上手,功能也强大。

VBA是之前用在excel里面做一些自定义函数时用的,之前的EXCEL与CAD交互都是用的VBA生成SCR再贴在CAD里面实现,是技术不多的我能想到最方便的办法了,之后在处理动态块属性时遇到了障碍,SCR无论如何都处理不了,于是想到在CAD里用VBA实现交互,在网上找了些资料学习了一些,动态块这里实在是没有找到相关的处理方法,于是发帖求助,Vlisp不太了解,也会学习下的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 16个

财富等级: 恭喜发财

 楼主| 发表于 2016-8-14 19:36:10 | 显示全部楼层
本帖最后由 桃朱红 于 2016-8-14 19:40 编辑
st788796 发表于 2016-8-14 15:38
把程序贴全了,只会简单修改

6楼解决了问题,小打小闹的东西,上不了台面,就不在这里发了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 16个

财富等级: 恭喜发财

 楼主| 发表于 2016-8-14 19:39:20 | 显示全部楼层
本帖最后由 桃朱红 于 2016-8-14 22:55 编辑
st788796 发表于 2016-8-14 16:11
VBA 很不顺手,修改拉伸参数的例子

感激不尽,问题解决了,网上这些东西非常少,实在是没有找到解决方法,嗯,在其他的比如可见性参数,翻转参数又该怎么解决呢?哪里可以找到这些对象的方法和函数呢?需要这方面的知识呀。还望不吝赐教。

点评

使用bing搜索会找到一些  详情 回复 发表于 2016-8-15 14:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-8-15 14:32:39 来自手机 | 显示全部楼层
桃朱红 发表于 2016-8-14 19:39
感激不尽,问题解决了,网上这些东西非常少,实在是没有找到解决方法,嗯,在其他的比如可见性参数,翻转 ...

使用bing搜索会找到一些

点评

谷歌上也没?  详情 回复 发表于 2016-8-15 14:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-8-15 14:47:08 | 显示全部楼层
csharp 发表于 2016-8-15 14:32
使用bing搜索会找到一些

谷歌上也没?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-29 02:46 , Processed in 0.377114 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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