QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 7134|回复: 6
收起左侧

[分享] Autocad vbA 初级教程(13) 块操作

[复制链接]
发表于 2006-9-22 15:59:01 | 显示全部楼层 |阅读模式 来自: 中国江苏常州

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

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

x
定义块方法:0 r. ~1 X* O% `# H, p$ V& k& G1 N
Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名)
. A9 ^# Z( s& `% z1 v把选择集加入块中的方法:3 ?( g8 z" o( T4 B. }" x) X- s
ThisDrawing.CopyObjects(选择集,块)
' `/ D& W# Q, ]$ P插入块方法:" R& e. U& r) N$ R  T! i% A
ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度)
; i( f+ u/ P! ~0 V$ E% r画块属性方法:. f9 m8 N( r  h
ThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)( Z5 \+ [( x3 U9 {
一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式
% s2 }& ]  I7 B& r编程思路:* M2 |% h2 c9 `& g7 P0 R3 }
1.定义一个空块/ s2 |: `8 n% p; f* F4 f: K* \
2.在块中画一段弧(球服衣领)
. W0 x  e( `- ?- K8 [3.画多段线,镜像画出球衣
' N+ u3 ]8 p8 l& G  c. |7 Q4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性& [, n. D, o* U! h
5.把多段线和属性复制到块中9 l# S' ?- J- c% Z
6.提示用户点选球员位置和姓名$ B3 L( F; V8 X' l
7.插入块,修改球衣号码属性、球员姓名属性( |) B, o& c! b+ w% O

! t$ g, d6 D$ b. q+ A$ k以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。
, a& x. @3 `/ S+ ?+ tSub team()
% ]8 k8 I9 u5 V+ D& d. x# JDim playerlay As AcadLayer '定义球员图层7 |  y* y; N  o) d8 {  E
Dim playerblock As AcadBlock '定义块变量0 C: o1 d7 p1 o' c' j% d
Dim arcc(0 To 2) As Double '圆弧圆心: X, d4 f' n  t7 [* w5 L
Dim linep1(0 To 2) As Double '线条端点1# p% [! T" p( O
Dim linep2(0 To 2) As Double '线条端点2
, @, b" I+ U( B' C9 V, eDim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
2 ~5 i3 D9 ~. PDim basep(0 To 2) As Double '块基点
# k8 ]4 p1 p8 ?# J+ w9 v# MDim playernumberpoint(0 To 2) As Double '块属性插入点
1 q( H0 h6 e- }3 u& L; X) H" }6 a/ dDim mytxt As AcadTextStyle '定义mytxt变量为文本样式$ p' k$ ~$ d8 I" S
Dim blockRef As AcadBlockReference '定义块属性变量) H" T  _+ y. P0 B+ @
Dim Attr3 As Variant '插入块属性变量+ F$ n! ~; t  D# c) Y1 _8 l
6 v, \- t1 g7 j: d
Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块
8 O1 j* Z$ o( e. f
" u$ W/ T. M+ t4 y  darcc(0) = 0+ e; {, a3 C& ?" P) L& C  H
arcc(1) = 430
9 @! r& I6 u6 U# k! rCall playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中6 p5 c( c3 O  I/ E3 h7 I# F/ y1 H
0 N7 R/ @( B) P
pline(0) = 00 Z" A* V9 \$ ^9 r6 D' z' l
pline(1) = 20. @! G. R5 M4 l# |! f- Q+ A: l) R

: O$ z8 r+ A  B6 G4 z  C' o; _pline(3) = 1002 H5 i1 Y. k& p$ M. D7 ^# t4 e" f- w
pline(4) = 20$ N) S. H7 K3 I( {! }1 }, s
& ^! X3 C( Z! z5 n
pline(6) = 100* H, S6 |' @% E0 i; L9 @
pline(7) = 2508 c: e' W( }1 ]0 _9 S

9 ?  F% h6 n! |  X! w& Vpline(9) = 125/ }' Y0 y5 b9 u/ ~& [4 f4 r+ L
pline(10) = 207$ y4 P# `; z+ H  ~/ K/ Z) J

( C1 p, N- O6 Epline(12) = 2129 n; d: A+ ?: K  E6 b  v, z, k% @
pline(13) = 257
- i8 T+ [$ [$ L" ~( k+ G& k8 c
) w3 S% d- }# o- W& D, G1 x0 s- C, {
pline(15) = 112+ D+ c2 c8 E* X2 r( P* {
pline(16) = 430( l* Y/ h% y( `
7 ~. l1 |* l' n  h  Y

  o2 e- n( J5 ppline(18) = 50  V! `9 X$ c2 T6 F4 k( h' W
pline(19) = 430; J" M; Q6 ~1 K7 L
& W: [6 ]3 G2 y% G$ ~
Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
  Z! h1 V# C+ o" H* _, K4 P! W. a7 m5 Y; s2 P
linep2(1) = 1 '镜像轴第二点位于Y轴上任一点* O! f( v6 \  H7 H
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线
5 X3 G. g2 U; A7 w" [6 H/ ^8 y# x2 h  R6 D4 {7 A4 R
Dim p(0 To 2) As Double '定义坐标变量
" F8 s) Y+ R4 w9 o5 O! _- t- MSet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式
- s: {+ \4 r( q. smytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体. t- }) J( }# N. ^
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt* f/ o4 c/ E4 C" c& L4 M) [* b

% V- }% r& `3 b8 ^& y' X# Kplayernumberpoint(0) = 0 '块属性位置
9 e, n; n* T, M0 E8 Z6 Cplayernumberpoint(1) = 2008 k+ ]- v1 i0 D; Y0 u" R! x% u
Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性4 x. i2 ?7 ^8 v
attr1.Alignment = 7 '居中
  ]( y2 A- p% W; A  f& K* Rattr1.TextAlignmentPoint = playernumberpoint '重定义对齐点1 r. \5 q* ?# G6 p7 r" q, d( W& p* a
Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
3 [6 Y+ Z7 V) Y0 Mattr2.Alignment = 7 '居中$ Z- K+ G- Z# b0 m1 U
/ M) e% g* d( Z
- \; r, ^0 y; i6 _! f! w
Dim objCollection(0 To 3) As Object '创建选择集
) Y% P! ^" o" ^0 Q& y8 K8 e$ zSet objCollection(0) = line1 '线条1加入选择集9 R  a2 Q6 L, F. A/ \4 i/ Y
Set objCollection(1) = line2 '线条2加入选择集
8 w! v  f5 P7 @$ Z; {# uSet objCollection(2) = attr1 '属性1加入选择集) k! T1 g4 W' w9 l* ]4 y$ d
Set objCollection(3) = attr2 '属性2加入选择集% ?" I) Q- {! G

: k1 x, @0 y% d) n0 {Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
/ x& X8 o0 p1 m! I1 Y/ e0 v( X: z* N9 o6 l0 G+ f. X- O2 _. Z9 t/ |$ {0 |9 t
For Each element In objCollection '在选择集中进行循环5 H2 V# r; x7 v( a( N) y" o
  element.Delete '删除线条和属性(此操作并不影响已创建的块): n! o8 `- K. c  Y1 r2 P
Next
5 o0 r, T, E( B" G2 `
: S! M& G+ X  Y% q  y
1 ~! M. j/ f' rSet playerlay = ThisDrawing.Layers.Add("球员") '新建图层! h; c1 n2 x' _0 ~* w2 v5 c0 Q9 `. N+ m
playerlay.color = 2 '为黄色, D7 f" O- K6 p1 l9 T. I
ThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层
; K1 O; U; K$ s/ [5 }  S3 b: o
2 [2 s8 T# n* I$ ~- ]Dim p1 As Variant '块插入点位置$ O8 x( {( n) C, e/ ~: G
& e/ Z! a4 X, {  u/ n
For i = 1 To 11 '插入块
" r3 m6 Z4 S5 P: t8 j  pstring = CStr(i) & "号球员位置:"
% B) o; D4 d$ m. o  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标0 z6 ^$ Z5 T% x+ v' j1 Z! o) A, }
  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
7 S% H: X+ a+ h* _% j$ U  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块+ A( X& l9 A+ V9 }# g& n
  Attr3 = blockRef.GetAttributes '获取块属性0 r$ `8 j) o1 i
  Attr3(0).TextString = CStr(i) '赋值球员号码1 z+ H, ^6 O" w4 {7 c
  Attr3(1).TextString = nstring '赋值球员姓名
! b; d, [) f9 f4 n5 mNext, Y& n4 E5 j, U9 f/ F: u
" s7 ~) e, ~" t& Z1 A
End Sub
发表于 2008-10-30 11:26:25 | 显示全部楼层 来自: 中国山东烟台
太好了,本人正在研究这方面的程序,借鉴一下
发表于 2009-2-12 11:28:27 | 显示全部楼层 来自: 中国上海
感谢楼主的分享,在CAD2009中尝试一下,有问题来咨询楼主您。
发表于 2010-1-18 23:04:10 | 显示全部楼层 来自: 中国四川成都
正在找这方面的资料呀……
发表于 2010-5-25 13:42:55 | 显示全部楼层 来自: 中国福建泉州
非常受用,谢谢楼主
发表于 2010-8-31 17:16:15 | 显示全部楼层 来自: 中国台湾
非常詳細的VBA教學,對初學者是一大幫助.謝謝!
发表于 2010-11-30 17:50:54 | 显示全部楼层 来自: 中国浙江杭州
资料很好的
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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