QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
全站
goto3d 说: 在线网校新上线表哥同事(Mastercam2022)+虞为民版大(inventor2022)的最新课程,来围观吧!
2021-06-26
查看: 4048|回复: 1
收起左侧

[已答复] VBA:如何实现图案填充?

[复制链接]
发表于 2010-8-24 17:56:28 | 显示全部楼层 |阅读模式

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

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

x
下面一段程序,是对一个方框进行图案填充:
; `) @# o8 W7 V) K5 `# k; K2 D1 z6 j. K, ?/ r1 v% p2 m$ o
P4(0) = X0: P4(1) = Y0. M$ y% Z7 ]6 Z) u/ o. b
P4(2) = X0: P4(3) = Y0 + Y8 R1 ~: O2 Y- f, }8 D4 y: S) _* N# p
P4(4) = X0 + X: P4(5) = Y0 + Y
0 c- c; P2 O+ [4 D1 [P4(6) = X0 + X: P4(7) = Y0
1 @0 `4 b! Z% ^% YP4(8) = X0: P4(9) = Y0
" b3 q* g0 q/ O9 ?3 w, k! [# J/ bSet PLINEOBJ = ThisDrawing.ModelSpace.AddLightWeightPolyline(P4)
1 I2 z. X5 }" N' J2 U$ E8 o9 {* iPLINEOBJ.Layer = LAY1
7 s- A8 P% C# Y# K; \/ YIf InStr(LAY1, "DASH") Or InStr(LAY1, "CEN") Or InStr(LAY1, "DIM") Then
1 c7 t2 H" L! H: ]    PLINEOBJ.LinetypeScale = 200 / 40 * SCAL: r/ Y- Q; r9 f* l! [$ l7 J
Else, g' u7 T* l0 h& M$ Z1 `
    % [7 G3 b5 W& a0 f9 H' F6 J+ q
End If
5 a7 `: _& q) F) {6 _5 K! c3 Q' F  T/ }

; @# m# [/ a# R7 D4 L            Set OUTERLOOP1(0) = PLINEOBJ, ^: Z: i# X. t! I0 f# E
            HATCHOBJ.AppendInnerLoop (OUTERLOOP1)
% j' f- b; @2 `            HATCHOBJ.PatternScale = 109 c4 O" U7 N5 O& f1 t& S
            HATCHOBJ.Evaluate& C9 `) A& N/ u0 e3 n: D& z
            HATCHOBJ.Layer = "DRAWDIM"9 N7 q- b0 i9 R7 ~& u8 s! Z- Z+ l
/ B8 T1 D& ~( }/ V% q% x0 c2 s
, C' E8 m' Y% O' x% Q! {3 m
但是,如果这个方框中有文字,将直接覆盖,而不是手工填充时图案自动避开文字,而且用VBA填充的话,填充图案与手工填充的图案特性不太一样,虽然选择的填充图案一样2 J8 _8 e6 ^' |5 L0 ?2 S* a* a
下图中方框部分图案为程序自动填充的,椭圆部分为手动填充的,选中以后,可以看到其焦点是不一样多的,而且自动填充的图案覆盖了其中的文字,而手动填充的图案则避开了文字1 G6 V( c. e& I5 f+ T; X

4 x. l# S9 a! r0 G9 J* }) B% z* C  w- e1 j" |+ I) w6 E1 |' E
如何使自动填充实现手动填充同样的效果〉?8 \2 O: ?  Q) T: S- Z& U3 I8 W
未命名.JPG
发表于 2010-8-25 00:10:19 | 显示全部楼层
如果这个方框中有文字,将直接覆盖,而不是手工填充时图案自动避开文字
" H2 [1 T  n# j+ b" T: [& x157787698 发表于 2010-8-24 17:56 http://www.3dportal.cn/discuz/images/common/back.gif

" X9 c' O# l2 Y$ j因为你的程序并没有让它避开文字啊* C, y' u, W) P3 S# j! g' j; W( _
尽管代码中有创建填充对象内边界的内容,但没有看到完整的代码,不知道构成矩形内边界的多段线的顶点具体在哪里,从图片上也没有看到这个内边界,因此只能猜想代码中创建的内边界并不是文字的边界./ f9 R. r4 o3 B; g. r2 u% p
如果想让填充图案避开文字,只要围绕文字再创建一个内边界就可以了.
4 V* _2 o3 m" _5 v) o+ L
看到其焦点是不一样多的
+ B/ \  j7 u7 R2 I, `4 E4 {% }157787698 发表于 2010-8-24 17:56 http://www.3dportal.cn/discuz/images/common/back.gif
% _. ]4 x+ S$ Z# e2 p
那些蓝色的点不叫"焦点",叫"夹持点",简称"夹点".在2010以上版本中,非关联填充对象是可以通过夹点编辑修改填充形状的.上面的图片中夹点多,说明填充图案未与边界关联,所以在边界上有很多可供编辑的夹点.下面的图片只有一个夹点,说明填充图案与边界是关联的(当然,在2010以前的版本中,非关联填充也只有一个夹点--只能移动填充对象)
0 E, W# z, k7 m: F+ x要想让程序创建的填充对象像下面图片中一样与边界关联,只要在创建填充对象时把Associativity参数设为True就可以了
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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