找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1615|回复: 5

[VBA函数]:VB编程,如何保存cad中的尺寸设置

[复制链接]
发表于 2002-6-14 17:16:06 | 显示全部楼层 |阅读模式

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

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

×
我用VB编程,调用autocad,处理一批某计算软件生成的Dwg文件。在这些文件里的尺寸设置都是英制,我要把他们转化成米制。为此,我要新建一个Dimension Style,然后把图中的尺寸都改成这个新建的Dimension Style。

下面是相应的语句:
Call SetDimStyle '该子程序通过设置dim的系统变量来改变当前的dimension style
AcadDoc.DimStyles.Add ("AWS") '新建一个AWS的dimension style
AcadDoc.ActiveDimStyle = AcadDoc.DimStyles.Item("AWS") '把AWS设为当前dim style
AcadDoc.DimStyles.Application.Update '更新整个dimstyles
AcadDoc.ActiveDimStyle.Application.Update '再更新当前dimstyle

我这里更新了两次,我甚至还用AcadDoc.Dimstyles.item("AWS").Application.Update来更新过,可是运行后,打开转化后的图纸,所有的尺寸的style是改成AWS了,但与我所设的不一样。在Dimension Style的对话框里,AWS的前面还是有个“+”号,只有在对话框里点击save后,"+"消失,图面上的尺寸才改过来。

我不知该采取何种办法才能在程序里直接办到保存新建的dimension style设置这一步?如有用ARX编程的,是否也是这样做?或者,在autocad里,如何不通过对话框来save当前的dimension style(这样我只有用lisp来简化这一步操作了)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-6-14 23:08:46 | 显示全部楼层
(针对2002)
1.你的三个Update是等效的,且对你的程序不是必需的。

2.就你提供的代码而言,运行后并不能修改尺寸对象的样式,“所有的尺寸的style是改成AWS了”难以理解。

3.AcadDoc.DimStyles.Add ("AWS") 已经把新建的标注样式保存到DWG。

4.与ARX和Lisp不同,ActiveX不能访问尺寸样式的单独属性。针对你的需求而言,可以遍历AcadDimension对象,修改其UnitsFormat属性,这很方便,不必通过修改DimStyle去实现。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-6-17 12:03:13 | 显示全部楼层
多谢灯火兄的回复。

我的问题可能没讲清楚,现补充如下:
1。我也想这三个update是等效的,但由于没有达到所期待的效果,故死马当作活马医,一股脑全用上,可还是没用:-)

2。帖中所提出的几行代码只是用来定义新的Dimension Style “AWS”。如灯兄所言,不是用来修改尺寸的样式。实际上,在程序的后面,有语句如
   ent.StyleName = "AWS"
是用来改尺寸对象的样式的,而且,也办到了。

3。我的问题是关于新建尺寸样式AWS时的。为说明清楚问题,现附上转换前的图MFLC_old.dwg,转换程序所作的就是:
a. 将图中所有的东西都放大25.4倍,通过 ent.ScaleEntity pt1, 25.4  语句实现,成功!
b. 新建一尺寸样式"AWS",通过设置Dimension 的系统变量来改变"AWS"的设置,有问题!
c. 将所有的dimension entity 的尺寸样式改为"AWS",成功!
转换后的图为附件中的MFLC_new.dwg,打开这个图可以看到上面的a和c两步都对了,而在b这步中,AWS也建了,它的设置也是对的。但所有的dimension entity显示并不对,这是因为在diemension style 对话框里,AWS的前面有一个+号,如果这时按Save钮,才能使+号消失,所有尺寸显示正常。

我的问题就是如何在程序里作到这一步,以达到手工去按Save的功效。

还望灯兄及各位高手多多帮忙。

顺便提一句,公司里用的还是R14,所以我希望能尽量用R14中有的VBA功能解决,如无法,R2000也行。

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

使用道具 举报

发表于 2002-6-17 13:19:47 | 显示全部楼层
1.R14的VBA没用过,只能就着2000及以后版本讨论。

2。Set objDimStyle = ThisDrawing.DimStyles.Add("AWS")之后,新建立的AWS使用的是默认的System Variables。应该用ThisDrawing.SetVariable设置一系列DIM族变量之后,再用objDimStyle.CopyFrom(ThisDrawing)方法把AWS的设置变成你期望的,最后执行ent.StyleName = "AWS"。注意:CopyFrom方法好像R14中还没有。

3.你的方法中的“+”是因为先有AWS,后来又修改系统变量,AutoCAD认为当前样式已经修改,不知道是保存父样式还是新建子样式(这一点R14和2000有不同)造成的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-6-18 12:54:09 | 显示全部楼层
先改dim系统变量再建AWS和先建AWS再改系统变量这两种办法我都试了,没用。

我翻遍了R14中关于VB的help文件,也没找到办法,也许是我用的版本太低了,R14里甚至连sendcommand都没有。

将就着,用lisp解决算了,command "dimstyle" "S" "AWS" "Y"。麻烦一些,没办法。

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

使用道具 举报

发表于 2002-6-18 13:07:07 | 显示全部楼层
不客气,现学现卖而已。

VBA的objDimStyle.CopyFrom(ThisDrawing)方法应该等同于lisp的(command "dimstyle" "S" "AWS" "Y"),可是我只有R14的VBA帮助文件,其中没找到CopyFrom方法。真不幸,R14的ActiveX功能差了一点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 05:06 , Processed in 0.395298 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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