本帖最后由 kuangben8 于 2019-4-14 10:11 编辑
+ e1 C/ C* \6 X; t1 C, @( [! R6 z% B. U- t
关于创建图案填充的补充:(非常感谢woaishuijia老师的热心帮助,以下是老师的帮助文档+我的一点总结)一、关于 AddHatch方法的参数 1、在2002版及以前,AutoCAD 只有图案填充,那时的AddHatch 方法只有三个参数,即 PatternType(图案类型)、PatternName(图案名称)和 Associativity(关联性);到2004版,增加了渐变填充, AddHatch 方法就增加了第四个参数 HatchObjectType(填充对象类型)。 2、先说第四个参数 HatchObjectType(填充对象类型) 先说它的原因是它的值决定了第一个参数的用法。按我们通常的思维习惯,它本来应该是第一个参数,但由于是后增加的,所以排在了第四个。 这个参数为 AcHatchObjectType 枚举类型。如果使用变量,应这样声明 Dim ** As AcHatchObjectType 这个枚举共有两个值: 1、acHatchObject= 0(图案填充):表示选择填充样式为图案填充!对应填充界面如下
: {3 y2 B/ K, D+ L2、acGradientObject= 1(渐变填充):表示选择填充样式为渐变填充!对应填充界面如下 4 H6 k, H( |# n* \! I
: j i, f0 k: Z+ a* _9 {
这个参数是可选的,默认值为 0(acHatchObject,图案填充)。
, |# O, G0 D: [3 [+ ?! Y2 U
3、再来说第一个参数 PatternType 在2002版及以前,没有第四个参数(只有图案填充),这个 PatternType 参数是 AcPatternType 枚举类型。2004版及以后,这个参数的类型就有了两种选择,即:如果第四个参数HatchObjectType(填充对象类型)的值是 acHatchObject = 0(图案填充)或省略,则这个 PatternType 参数就必须用 AcPatternType 枚举类型;如果第四个参数 HatchObjectType(填充对象类型)的值是acGradientObject = 1(渐变填充),则这个 PatternType 参数就必须用 AcGradientPatternType 枚举类型。 这个PatternType 参数的值决定着第二个参数 PatternName(图案名称)的用法,后面再说。先说这个参数两种枚举的值: 1)AcPatternType 枚举类型。如果使用变量,应这样声明 Dim ** As AcPatternType 这个枚举共有三个值: acHatchPatternTypePreDefined = 0(预定义):使用CAD自带的填充样式! acHatchPatternTypeUserDefined = 1(用户定义):此时CAD自带的填充样式不可选! acHatchPatternTypeCustomDefined = 2(自定义):此时CAD自带的填充样式不可选! 这三个值对应着图形界面“图案填充和渐变色”对话框中“图案填充”选项卡上的“类型(Y)”下拉列表(见图)。
2 A9 @. C1 R3 N4 e' n3 Z* L4 J" H- |! V
# x- w% e& B8 q, T+ u/ d
; Z* w k3 k* P- z% G4 r
2)AcGradientPatternType 枚举类型。如果使用变量,应这样声明 Dim ** As AcGradientPatternType 这个枚举共有两个值: acPreDefinedGradient = 0(预定义) acUserDefinedGradient = 1(用户定义) 第一个值容易理解;第二个值E文是这样说的:Definesa pattern based on property values. 翻译:基于属性值定义模式。比较费解。经多次尝试,出错的提示总是“尚未实现”,且图形界面“图案填充和渐变色”对话框中也没有对应的选项。猜想这是为 AutoCAD 为今后的渐变填充改进预留的,就是说这个枚举目前只能用 acPreDefinedGradient = 0(预定义)值。 ) y5 c3 f* S/ H: t. t* i& a% R$ G6 l
4、第二个参数 PatternName(图案名称) 1)当第一个参数 PatternType 是 AcPatternType 枚举类型且其值为 acHatchPatternTypePreDefined = 0(预定义)时,图形界面“填充图案选项板”(见图)上的“ANSI”、“ISO”和“其它预定义”选项卡上的所有图案名称都可以用。 2)当第一个参数 PatternType 是 AcPatternType 枚举类型且其值为 acHatchPatternTypeUserDefined = 1(用户定义)时,本参数只能为"_U"。这个图案没有什么实际用处。所以 AcPatternType 枚举类型的值 acHatchPatternTypeUserDefined = 1(用户定义)我认为至少在当前阶段是多余的,也许随着 AutoCAD 的改进将来会有用吧? 3)当第一个参数 PatternType 是 AcPatternType 枚举类型且其值为 acHatchPatternTypeCustomDefined = 2(自定义)时,本参数应使用图形界面“填充图案选项板”上的“自定义”选项卡上的图案名称。我没自定义过填充图案,我的这个选项卡上也是一片空白,所以这个枚举值对我也是没有用的。 4)当第一个参数PatternType 是 AcGradientPatternType 枚举类型且其值为acPreDefinedGradient = 0(预定义)时,本参数为下列9个名称之一:6 N B( o1 C8 `- N" {. s# _
1、"Linear"、2、"Cylinder"、3、"InvCylinder"、4、"Spherical"、5、"HemiSpherical"、6、"Curved"、7、"InvSpherical"、8、"InvHemiSpherical"、9、"InvCurved" ,对应图案如下:
# [) z+ E% {% W$ U0 f5、第三参数: Associativity(是否关联) 参考如上右图 Boolean[布尔值]; 仅用于输入,TRUE: 图案填充为关联的。 FALSE: 图案填充为不关联的。 作用:当填充图案的边界发生变化时,填充的图案是否自动适应边界的变化。 省略时默认是FALSE(不关联,即不勾选)。但是第三参数仍然要定义变量,可以不赋值。 2 H3 D" p5 V, f, y i
4 Z7 I# X& \) L2 f/ h4 I
! _3 y( ]! U2 y8 b0 o综上,第一个参数就取 0,第二个参数根据第四个参数的值取现有的图案填充名称或渐变名称,第四个参数决定第二参数的选择是图案填充还是渐变填充,图案名称必须是符合第四参数指定的类型中的图案名称。
4 k" v) ~9 s3 x4 C
. W! `7 t o, j) B* p, B: k二、创建填充的步骤和要求 首先用 AddHatch 方法创建填充对象;紧接着用Hatch 对象的 AppendOuterLoop 方法明确外边界;如果填充内部有空白,还要用 AppendInnerLoop 方法添加内边界,有几个内边界就用几次。边界必须是封闭的。组成边界的多个图元之间必须是首尾相连的,换句话说,组成边界的多个图元之间不允许交叉,只允许且必须端点重合。 在实际测试中发现使用图案填充时,添加完外边界后刷新界面,然后添加内边界无效!但是渐变填充却没事! 内边界与外边界不许交叉,各个内边界之间也不许交叉。 内边界可以内部还有内边界,就是两个内边界“嵌套”组成环形。 内边界内部是否填充、嵌套的内边界怎样填充,可以用 Hatch 对象的 HatchStyle 属性(孤岛检测样式)来决定。可以在图形界面打开“特性”管理器,再选择一个有内边界的填充对象,在“特性”管理器中修改“孤岛检测样式”属性查看效果。 - Sub AddHatch方法()
$ x. e- _+ A0 M; y8 H8 I - Rem 语法:RetVal = Object.AddHatch(PatternType, PatternName, Associativity [, HatchObjectType]), L/ m* [9 [2 Z1 w( [& D
- Dim HatchObject As AcadHatch '定义填充图案对象
+ @' N; _1 d0 a# i) W ]. h0 y8 n - Rem 定义填充类型为长整型,取值为图案填充的0,1,2;渐变填充的0,1,一般就取0(CAD预定义)
8 u- v. h. l, ?4 g z* [5 f3 P# k# N - Dim hatchtype As AcPatternType '参数4设置为图案填充的类型,参数4若是渐变填充,则定义为AcGradientPatternType类型5 q& W+ i" q5 F0 J3 W; B
- ' Dim hatchtype As AcGradientPatternType5 i( n% q! q( ~# D5 S4 u' w
- Dim HatchName As String '定义图案名称为字符串类型
' X! J* r0 l% c5 S/ d - Dim HatchAssociativity As Boolean '定义关联类型为布尔值,取值为True表示关联,False表示非关联。3 L4 q1 @0 m" c6 N- t+ Y
- Dim HObjectType As AcHatchObjectType '定义图案对象类型,取值为“图案填充-0”、“渐变填充-1”。省略默认为0.4 n L3 q* u0 I3 K
- 6 D3 X M; R( t( D+ V. ~3 ?
- Rem 首先添加几个边界以备填充使用: ~1 C0 w7 p) J4 m
- Dim L As AcadLWPolyline, cir1 As AcadCircle, cir2 As AcadCircle, CIR3 As AcadCircle '定义一个多段线和三个圆
; L% G6 o/ Q: r: z! s b V - Dim pts(11) As Double, P0(2) As Double, R As Double '定义多段线端点变量,圆心变量,半径变量& f) s+ Z2 K/ U( @0 \ Q: f
- pts(0) = 0: pts(1) = 0: pts(2) = 20: pts(3) = 15: pts(4) = 10: pts(5) = 30( G- I9 r% `2 [: G0 z2 _
- pts(6) = 50: pts(7) = 50: pts(8) = 0: pts(9) = -70: pts(10) = -70: pts(11) = 32
9 U" }- c0 c4 a; L, d( ~ - Set L = ThisDrawing.ModelSpace.AddLightWeightPolyline(pts)
* Y1 Y( K+ c4 H7 |1 m - Update
5 J: u( ^+ F& K5 A# |! C7 l3 s" H2 Z - L.Closed = True '将多段线闭合
9 v' X: I* f6 \' I5 ^7 w - Update! A! X7 e' t/ Z5 n4 K6 {7 O
- P0(0) = 0: P0(1) = 0: P0(2) = 0
( a+ ~3 ^8 f# ^ - R = 25' k& E5 W d- C7 X+ ~
- Set cir1 = ThisDrawing.ModelSpace.AddCircle(P0, R)
1 Y) G8 F% T9 ?. j; C - Update
7 T) ]. D' x/ C. E5 X6 F - R = 508 |7 C) H& g' p4 G I4 |8 W
- Set cir2 = ThisDrawing.ModelSpace.AddCircle(P0, R)9 D" w |" V% Q0 N0 a9 R8 ^
- Update
$ B9 e7 \' p" A' \! h - R = 70
/ T4 [6 Y# t' ?7 S) z - Set CIR3 = ThisDrawing.ModelSpace.AddCircle(P0, R)8 l) L; s. c! R* D0 [- w4 H- u
- Update, E I5 ?. O1 c; ]
-
% e0 e# w4 \. Q* Q - Rem 接下来赋值图案填充变量,先复制第四参数,再赋值第一参数、第二参数、第三参数
7 n7 d" ]( V" B+ d9 s - HObjectType = 1 '写0也可以直接写acHatchObject,表示图案填充类型,都省略默认为0;写1也可以写成acGradientObject,表示渐变填充5 q/ w7 u6 o6 h+ J/ T
- ' HObjectType = acGradientObject '也可以直接写1,表示渐变填充类型3 J. N0 o: J, O6 {9 ^+ @
- Rem 第一参数值英文名称太长,还是直接记住数字好了!6 | g! h7 }+ W. _+ Y* u+ s
- hatchtype = 0 'acHatchPatternTypePreDefined,参数太长,直接记住数字吧! Z9 ?+ u" f0 }9 C, u' B. G
- ' HatchType = 1 'acHatchPatternTypeUserDefined' Q$ C! W" c8 l) R1 m6 |9 H
- ' HatchType = 2 'acHatchPatternTypeCustomDefined,第四参数为1时此参数无效!
6 a2 q, Y# i7 z% m - Rem 以下四类图案名称仅在第四参数=0时有效!每一类里有数个名称可用!
2 x* G5 h; \+ ~; u - ' HatchName = "ANSI32"
8 t3 X9 U. y8 S! f, ^4 I - ' HatchName = "ISO02W100" '此处的名字到底是什么?
0 N' }% b" `" H/ b - ' HatchName = "AR-HBONE"
7 C* k# a6 |, H( i3 K, q - ' HatchName = "STARS"7 X/ U2 R& K& g9 N1 E- u( M
- Rem 以下9种图案名称仅在第四参数=1时有效!表示渐变填充名称,只有这9个名称。
6 M, A9 v8 l6 C# [* ^+ h2 g - ' HatchName = "Linear" '对应第1行第1列图案
4 z! P8 G6 ~4 ] - ' HatchName = "Cylinder" '对应第1行第2列图案
5 E1 X/ J" p3 A$ E! i - ' HatchName = "InvCylinder" '对应第1行第3列图案, @7 O, H$ T, z- S. H- z
- HatchName = "Spherical" '对应第2行第1列图案+ f2 P3 @9 @5 P4 g
- ' HatchName = "HemiSpherical" '对应第2行第2列图案
& j. i7 e6 B6 c# S! g - ' HatchName = "Curved" '对应第2行第3列图案- I) s# i4 A6 \, z
- ' HatchName = "InvSpherical" '对应第3行第1列图案
* `) k! X4 H( O6 V - ' HatchName = "InvHemiSpherical" '对应第3行第2列图案
0 @$ P- U8 l% `% A - ' HatchName = "InvCurved" '对应第3行第3列图案
3 J6 ?5 G3 w. w$ Q: d# p3 o5 n - Rem 第三参数一般设置为true(关联)1 H7 o1 L; L0 s' _
- ' HatchAssociativity = True '省略赋值时默认为False( p# C7 _3 I) k
- ' HatchAssociativity = False
1 \6 h3 d( T# V( O. O - % x) ^0 G% Z' s" E- S+ o3 u
- Rem 首先创建图案填充,然后创建图案外边界和内边界- [8 @- G# g m! W: e" M0 K
- Set HatchObject = ThisDrawing.ModelSpace.AddHatch(hatchtype, HatchName, HatchAssociativity, HObjectType)
" e0 _4 B, Z) _1 n! A6 g - ' Set HatchObject = ThisDrawing.ModelSpace.AddHatch(0, "ANSI32", True, 0) '也可以直接写参数值& ]" l& \, B$ b" X7 J& k( v
- Dim OUTLOOP(0) As AcadEntity '定义外边界为CAD实体类型
1 ~* q* M" D- O. R) K+ N" H - Set OUTLOOP(0) = CIR3 '将cir1圆赋给外边界% a9 v+ p$ T7 b; `+ q' E: }3 c
- HatchObject.AppendOuterLoop (OUTLOOP) '设置图案填充的外边界8 o: C3 L1 Y! W, f: ~
- Update '添加内边界之前刷新界面,后续图案填充内边界添加无效!但是渐变填充可以!( c8 H3 I v+ p$ A9 O: n5 X$ E
- Dim INTLOOP(0) As AcadEntity '定义内边界为CAD实体类型1 N. B; H, @4 b h. l7 {5 X
- Set INTLOOP(0) = cir2 '将cir2圆赋给第一个内边界,如果内边界比外边界大,则出错!
7 ]* b) l% O. \ - HatchObject.AppendInnerLoop (INTLOOP) '设置图案填充的内边界9 v- J8 a0 |% [& x8 v- {# E
- Update
@! ?2 E& ?% Z( b# s, ~7 w' y- \, ? - Set INTLOOP(0) = L '将cir3圆赋给第二个内边界,同时设置两个内边界不好使!要一个一个设置
! ?0 e0 L3 E% _. X- Q" y' U - HatchObject.AppendInnerLoop (INTLOOP) '设置图案填充的内边界
# [- l+ a; C) \3 T' O' P - Update7 u K; p6 S" l) B# z4 n) H
- End Sub
复制代码
6 z" w% N1 a( U8 t# G3 b
2.11.02、创建图案填充的补充.zip
(11.2 KB, 下载次数: 10)
|