三维网

标题: [VBA]VBA新建标注子样式后对齐方式不更新!!!!! [打印本页]

作者: bingdianfeishui    时间: 2011-5-18 23:16
标题: [VBA]VBA新建标注子样式后对齐方式不更新!!!!!
编了个函数新建标注样式,和直径、半径、角度子样式。各子样式只是修改了文字对齐方式
, m0 N0 X5 P$ N0 m: p) A
3 y: j8 L2 b' A6 Z3 x+ N在标注样式设置对话框里能看见子样式已经新建成功了,如图所示。
) P6 X7 h: ~) T5 r" M- R[attach]1891821[/attach]- o  [& u4 ?0 A: y% u  E
但是对齐方式已经显示为ISO了,但半径标注依然显示的是尺寸线外也与尺寸线对其。需要再单击一下“ISO标准”,标注文字才会横过来。在新建标注子样式后用了Regen方法也不行。
& N" {6 J5 P2 o" Z7 k6 p0 ~; j6 t
# {  V4 o7 K' k' a/ Q! `附上源码,求高手解答。" U, S* F7 R% m

  1.   L( r" R1 T, W' }. e
  2. Public Function myDimStyleGB()1 P3 w; w/ c; U4 S
  3.     On Error Resume Next* ^: [' X+ g, N
  4.     Call AddHZ7 l, A1 j7 X0 a" N! X' U
  5.     Dim dimStyle As AcadDimStyle& Z$ g) ]9 U2 {. {- |
  6.     Dim DimRa As AcadDimStyle7 [. {$ y1 b, f4 c8 u& v! d8 n; J
  7.     Dim DimAn As AcadDimStyle
    . C8 K9 N3 o; S: C
  8.     Dim DimDi As AcadDimStyle5 V' j7 N1 b8 c; t2 I9 o. K
  9.    
      T$ [9 b/ _. a" O3 \& I: c& G
  10.     Set dimStyle = ThisDrawing.DimStyles.Add("myDimStyle")
    * i( C  m" j0 t
  11.     Set DimRa = ThisDrawing.DimStyles.Add("myDimStyle$4")
    9 z; s4 `( N$ R
  12.     Set DimAn = ThisDrawing.DimStyles.Add("myDimStyle$2")
    ; b% [4 ~. n; }
  13.     Set DimDi = ThisDrawing.DimStyles.Add("myDimStyle$3")
    7 D) G3 D* |9 o
  14.     ; O: R0 p: N3 r7 X5 b: J. @: ^
  15.     ThisDrawing.ActiveDimStyle = dimStyle '激活该标注样式! n( K/ }& g0 L# L* }  v
  16.     Dim dDimLFac As Double: dDimLFac = 1
    * D8 v0 E/ |  N/ P4 d
  17. '    dDimLFac = ThisDrawing.Utility.GetReal("请输入标注比例:<" & dDimLFac & ">")
    $ c8 r2 b# F6 f1 w
  18.     With ThisDrawing4 f0 X) K$ j7 a( g/ s; z9 R
  19.         '第一组定义全局和线性比例因子
    7 L  u+ b% A& t
  20.         .SetVariable "DimScale", 1     '设置全局比例因子6 Y3 k) C3 t, B9 X9 w" e
  21.          .SetVariable "DimLFac", dDimLFac   '线性比例因子. '1'=1:1, '2'=2:1,'.5'=1:2等
    ) d1 U% d- W+ g0 R. K" P( S
  22.         '定义典型的标注特性
    : B% \  T0 M5 L2 K& v
  23.         .SetVariable "DimADec", 0      '控制角度标注的显示精确位数  l, T, ?" Y" ]* h- D1 n+ \) K
  24.         .SetVariable "DimAssoc", 2     '控制标注对象的关联性
    ; A5 i' J, B$ h/ A+ H
  25.                                        '实际上该系统变量由图形控制
    7 s+ z" Q% c* X6 a3 b7 q* B
  26.         .SetVariable "DimASz", 2.5        '控制尺寸线、引线箭头的大小。并控制钩线的大小) S. P3 C" x* l( D; p
  27.         .SetVariable "DimAtFit", 3    '当尺寸界线的空间不足以同时放下标注文字和箭头时,确定这两者的排列方式( M6 K! l- _2 R; E" w
  28.                                         '0 将文字和箭头均放置于尺寸界线之外
    : Z+ m+ W1 W# t
  29.                                         '1  先移动箭头,然后移动文字
    ) l% K5 w) n7 Y+ t
  30.                                         '2  先移动文字,然后移动箭头
    * N3 _0 O- Q/ n+ v4 x
  31.                                         '3  移动文字和箭头中较合适的一个8 Y" U, @$ R8 Z. e# {  o# [/ ?
  32.         .SetVariable "DimAUnit", 0     '设置角度标注的单位格式
    2 r7 _  f2 `& `( A% t+ k' U% R
  33.                                        '0 十进制度数
    3 T* A) x3 G6 X5 ~' H
  34.         .SetVariable "DimAZin", 0      '对角度标注作消零处理
    3 W3 m1 @0 k. Y! |2 o
  35.                                        '0 显示所有前导零和后续零1 [7 [8 [9 P9 `( W6 z
  36.         .SetVariable "DimBlk", ""      '设置尺寸线或引线末端显示的箭头块
    : v1 Q# L0 |& z7 \  `& E* U
  37.                                        '"" 实心闭合0 |" h0 \' m  Y4 L
  38.         .SetVariable "DimBlk1", ""     '当 DIMSAH 系统变量打开时,设置尺寸线第一个端点的箭头6 ~' }7 [/ @* g$ f9 s, n- V- s
  39.         .SetVariable "DimBlk2", ""     '当 DIMSAH 系统变量打开时,设置尺寸线第二个端点的箭头6 M' n2 u7 x' F% `
  40.         .SetVariable "DimClrD", acByLayer     '为尺寸线、箭头和标注引线指定颜色
    * R. S; Y( P/ B" k3 d4 y$ e% j
  41.         .SetVariable "DimClrE", acByLayer    '为尺寸界线指定颜色。此颜色可以是任意有效的颜色编号
    5 L! O* H/ c' \" Z1 n: d
  42.         .SetVariable "DimClrT", acGreen     '为标注文字指定颜色
    6 J: z1 U, v- d
  43.         .SetVariable "DimDec", 2       '设置标注主单位显示的小数位位数7 k# h! E" F' Q  l
  44.         .SetVariable "DimExe", 1.25        '指定尺寸界线超出尺寸线的距离8 z& c) n2 @* W: t; N8 Z- S
  45.         .SetVariable "DimExO", 2       '指定尺寸界线偏移原点的距离- G+ V0 }2 M, Y: a
  46.         .SetVariable "DimFrac", 0      '在 DIMLUNIT 系统变量设置为 4(建筑)或 5(分数)时设置分数格式
    / D) I$ h; k! [6 _1 P. Y
  47.         .SetVariable "DimGap", 0.625     '当尺寸线分成段以在两段之间放置标注文字时,设置标注文字周围的距离; H& v1 m; Q( S: @+ |% j7 k, B
  48.         .SetVariable "DimJust", 0      '控制标注文字的水平位置8 f  M( j* V" B# I
  49.                                         '0  将文字置于尺寸线之上,并在尺寸界线之间置中对正8 `. t5 V) X2 q- ^& j/ \/ K; V* R
  50.                                         '1  紧邻第一条尺寸界线放置标注文字% ~* X5 o& R/ y) c
  51.                                         '2  紧邻第二条尺寸界线放置标注文字
    8 j+ d/ E; ], `0 }! Z8 Z% u  ?
  52.                                         '3  将标注文字放在第一条尺寸界线以上,并与之对齐9 t  m& M3 K& ^( S
  53.                                         '4  将标注文字放在第二条尺寸界线以上,并与之对齐3 r( B9 Z# ]" G0 B: b
  54.         .SetVariable "DimLwd", acLnWtByLayer '指定尺寸线的线宽
    * ]5 p! B6 g" r& h" x. H: m
  55.         .SetVariable "DimLwe", acLnWtByLayer '指定尺寸界线的线宽
    & f9 q2 y! @  @
  56.         .SetVariable "DimPost", ""     '指定标注测量值的文字前缀或后缀(或者两者都指定)
    6 \5 R; d2 u  S2 k9 i/ T
  57.         .SetVariable "DimRnd", 0       '将所有标注距离舍入到指定值
    - v- ~  M' w; i* J: s+ H
  58.         .SetVariable "DimSAh", 0       '控制尺寸线箭头块的显示: c* o/ }' ~7 b7 K" B# g, Z
  59.         .SetVariable "DimSD1", 0       '控制是否禁止显示第一条尺寸线
    / A- }1 m9 s; l: T4 l% Q2 \, O
  60.         .SetVariable "DimSD2", 0       '控制是否禁止显示第二条尺寸线$ O& ^8 V* q( D- M1 g7 s9 [9 @
  61.         .SetVariable "DimSE1", 0       '控制是否禁止显示第一条尺寸界线
    5 I) H8 ~5 s) l! N% E3 ^5 n% t. ]- d
  62.         .SetVariable "DimSE2", 0       '控制是否禁止显示第二条尺寸界线  q, q) m: `3 [. M' O+ U
  63.         .SetVariable "DimSOXD", 0      '控制是否允许尺寸线绘制到尺寸界线之外
      \0 r6 O4 \1 J, }' @4 C( ?
  64.         .SetVariable "DimTAD", 1       '控制文字相对尺寸线的垂直位置7 O. J- o  P1 i3 L" _) U4 O
  65.                                        '0 标注文字在尺寸界线之间居中放置8 x# |8 D) X# n" h
  66.                                         '1  除非尺寸线不是水平放置的或者尺寸界线内的文字被强制为水平放置
    ; U  i4 \  @3 M: l
  67.                                         '(DIMTIH = 1),否则就将标注文字放置在尺寸线的上方。标注文字最底部
    : M6 \$ {/ W: z. T: D- r
  68.                                         '基线到尺寸线的距离值就是系统变量DIMGAP 的当前值。
    2 b9 T( R7 y. B8 ^# N. I
  69. '        .SetVariable "DimTIH", 0       '控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内水平对齐' g6 h8 m- G# N$ w! s9 ^
  70.                                         '0 或关 将文字与尺寸线对齐3 D* J6 @1 J( K
  71.                                         '1 或开 将文字水平放置
    ; l, U5 d; J" T' R
  72.         .SetVariable "DimTIX", 0      '在尺寸界线之间绘制文字  E, G& ^  W8 f* f2 H" Q- U4 c
  73.                                         '0 或关 结果随标注类型的不同而不同。对于线性和角度标注,AutoCAD6 Y0 K- w2 j# t- W/ M: x  o
  74.                                         '将文字放置到尺寸界线之间(如果有足够的空间)。对于不适于放入圆
    ' j3 [. _3 x; N$ S- t8 v8 s
  75.                                         '或圆弧中的半径标注和直径标注,DIMTIX 无效并总是强制将文字放到圆或圆弧之外
    " Y% L* U& x; V, M1 L8 H7 s
  76.                                         '1 或开 将标注文字绘制在尺寸界线之间,即使 AutoCAD 通常将这些文字放置于尺寸界线之外。" _1 Q/ s5 S4 b5 k9 ^
  77.         .SetVariable "DimTMOVE", 0      '设置标注文字的移动规则# |' `. r% o& q
  78.                                         '0  尺寸线和标注文字一起移动
    ! w" k3 L9 `+ \/ D8 ~9 p# d8 p
  79.                                         '1  在移动标注文字时添加一条引线
    6 y* N1 l5 j8 ]- N5 U, B- \% g
  80.                                         '2  允许标注文字自由移动而不用添加引线
    3 }+ \: o; i. R9 t+ Q# X# }5 y
  81.         .SetVariable "DimTOFL", 1      '控制是否将尺寸线绘制在尺寸界线之间(即使文字放置在尺寸界线之外)
    1 G) p8 d, x$ T; h1 N
  82. '        .SetVariable "DimTOH", 0       '控制标注文字在尺寸界线外水平对齐
    & ^8 t2 z+ I. ~1 W
  83.         .SetVariable "DimTSz", 0      '指定线性标注、半径标注以及直径标注中替代箭头的小斜线尺寸: Z' {$ i0 n9 w/ E' c+ v
  84.         .SetVariable "DimTVP", 0        '控制尺寸线上方或下方标注文字的垂直位置4 I9 K1 J- \( h2 T. L  p4 m
  85.         .SetVariable "DimTxSty", "HZ"     '指定标注的文字样式& ]! p0 q* x$ ]( D
  86.         .SetVariable "DimTxt", 3.5         '指定标注文字的高度,除非当前文字样式具有固定的高度
    8 C8 T1 e* s' x' P6 e5 Y  K3 }( f
  87.         .SetVariable "DimUPT", 0        '控制用户定位文字的选项4 ^% y& S1 v6 V4 [+ A
  88.         .SetVariable "DimZIn", 8        '控制是否对主单位值作消零处理
    % F- T: n- j5 D, }7 E) P7 E: T
  89. '* y, Z$ r0 G1 d) N* o$ i
  90.         '定义换算单位的特性
    7 b$ }7 I6 a5 o4 t0 t4 c' s6 y
  91.         .SetVariable "DimAlt", 0        '控制标注中换算单位的显示- k6 I; w9 |) k/ Q; f
  92.         .SetVariable "DimAltD", 4       '控制换算单位中小数位的位数
      W! @: A; i4 P7 W
  93.         .SetVariable "DimAltF", 25.4    '控制换算单位乘数
    & F- c  {7 v8 O6 z% P# b3 B
  94.         .SetVariable "DimAltRnd", 0     '舍入换算标注单位5 l/ T( U% V8 C5 P+ I0 ?
  95.         .SetVariable "DimAltTD", 4      '设置标注换算单位公差值小数位的位数
    ' ]( {1 {: S* J5 }- ?  S9 Q
  96.         .SetVariable "DimAltTZ", 8      '控制是否对公差值作消零处理
    6 K7 v" r* ?" _3 W
  97.         .SetVariable "DimAltU", 2       '为所有标注样式族(角度标注除外)换算单位设置单位格式
    4 I2 E( D5 h7 k, n; E0 y+ m
  98.         .SetVariable "DimAltZ", 0       '控制是否对换算单位标注值作消零处理, {8 G- F- b0 X9 s
  99.         .SetVariable "DimAPost", ""     '为所有标注类型(角度标注除外)的换算标注测量值指定文字前缀或后缀(或两者都指定)
    ! h4 d+ c8 T6 J& V; T5 h" p
  100.    End With
    ' e# e9 m" h% ~4 X
  101.     '标注样式的特性从图形已有样式中获得  O( i+ M, B7 u6 R5 o# e2 o  }8 U
  102. 'ThisDrawing.Regen acAllViewports% Z- p6 M: n& v: E/ d: `* x5 G& Q
  103. With ThisDrawing '设置默认为与尺寸线对齐
    ( R" C# W! l9 L" _; p
  104.     .SetVariable "DIMTOH", 0
    & B3 D! j. j# F+ a* F
  105.     .SetVariable "DIMTIH", 0+ V; j) v0 A7 _' B/ M" K% E
  106. End With
    $ z9 f7 Z6 c' _
  107. dimStyle.CopyFrom ThisDrawing0 {7 m! b7 E0 O/ C: p
  108. With ThisDrawing '设置角度文字对齐方式为水平方式
    $ p4 g1 W$ O7 O2 S. B# G8 Y' p: W
  109.     .SetVariable "DIMTOH", 13 J! I) l4 d9 y* S1 D
  110.     .SetVariable "DIMTIH", 1
    + {& ~1 W: U: o5 k1 ?0 I) Q
  111. End With, Y; Y! {- J8 g4 |" t% o2 S
  112. 'ThisDrawing.Regen acAllViewports
    : d  ]" b1 j+ f) D$ y4 P6 e6 U
  113. DimAn.CopyFrom ThisDrawing
    - S7 I% A* e% X
  114. With ThisDrawing '设置半径、直径文字对齐方式为ISO方式:尺寸线内与尺寸线对齐,尺寸线外水平对齐。
    - X) {5 k) }4 o7 \$ V( |  L
  115.     .SetVariable "DIMTOH", 0
    5 u6 {' E. B( }
  116.     .SetVariable "DIMTIH", 1  W. k/ U: ^1 e0 S) Z% C( c- m# I
  117. End With) R7 t/ e9 W! z  }1 @0 s0 U
  118. 'ThisDrawing.Regen acAllViewports( W) h" J; y% l3 ~) {! \: a
  119. DimRa.CopyFrom ThisDrawing
    / H  F& W* D+ c6 b
  120. DimDi.CopyFrom ThisDrawing4 q) l; h( V2 _
  121. ThisDrawing.Regen acAllViewports+ r' h5 ?, |, Z
  122. End Function
    ' k( t4 |9 x) y/ F
  123. + ]3 d7 c! d8 m, t# m( {8 O
复制代码

作者: bingdianfeishui    时间: 2011-5-18 23:48
晕……直接复制粘贴上边的两行代码再修改,把直径和半径的TIH、TOH设置反了…………
作者: 157787698    时间: 2011-5-20 15:47
代码太长了,天天看,天天写,头都大了




欢迎光临 三维网 (http://www.3dportal.cn/discuz/) Powered by Discuz! X3.4