本帖最后由 kuangben8 于 2019-4-14 10:11 编辑 & F8 e7 V( r$ V
% Z' |5 t1 @+ B& j" q关于创建图案填充的补充:(非常感谢woaishuijia老师的热心帮助,以下是老师的帮助文档+我的一点总结)一、关于 AddHatch方法的参数 1、在2002版及以前,AutoCAD 只有图案填充,那时的AddHatch 方法只有三个参数,即 PatternType(图案类型)、PatternName(图案名称)和 Associativity(关联性);到2004版,增加了渐变填充, AddHatch 方法就增加了第四个参数 HatchObjectType(填充对象类型)。 2、先说第四个参数 HatchObjectType(填充对象类型) 先说它的原因是它的值决定了第一个参数的用法。按我们通常的思维习惯,它本来应该是第一个参数,但由于是后增加的,所以排在了第四个。 这个参数为 AcHatchObjectType 枚举类型。如果使用变量,应这样声明 Dim ** As AcHatchObjectType 这个枚举共有两个值: 1、acHatchObject= 0(图案填充):表示选择填充样式为图案填充!对应填充界面如下
; C7 I8 y e/ H5 N2、acGradientObject= 1(渐变填充):表示选择填充样式为渐变填充!对应填充界面如下
9 c$ f% s, R- v. l1 ?/ i4 A! X p5 j6 {
. X# r; i4 ]$ c u% o这个参数是可选的,默认值为 0(acHatchObject,图案填充)。
* T9 l$ a7 V" L# n% v5 G
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)”下拉列表(见图)。& a. c( ^2 N1 k4 R, R6 G8 E6 I* z
' Y5 g2 L3 k. } P
% x0 F/ z6 n* U% W6 U2 }! \# q1 Y
2)AcGradientPatternType 枚举类型。如果使用变量,应这样声明 Dim ** As AcGradientPatternType 这个枚举共有两个值: acPreDefinedGradient = 0(预定义) acUserDefinedGradient = 1(用户定义) 第一个值容易理解;第二个值E文是这样说的:Definesa pattern based on property values. 翻译:基于属性值定义模式。比较费解。经多次尝试,出错的提示总是“尚未实现”,且图形界面“图案填充和渐变色”对话框中也没有对应的选项。猜想这是为 AutoCAD 为今后的渐变填充改进预留的,就是说这个枚举目前只能用 acPreDefinedGradient = 0(预定义)值。
5 t5 Z6 b/ n% A4、第二个参数 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个名称之一:: @! s* f4 w8 c, G
1、"Linear"、2、"Cylinder"、3、"InvCylinder"、4、"Spherical"、5、"HemiSpherical"、6、"Curved"、7、"InvSpherical"、8、"InvHemiSpherical"、9、"InvCurved" ,对应图案如下:
* r" {2 E* L! h) h2 X7 K8 k" V# j4 L5、第三参数: Associativity(是否关联) 参考如上右图 Boolean[布尔值]; 仅用于输入,TRUE: 图案填充为关联的。 FALSE: 图案填充为不关联的。 作用:当填充图案的边界发生变化时,填充的图案是否自动适应边界的变化。 省略时默认是FALSE(不关联,即不勾选)。但是第三参数仍然要定义变量,可以不赋值。 . W5 i' o' n1 Z2 J5 ]* o2 b3 z1 H6 x* L
: d4 y9 `' l* k# C" `9 h# U
* @9 y! E3 r9 ~2 q! j7 I& E5 p综上,第一个参数就取 0,第二个参数根据第四个参数的值取现有的图案填充名称或渐变名称,第四个参数决定第二参数的选择是图案填充还是渐变填充,图案名称必须是符合第四参数指定的类型中的图案名称。
) _* [) \; s u5 S+ B: \3 ~. q" d4 ^6 U$ p; C
二、创建填充的步骤和要求 首先用 AddHatch 方法创建填充对象;紧接着用Hatch 对象的 AppendOuterLoop 方法明确外边界;如果填充内部有空白,还要用 AppendInnerLoop 方法添加内边界,有几个内边界就用几次。边界必须是封闭的。组成边界的多个图元之间必须是首尾相连的,换句话说,组成边界的多个图元之间不允许交叉,只允许且必须端点重合。 在实际测试中发现使用图案填充时,添加完外边界后刷新界面,然后添加内边界无效!但是渐变填充却没事! 内边界与外边界不许交叉,各个内边界之间也不许交叉。 内边界可以内部还有内边界,就是两个内边界“嵌套”组成环形。 内边界内部是否填充、嵌套的内边界怎样填充,可以用 Hatch 对象的 HatchStyle 属性(孤岛检测样式)来决定。可以在图形界面打开“特性”管理器,再选择一个有内边界的填充对象,在“特性”管理器中修改“孤岛检测样式”属性查看效果。 - Sub AddHatch方法()2 Z- `/ z2 R3 {0 j
- Rem 语法:RetVal = Object.AddHatch(PatternType, PatternName, Associativity [, HatchObjectType])
# Y" R. x$ c% q2 \9 r - Dim HatchObject As AcadHatch '定义填充图案对象# v% M" I C2 C) M5 D$ _3 U( n! p" {
- Rem 定义填充类型为长整型,取值为图案填充的0,1,2;渐变填充的0,1,一般就取0(CAD预定义)9 l% G% q+ j: L( y* [+ R
- Dim hatchtype As AcPatternType '参数4设置为图案填充的类型,参数4若是渐变填充,则定义为AcGradientPatternType类型
: b1 U l3 I5 G I$ s0 Q5 C - ' Dim hatchtype As AcGradientPatternType
1 [3 k6 k3 J/ c9 t - Dim HatchName As String '定义图案名称为字符串类型
3 W& i' F# q6 A, l& n - Dim HatchAssociativity As Boolean '定义关联类型为布尔值,取值为True表示关联,False表示非关联。
" i3 F1 ^1 t/ |4 C - Dim HObjectType As AcHatchObjectType '定义图案对象类型,取值为“图案填充-0”、“渐变填充-1”。省略默认为0.- l9 [& V; e9 b+ s, [* x# p2 F
1 L* e/ U/ E! L$ u: Z# r% X+ S- Rem 首先添加几个边界以备填充使用
- }- o) g) ]: A5 J3 t% | - Dim L As AcadLWPolyline, cir1 As AcadCircle, cir2 As AcadCircle, CIR3 As AcadCircle '定义一个多段线和三个圆# Z9 {- h& R! U5 p) U' ]
- Dim pts(11) As Double, P0(2) As Double, R As Double '定义多段线端点变量,圆心变量,半径变量# a$ @# U4 ^ U$ S% O6 V! t, R
- pts(0) = 0: pts(1) = 0: pts(2) = 20: pts(3) = 15: pts(4) = 10: pts(5) = 30& n8 _2 M0 ^" @5 ?6 t
- pts(6) = 50: pts(7) = 50: pts(8) = 0: pts(9) = -70: pts(10) = -70: pts(11) = 32
% E( c; d* O) _7 o5 M - Set L = ThisDrawing.ModelSpace.AddLightWeightPolyline(pts)1 S# _" E% L+ t0 v5 [( r! B& V
- Update
) _4 a! z9 a n' g - L.Closed = True '将多段线闭合6 J+ x4 [0 Z5 G9 \' j3 a
- Update
3 i6 D/ ? M1 J7 G - P0(0) = 0: P0(1) = 0: P0(2) = 0
3 L/ U5 z. D* F, G( c. C' m - R = 25
6 X0 T, ~+ [: j2 |- v: Y# J% A& F - Set cir1 = ThisDrawing.ModelSpace.AddCircle(P0, R)+ O: f9 r( g$ N: p+ C7 g
- Update) w9 _9 ?' n/ l9 v9 t& g6 C/ i+ I9 p
- R = 50, e' ~( S" g. h3 U9 z
- Set cir2 = ThisDrawing.ModelSpace.AddCircle(P0, R)
) x! M6 ^0 W$ P2 w/ G! s - Update
- n: p1 `+ `. e2 h; _ - R = 70, O* F) L5 H) |8 P. N
- Set CIR3 = ThisDrawing.ModelSpace.AddCircle(P0, R)
2 g4 H7 A" F$ E; c - Update
- X! B! C5 T: O - 1 i$ X2 [& V- V9 f$ W+ B
- Rem 接下来赋值图案填充变量,先复制第四参数,再赋值第一参数、第二参数、第三参数
, B' @& c, J6 |1 l/ Q% n - HObjectType = 1 '写0也可以直接写acHatchObject,表示图案填充类型,都省略默认为0;写1也可以写成acGradientObject,表示渐变填充
/ E2 F4 O. J6 A# i* P - ' HObjectType = acGradientObject '也可以直接写1,表示渐变填充类型5 `. x& |4 u* U' b
- Rem 第一参数值英文名称太长,还是直接记住数字好了!$ h. ?2 j) E+ b8 m6 m
- hatchtype = 0 'acHatchPatternTypePreDefined,参数太长,直接记住数字吧!! z# S! A) B3 b5 k/ I, o/ S' f
- ' HatchType = 1 'acHatchPatternTypeUserDefined
) b1 u; I, H' U - ' HatchType = 2 'acHatchPatternTypeCustomDefined,第四参数为1时此参数无效!5 P7 P' I' a4 s( x& O3 U
- Rem 以下四类图案名称仅在第四参数=0时有效!每一类里有数个名称可用!0 U. j1 f, w* d3 i1 l9 ~1 k
- ' HatchName = "ANSI32"4 i) U9 L% H5 o% K; z+ f) X- Y
- ' HatchName = "ISO02W100" '此处的名字到底是什么?' @( X3 u6 v+ F( X
- ' HatchName = "AR-HBONE"
' t# s4 o# D" g# [* u5 S/ b - ' HatchName = "STARS"+ P4 v6 a* ^" v/ p/ }- e! q
- Rem 以下9种图案名称仅在第四参数=1时有效!表示渐变填充名称,只有这9个名称。
* W8 v6 J5 R1 | - ' HatchName = "Linear" '对应第1行第1列图案! v, u2 ~0 P) H1 j- z; @; Y
- ' HatchName = "Cylinder" '对应第1行第2列图案) S/ A9 ^% R, k
- ' HatchName = "InvCylinder" '对应第1行第3列图案/ r+ z, X& h, n. e9 v# b9 i1 \; m
- HatchName = "Spherical" '对应第2行第1列图案7 j8 x( ^9 ]: |) O/ Q- H
- ' HatchName = "HemiSpherical" '对应第2行第2列图案* C7 y$ K3 r0 N( Q4 H' X
- ' HatchName = "Curved" '对应第2行第3列图案7 P. i3 X8 `8 V' y0 ~. g/ {: I8 l
- ' HatchName = "InvSpherical" '对应第3行第1列图案0 {: P' h2 @% g3 K$ Q" v3 @' r/ l
- ' HatchName = "InvHemiSpherical" '对应第3行第2列图案
_) y3 y/ _3 A# V - ' HatchName = "InvCurved" '对应第3行第3列图案
& Q) {! u' C" O) c/ A - Rem 第三参数一般设置为true(关联)# J ~/ g; I2 h( t. j* a
- ' HatchAssociativity = True '省略赋值时默认为False
" ?5 r. s2 d* t% A$ G( I - ' HatchAssociativity = False2 B! B. {8 N" p8 @$ F
- $ }* ~' ] B9 b; m* ^
- Rem 首先创建图案填充,然后创建图案外边界和内边界 p- i% W4 U% c g) y4 V6 n- x
- Set HatchObject = ThisDrawing.ModelSpace.AddHatch(hatchtype, HatchName, HatchAssociativity, HObjectType)
0 W$ {& ~% S3 m7 Z( l3 j - ' Set HatchObject = ThisDrawing.ModelSpace.AddHatch(0, "ANSI32", True, 0) '也可以直接写参数值
% s7 m& a6 D( H \8 E - Dim OUTLOOP(0) As AcadEntity '定义外边界为CAD实体类型; O3 s8 n ^3 o
- Set OUTLOOP(0) = CIR3 '将cir1圆赋给外边界
) A: \7 Z4 Q6 X2 `; _ - HatchObject.AppendOuterLoop (OUTLOOP) '设置图案填充的外边界9 B0 S9 r- |( o4 A# Q
- Update '添加内边界之前刷新界面,后续图案填充内边界添加无效!但是渐变填充可以!
# _5 q; L" R" u$ e9 c0 e - Dim INTLOOP(0) As AcadEntity '定义内边界为CAD实体类型) z B+ k5 A8 l. `5 m& I$ D! k
- Set INTLOOP(0) = cir2 '将cir2圆赋给第一个内边界,如果内边界比外边界大,则出错!
4 c+ F2 s, S: X9 H. c7 a+ T' _ - HatchObject.AppendInnerLoop (INTLOOP) '设置图案填充的内边界 j$ y- f- {% H6 a0 S9 _
- Update+ w4 F) A6 |, C. M$ _
- Set INTLOOP(0) = L '将cir3圆赋给第二个内边界,同时设置两个内边界不好使!要一个一个设置: ]. A ~1 k# q8 W @' x
- HatchObject.AppendInnerLoop (INTLOOP) '设置图案填充的内边界
" X1 h; l/ U# n0 S7 E- W - Update
+ L$ a3 Y2 i' r+ ? M - End Sub
复制代码 7 q: _: @6 s4 Q) v. G( h
2.11.02、创建图案填充的补充.zip
(11.2 KB, 下载次数: 11)
|