QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 5218|回复: 2
收起左侧

[已解决] [VBA]VBA新建标注子样式后对齐方式不更新!!!!!

[复制链接]
发表于 2011-5-18 23:16:37 | 显示全部楼层 |阅读模式 来自: 中国四川德阳

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
编了个函数新建标注样式,和直径、半径、角度子样式。各子样式只是修改了文字对齐方式
4 l. s/ A* U# j+ }+ m. |( u
2 n+ _! _' l. B/ M7 m! q  S9 T8 v在标注样式设置对话框里能看见子样式已经新建成功了,如图所示。; D. Q- I$ L6 d6 v0 ?- |& F( }
QQ.jpg + u" y3 l; a% q6 [" y$ o
但是对齐方式已经显示为ISO了,但半径标注依然显示的是尺寸线外也与尺寸线对其。需要再单击一下“ISO标准”,标注文字才会横过来。在新建标注子样式后用了Regen方法也不行。( E% L* L. p& G+ n
0 b& i# g% y5 u# y
附上源码,求高手解答。
/ E! j" s$ N1 x% ^5 C- a
  1. # ?: x# |( S+ N$ l( m/ c4 g- ]
  2. Public Function myDimStyleGB()6 x% |) ~1 H1 E: q- l. C" I
  3.     On Error Resume Next
    ( f) D: j6 l/ j1 N+ G
  4.     Call AddHZ) G- Q* }" k, T" u6 R" g
  5.     Dim dimStyle As AcadDimStyle2 c$ _9 ?: K! F. i+ F' n( A
  6.     Dim DimRa As AcadDimStyle% @+ L( T9 Z' x% m/ n' t: j
  7.     Dim DimAn As AcadDimStyle
    ' V; k. \4 q' C$ F% V
  8.     Dim DimDi As AcadDimStyle
    6 P( H. i# R7 }- f& g
  9.    
    - P6 [+ ?% _/ \" T, r  \
  10.     Set dimStyle = ThisDrawing.DimStyles.Add("myDimStyle")* R2 J3 K5 K# e2 T/ Q$ Y- U$ k
  11.     Set DimRa = ThisDrawing.DimStyles.Add("myDimStyle$4")
    ' A  x$ ~* s' e7 H( |
  12.     Set DimAn = ThisDrawing.DimStyles.Add("myDimStyle$2")
      e8 Y0 j9 l. c8 p; D3 z
  13.     Set DimDi = ThisDrawing.DimStyles.Add("myDimStyle$3")
    + q7 F- C; }6 X; y% A7 A
  14.    
    1 W/ @2 v' @/ g& D, `
  15.     ThisDrawing.ActiveDimStyle = dimStyle '激活该标注样式
    ' H* J8 b! y9 P
  16.     Dim dDimLFac As Double: dDimLFac = 1- l( p$ M3 `7 L) o' H% k; C5 S- p
  17. '    dDimLFac = ThisDrawing.Utility.GetReal("请输入标注比例:<" & dDimLFac & ">")
    + L- L+ S' q( v! z! j
  18.     With ThisDrawing* y! l$ n% P; z* k
  19.         '第一组定义全局和线性比例因子7 `4 O" z: J8 W* r: A, n) \& r
  20.         .SetVariable "DimScale", 1     '设置全局比例因子0 |6 z4 S( o- w' V4 x+ V
  21.          .SetVariable "DimLFac", dDimLFac   '线性比例因子. '1'=1:1, '2'=2:1,'.5'=1:2等/ _5 k/ I0 m$ T0 k
  22.         '定义典型的标注特性, P+ Q8 n5 S( L9 L! K9 `5 L
  23.         .SetVariable "DimADec", 0      '控制角度标注的显示精确位数" m4 g" e3 c9 ]. g" C. ^2 t, G
  24.         .SetVariable "DimAssoc", 2     '控制标注对象的关联性
    1 _5 j, v  i1 l! |
  25.                                        '实际上该系统变量由图形控制
    9 L. S- m1 |- }+ m) v) z+ z
  26.         .SetVariable "DimASz", 2.5        '控制尺寸线、引线箭头的大小。并控制钩线的大小8 o' R) c' y  w: r; f
  27.         .SetVariable "DimAtFit", 3    '当尺寸界线的空间不足以同时放下标注文字和箭头时,确定这两者的排列方式
    2 g6 g, ?: X. Y
  28.                                         '0 将文字和箭头均放置于尺寸界线之外1 Q5 b$ k& E! |& b4 w
  29.                                         '1  先移动箭头,然后移动文字
    - O% b, S* w( j4 R3 u* ^6 \
  30.                                         '2  先移动文字,然后移动箭头
    6 c" ^; M$ E! V  b& B& F; V
  31.                                         '3  移动文字和箭头中较合适的一个
    ) C0 i# y1 f- `1 l7 b: v
  32.         .SetVariable "DimAUnit", 0     '设置角度标注的单位格式5 E7 K  J, Z) \' k" r
  33.                                        '0 十进制度数2 p' ?  j" U. h
  34.         .SetVariable "DimAZin", 0      '对角度标注作消零处理4 m3 ^# |1 v. n6 V
  35.                                        '0 显示所有前导零和后续零
      w( }2 G; ]  w- g1 I
  36.         .SetVariable "DimBlk", ""      '设置尺寸线或引线末端显示的箭头块
    % `. w; D4 m( k" A% u5 n
  37.                                        '"" 实心闭合
    - K- M+ g; ~3 v* E, U/ v$ B
  38.         .SetVariable "DimBlk1", ""     '当 DIMSAH 系统变量打开时,设置尺寸线第一个端点的箭头& w( L- Z  `$ h& h
  39.         .SetVariable "DimBlk2", ""     '当 DIMSAH 系统变量打开时,设置尺寸线第二个端点的箭头
    3 V! \7 Q$ [9 y) a
  40.         .SetVariable "DimClrD", acByLayer     '为尺寸线、箭头和标注引线指定颜色3 D/ T9 |" h$ g3 B0 b7 ^. l
  41.         .SetVariable "DimClrE", acByLayer    '为尺寸界线指定颜色。此颜色可以是任意有效的颜色编号
    9 c  ?, A3 M1 [  d' H% f2 `! [# h
  42.         .SetVariable "DimClrT", acGreen     '为标注文字指定颜色
    ( P, h0 p+ G1 e: P7 i" n" b& x- r  k
  43.         .SetVariable "DimDec", 2       '设置标注主单位显示的小数位位数+ `+ q+ l) S- e9 Q, K
  44.         .SetVariable "DimExe", 1.25        '指定尺寸界线超出尺寸线的距离
    + v4 z# W9 @; f2 p' H
  45.         .SetVariable "DimExO", 2       '指定尺寸界线偏移原点的距离! n7 L/ `  \7 z3 G) ^3 ]( g
  46.         .SetVariable "DimFrac", 0      '在 DIMLUNIT 系统变量设置为 4(建筑)或 5(分数)时设置分数格式# U6 R; `- B2 k) h) k' ?
  47.         .SetVariable "DimGap", 0.625     '当尺寸线分成段以在两段之间放置标注文字时,设置标注文字周围的距离
    ! v, ]& _. t1 C4 o1 f( a4 B
  48.         .SetVariable "DimJust", 0      '控制标注文字的水平位置
    ( z; h6 p& `" E5 P- O
  49.                                         '0  将文字置于尺寸线之上,并在尺寸界线之间置中对正
    5 E' T4 p) ~8 E: Z0 \& f/ o/ I& e
  50.                                         '1  紧邻第一条尺寸界线放置标注文字1 r' v. J% V& P- p2 b$ e8 a6 ^  ?
  51.                                         '2  紧邻第二条尺寸界线放置标注文字/ L: K+ t3 I# z
  52.                                         '3  将标注文字放在第一条尺寸界线以上,并与之对齐8 C% @- B1 B7 \' m% O: W5 |
  53.                                         '4  将标注文字放在第二条尺寸界线以上,并与之对齐
    ; J% k+ q; W' g9 F  P- h- e2 L9 D: m
  54.         .SetVariable "DimLwd", acLnWtByLayer '指定尺寸线的线宽% M6 i5 w. ]: Z3 `) a
  55.         .SetVariable "DimLwe", acLnWtByLayer '指定尺寸界线的线宽
    ( h. n2 l  a$ p2 B' F3 @2 T
  56.         .SetVariable "DimPost", ""     '指定标注测量值的文字前缀或后缀(或者两者都指定)
      m7 z" E! N+ ]: A, v0 s" E
  57.         .SetVariable "DimRnd", 0       '将所有标注距离舍入到指定值7 c1 a" P6 E; h& ]
  58.         .SetVariable "DimSAh", 0       '控制尺寸线箭头块的显示
    0 D" n" ]; g+ I* K4 q+ D
  59.         .SetVariable "DimSD1", 0       '控制是否禁止显示第一条尺寸线% ~, }' t: l9 T) Q9 h+ Q
  60.         .SetVariable "DimSD2", 0       '控制是否禁止显示第二条尺寸线
    ) R. L. Z  D' \; y7 ~4 k1 m! w: v
  61.         .SetVariable "DimSE1", 0       '控制是否禁止显示第一条尺寸界线
    , [: w& @3 R; u( s3 K, X) c
  62.         .SetVariable "DimSE2", 0       '控制是否禁止显示第二条尺寸界线, G1 ]; a+ ?- ]* ^/ X( P. c' f
  63.         .SetVariable "DimSOXD", 0      '控制是否允许尺寸线绘制到尺寸界线之外( Y: ~1 H, c8 [. z' f8 i/ W9 N
  64.         .SetVariable "DimTAD", 1       '控制文字相对尺寸线的垂直位置
    7 j8 r/ W* @" @1 i
  65.                                        '0 标注文字在尺寸界线之间居中放置$ F- Q. [! h4 M% g- ~/ A+ c
  66.                                         '1  除非尺寸线不是水平放置的或者尺寸界线内的文字被强制为水平放置
    / R; D& {: H2 R" Q( z! c- Y
  67.                                         '(DIMTIH = 1),否则就将标注文字放置在尺寸线的上方。标注文字最底部. l! [  u$ O7 O& @- g0 w
  68.                                         '基线到尺寸线的距离值就是系统变量DIMGAP 的当前值。8 @* k' X3 q4 P8 S) X: r; r7 y: S
  69. '        .SetVariable "DimTIH", 0       '控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内水平对齐
    4 O5 q& D: F& o. p
  70.                                         '0 或关 将文字与尺寸线对齐
    0 s1 x" Z* y1 |/ x# s7 a8 V6 k
  71.                                         '1 或开 将文字水平放置( |& Z, j! k8 b7 R+ h3 V) a
  72.         .SetVariable "DimTIX", 0      '在尺寸界线之间绘制文字8 @) g, p$ e0 e+ h% @! z
  73.                                         '0 或关 结果随标注类型的不同而不同。对于线性和角度标注,AutoCAD2 ~  k& D, }5 p  P/ a4 q
  74.                                         '将文字放置到尺寸界线之间(如果有足够的空间)。对于不适于放入圆
    " C/ x4 p0 j" y2 l/ B
  75.                                         '或圆弧中的半径标注和直径标注,DIMTIX 无效并总是强制将文字放到圆或圆弧之外
    ' T3 D  ?# u- C$ L5 X; H" c$ ^
  76.                                         '1 或开 将标注文字绘制在尺寸界线之间,即使 AutoCAD 通常将这些文字放置于尺寸界线之外。* T& `# o  x9 ~3 D6 m
  77.         .SetVariable "DimTMOVE", 0      '设置标注文字的移动规则
    7 ^; ]! ?, A: C5 \' s. r
  78.                                         '0  尺寸线和标注文字一起移动& ~. Z0 b  n: i0 z8 s
  79.                                         '1  在移动标注文字时添加一条引线
    + E- b& ]6 ~6 F, i0 P2 |6 y
  80.                                         '2  允许标注文字自由移动而不用添加引线5 g* U! ~' X4 U. a: c6 [/ D
  81.         .SetVariable "DimTOFL", 1      '控制是否将尺寸线绘制在尺寸界线之间(即使文字放置在尺寸界线之外): B8 \. a8 j8 b& L# o7 G& x! O
  82. '        .SetVariable "DimTOH", 0       '控制标注文字在尺寸界线外水平对齐
    : G. J& _7 A4 k& x, {- L. Z% ?
  83.         .SetVariable "DimTSz", 0      '指定线性标注、半径标注以及直径标注中替代箭头的小斜线尺寸- Q; L9 P0 t' o0 ~, D3 J; U
  84.         .SetVariable "DimTVP", 0        '控制尺寸线上方或下方标注文字的垂直位置9 _! Y5 `, q! B8 s* w# d- Z
  85.         .SetVariable "DimTxSty", "HZ"     '指定标注的文字样式
    " b; \' s! C6 I: g0 K' x
  86.         .SetVariable "DimTxt", 3.5         '指定标注文字的高度,除非当前文字样式具有固定的高度
    4 l3 J) P/ A! W. [& h
  87.         .SetVariable "DimUPT", 0        '控制用户定位文字的选项
    # q, \: h% S9 \9 S0 a5 s! M
  88.         .SetVariable "DimZIn", 8        '控制是否对主单位值作消零处理7 g9 k) Z, X% V, z% c+ H( D
  89. '- B2 J4 E* ?. l  h% G- t2 ?, k
  90.         '定义换算单位的特性
    % N# V8 p  j1 J* `6 o
  91.         .SetVariable "DimAlt", 0        '控制标注中换算单位的显示
    + E9 M& [0 K6 g. L( M" B# d# \' \9 S0 [
  92.         .SetVariable "DimAltD", 4       '控制换算单位中小数位的位数5 h8 P7 |( u2 A1 J3 j6 ^) g$ {" F
  93.         .SetVariable "DimAltF", 25.4    '控制换算单位乘数- |8 U0 R5 S, Y. e
  94.         .SetVariable "DimAltRnd", 0     '舍入换算标注单位" q/ K* w- v! Z
  95.         .SetVariable "DimAltTD", 4      '设置标注换算单位公差值小数位的位数6 p) _9 V) l; N% l, D
  96.         .SetVariable "DimAltTZ", 8      '控制是否对公差值作消零处理
    ) p8 g/ d$ V( W& |' R
  97.         .SetVariable "DimAltU", 2       '为所有标注样式族(角度标注除外)换算单位设置单位格式, \2 r) p+ |6 d2 Y8 ?
  98.         .SetVariable "DimAltZ", 0       '控制是否对换算单位标注值作消零处理3 e1 v" ?/ J7 b3 o* D! y) R  v
  99.         .SetVariable "DimAPost", ""     '为所有标注类型(角度标注除外)的换算标注测量值指定文字前缀或后缀(或两者都指定)
    / Q- a, I' C& U* s4 i( s0 Y3 O
  100.    End With
    ) V: ]1 s7 v0 b% B( N5 J
  101.     '标注样式的特性从图形已有样式中获得' L6 k+ p4 c  x! H( ]
  102. 'ThisDrawing.Regen acAllViewports/ c( M9 g5 P) z; ?
  103. With ThisDrawing '设置默认为与尺寸线对齐0 d* \1 _+ G* V; n6 p0 y0 ?1 a6 y: m
  104.     .SetVariable "DIMTOH", 0! d/ c# i$ s$ ?' n5 ~) w% C. [, R
  105.     .SetVariable "DIMTIH", 0+ B* A1 B) S! V  {! M2 y
  106. End With
    ; h3 T& ^1 O# x
  107. dimStyle.CopyFrom ThisDrawing
    1 ]0 i9 l& L0 d/ _
  108. With ThisDrawing '设置角度文字对齐方式为水平方式4 M1 `1 w) A' Z# |
  109.     .SetVariable "DIMTOH", 1& p2 Y( h- v. {' r/ W; j# j
  110.     .SetVariable "DIMTIH", 1
    5 y* J& h! s  c$ b; q
  111. End With, }/ F5 l" i" {$ T9 ?
  112. 'ThisDrawing.Regen acAllViewports' b/ Y2 D$ W# w. N9 h$ p
  113. DimAn.CopyFrom ThisDrawing
    3 W( L3 c) ^6 j
  114. With ThisDrawing '设置半径、直径文字对齐方式为ISO方式:尺寸线内与尺寸线对齐,尺寸线外水平对齐。4 T, x9 n  v; f; p1 [2 G
  115.     .SetVariable "DIMTOH", 0
      H* R2 f) }- w+ P/ x" `
  116.     .SetVariable "DIMTIH", 1$ j1 o% M9 _8 v' s3 l
  117. End With3 W/ d( c' N* w/ I2 N, p- h4 C6 `
  118. 'ThisDrawing.Regen acAllViewports
    5 x- f# R: P3 e/ @2 P5 q. k5 `
  119. DimRa.CopyFrom ThisDrawing
    8 a9 ]7 s- u. m1 I/ a# U
  120. DimDi.CopyFrom ThisDrawing+ p. ]/ D1 P! J
  121. ThisDrawing.Regen acAllViewports
    " S1 B  Z: F/ n5 J
  122. End Function6 e2 ]; j6 W' @
  123. * e$ d) R' M+ k1 }. L
复制代码
 楼主| 发表于 2011-5-18 23:48:51 | 显示全部楼层 来自: 中国四川德阳
晕……直接复制粘贴上边的两行代码再修改,把直径和半径的TIH、TOH设置反了…………
发表于 2011-5-20 15:47:10 | 显示全部楼层 来自: 中国浙江杭州
代码太长了,天天看,天天写,头都大了
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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