Professional Documents
Culture Documents
D
X Y
C
H
N TIN TRNH TRONG AUTOCAD
LP
BM
Ging Vin : Trn anh Bnh
Cp nht ngy 25/8/2007
T IN
N G
Sch tham kho :
T H
GH Wileys & Sons
AutoCAD 2004 Bible
N
NG
Mastering in AutoCAD 2000 George Omura
A C
AutoCAD 2004 For Dummies John Wiley & Sons
KHO
AutoCAD 2000 (1,2) KTS.Lu Triu Nguyn.
AutoCAD 2004 (1,2) c bn v nng cao TS.Nguyn Hu Lc.
Cc tin ch thit k trn AutoCAD TS.Nguyn Hu Lc.
Nguyn Thanh Trung.
AutoCAD 2004 (1,2) c bn v nng cao TS.Nguyn Hu Lc.
AutoCAD 2004 Activex and VBA KS.Hong Thnh An.
Ngn ng lp trnhC
XCAD
I.
trong
II.
T INvHActivex Automation
Tng quan
III. N ng lp trnh AutoLisp
M Ngn
B 1. Gii thiu chung
2. Cn bn v AutoLisp
3. Bin trong Lisp
4. File chng trnh Lisp
5. Nhp d liu
6. Mt s hm c bn
7. X l danh sch
8. Biu thc iu kin
T IN
N G
9. Vng lp
T H
10.
H
Tp hp cc i tng c chn
Lp trnh vi c s d liuN G
G
11. ca AutoCAD.
Phn tch v d: N
12.
C
A Visual Lisp
IV.
K H O
Ngn ng lp trnh
V. C bn v ngn ng lp trnh Visual Basic
VI. Lm quen vi VBA.
1. VBA Projects
2. To mi project
3. T chc cc project vi VBA Manager
4. Son tho project vi VBA IDE
5. Lm vic vi cc Macro
VII. Cn bn v VBA.
1. M hnh i tng ca AutoCAD.
2. Object Hierarchy.
N G
D
Y
3. i tng Collection.
4. Property & Method (thuc tnh & phng thc).
C X
Truy cp n i tng trong Object Hierarchy. I H
Hierarchy.
5.
Truy cp n i tng Collection trongG
NVB, VBA trong cc mi trng khc.
6. Object
7.
TR
Truy cp n Object Hierarchy bng
I. M, ng v ghi li bn v
1. M bn v.
N G
D
2. To mi bn v.
3. Lu bn v.
X Y
C v
bn
II.
H
iu khin ca s
N TINkhin ca s AutoCAD.
1. iu
2. iu khin ca s bn v.
BM 3. iu khin s hin th bn trong ca s bn v.
III. Ly v thit lp cc thng s h thng
1. Ly v thit lp cc bin h thng
2. Grid v Snap.
3. Ly v thit lp bin h thng trong Option.
IV. S dng command line trong VBA
V. Nhp d liu ngi dng
1. Nhp Chui TIN
N G
2. Nhp ta mt im
T H
3.
H
Nhp mt k t in hnh cho Option
G
4.
G
Nhp s thc, s nguyn. N
N
5.
A C GetAngle Method, GetDistance Method
GetCorner Method,
6.
KHOMethod, GetSubEntity Method
GetEntity
CHNG 3 : TO V SA CC THC TH HA
I. To i tng bn v
1. Xc nh i tng cha thc th.
2. V Line, Arc, Circle, and Ellipse objects
3. To cc khi c
4. To i tng hatch
5. To i tng Region, cc php ton trn Region
II. Thm Text vo bn v
N G
D
1. To cc TextStyle
2. Chn Text vo bn v
X Y
C
3. Chn cc k t c bit, cc k t Unicode.
I H
III. Sa cc i tng bn v
NG
R
1. Cc php sa i c bn
2. Cc php bin i nngT cao
3. Chnh sa PolyLine, SpLine
3
KS. GV. TRN ANH BNH
K H O
CHNG 4 : TY BIN MENUS V TOOLBARS
4
KS. GV. TRN ANH BNH
1. To mi toolbar
2. Thm mt nt chn vo toolbar
N G
D
3. nh ngha hnh nh cho cc nt Toolbar Button.
4.
X Y
Thm mt khong trng vo toolbar
H C Toolbars
5. Floating v Docking
N flyout toolbar
TIcc
N
6. To
7. Xa Toolbar v Toolbar Button
BM V. To cc macro
1. Cc quy nh v macro
2. Cc v d v macro
I. AutoCAD Events
IN
1. Application-level events
2. Document-level events
G T
N
3. Object-Level Events
T H
II. S dng Form
GH
N
1.
NG
Lm vic vi Form v Macro
C v macro
A module
III.
O
2. Lm vic vi
Hvi cc ng dng v cc c s d liu khc
TngKtc
1. Tng tc vi Visual Lisp
2. S dng c s d liu DAO
3. Giao tip vi cc ng dng khc.
IV. Lm vic vi Xdata
1. Khi nim v XData
2. Sets the extended data (XData) associated with an object.
3. Gets the extended data (XData) associated with an object.
4. Cc V d
V. Lm vic vi Xrecord
N G
D
1. Khi nim v Xrecord
2. Phng thc AddXRecord
X Y
C
3. Phng thc SetXRecordData
H
4. Phng thc GetXRecordData
G I
N
TR
5
KS. GV. TRN ANH BNH
Y
Cp I : Bit s dng CAD
X
Cp II : Bit qun l v lm ch mi trng CAD
C
H
Cp III : Bit lp trnh t ng ha qu trnh v
TIN
Autocad cho ta cc cch c th t ng qu qu trnh v nh sau :
M
T ng ha bng cc file Script.
B Lp trnh trong mi trng CAD nh Lisp, Object ARX, VBA.
AutoDesk cung cp cho chng ta mt b cc phn m rng kim sot AutoCad t ngn ng.
Nhng phn m rng ny c gi l Object ARX. y l mt phng php tip cn vi CAD mt
cch chuyn nghip nht tuy nhin n li qu phc tp.
AutoLisp l mt ngn ng lp trnh thng dch, N l mt phin bn mi nht v ngn ng lp
trnh nhn to c nht m ngy nay vn cn c s dng. Autolisp nm trong b Common LISP.
LISP vit tt ca LIST Processor !. Ni chung Lisp d hc bi c php ca n n gin nhng n
khng tng tc c vi cc c s d liu nh Excel, access. Nn vic s dng n to ra cc ng
dng phc tp l rt kh. Tuy nhin mc phc tp cng c gim bt i rt nhiu trong Visual
LISP!
IN
VBA vit tt ca Visual Basic Application. Cng nh Object Arx th VBA cng l mt mi
T
N G
trng lp trnh hng i tng s dng ngn ng VB. u im ca VBA l
H
S dng VB, mt ngn ng lp trnh tng i thng dng v d hc.
T
H
VBA nm trong CAD nn tc chy cng tng i nhanh.
N G
D dng trong vic to ra cc giao din (hp thoi, menu).
NG
Tng tc vi cc ng dng khc v cc c s d liu khc.
C
Cho php ta ghi Project ra file ring hoc tch hp lun vo bn v. To iu kin pht
A
KHO
trin ng dng mt cch mm do trong vic chia s d liu gia cc ng dng khc trong
mi trng Window.
II. Tng quan v Activex Automation
2 u im ca AutoCAD ActiveX
Activex automation l chun mc c to ra bi hng Microsoft, trc y c gi l OLE
activex, cho php mt ng dng Windows ny kim sot mt ng dng Windows khc qua m hnh
cc i tng r rng.
AutoCAD ActiveX l giao din cho php ngi lp trnh lm vic vi cc i tng ca
AutoCAD. AutoCAD Activex cho php bn s dng mt cch t ng khng ch trong phm vi
AutoCAD m ngoi c AutoCAD. Cc i tng ca AutoCAD c th c truy nhp n bi nhiu
ngn ng lp trnh khc nhau nh Ms word VBA, Ms Excel VBA,...
N G
D
X Y
C
H
G I
N
TR
6
KS. GV. TRN ANH BNH
N G
D
X Y
C
H
N TIN
BM
2 u im ca AutoCAD ActiveX
T IN
Tt c cc ngn ng lp trnh u c th lm vic vi cc i tng trong AutoCAD (khng
N G
gii hn vi C++ v AutoLISP nh trc)
T H
Chia s d liu vi cc ng dng khc trn mi trng Windows (Excel, Word...)
GH
M hnh client server.
N
NG
Mc d Activex lun lun bao gm mt cuc hi thoi gia hai ng dng, n khng phi l cuc
C
hi thoi hai chiu gia cc thnh phn tng ng. Mi thnh phn chng trnh Activex
A
KHO
Automation bao gm hai chng trnh vi cc vai tr khc nhau. Client l ng dng khi to cuc hi
thoi. Server l ng dng hi p client. M Activex Automation chy trong client, trong khi cc hnh
ng m ny c kim sot thc hin trn server. Hnh di y trnh by mi quan h gia Client v
Server trong mt cuc trao i Activex Automation c th.
Starts conversation
Request Object
Supplies Object
Client Server
Invokes Method
Supplies Object
N G
D
Y
Close conversation
C X
H
I
Principle Activex Automation
Di y l mt s ng dng bn c th NG
Visual Basic
TR dung kim sot cc server activex, k c AutoCAD.
Excel VBA
Word VBA
7
KS. GV. TRN ANH BNH
.....
M hnh i tng ca Automation.
N G
Mt Server Activex Automation (chng hn nh AutoCAD) thc hin cc chc nng qua cc i
D
Y
tng. Mt i tng l mt i din ca thnh ng dng. Mt i tng c phn bit vi cc di
X
tng khc b ba c tnh :
C
H
Phn loi ca i tng
TIN
Cc c tnh ca i tng
M
V d i tng Line, c tnh ca i tng cho php bn xc nh :
B Mu sc
Lp
im khi u
im kt thc
di
Phng thc i tng l
Sao chp
xa
i xng qua gng
di chuyn
quay
T IN
G
Ch , cc Autocad activex s khng hot ng nu cad ang thc hin lnh.
N
III. Ngn ng lp trnh AutoLisp
T H
1. Gii thiu chung
GH
N
NG
u im : Tc chy nhanh
Nhc im :
C
A
KHO
L ngn ng lp trnh thng dch, ko cu trc
Khng kt ni c vi cc c s d liu nh Access, Excel
2. Cn bn v AutoLisp
2.1. Xy dng biu thc AutoLisp
Cu trc d liu c bn ca Lisp l danh sch (List)
Danh sch l tp hp cc phn t cha trong cc du ngoc n, cc phn t c cch
nhau bi mt hoc nhiu du cch
Danh sch c 2 loi : Biu thc ton hc (expression) v danh sch d liu (data list).
Phn t u tin ca ca mt biu thc lun lun l mt hm
Mt biu thc bao gm tn hm v cc tham s cha trong cc du ngoc n. Khc vi
biu thc ton hc, cc tham s trong biu thc Lisp l cc tham s c th t.
Tham s l cc gi tr cung cp cho hm tnh ton
AutoLisp tr v kt qu tnh ton t biu thc.
V d :
(+ 30 20 50)
N G
Tr v kt qu : 100 D
X Y
C
2.2. Cch nhp biu thc AutoLisp
Biu thc Lisp c th c nhp nh cc dng lnh ca I H
G AutoCAD, ch rng biu thc ca Lisp
nnN
lun lun nm trong du ngoc n ( ).
Khi nhp trc tip bng dng lnh, bn
liR
c th theo di c kt qu cng nh T
ca n.
ch ko di ca s AutoCAD Text Window ra
2.3. Cc hm s hc
Hm cng (+) : (+ [number 1] [number 2] [number 3].)
N G
Danh sch bt u bng du + bo cho lisp l hm, cc phn t ng sau n s l tham s.
D liu s c chia lm 2 loi : D
X Y
S nguyn (ko c du chm)
C
H
S thp phn (c du chm)
TIN
Kt qu tr v s c kiu l kiu rng nht trong cc kiu ca tham s.
N V d :
M
Command: ( + 140 10 30)
B 180
Command: ( + 140 10 30.0)
180.0
Command: (+ 140 10.10 30)
180.1
Command: (+ 10 a)
; error: bad argument type: numberp: nil
Hm tr (-)
Hm nhn (*)
Hm chia (/) T IN
N G
Command: ( / 120 10 3)
4 T H
Command: ( * 3.75 3.775)
GH
N
NG
14.0625
C
Lisp lu tr ti 14 s thp phn nhng kt qu tr v trn mn hnh s ch c 6 ch s c ngha
A
KHO
tnh t tri sang phi.
V d : 18-[(3+6+9):(9-6)-12]
Command: (- (- 18 (/ (+ 3 6 9) (- 9 6))) 12)
0
3. Bin trong Lisp
K hiu
Tn bin cng nh tn hm ko phn bit ch hoa, ch thng.
Bin khng nht thit cn khai bo
Gn gi tr cho bin
S dng hm Setq gn gi tr cho mt bin. C php nh sau :
(SetQ Symbol1 value1 [symbol2 value2] )
Ging nh cc hm khc, hm SetQ tr v mt gi tr. Gi tr ny c th l nill (rng), T
(True) hoc cc s, chui, danh sch.
V d :
Command (Setq x 3)
N G
D
Y
3
Command (Setq x 3 y 4)
C X
4
H
I
Command (Setq z (+ x y)
7
N G
Command (Setq A Xyabg)
Xyabg
TR
Phm vi bin
Bin ch c tc dng trong phm vi bn v
9
KS. GV. TRN ANH BNH
IN
Command : (Load E:/autoLisp/CHT.lsp)
Hoc
G T
Command : (Load E:\\toLisp\\T.lsp)
N
S dng hm Appload (Application Load) T H
GH
N
NG
A C
KHO
N G
D
X Y
C
H
G I
N
TR
4.2. Hm t to
10
KS. GV. TRN ANH BNH
TIN
cn thit khi gi l hm. Phn th hai ch cc bin cc b ca hm.
N Expression : cc biu thc tnh ton ca hm. Cc biu thc ny s ln lt c tnh ton
M
theo th t t trn xung di.
B V d :
(Defun ZA()
(command Zoom all)
)
Bin ton cc v bin cc b
Bin ton cc l cc bin hot ng trong phm vi bn v
Bin cc b l bin c nh ngha trong phm vi hm v gi tr ca n s mt i khi hm
kt thc.
4.3. To lnh AutoCAD mi.
T IN
Tham s C:
N G
H
c th s dng hm t to nh l mt lnh trong AutoCAD, ta t k hiu C: vo trc tn
T
H
hm trong phn nh ngha hm t to.
V d :
N G
NG
(Defun C: (/PT1 PT2)
C
(Setq PT1 (getpoint \n nhap diem thu nhat))
A
KHO
(Setq PT2 (getpoint \n nhap diem thu hai))
(command Line PT1 PT2 );
(Princ)
) ;ket thuc
Tham s S::Startup
Khi khi ng AutoCAD, hm S::startup nh ngha trong file ACADRx.lsp s c t ng gi
v thi hnh. y l hm duy nht c tnh cht ny.
5. Nhp d liu
5.1. Nhp d liu ngi dng
Nhp ta mt im : Hm getpoint
(GetPoint [pt] [prompt])
Hm ny s tr v mt danh sch. Danh sch ny thuc sng danh sch lu tr d liu (Data
Storage list). Loi danh sch ny khc vi biu thc ch, phn t u tin ca danh sch khng phi
G
l mt hm. Khi ta nhp d liu vo, AutoCAD nhn bit c kiu d liu danh sch ta dng hm
N
D
Quote (hoc du ).
Y
V d ta v ng thng i qua mt im c ta (2,2,0) v mt im nhn c t ngi dng.
X
(Defun C: (/PT1)
C
H
I
(setq PT1 (getpoint \n Nhap diem thu nhat))
(Command Line PT1 Quote(2 2 0))
)
N G
Hoc :
(Defun C: (/PT1) TR
(setq PT1 (getpoint \n Nhap diem thu nhat))
(Command Line PT1 2,2,0)
11
KS. GV. TRN ANH BNH
)
Trnh t cc tham s hm Command tng ng vi trnh t nhp lnh ti dng nhc. C php
y : (Command [argument])
N G
D
Nhp s nguyn (interger) : Hm getint
X Y
C php : (Getint [prompt])
C
H
V d :
TIN
Command : (Getint \n Enter an integer)
N 12.0
M
Requires an integer value
B Try again : 23
23
Nhp d liu s thc (real) : Hm Getreal
C php nh sau : (Getreal [Prompt])
Nhp d liu kiu chui (string)
C php nh sau : (Getstring [Prompt])
5.2. Kim sot d liu nhp vo
Hm getint cung cp danh sch cc gi tr nhp vo hp l bng cch gn cc bit kim tra (bit
code) v danh sch cc t kha. Cc loi hm nhp d liu nh Getpoint, getcorner, getint, Getreal,
T IN
(ngoi tr hm GetstringO u b kim sot bi hm initget. Hm c tc dng i vi hm nhp d
liu tip theo sau n. C php ca hm nh sau :
N G
(Initget [bits] [string])
T H
H
Bits l mt s nguyn. Gi tr tham s ny bng tng cc bit code tng ng vi cc ch
G
N
kim sot m t among mun
NG
Tham s String cha danh sch cc t kha.
A
Bit codeC Ch kim sot
KHO
1 Gi tr phi c nhp vo; khng chp nh gi tr null
2 Gi tr nhp vo phi khc khng
4 Gi tr nhp vo khng c l s m
128 Cho php nhp chui k t khng c trong danh sch cc t kha. Cc
bit code khc s c u tin trc.
Hm GetKword
Hm ny yu cu nhp d liu dng t kha. C php nh sau :
(GetKWord [Prompt])
Hm getkword ch chp nhn 2 bit code trong hm initget l 1 v 128.
V d :
Command : (initget 1 Y N)
Nil
Command : (setq abc (getkword \n ban co ghi lai khong ? <Y/N>))
5.3. Bin h thng
N G
Ly gi tr bin h thng
D
(Getvar Varname)
X Y
C
Gn gi tr bin h thng
H
I
(Setvar varname value)
N G
Bin h thng quan trng
TR
CmdEcho
Value =1 : Kt qu tnh ton trung gian s c hin ln trn mn hnh.
Value =0 : Kt qu tnh ton trung gian s ko c hin ln trn mn hnh.
12
KS. GV. TRN ANH BNH
6. Mt s hm c bn
6.1. Hm chuyn kiu d liu
N G
D
Chuyn i mt s thnh s thc : Hm (Atof String)
Y
Command : (Atof 15.4a)
X
Cthnh mt s nguyn : hm (Atoi String)
15.4
Chuyn i mtH
IN : (Atof 15.4a)
chui
N TCommand
M 15
B Chuyn i mt s thnh mt chui (real to string):Hm (Rtos Number [mode [precision]])
Precision : s ch s thp phn
Mode l kiu s (scientific, decimal,)
Mode Format
1 Scientific
2 Decimal
3 Engineering
4 Architectural
Number : s s c chuyn qua kiu (mode) vi s ch s thp phn c quy nh trong
IN
(precision) sau c chuyn thnh chui tng ng. Nu khng c 2 tham s ny th
T
AutoCAD s ly bin h thng trong Units thc hin php ton.
G
V d
N
(Rtof 215 2) tr v : 2.15E+2
T H
GH
N
Chuyn i mt s nguyn thnh chui : hm (Itoa integer)
V d :
NG
C
(Itoa 21) tr v 21
A
KHO
(Itoa 30.2) tr v li
Hm ASCII
C php : (Ascii String) : chuyn i k t u tin ca chui thnh m k t ascii tng ng.
V d :
(Ascii Abc) tr v 65.
(Ascii 9Ac) tr v 57.
Hm CHR
C php : (Chr Integer) : chuyn i m ascii thnh k t tng ng trong bn m ASCII. Cc
m ascii chun c gi tr t 32 n 126.
6.2. Hm ton hc
Hm kim sot dng s
(Fix Number) : tr v phn nguyn ca mt s thc.
(Float Number) : Chuyn s Number thnh kiu s thc.
(Abs Number) : tr v tr tuyt i ca mt s.
N G
D
Y
Hm max,min
(Max Number1 Number 2 )
C X
Ch khng chp nhn chui.
(Mim Number1 Number 2 )
H
Hm lng gic
G I
N
(Sin Angle) Tr v gi tr ca mt gc, n v Angle l radians.
(Cos Angle)
TR
(Atan Angle). Gi tr tr v t pi/2 n pi/2
Hm ly tha, khai cn, logarit
13
KS. GV. TRN ANH BNH
H C cch v gc o
6.3. Cc hm v khong
T IN(convert units)
Hm Cvunit
N
M C php : (cvunit Value From To)
B Value : s nguyn, s thc, hoc ta im 2D, 3D
From n v o hin ti (kiu chui)
To n v o s chuyn sang (kiu chui)
V d :
(Cvunit Pi RADIANS DEGREE) tr v 3.14159
(Cvunit (1 3) FT IN tr v (12.0 36.0)
Hm Angle
C php (Angle PT1 PT2) : Tr v gc (Radians) gia ng thng i qua 2 im vi trc X
trong mt phng XY. Nu 2 im ny khng nm trn mt phng XY, n s c chiu ln mt phng
XY v tnh gc.
V d
T IN
Command : (Angle (5 6.10) (quote (10 5)))
N G
6.06664
T H
6.4. Cc hm v chui
G H
G N
N
Hm hin th thng tin kiu chui
:A
C
C php : (Princ [Expr [file]] - Hm ny in ra mn hnh hoc in ra file
H
C php
K O (Print [Expr [file]] - Hm ny in ra mn hnh hoc in ra file trn mt dng mi.
C php : (Prin1 [Expr [file]] - Hm ny in ra mn hnh hoc in ra file trn mt dng
mi.
V d :
Command: (princ "\nabc \nabc\n")
abc
abc
"\nabc \nabc\n"
Command: (prin1 "\nabc \nabc\n")
"\nabc \nabc\n""\nabc \nabc\n"
Command: (print "\nabc \nabc\n")
"\nabc \nabc\n" "\nabc \nabc\n"
Cc k t c bit cho hm Princ
\n : xung dng
\t : cch ra nh mt khong Tab
N G
Hm StrCase
D
C php : (StrCase String [switch])
X Y
C
Nu switch <> nill hm s tr v chui String trong cc k t hoa c chuyn thnh ch
H
I
thng
Nu Switch ko c hoc bng nill th hm s tr v chui String trong cc k thng s
N G
c chuyn thnh k t hoa.
Hm StrCat TR
C php : (StrCat String [string2]) : kt ni cc chui tham s.
Hm StrLen
14
KS. GV. TRN ANH BNH
NG
(abc 10 30.0 hoang)
A C
Trong v d trn L1 c 4 phn t.
KHO
Ngoi ra ta c th s dng hm Quote hoc du ng trc. V d :
Command: (setq a1 (quote("abc" 1 30 40)))
("abc" 1 30 40)
Hoc
Command: (setq a1 '("abc" 1 30 40))
("abc" 1 30 40)
S khc nhau c bn gia List v quote (hoc ). List to ra danh sch nh gi tr, khi to ra
danh sch, lisp s nh gi tr v kiu d liu tng ng cho cc phn t trong danh sch. Cn quote
to ra danh sch cha nh gi tr. Chng ta xem xt v d sau :
Command: (setq a2 '( a b c))
(A B C)
Command: (setq a2 (list a b c))
(nil nil nil)
(V a b c l 3 bin cha c gi tr)
N G
7.3. Hm x l danh sch c bn
D
X Y
C
Hm Car
H
C php : (Car List) : Dng ly gi tr u tin ca danh sch.
V d :
G I
Command : (Car a1)
N
abc
TR
Hm CDR
C php : (CDR list) : To ra mt danh bng cch loi b phn t u tin ca danh sch gc.
V d :
15
KS. GV. TRN ANH BNH
V d : KH
O
C php : (Cons Item List) b xung phn t Item vo v tr u tin ca danh sch.
16
KS. GV. TRN ANH BNH
M
kiu s Fuzz quy nh sai s trong php so snh
N
khng. Nu c hy a ra khong cch gia 2 im . S dng hm (Distance PT1
G
PT2).
D
8.3. Hm logic
X Y
C
H
(Setq A 10 b 20 c 30)
Hm C php V d
G I
N
And (And Expression .. ) (And (> 10 0) (< 10 20)) tr v gi tr T
Or (or Expression .. ) TR (Or (= A 10) (< b 0)) tr v git tr T
Not (Not Item) (Not nill) = T. (Not T) = nill
17
KS. GV. TRN ANH BNH
TIN
(Test2 result2 )
M)
(Testn resultn )
B Bi tp
Gii phng trnh bc 2.
9. Vng lp
9.1. Vng lp c bn
Vng lp Repeat.
Hm Repeat to ra vng lp vi s ln nht nh
C php : (Repeat Number Expr .. )
V d :
(Setq I 10)
T IN
(setq j 1)
N G
(Repeat 10
T H
(setq i (+ 2 i)
GH
(setq j (* 2 j)
N
NG
) ; kt thc hm repeat
A C
Lp 10 ln khi I = 10+2*10 = 30; j= 2^10.
KHO
Vng lp While.
Hm while to ra vng lp c iu kin. Vng lp ny s jt thc khi iu kin Testexpr khng
tha mn.
C php : (While testexpr Expr ..)
V d : V ng thng i qua 2 im
(defun c:L2P (/ ch PT1 pt2)
(setq ch "Y")
(while (or (= ch "Y") (= ch "y") )
(setq PT1 (getpoint "\nnh?p vo ?i?m th? nh?t : "))
(setq PT2 (getpoint "\nnh?p vo ?i?m th? hai : "))
(command "Line" PT1 PT2 "")
(initget 1 "Y N y n")
(Setq ch (getkword "\n b?n c v? n?a khng (Y/N) : "))
); ket thuc while
); ket thuc defun
N G
9.2. Hm foreach D
C php : (Foreach Name List Expr )
X Y
C
Hm Foreach duyt tng phn t trong danh sch LIST. Ti mi thi im, gi tr ca tng phn
H
I
t trong danh sch s c gn cho bin Name. Sau cc biu thc Expr s c nh gi tr.
V d :
N G
(setq I 0)
TR
(foreach So (list 1 2 3 4 5 6 7 8 9 10)
(Setq I (1+ i))
(Princ (Strcat \nCc gi tr th (itoa i) trong danh sch l (itoa so)))
)
18
KS. GV. TRN ANH BNH
Y
C php : (Ssget [Mode][PT1][PT2][PT-List][Filter-List])
C X
HSdng mi phng php chn (hay dng)
Mode Phng php chn C php
IN
NT
None (Ssget)
G
N
Bng Group code.
A C
HO
S dngKfilter
V d :
(ssget ( (0 . text) (40 . 2.5)))
(ssget ( (0 . line) (62 . 4)))
S dng cc php so snh. Ch cc php so snh ch p dng i vi cc group code c kiu s
(nguyn hoc thc). Cc php so snh bao gm * = /= != > < >= <= <>
V d :
(Ssget ((0 . Circle) (-4 . <>) (40 . 50) (-4 . >, <,*) (10 0.0 0.0 0.0)))
ng trn bn knh group code 40, to tm group code 10
S dng cc php ton logic. Cc php ton logic And Or Not
V d :
(Ssget X ((-4 . <OR) (0 . Text) (0 . Line) (0 . Circle) (-4 . Or>)))
Mt vi group code : to im u, cui ca Line : 10,11. Gi tr Text : 12.
10.2. Hm SSLength
N G
D
C php : (SSlength ss)
10.3. SSName
X Y
C
C php : (Ssname ss index) : tr v tn ca i tng th index trong tp hp chn SS. (lu :
H
I
s u tin ca tp hp chn index=0).
V d xa phn t th nht ca danh sch chn
N
(command erase (Ssname SS 0) ) G
Hm EntGet (entity get)
C php : (ENTGET entname) TR
(SETQ DS (ENTGET (SSNAME SS DEM)))
(SETQ KDL (CDR (ASSOC 0 DS)))
19
KS. GV. TRN ANH BNH
C php : (Entmode Elist) NG
A C
Elist l mt danh sch c dng mt record i tng trong m i tng nm group code -1.
KHO
Hm ny s tm trong c s d liu i tng c m nh trong code -1 v thc hin vic thay th.
Cc trng hp khng th thay th c hm s tr v gi tr nill :
Khng tm thy i tng
Thay i m i tng
Thay i m handle
Hiu chnh i tng viewport
Thay i kiu i tng,,,
Hm Entity update
C php : (EntUpd Ename) : Dng cp nht s thay i record ca i tng c tn l Ename
ln mn hnh ha.
11.3. To i tng mi.
Hm (entmake Elist) to ra i tng mi
Cc quy nh cho elist
Tham s elist khng nht thit phi c cc thng s
N G
D
Field th nht bt buc phi l group code 0 cha kiu i tng
M i tng AutoCAD s t t khi i tng c to ra
X Y
12. Phn tch v d :
C
I H
NG
;*******************************************************************************
;* TRAN ANH BINH CDC-HUCE
*
20
KS. GV. TRN ANH BNH
(cond
((= s "quit / exit abort") (princ))
G
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
N
D
)
(setvar "cmdecho" CMD)
X Y ; Restore saved modes
(setvar "osmode" OSM)
C
(setq *error* OLDERR)
H ; Restore old *error* handler
TIN
(princ)
N
)
BM ;*******************************************************************************
(DEFUN C:CD (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI PT13I PT14I
PT13N PT14N O13 O14 N13 N14 OSM OLDERR PT10 PT11)
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETQ OLDERR *error*
*error* myerror)
(PRINC "Please select dimension object!")
(SETQ SS (SSGET))
(SETVAR "CMDECHO" 0)
(SETQ PT (GETPOINT "Point to trim or extend:"))
(SETQ PT (TRANS PT 1 0)) ; chuyen tu current UCS sang WCS (world)
T IN
N G
(COMMAND "UCS" "W")
(SETQ LTH (SSLENGTH SS))
T H
(SETQ DEM 0)
GH
(WHILE (< DEM LTH) N
(PROGN
NG
A C
(SETQ DS (ENTGET (SSNAME SS DEM)))
KHO
(SETQ KDL (CDR (ASSOC 0 DS)))
(IF (= "DIMENSION" KDL)
(PROGN
(SETQ PT10 (CDR (ASSOC 10 DS)))
(SETQ PT11 (CDR (ASSOC 11 DS)))
(SETQ PT13 (CDR (ASSOC 13 DS)))
(SETQ PT14 (CDR (ASSOC 14 DS)))
(SETQ N70 (CDR (ASSOC 70 DS)))
(IF (OR (= N70 32) (= N70 33) (= N70 160) (= N70 161))
(PROGN
(SETQ GOCY (ANGLE PT10 PT14))
(SETQ GOCX (+ GOCY (/ PI 2)))
)
)
G
(SETVAR "OSMODE" 0)
N
D
(SETQ PTI (POLAR PT GOCX 2))
Y
(SETQ PT13I (POLAR PT13 GOCY 2)) ; tao ra mot diem moi
X
(SETQ PT14I (POLAR PT14 GOCY 2)) ; (polar PT angle distance)
C
H
(SETQ PT13N (INTERS PT PTI PT13 PT13I NIL)) ; nill thi cac duong thang se dc keo
dai,
G I
N
(SETQ PT14N (INTERS PT PTI PT14 PT14I NIL)); kha nill thi se khong dc keo dai
(SETQ O13 (ASSOC 13 DS))
TR
(SETQ O14 (ASSOC 14 DS))
(SETQ N13 (CONS 13 PT13N))
(SETQ N14 (CONS 14 PT14N))
21
KS. GV. TRN ANH BNH
T IN
N G
T H
GH
N
NG
A C
KHO
N G
D
X Y
C
H
G I
N
TR
22
KS. GV. TRN ANH BNH
NG
Y D Basic
V. C bn v ngn ng lp trnh Visual
C X
H
I N
VI. Lm quen vi VBA.
T
N
1. VBA Projects
N G
D
X Y
C
H
G I
N
TR
4. Son tho project vi VBA IDE
23
KS. GV. TRN ANH BNH
N G
D
X Y
C
H
N TIN
BM
T IN
N G
T H
GH
N
NG
Ca s Project Manager
Objects (i tng)
C
Forms
A
KHO
Gm cc hp thoi do ngi lp trnh to ra, s dng trong project
Modules
Cc hm dng chung trong ton b Project c t chc trong cc module ring (ph thuc vo
chc nng ca chng)
Class Modules
nh ngha cc lp i tng ca ngi dng
thm 1 component (form, module, class module) vo project
Chn project cn thm thnh phn - component
Trn menu [Insert], chn [UserForm], [Module], [Class Module] thm cc thnh phn ny
vo Project
Module, Class module c son tho trn ca s Code
UserForm c son tho trn ca s UserForm
son tho cc thnh phn
Trn ca s Project Explorer, chn thnh phn cn son tho
Nhn nt [View code] m ca s Code
N G
D
Nhn nt [View object] m ca s UserForm
Y
S dng Option Explicit
C X
H
G I
N
Thm cc ActiveX : TR
24
KS. GV. TRN ANH BNH
N G
D
X Y
C
H
N TIN
BM
S dng trnh son tho Code : Text
Editor.
T IN
N G
T H
GH
5. Lm vic vi cc Macro
N
m ca s Macro
NG
A C
Chn menu Tools/Macro/Macro.
KHO
Hoc s dng lnh VBARUN trn dng command-line
Hp thoi Macro lit k tt c cc hm ca bn v, project (tu theo la chn ti mc [Macro in])
chy Macro
M hp thoi Macro
Nhn nt [Run]
sa Macro
M hp thoi Macro
Nhn nt [Edit]
to Macro mi
Trn mc [Macro name], nhp vo tn ca Macro
Nhn nt [Create]
Trn hp thoi [Select project] chn project to Macro
G
VII. Cn bn v VBA.
N
1. M hnh i tng ca AutoCAD.
D
Y
Hu nh mi Server Activex Automation cung cp nhiu hn mt i tng cho cc client.
X
C
AutoCAD cung cp cho cc client Activex Automation khong 100 i tng, vi tng s 2500
H
I
phng thc v thuc tnh. Do vy CAD c mt khung lm vic n gin d hiu qun l tt c cc
i tng v mi quan h gia chng.
N G
2. Object Hierarchy.
Gi thiu :
TR
25
KS. GV. TRN ANH BNH
NG
D
X Y
C
H
N TIN
BM
T IN
N G
T H
GH
N
NG
A C
KHO
N G
D
X Y
C
H
G I
N
TR
26
KS. GV. TRN ANH BNH
3. i tng Collection.
AutoCAD nhm hu ht cc i tng (Object) trong mt collections. Cho d cc collections
G
ny cha nhiu loi d liu khc nhau, nhng chng c th c chng c tao ra bng cch s dng
N
D
cc k thut tng t nhau. Mi mt collection c mt method thm mt object vo collection. Hu
Y
ht cc collections s dng Add method cho mc ch ny. V d, thm mt thc th ta s dng
X
C(thuc tnh & phng thc).
method Add<Entityname>. For exam-ple, to add a line you would use the AddLine method.
H
IN cha nhiu thuc tnh v phng thc khc nhau.
4. Property & Method
N TObject
Mi mt
B M5. Truy cp n i tng trong Object Hierarchy.
Ta c th truy cp n objects mt cch trc tip hoc thng qua mt bin c nh ngha
trc.
truy cp n i tng mt cch trc tip.
V d, dng code sau thm mt ng line trn model space. Ch rng cy ph h bt u bng
ThisDrawing.
27
KS. GV. TRN ANH BNH
c truy cp thng qua Application object. The Application object cha mt thuc tnh cho mi
i tng nm trong cc collection ny. V d, on code sau nh ngha mt bin v gn chng cho
NG
tp hp i tng MenuGroups cho ng dng.
D
Y
Dim MenuGroupsCollection as AcadMenuGroups
Set MenuGroupsCollectionX= ThisDrawing.Application.MenuGroups
C
vo
I N H
Thm mt i tng Collection.
T
NnewLayer as AcadLayer
MDim
MsgBox Err.Description
Exit Sub
End If
N G
D
End If
Y
MsgBox "Now running " + acadApp.Name + " version " + acadApp.Version
X
End Sub
C
H
N TIN
Dim acadDoc As AcadDocument
Set acadDoc = acadApp.ActiveDocument
BM
acadApp.visible = True
Nu AutoCad ang chy GetObject s khng sinh ra li. Ngc li nu sinh ra li, tc l CAD
cha chy. Khi CreatObject s khi ng CAD. Nu c nhiu session ca CAD ang chy th
chng trnh s ly Session u tin trong Windows Running Object Table.
T IN
N G
T H
GH
N
NG
A C
KHO
N G
D
X Y
C
H
G I
N
TR
29
KS. GV. TRN ANH BNH
TIN
tra s tn ti ca bn v trc khi m.Bn cng c th thay i tn v ng dn ca bn v trong
N
ng dn mc nh ca AutoCAD (Mc Option ca CAD).
B M Sub Ch3_OpenDrawing()
Dim dwgName As String
dwgName = "c:\campus.dwg"
If Dir(dwgName) <> "" Then
ThisDrawing.Application.Documents.Open dwgName
Else
MsgBox "File " & dwgName & " does not exist."
End If
End Sub
2. To mi bn v.
To mi mt bn v, s dng phng thc Add.
T IN
N G
Sub Ch3_NewDrawing()
T H
Dim docObj As AcadDocument
GH
N
Set docObj = ThisDrawing.Application.Documents.Add
End Sub
NG
A C
KHO
3. Lu bn v.
ghi bn v hin hnh. c 2 phng thc sau :
Sub Ch3_SaveActiveDrawing()
ThisDrawing.Save ghi bn v hin hnh.
ThisDrawing.SaveAs "MyDrawing.dwg" ghi bn v vi tn mi.
End Sub
Sub Ch3_TestIfSaved()
If Not (ThisDrawing.Saved) Then
If MsgBox("Do you wish to save this drawing?", vbYesNo) = vbYes Then
ThisDrawing.Save
End If
End If
N G
End Sub
D
II. iu khin ca s bn v
X Y
C
1. iu khin ca s AutoCAD.
H
I cn nhp s liu t ngi dng chng
Mc ch : Khi bn lm vic vi 1 ng dng khc, bn
Gs AutoCAD.
N
hn. Bn cn thu nh hoc kim tra tnh trang ca ca
S dng methods v properties c trong
R
Application object, bn c th thay i position, size v
visibility ca ca s AutoCAD. BnT cng c th s dng WindowState property minimize,
maximize v c th kim tra tnh trng hin ti ca ca s AutoCAD.
30
KS. GV. TRN ANH BNH
TIN
ThisDrawing.Application.width = 400
N ThisDrawing.Application.height = 400
M
End Sub
B Maximize the Application window
Sub Ch3_MaximizeApplicationWindow()
ThisDrawing.Application.WindowState = acMax
End Sub
Minimize the Application window
Sub Ch3_MinimizeApplicationWindow()
ThisDrawing.Application.WindowState = acMin
End Sub
Ly tnh trng ca Application window
Sub Ch3_CurrentWindowState()
T IN
Dim CurrWindowState As Integer
N G
Dim msg As String
T H
H
CurrWindowState = ThisDrawing.Application.WindowState
G
N
msg = Choose(CurrWindowState, "normal","minimized", "maximized")
NG
MsgBox "The application window is " + msg
End Sub
A C
KHO
Make the Application window invisible
Sub Ch3_HideWindowState()
ThisDrawing.Application.Visible = False
End Sub
2. iu khin ca s bn v.
iu khin ca s bn v cng ging nh iu khin ca s AutoCAD, v d nh bn c th
minimize, maximize, reposition, resize, v kim tra tnh trng ca bt k Document window no.
Document window c th minimized hoc maximized bng cch s dng thuc tnh
WindowState, v bn c th ly tnh trng ca Document window thng qua thuc tnh WindowState.
V d nh ta gn cho Width and Height ca bn v hin hnh l 400 x 400 pixel.
Sub Ch3_SizeDocumentWindow()
ThisDrawing.Width = 400
ThisDrawing.Height = 400
End Sub
N G
Maximize the active Document window
D
Sub Ch3_MaximizeDocumentWindow()
X Y
ThisDrawing.WindowState = acMax
C
H
I
End Sub
Minimize the active Document window
N G
Sub Ch3_MinimizeDocumentWindow()
TR
ThisDrawing.WindowState = acMin
End Sub
Find the current state of the active document window
31
KS. GV. TRN ANH BNH
Sub Ch3_CurrentWindowState()
Dim CurrWindowState As Integer
Dim msg As String
N G
D
CurrWindowState = ThisDrawing.WindowState
Y
msg = Choose(CurrWindowState, "normal","minimized", "maximized")
X
C
MsgBox "The document window is " + msg
End Sub
H
N TIN
3. iu khin s hin th bn trong ca s bn v.
M
Bn cng c th thay i s hin th bn trong ca s bn v bng cch s dng phng thc
B views, viewports, v zooming. AutoCAD ActiveX cung cp rt nhiu cch iu khin s hin th
bn trong ca s bn v.
Di chuyn n cc vng khc nhau trn bn v .
Phng to thu nh hay di chuyn n cc v tr khc nhau trn bn v.
Ghi li cc khung nhn v ly ra khi cn thit
Hin th nhiu khung nhn ca mt bn v bng cch s dng splitting the screen trong nhiu
tiled viewports.
Position v Size the Document WindowUse the Document object to modify the position and
size of any document window. .
G TIN
Define a Zoom Window
N
H
T
S dng ZoomWindow or ZoomPickWindow method.
H
NG
Sub Ch3_ZoomWindow()
' ZoomWindow
G
C N with:" & vbCrLf &"1.3, 7.8, 0" & vbCrLf & _
MsgBox "Perform a ZoomWindow "13.7, -
O A
2.6, 0", , "ZoomWindow"
K H
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 1.3: point1(1) = 7.8: point1(2) = 0
point2(0) = 13.7: point2(1) = -2.6: point2(2) = 0
ThisDrawing.Application.ZoomWindow point1, point2
' ZoomPickWindow
MsgBox "Perform a ZoomPickWindow", , "ZoomPickWindow"
ThisDrawing.Application.ZoomPickWindowEnd Sub
III. Ly v thit lp cc thng s h thng
1. Ly v thit lp cc bin h thng
Trong cy ph h, Document object cung cp 2 phng thc SetVariable v GetVariable thit
lp v ly gi tr ca cc bin h thng ca AutoCAD.
V d : ThisDrawing.SetVariable "MAXSORT", 100
2. Grid v Snap.
N G
D
Y
S dng Snap, Grid Alignment
Cc iu khin Snap v Grid nm trong class Viewport.
C X
H
Sub textsnap()
G I
Dim Vp As AcadViewport
N
TR
Set Vp = ThisDrawing.ActiveViewport
Vp.SnapOn = True Bt ch snap ln
Dim newBasePoint(0 To 1) As Double
newBasePoint(0) = 1: newBasePoint(1) = 1
32
KS. GV. TRN ANH BNH
N TIN radians
' reset the viewport
BM ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
End Sub
N G
3. Ly v thit lp bin h thng trong Option.
NG
Trong mc options c 9 Objects, mi mt object c trng cho mt tab ca Options dialog box.
A C
Cc object ny cung cp ng dn ti tt c cc registry lu trong options trong Options dialog box.
KHO
Bn c th ty bin tt c cc thit lp ca AutoCAD bng cch s dng properties trong cc Object
ny. Cc Object bao gm :
PreferencesDisplay
PreferencesDrafting
PreferencesFiles
PreferencesOpenSave
PreferencesOutput
PreferencesProfiles
PreferencesSelection
PreferencesSystem
PreferencesUser
truy xut n Preferences object, s dng cc thuc tnh ca Application object:
Dim acadPref as AcadPreferences
Set acadPref = ThisDrawing.Application.Preferences
V d sau thit lp 2 ru ca chut di kn mn hnh :
N G
Sub Ch2_PrefsSetCursor()
D
Dim acadPref As AcadPreferences
X Y
C
Set acadPref = ThisDrawing.Application.Preferences
H
I
acadPref.Display.CursorSize = 100
G
End Sub
N
IV. S dng command line trong VBA
TR
S dng SendCommand method gi lnh mt cch trc tip cho AutoCAD. Phng thc
SendCommand s gi mt chui n ti dng lnh command line. Chuit phi cha cc tham s cho
33
KS. GV. TRN ANH BNH
lnh, th t vit trong chui nh vit trong macro hc trong phn Customize menu. . Phm cch
hoc m ASCII tng ng s tng ng vi phm ENTER trn bn phm keyboard.
N G
V d sau v mt ng trn tm A(2, 2, 0), bn knh R= 4. sau s dng lnh Zoom All.
Sub Ch3_SendACommandToAutoCAD() D
X Y
ThisDrawing.SendCommand "_Circle 2,2,0 4 "
C
H
ThisDrawing.SendCommand "_zoom a "
TIN
End Sub
N
V. Nhp d liu ngi dng
IN
RetVal gi tr tr v, kiu Variant vi 3 ta (3D).
G T
V d :
N
Sub Ch3_GetStringFromUser()
T H
Dim retVal As String
GH
N
retVal = ThisDrawing.Utility.GetString(1, vbCrLf & "Enter your name: ")
NG
MsgBox "The name entered was: " & retVal
End Sub
A C
KHO
2. Nhp ta mt im
GetPoint method prompts cho php ngi dng nhp ta mt im t bn bn phm hoc
bng mt kch chut tri trn bn v
C php nh sau :
RetVal = UtilityObject.GetPoint([Point][, Prompt])
Point khng bt buc, nu c s xut hin dy thun t im ny. Point kiu Variant vi 3 ta
(3D).
Prompt khng bt buc, l chui s c a ra ti dng lnh vi mc ch thng bo.
RetVal gi tr tr v, kiu Variant vi 3 ta (3D).
V d :
Sub Ch3_GetPointsFromUser()
Dim startPnt As Variant
Dim endPnt As Variant
Dim prompt1 As String
N G
Dim prompt2 As String
D
X Y
prompt1 = vbCrLf & "Enter the start point of the line: "
C
prompt2 = vbCrLf & "Enter the end point of the line: " '
H
I
Get the first point without entering a base point
G
startPnt = ThisDrawing.Utility.GetPoint(, prompt1)
N
' Use the point entered above as the base point
TR
endPnt = ThisDrawing.Utility.GetPoint(startPnt, prompt2)
' Create a line using the two points entered
ThisDrawing.ModelSpace.AddLine startPnt, endPnt
ThisDrawing.Application.ZoomAll
34
KS. GV. TRN ANH BNH
End Sub
3. Nhp mt k t in hnh cho Option
N G
GetKeyword Method prompts cho php ngi dng nhp mt k t in hnh t bn bn phm
cho mt mc la chn D
C php nh sau :
X Y
RetVal = C
H UtilityObject.GetKeyword([Prompt])
IN bt buc, l chui cha la chn s c a ra dng lnh vi mc ch thng
PromptT
N
chn.
khng
M
bo la
RetVal gi tr tr v, kiu chui.
B
V d :
Sub Ch3_KeyWord()
Dim keyWord As String
ThisDrawing.Utility.InitializeUserInput 1, "Line Circle Arc"
keyWord = ThisDrawing.Utility.GetKeyword(vbCrLf & "Enter an option
(Line/Circle/Arc): ")
MsgBox keyWord, , "GetKeyword Example"
End Sub
IN
4. Nhp s thc, s nguyn.
G T
N
The GetInteger Method
H
Phng thc GetInteger cho php ngi dung nhp vo mt s nguyn (gi tr nhp vo t
T
H
32,768 to +32,767).
C php nh sau :
N G
NG
intUserIntegerInput = UtilityObject.GetInteger([Prompt])
A C
KHO
V d :
Public Sub TestGetInteger()
Dim intInput As Integer
With ThisDrawing.Utility
intInput = .GetInteger(vbCr & "Enter an integer: ")
.Prompt vbCr & "You entered " & intInput
End With
End Sub
The GetReal Method
Phng thc GetReal cho php ngi dung nhp vo mt s thc (gi tr nhp vo t 32,768 to
+32,767).
C php nh sau :
dblUserRealInput = UtilityObject.GetReal([Prompt])
5. GetCorner Method, GetAngle Method, GetDistance Method
N G
D
The GetCorner Method
X Y
Tr v im gc ca mt hnh ch nht
C
C Php nh sau :
I H
G
varUserCornerInput = UtilityObject.GetCorner(BasePoint [,Prompt])
TYPE
N DESCRIPTION
TR
NAME
BasePoint Variant Mng 3 gi tr kiu doubles m t im
gc ca hnh ch nht.
35
KS. GV. TRN ANH BNH
M
im trn
B dblUserDistanceInput = UtilityObject.GetDistance([BasePoint] [,Prompt])
NAME TYPE DESCRIPTION
BasePoint Variant L mt mng 3 pt kiu double th hin ta 3D
ca im u m t ta bt u o (trong WCS). Nu
bn khng cung cp im ny, bn phi nhp vo 2.
Prompt String Chui thng bo ti dng lnh
dblUserDist Double
anceInput
T IN
N G
Ch : Hm cho php ta nhp vo mt s m. Nhng khi ta pick 2 im trn bn v th gi tr tr
v s mt s dng (khong cch gia 2 im )
T H
H
Khi ta nhp khong cch bng cch pick 2 im, ti v tr con chut s xut hin dy thun. Mc
G
N
nh l ta 3D. C th dng l InitializeUserInput vi Bit code 16 chiu cc ta sang 2D.
NG
AutoCAD s tnh khong cch 2 im khi chiu sang 2D.
O A CGetSubEntity Method
6. GetEntity Method,
KH
GetEntity Method
S dng phng thc GetEntity chn mt i tng AutoCAD bng cch pick mt thc th
t bn v. Phng thc c c php nh sau :
UtilityObject.GetEntity PickedEntity, PickedPoint[, Prompt]
NAME TYPE DESCRIPTION
PickedEntity AcadEntity L d liu truyn ra. i tng ny s tham chiu ti
object i tng va c pick trn bn v.
PickPoint Variant D liu truyn ra. L mt mng 3 phn t kiu double,
l ta im bn va pick trong h ta WCS.
Prompt String Chui thng bo trn dng lnh
With ThisDrawing.Utility
N G
TR
.GetEntity objEnt, varPick, vbCr & "Pick an entity: "
If objEnt Is Nothing Then 'check if object was picked.
.Prompt vbCrLf & "You did not pick as entity"
Exit Sub
36
KS. GV. TRN ANH BNH
End If
.Prompt vbCr & "You picked a " & objEnt.ObjectName
G
.Prompt vbCrLf & "At " & varPick(0) & "," & varPick(1)
N
D
End With
End Sub
X Y
C
GetEntity tr v mt li nu gi tr nhp vo l null, nh khi bn pick khng trng mt thc th
H
ha no c, hoc khi bn n Enter m khng chn bt k mt thc th no
N TIN
The GetSubEntity Method
M
S dng GetSubEntity nhp mt thc th phc. Mt thc th phc l mt thc th cha nhiu
B thc th n khc v d nh ng polyline, block. Phng thc c c php nh sau :
UtilityObject.GetSubEntity PickedEntity, PickPoint, Matrix, Context[, Prompt]
NAME TYPE DESCRIPTION
PickedEntity AcadEntity Object Output. Tr v tham chiu ti i mt i
tng va c pick.
PickPoint Variant Output. L mt mng 3 phn t kiu double, l ta
im bn va pick trong h ta WCS.
Matrix Variant Output. Tr v 1 mng n 4x4 phn t kiu doubles
IN
Cha ma trn chuyn i ca i tng va c chn.
T
Context Variant
N G
Output. Tr v mt mng kiu long integer cha
T H
ObjectIds cho mi block cha, cha cc i tng c
H
chn, nu thc th l Bloock.
G
N thng bo tai dng lnh
Prompt String
N GChui
C
Atrong Model ca block, tham s Matrix l ma trn chuyn t h ta block
HOca bn v. N bao gm tt c cc php bin i t mt thc th c lu trong
Thc th va chn
sang h to KWCS
block sang mt thc th bn v, nh scale, rotation php bin i ta .
Tham s Context output l mt mng cc ObjectIds ca cc i tng cha i tng va c
chn. V d c mt ng thng, nm trong block c tn l BL1. BL1 li nm trong block chao (Block
nng) c tn l BL2. Th Context s l mng 2 phn t cha ID ca BL1 v BL2.
V d :
N G
D
X Y
C
H
G I
N
TR
37
KS. GV. TRN ANH BNH
CHNG 3 : TO V SA CC THC TH HA
I. To i tng bn v
N G
D
Y
1. Xc nh i tng cha thc th.
i tng ha c th c
CthX ha, ta dng phng thc Addxxx. V d, v mt ng thng
to trong ModelSpace collection, PaperSpace Collection v Block
object. to thm mt thc
trong ModelSpace. H
N TSetINlineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
M
B Cch khc, khai bo bin :
Dim moSpace As AcadModelSpace
Dim paSpace As AcadPaperSpace
Set moSpace = ThisDrawing.ModelSpace
Set paSpace = ThisDrawing.PaperSpace
Set lineObj = moSpace.AddLine(startPoint,endPoint)
2. V Line, Arc, Circle, and Ellipse objects
V Line
Set LineObject = Object.AddLine(StartPoint, EndPoint)
G TIN
NAME DATA TYPE
Mng 3 phn tH N
DESCRIPTION
Ttrong h ta WCS
StartPoint Variant kiu Double l ta 3D im u
ca ngH
G
thng
G N
N ca ng thng trong h ta WCS
EndPoint Variant Mng 3 phn t kiu Double l ta 3D im u
A C
KH O
V polyline
Set LWPolylineObject = Object.AddLightWeightPolyline(Vertices)
NAME DATA TYPE DESCRIPTION
Vertices Variant Mt mng kiu doubles ch ra danh sch ta
cc im 2-D trong h ta WCS c dng nh sau
N
(i.e., p1x, p1y, p2x, p2y, etc.). Mng ny ti thiu phi G
D
Y
c 4 phn t (2 im).
38
KS. GV. TRN ANH BNH
N G
D
X Y
C
H
N TIN
BTheMSpline Object
Set SplineObject = Object.AddSpline(FitPoints, StartTangent, EndTangent)
NAME DATA TYPE DESCRIPTION
FitPoints Variant L mng mt chiu kiu double ch ra danh sch
cc im m SPLine s i qua bao gm ta X, Y v
Z c dng (i.e., p1x, p1y, p1z, p2x, p2y, p2z, etc.).
StartTangent Variant Mng gm 3 pt kiu doubles xc nh tip tuyn
ca spline ti im u.
EndTangent Variant Mng gm 3 pt kiu doubles xc nh tip tuyn
ca spline ti im u.
T IN
N G
T H
GH
N
NG
A C
KHO
Y
vi trc X trong h ta WCS
C X
H
G I
N
TR
39
KS. GV. TRN ANH BNH
N G
D
X Y
C
H
N TIN
BTheMCircle Object
Set CircleObject = Object.AddCircle(CenterPoint, Radius)
NAME DATA TYPE DESCRIPTION
CenterPoint Variant Mng 3 phn t kiu Double l ta 3D tm
ng trn trong h ta WCS
Radius Double Bn knh ng trn
T IN
N G
T H
GH
N
NG
A C
KHO
The Ellipse Object
Set EllipseObject = Object.AddEllipse(CenterPoint, MajorAxis, RadiusRatio)
NAME DATA TYPE DESCRIPTION
CenterPoint Variant Mng 3 phn t kiu Double l ta 3D tm
Ellipse trong h ta WCS.
MajorAxis Variant Mng 3 phn t kiu Double l ta 3D mt im
m t vector ca trc ln Ellipse tnh t tm.
RadiusRatio Double T l chiu di ca trc b v trc ln : 0 <
RadiusRatio 1.
N G
D
X Y
C
H
G I
N
TR
3. To cc khi c
40
KS. GV. TRN ANH BNH
NGDESCRIPTION
NAME DATA TYPE
D
Point1
X
Variant Y Mng 3 phn t kiu Double l ta 3D im u, im
C
H
cui ca ng th nht trong h ta WCS.
TINVariant
Point2
BM Point4
cui ca ng th hai trong h ta WCS.
Point 1 Point 3
Point 2 Point 4
4. To i tng hatch
The Hatch Object
G TIN
Set HatchObject = Object.AddHatch(PatternType, PatternName, Associativity)
N
NAME DATA TYPE
T HDESCRIPTION
PatternType Long
GH
Loi ca Pattern, c 3 gi tr c lit k bng
N
NG
i.
PatternName
C
String Tn ca Hatch c nh ngha trong file *.pat.
O A
K H
Associativity Boolean True : associative hatch.
Flase : disassociative hatch.
Bng cc gi tr ca PatternType
CONSTANT VALUE DESCRIPTION
AcHatchPatternTypeUserDefined 0 Cho php nh ngha Pattern da
trn kiu Line hin.
AcHatchPatternTypePredefined 1 S dng tn pattern t nhng
Pattern nh ngha trc trong
file acad.pat.
AcHatchPatternTypeCustomDefined 2 S dng tn pattern t nhng
Pattern nh ngha trc trong
file acad.pat.
NG
Y D phng thc
Sau khi bn to Hatch object, bn phi xc nh boundary or loop bng cch s dng
sauC
AppendOuterLoop. C th xc nh thm cc o nh bn trong min bn trong
dng phng thc AppendInnerLoop. Phng thc ny c c php nh
X min ln bng cch s
I H :
G loop
Object.AppendOuterLoop
N
Object.AppendInnerLoop loop
NAME DATA TYPE T
R DESCRIPTION
Object AcadHatch i tng Hatch
41
KS. GV. TRN ANH BNH
Y
bo li
C X Outer
IN H Inner
NT
M
B
Sau khi nh ngha hatch, bn cn dng phng thc Object.Evaluate v hatch, trong :
Object l i tng hatch thuc kiu AcadHatch.
5. To i tng Region, cc php ton trn Region
The Region Object
RegionArray = Object.AddRegion(ObjectsArray)
NAME DATA TYPE DESCRIPTION
ObjectsArray Array of Entity
T IN
L mng cc thc th. Ch l cc thc th ny
N G
bt buc phi to thnh chu trnh khp kn, nu
T H
khng Autocad s bo li.
GH
The Region Boolean
N
NG
Object.Boolean(Operation, Object1)
A C
NAME
K H O DATA TYPE DESCRIPTION
Operation AcBooleanType acUnion : ni 2 Region
acIntersection : ly phn giao nhau ca 2 Region
acSubtraction : ly phn khng giao nhau.
42
KS. GV. TRN ANH BNH
TIN
The MText Object
N
M
Set MTextObject = Object.AddMText(InsertionPoint, Width, TextString)
B NAME DATA TYPE DESCRIPTION
InsertionPoint Variant Mng 3 phn t kiu Double l ta 3D im
chn Mtext trn bn v.
Width Double Chiu rng ca Mtext
TextString String Ni dung text
3. Chn cc k t c bit, cc k t Unicode.
The Specail characters
IN
S dng %%nnn chn k t c bit. V d :
Dim percent as Long
G T
percent = ASC("%")
N
T H
TextString = chr(percent) + chr(percent) + "nnn"
Cc Code c bit nh sau
GH
N
NG
%%o Toggles overscore mode on and off
%%u Toggles underscore mode on and off
C
A
KHO
%%d Draws degree symbol
%%p Draws plus and minus tolerance symbol
%%c Draws diameter dimensioning symbol
%%% Draws single percent sign
The Unicode characters
\U+00B0 Degree symbol
\U+00B1 Plus/minus tolerance symbol
\U+2205 Diameter dimensioning symbol
III. Sa cc i tng bn v
AutoCAD cung cp cho bn mt s phng thc v thuc tnh gip bn c th chnh sa cc
thc th ha. Vi cc thuc tnh ny bn c th :
Copy, delete, explode, highlight, mirror, move, offset, rotate, v scale objects
Lm vic vi polar v rectangular arrays
Thay i color, layer, linetype, v visibility ca cc thc th ha
N G
D
Khi bn thay i mt thc th ha bng code, s thay i khng hin th ngay trn bn v
Y
cho n khi bn s dng phng thc Update ca Object, hoc s dng phng thcRegen ca
X
C
Document Object. Trong mt s trng hp, AutoCAD s update trn bn v khi macro hoc program
H
I
ca bn hon thnh. Trong mc ny, ta thng xuyn s dng phng thc Update nh sau :
DrawingObject.Update
N G
1. Cc php sa i c bn
Copying Objects TR
Khi s dng phng thc Copy, i tng mi c to ra c cng v tr vi thc th gc v
c v ln trn thc th gc. C php ca phng thc nh sau :
43
KS. GV. TRN ANH BNH
Y
sau :
C X
Object.Delete
H tng t nh phng thc Delete. Nh phng thc ny ch p dng cho
TI N
Phng thc Erase
N groups. Bn khng th p dng n xa mt Object.
selectionset
M Objects
Exploding
B S dng phng thc Explode tch mt thc th gp thnh cc thc th n l. Phng thc
ny tr v mt mng cc objects va c tch ra. Phng thc c c php nh sau:
varObjectArray = Object.Explode
Lu : T phin bn CAD 2004 tr i, lnh Explode s tch MText thnh cc i tng Text
ring l.
Highlighting Entities
Phng thc Highlight s lm cho i tng bin thnh nt t nh khi bn chn i tng .
TIN
C php nh sau :
N G
Object.Highlight Highlighted
Tham s Highlighted kiu Boolean, Nhn gi tr T H
(True) khi mun Object Highlight v (False)
H
G
nu mun i tng tr v trng thi bnh thng.
N
Mirroring Objects
N G
C php nh sau : C
O A
H
K Set DrawingObject = DrawingObject.Mirror(Point1, Point2)
NAME DATA DESCRIPTION
TYPE
Point1 Variant Mng 3 phn t kiu Double l ta 3D im th nht ca
trc i xng.
Point2 Variant Mng 3 phn t kiu Double l ta 3D im th hai ca
trc i xng.
N G
D
X Y
C
H
G I
N
TR
Moving Objects
44
KS. GV. TRN ANH BNH
NG
NAME DATA DESCRIPTION
TYPE
Mng 3Y
Dt kiu Double l ta 3D im th nht ca
Point1 Variant
Vector X phn
T IN
N G
Rotating Objects
T H
GH
DrawingObject.Rotate BasePoint, RotationAngle
N
NAME DATA
NG DESCRIPTION
C
AVariant
TYPE
KH
BasePoint O Mng 3 phn t kiu Double l ta 3D im tm
quay trong h ta WCS. im ny phi cng ta Z
vi thc th gc
RotationAngle Double Gc quay tnh bng radian.
N G
D
X Y
C
H
I
Scaling Objects
NG
TR
DrawingObject.ScaleEntity BasePoint, ScaleFactor
NAME DATA DESCRIPTION
TYPE
45
KS. GV. TRN ANH BNH
T IN
N G
T H
GH
G N
2. Cc php bin i C N
A nng cao
KHO
Offsetting Objects
Phng thc ny c th p dng cho cc thc th nh Arc, Circle, Ellipse, Line,
LightweightPolyline, Polyline, Spline, v Xline. Phng thc ny tr v mt mng cc thc th mi
c to.
varObjectArray = Object.Offset(OffsetDistance)
Tham s OffsetDistance kiu double khc khng th hin hng v khong cch Offset. Gi tr
m ngha l offset to mt Object b hn thc th gc. i vi ng thng, gi tr m th hin hng
ca thc th mi so vi thc th gc.
N G
D
X Y
C
H
G I
N
Object Arrays
TR
Use the ArrayPolar and ArrayRectangular methods to create an array of objects based on an existing
object. Both methods copy the base object into a regular pattern at a specified distance from one
another.
46
KS. GV. TRN ANH BNH
NG
ArrayCenter)
Y D
X
NAME DATA DESCRIPTION
C
Long
TYPE
H
TIN Double
NumberofObjects S lng cc thc th phi ln hn 1.
N
AngleToFill Gi tr khc khng tnh bng radians.
T IN
N G
T H
GH
N
NG
A C
H O
Creating a Rectangular Array of Objects
K varObjectArray = DrawingObject.ArrayRectangular (NumberOfRows,
NumberOfColumns, NumberOfLevels, DistBetweenRows, DistBetweenColumns,
DistBetweenLevels)
NAME DATA DESCRIPTION
TYPE
NumberofRows Long S dng, l s lng dng trong rectangular
array. Nu gi tr l 1, th NumberofColumns phi
ln hn 1.
NumberOfColumns Long S dng, l s lng ct trong rectangular
array. Nu gi tr l 1, th NumberofRows phi ln
hn 1.
NumberOfLevels Long S dng, l s lng cc cp theo trc Z trong
G
N
rectangular 3D array.
Khong cch gia cc dng. Gi tr nyD
YNgc li,
DistBetweenRows Double dng
th dng s m rng theo hng lnX
C trn.
I H
nu l gi tr m, dng s c
Nu bng khng, i
m rng xung di.
gc. NG
D Khong cch gia cc Level theo trc Z. Gi
DistBetweenLevels
X Ytr ny dng th dng s m rng theo hng ln
Double
C
IN H trn. Ngc li, nu l gi tr m, dng s c m
NT
rng xung di. Nu bng khng, i tng s
M
c v ln trc thc th gc.
G TIN
N
H
Nu bn lm vic trong 2D, tt nht bn t tham s NumberOfLevels bng 1.
Transform Objects
H T
Bn c th move, scale, hoc rotateN
G
G mt object thng qua ma trn chuyn i 4 4 bng cch s
C N
dng phng thc TransformBy. C php ca phng thc nh sau :
O A
K H anObj.TransformBy tMatrix
Ma trn ny c dng nh sau :,
R00 R01 R02 T0
R10 R11 R12 T1
R20 R21 R22 T2
0 0 0 1
Trong R = Rotation v T = Translation:
V d : ma trn quay mt thc th mt gc 90 s c dng nh sau :
tMatrix(0,0) = 0.0 tMatrix(0,1) = -1.0 tMatrix(0,2) = 0.0
tMatrix(0,3) = 0.0 tMatrix(1,0) = 1.0 tMatrix(1,1) = 0.0
tMatrix(1,2) = 0.0 tMatrix(1,3) = 0.0 tMatrix(2,0) = 0.0
tMatrix(2,1) = 0.0 tMatrix(2,2) = 1.0 tMatrix(2,3) = 0.0
tMatrix(3,0) = 0.0 tMatrix(3,1) = 0.0 tMatrix(3,2) = 0.0
tMatrix(3,3) = 1.0
Rotation Matrix: 90 degrees about point (0, 0, 0)
N G
D
X Y
C
H
G I
N
TR
3. Chnh sa PolyLine, SpLine
Edit Polylines
48
KS. GV. TRN ANH BNH
Bn c th chnh sa
Closed property : Opens hoc closes mt polyline.
G
Coordinates property : Thay i tng nh ca mt polyline.
N
D
AddVertex method : Thm mt nh vo polyline.
Y
S dng cc phng thc sau cp nht ch li lm v chiu rng ca mt polyline:
X
C
SetBulge : Thit lp cong ca polyline.
H
TIN
SetWidth : Thit lp b rng ca im u v im kt thc polyline.
N
MSplines
Edit
B Vi splines bn c th thay i cc thuc tnh sau :
Closed : Open hoc close ng spline.
ControlPoints : iu khin cc im ca spline.
EndTangent : iu khin php tuyn im cui ca spline.
FitPoints : Specifies all the fit points of a spline.
FitTolerance : Thau i tolerance cho Spline.
Knots : iu chnh nt vertor cho spline.
StartTangent : iu khin php tuyn im u ca spline.
Ngoi ra, bn cn c th thm mi nh, nh sau
AddFitPoint : Thm mt fit point vo Spline ti v tr Index.
T IN
N G
DeleteFitPoint : Xa mt fit point khi spline ti v tr Index.
H
GetFitPoint : Ly im fit point ca spline ti v tr Index.
T
H
Reverse : nghch o hng ca Spline.
G
N
SetControlPoint : Thit lp control point ca spline ti v tr index.
NG
SetFitPoint : thit lp fit point ca spline ti v tr index.
A C
SetWeight : Thit lp weight ca control point ti v tr index.
KHO
Cc thuc tnh ch c :
Area : Din tch khp kn ca spline.
NumberOfControlPoints : s lng cc im iu khin ca spline.
NumberOfFitPoints : S lng cc im Fit ca spline.
IV. Block v thuc tnh ca block
Trong mc ny chng ta s nghin cu
To Block objects
Chn Block object vo trong bn v AutoCAD
Lm vic vi external reference file
To Attribute object
Chn Block objects c cha attribute
1. Blocks v Block References
Block object i din cho mt block definition, n cha tn v mt tp hp cc thc th ha.
Block objects bao gm 2 loi :
N G
D
Mt Block definition l mt kiu d liu tru tng nh ngha cc thc th ha nm
trong Block.
X Y
C
Mt Block reference (hay block insertion), l nhng v tr m ta chn Block vo bn v.
H
I
Thay i mt block definition tng ng vi vic tat hay i tt c cc block reference trn
bn v.
C 3 loi block : N G
TR
Simple block : L nhng Block n gin c nh ngha t cc thc th c sn trn bn
v hoc blok c nh ngha bng cch bn insert mt bn v khc vo trong bn v hin
hnh.
49
KS. GV. TRN ANH BNH
N TIN
AutoCAD Document objects c Blocks collection cha tt c cc Block definition objects trong
bn v. V d sau y truy cp n cc block object :
Tham chiu n Block object c sn trong bn v, ta s dng phng thc Item, y cng l
phng thc mc nh ca Blocks collection.
Dim objBlock As AcadBlock
MsgBox strBlockList
End Sub
To Blocks
S dng phng thc Add
Phng thc Add ca Blocks collection dung thm mt Block object mi vo bn v. Phng
thc ny s tr v mt Simple block. Phng thc c c php nh sau
Set BlockObject = BlocksCollection.Add(InsertionPoint, BlockName)
NAME DATA DESCRIPTION
TYPE
InsertionPoint Variant Mng 2 phn t kiu doubles m t ta im
N G
D
chn trong h ta WCS.
BlockName String Tn ca Block mi
X Y
C
AddXXX Methods
H
I vo Block object ging nh thm cc
ha
NG
S dng phng thc AddXXX thm cc thc th
thc th vo bn v.
CopyObject Method TR
Mt cch khc thm mt Object vo trong Block object l dng phng thc Document
object's CopyObject. Phng thc ny s nhn bn thm mt thc th na. C php nh sau :
50
KS. GV. TRN ANH BNH
NZScale, RotationAngle)
Xscale, Yscale,
NAME DATA TR DESCRIPTION
TYPE
51
KS. GV. TRN ANH BNH
Y
i tng (i tng c th l Block hay Document Object).
BlockName X
C ngTn
String ca Block object trong Blocks collection, hoc
H dn v tn file ca bn v chn vo bn v hin hnh.
N TIN
Xscale Double L t l phng theo trc X, gi tr phi khc khng.
M
Nu nhn gi tr m th s ly i xng theo trc ti im
B Yscale Double
chn.
L t l phng theo trc Y, gi tr phi khc khng.
Nu nhn gi tr m th s ly i xng theo trc ti im
chn.
Zscale Double L t l phng theo trc Z, gi tr phi khc khng.
Nu nhn gi tr m th s ly i xng theo trc ti im
chn.
RotationAngle Double Gc quay tng i hp vi trc X trong h ta
WCS, tnh bng radian.
Deleting a Block Reference
G TIN
N xa block references. Phng
Ging nh cc Object khc, bn s dng phng thc Delete
thc ch xa BlockReference object, khng xa Block T H
definition object. C php nh sau :
N GH
BlockReferenceObject.Delete
NG
A C varArray = BlockReferenceObject.Explode
The Explode Method
H O
Ch : K
Phng thc ch c BlockReferenceObject
Phng thc s to ra mt bn copy ca block definition v vn li block reference
cha ph v. Bn phi xa n nu bn khng mun s dng chng.
Ghi Block ra file (phng thc Wblock)
i tng Document object c phng thc ghi li nhng g c trong mt SelectionSet object
vo a thnh mt bn v mi. Bn c th nhp file ny nh mt block definition bng cch s dng
phng thc InsertBlock. C php phng thc nh sau :
DocumentObject.WBlock FileName, SelectionSet
NAME DATA TYPE DESCRIPTION
FileName String Tn ca file s c ghi. Bn cng khng cn thit
N
phi ghi r c tn phn m rng ca file, phng thc s G
s dng phn m rng l .dwg.
D
SelectionSet SelectionSet
X Y
selection set cha cc thc th cn ghi ra file.
C
H
object
G I
N
Phng thc mc nh s dng im gc ca bn v mi l gc to WCS ca bn v hin
NG
Dim strFilename As String
Dyou only use as temporary storage and
Y
'choose a selection set name that
C Xcurrently exist
'ensure that it does not
IN H
On Error Resume Next
T
ThisDrawing.SelectionSets("TempSSet").Delete
B objSS.SelectOnScreen
With ThisDrawing.Utility
.InitializeUserInput 1
strFilename = .GetString(True, vbCr & "Enter a filename: ")
.InitializeUserInput 1
varBase = .GetPoint(, vbCr & "Pick a base point: ")
End With
KHO
ThisDrawing.Wblock strFilename, objSS
TR
s ly i xng theo phng X ti im chn.
Yscale Double T l phng theo phng Y. Phi nhn gi tr khc 0.
Gi tr m s ly i xng theo phng Y ti im chn.
53
KS. GV. TRN ANH BNH
Y
Gi tr m s ly i xng theo phng Z ti im chn.
RotationAngle X
C expressed
Double The rotation angle relative to the WCS X-axis,
H in radians.
N
RowsTIN Long S dng, l s lng dng.
M
Columns Long S dng, l s lng ct.
B RowSpacing Double S khc khng, l khong cch gia cc dng. Gi tr
m s to ra cc dng theo hng ngc vi trc X.
ColumnSpacing Double S khc khng, l khong cch gia cc dng. Gi tr
m s to ra cc dng theo hng ngc vi trc Y.
External References
External references, or Xrefs, are blocks that are not permanently loaded into the current drawing
file. Instead, Xrefs refer to an external drawing file for their geometry (hence their name).
External references share many properties and methods with simple blocks, and for many
IN
purposes you can treat them as simple blocks. But sometimes you might also need to use external
T
G
references' special capabilities. This section explains the following Xref methods:
N
T H
H
Attaching and detaching
Loading and unloading
N G
NG
Binding
Attaching External A C
K H O References
The AttachExternalReference method works much like InsertBlock, except that the resulting entity is an
external reference instead of a block reference. Just like InsertBlock, the PaperSpace, ModelSpace, and Block
objects expose this method and let you specify the insertion point, scale, and rotation angle in the
drawing.
Y
extension. Optionally, you can specify a path to the file. If you don't,
C X
AutoCAD tries to find the file in the system search path.
BlockName String
I H
A name for the internal Block object that will point to the external drawing file.
A three-element array of doubles specifies
InsertionPoint Variant
N G that the 3D WCS coordinates where
the Xref will be inserted into the Object.
Xscale Double T R
A non-zero number representing the scaling factor for the Xref's X direction.
Negative numbers mirror the insertion on this axis.
Yscale Double A non-zero number representing the scaling factor for the Xref's Y direction.
54
KS. GV. TRN ANH BNH
M Boolean Controls how the Xref is attached. If True, the Xref is brought in as an overlay.
Overlay
B Overlay external references aren't visible if the current drawing is attached as
an Xref to another drawing. In this way, overlay Xrefs can reduce the need to
detach Xrefs before sharing drawings. If this parameter is False, the Xref is an
attachment.
You can detach an external reference from the current drawing using the Block object's Detach method.
It has this syntax: T IN
N G
BlockObject.Detach
T H
H
Note You detach an Xref's block definition, the method removes all associated ExternalReference
G
N
objects from the drawing too. This includes linetypes, textstyles, dimstyles, nested block
definitions, and layers.
NG
A C
KHO
Unloading External References
You can also unload external references without detaching them from the current drawing. Use the
Block object's Unload method. It has this syntax:
BlockObject.Unload
Though not visible, unloaded Xrefs are still associated with the current drawing. To regenerate them,
reload them.
Use the Block object's Reload method to reload an external reference whenever you want, even if the
Xref is already loaded. Reload an already-loaded Xref when you modify the underlying drawing and
then want to update the in-memory copy in the current drawing. This method has the following syntax:
N G
BlockObject.Reload
Y D
X
Binding External References
C
H
I to simple blocks. This operation
NinGmuch the same way the InsertBlock method does
Use the Block object's Bind method to convert external references
builds an internal copy of the external drawing file
to the external drawing database, Bind converts any
T R
using an external filename. Instead of referring
former ExternalReference objects to simple block references. This method has the following syntax:
BlockObject.Bind(Merge)
55
KS. GV. TRN ANH BNH
This method has one parameter, Merge, a Boolean. When it's True, the method merges dependent
symbol table entries in the external file with the current drawings entries. When it's False, the method
G
prefixes them to avoid collision with any other entry name in the current drawing. The prefix has the
N
D
form BlockName$X$EntryName, where
X Y
C
BlockName is the block definition name for the current drawing's external reference
H
X is an automatically generated integer that makes the name unique in the current drawing
N TIN
EntryName is the name of the symbol table entry in the externally referenced drawing file.
M
Note
B
If Merge is set to True and an entry is already present in the current drawing, the method maps the
external entry to the current drawing entry. This is identical behavior to inserting block
definitions that contain duplicate layers, linetypes, or textstyles in the current drawing.
The following example binds the specified external reference using either style
T IN
N G
T H
GH
N
V. Chn i tng
NG
A
1. To Selectionset. C
H O
Selectionset nm trong class Selections collection.
K
Thm mt Selectionset
Set SelectionSetObject = SelectionSetsCollection.Add(SelectionSetName)
NAME DATA TYPE DESCRIPTION
SelectionSetName String Tn ca Selectionset, tn ny phi khng c
trng vi cc Selectionset c.
Truy sut n collection
Nu bn c nhiu Selectionset trong selections collection. Bn c th truy cp n tng
selectionset theo tn hoc s th t (Index) ca n. V d nh sau :
Dim objSelections As AcadSelectionSets
Set objSelections = ThisDrawing.SelectionSets
N G
D
Dim objSelection As AcadSelectionSet
Y
Set objSelection = objSelections.Item(2)
Set objSelection = objSelections.Item("My SelectionSet")
C X
H
Ch s ca Selection nm trong khong t 0 n (SelectionSets.Count 1). Trong Autocad
I
Selection collection th phng thc Item l phng thc mc nh. Do vy 2 v d trn c th vit
G
li nh sau :
N
Set objSelection = objSelections(2)
TR
Set objSelection = objSelections("My SelectionSet")
2. Thm i tng vo selection set
56
KS. GV. TRN ANH BNH
Selecting Entities
Khi bn to mi mt SelectionSet th s l mt Slectionset rng. thm cc i tng vo
N G
SelectionSet ta dng phng thc SelectXXX. Ging nh trong AutoCAD, ta c VBA cho php ta
D
chn cc i tng theo : chn tng i tng (pick vo i tng), chn theo Window, theo fence (n
X Y
ch f, v chn 1 ng thng ct qua cc i tng c chn) hoc theo mt a gic (polygon).
C
The Select Method
H
N TINPhng thc Select cho php bn thm i tng vo selection set, ngoi ra n cng cho php
M
bn s dng Last SelectionSet. Phng thc c c php nh sau :
B SelectionSetObject.Select Mode [, Point1, Point2] [, FilterCodes, FilterValues]
NAME DATA DESCRIPTION
TYPE
Mode Long Kiu chn, c lit k bng di.
Point1 Variant Mng 3 phn t kiu Double l 3 ta ca gc u
tin ca hnh ch nht.
Point2 Variant Mng 3 phn t kiu Double l 3 ta ca gc u
tin ca hnh ch nht. Point1, Point2 th phi dng ng
TIN
thi vi nhau.
FilterCodes Variant G
N cu trong mc sau.
Dng lc thc th. Nghin cu trong mc sau.
H
T
FilterValues Variant Dng lc thc th. Nghin
H
G NGcc kiu chn
N
CONSTANT CVALUE
Bng
A DESCRIPTION
KHO
acSelectionSetWindow 0 Tt c cc thc th nm trong ca s c ch
ra bi im Point1 v Point2 c chn.
acSelectionSetCrossing 1 Tt c cc thc th nm trong hoc ct Window
c ch ra bi im Point1 v Point2 c chn.
acSelectionSetPrevious 3 Selection set gn nht s c chn. Point1 v
Point2 khng c s dng.
acSelectionSetLast 4 Thc th c to cui cng tnh n thi im
chn s c chn. Point1 v Point2 khng c
s dng.
acSelectionSetAll 5 Chn tt c cc thc th. Point1 v Point2
khng c s dng.
C X
Public Sub TestSelectionSetFilter()
H
I
Dim objSS As AcadSelectionSet
Dim intCodes(0) As Integer
N G
Dim varCodeValues(0) As Variant
Dim strName As String
TR
On Error GoTo Done
57
KS. GV. TRN ANH BNH
With ThisDrawing.Utility
G
strName = .GetString(True, vbCr & "Layer name to filter: ")
N
D
If "" = strName Then Exit Sub
X Y
C
" create a new selectionset
H
Set objSS = ThisDrawing.SelectionSets.Add("TestSelectionSetFilter")
N TIN
" set the code for layer
B M intCodes(0) = 8
" set the value specified by user
varCodeValues(0) = strName
GH
" dehighlight the entities N
NG
objSS.Highlight False
End With
A C
Done:K
HO
" if the selection was created, delete it
If Not objSS Is Nothing Then
objSS.Delete
End If
End Sub
The SelectOnScreen Method
y l kiu chn chun ca Autocad nh Window, Crossing v Last.
SelectionSetObject.SelectOnScreen [, FilterCodes, FilterValues]
The SelectAtPoint Method
Cho php chn mt thc th bng cch chn 1 im.
N G
D
SelectionSet.SelectAtPoint Point [,FilterCodes, FilterValues]
X Y
NAME DATA TYPE DESCRIPTION
C mt im m
I H
thc th c chn i qua.
Point Variant Mng 3 phn t kiu Double l 3 ta
NG
TR
The SelectByPolygon Method
SelectionSetObject.SelectByPolygon Mode, Vertices [, FilterType, FilterData]
58
KS. GV. TRN ANH BNH
T IN
a gic ny s c chn. Vertices cha t
N
nht 3 im.G
T H
H
Adding and Removing Items
N G
SelectionSetObject.AddItem(Entities)
NG
C
SelectionSetObject.RemoveItem(Entities)
O ADATA TYPE
NAME
H
Entities K Array of AcadEntity objects
DESCRIPTION
Mng cc thc th thm hay bt i khi
tp chn.
The Clear, Delete, and Erase Methods
SelectionSetObject.Clear
Phng thc Clear xa tt c cc i tng trong SelectionSet object. Nhng cc thc th nm
trong Seclection set vn cn trong bn v. C php nh sau :
SelectionSetObject.Delete
Phng thc Delete dung xo mt SelectionSet object trong SelectionSets collection. Thc
th nm trong SelectionSet vn tn ti trong bn v.
SelectionSetObject.Erase
N G
Phng thc Erase xa tt c cc thc th nm trong SelectionSet object v xa khi bn v.
D
Cc thc th b xa khi bn v, nhng SelectionSet object vn tn ti trong Selection Collection v ta
c th thm cc thc th mi vo trong chng.
X Y
C
H
3. Lc i tng trong selection set
I
Selection Set Filters
NG
T R and FilterValues c mt s iu kin lc. V d ta
Bn c th s dng 2 tham s FilterCodes
ch chn cc i tng c mu, layer hay lintype, theo mun.
59
KS. GV. TRN ANH BNH
FilterCodes mt mng kiu integers, l Group DXF code. Bn c th xem thm AutoCAD
DXF. Sau y mt s code hay dng nht :
DXF code
N G Filter type
Dnh Line, Circle, Arc,
0
Y
Object Type (String)
X(String)
C
2 Object Name
H Name (String) nh Layer 0.
IN
8 Layer
T IN
Sub Ch4_FilterMtext()
N G
Dim sstext As AcadSelectionSet
T H
H
Dim FilterType(0) As Integer
N G
Dim FilterData(0) As Variant
NG
Set sstext = ThisDrawing.SelectionSets.Add("SS2")
C
FilterType(0) = 0
A
KHO
FilterData(0) = "Circle"
sstext.SelectOnScreen FilterType, FilterData
End Sub
Khi bn s dng nhiu hn 2 iu kin lc. Bn phi s dng cc php ton Logic
i km vi cc ton t lc l cc group code c bit l 4. Cc cp ton t c th s dng l.
FILTER START AND END VALUE NUMBER OF OPERANDS
OPERATOR
"<AND" One or more
"AND>"
"<OR" One or more
"OR>"
"<XOR" Exactly two
"XOR>"
N G
D
"<NOT" Exactly one
Y
"NOT>"
C X
H
I
V d :
Public Sub TestSelectionSetOperator()
Dim objSS As AcadSelectionSet
N G
Dim intCodes() As Integer
Dim varCodeValues As Variant
TR
Dim strName As String
On Error GoTo Done
With ThisDrawing.Utility
60
KS. GV. TRN ANH BNH
X Y
C
" using 9 filters
H
ReDim intCodes(9): ReDim varCodeValues(9)
INand values - indented for clarity
" setT
N codes
intCodes(1)
M intCodes(0) = -4: varCodeValues(0) = "<and"
B
= -4: varCodeValues(1) = "<or"
intCodes(2) = 0: varCodeValues(2) = "line"
intCodes(3) = 0: varCodeValues(3) = "arc"
intCodes(4) = 0: varCodeValues(4) = "circle"
intCodes(5) = -4: varCodeValues(5) = "or>"
intCodes(6) = -4: varCodeValues(6) = "<not"
intCodes(7) = 8: varCodeValues(7) = strName
intCodes(8) = -4: varCodeValues(8) = "not>"
intCodes(9) = -4: varCodeValues(9) = "and>"
G
.Prompt vbCr & objSS.Count & " entities selected"
N
NG
.GetString False, vbLf & "Enter to continue "
C
A
" dehighlight the entities
KHO
objSS.Highlight False
End With
Done:
N
TR
2. Truy cp ti cc Group Object
Truy cp n group Collection
Dim objGroups As AcadGroups
Set objGroups = ThisDrawing.Groups
61
KS. GV. TRN ANH BNH
thit lp tham chiu n group object, ta s dng phng thc Item ca Groups collection :
Dim objGroup As AcadGroup
N G
D
Set objGroup = objGroups.Item(Index)
Y
Set objGroup = objGroups.Item(NameGroup)
X
Phng thc item C thc mc nh ca Group collection, do vy ta c th duyt qua cc
H l phng
TINsau :
Group Object nh
N
Public Sub ListGroups()
TIN
GroupObject.AppendItem(Entities)
G
N
GroupObject.RemoveItem(Entities)
H
NAME DATA TYPE
H T DESCRIPTION
G NG Mng cc thc th s bt ra khi group
Entities Array of AcadEntity objects
C N
O A RemoveItem khng xa thc th khi bn v m ch xa lin kt thc th
H
Ch : phng thc
vi group. K
4. Xa Group Object
Xa group Object khi group collection. Cc thc th trong group object s khng b xa, chng
s c tr v bn v.
GroupObject.Delete
VII. S dng layer, color v linetype
1. S dng layer, color
Trong mc ny chng ta s nghin cu :
Truy cp n Layers Collection v Layer Objects.
Kim tra s tn ti ca mt Layer.
To mt Layer v chuyn mt layer thnh layer hin hnh.
Thit lp cc thuc tnh ca layer nh : On /Off, Thawed /Frozen, Locked /Unlocked
i tn, xa mt layer
N G
Thit lp hay ly cc thng s Color v Linetype ca layer. D
X Y
Lm vic vi Layers
C
AutoCAD cung cp Layers collection cha tt c cc i
I H
tng Layer c trong bn v. Bn c
th to ra cc layer bng cc thn layer object vo Layers
NGcch nh sau :
collection.
Bn c th truy sut vo Layers collection bng
T R
Dim objLayers As AcadLayers
Set objLayers = ThisDrawing.Layers
tham chiu n mt Layer c sn trong bn v. Bn s dng phung thc Item ca layer
Collection nh sau :
62
KS. GV. TRN ANH BNH
X Y
C
Index l mt s integer i din cho v tr ca layer trong Layers collection. Name Layer l mt
H
chui, l tn ca Layer m ta mun truy cp n n. Nu bn s dng index th n phi nm trong
TIN
khong t 0 n ( Layers.Count 1).
N
Ging nh cc AutoCAD collections khc, Item l phng thc mc nh ca Layer collection.
BM C ngha l tn phng thc ny c th khng c vit vo nhng cad vn hiu l phng thc
Dim objLayer As AcadLayer
A C
Dim objLayers As AcadLayers
KHO
Dim objLayer As AcadLayer
Dim intI As Integer
Set objLayers = ThisDrawing.Layers
63
KS. GV. TRN ANH BNH
End Sub
Ngoi ra bn c th kim tra s tn ti ca mt Layer bng cch by Layer
Public Sub CheckForLayerByException()
N G
D
Dim strLayerName As String
Y
Dim objLayer As AcadLayer
X
strLayerName = C
H InputBox("Enter a Layer name to search for: ")
N TIN
If "" = strLayerName Then Exit Sub ' exit if no name entered
B M On Error Resume Next ' handle exceptions inline
Set objLayer = ThisDrawing.Layers(strLayerName)
TIN
to mi mt Layer, ta s dng phng thc Add trong Layer Collection nh sau :
G
N
Set LayerObject = LayerCollection.Add(LayerName)
H
H T
NAME DATA TYPE
G NG DESCRIPTION
String N Nu bn Add mt Layer c tn trng vi Layer
A C c sn. AutoCAD s sinh ra mt li.
LayerName
K H O
Public Sub AddLayer()
Dim strLayerName As String
Dim objLayer As AcadLayer
TR
End If
End Sub
Chuyn Layer thnh Layer hin hnh.
64
KS. GV. TRN ANH BNH
C php nh sau :
DocumentObject.ActiveLayer = LayerObject
N G
D
V d : ThisDrawing.ActiveLayer = ThisDrawing.Layers("Walls")
Y
ly Layer hin hnh nh sau :
C X
ThisDrawing.ActiveLayer.Name
T IN H
V d : If ThisDrawing.ActiveLayer.Name = "Walls" Then ...
M N
Turning a Layer On/Off
B LayerObject.LayerOn = blnLayerOn
Bn cng c th kim tra layer ang bt bng on code sau :
If objLayer.LayerOn Then ... 'Thi hnh nu Layer l On.
Thit lp Layer : Frozen/Thawed
C php nh sau :
objLayer.Freeze = True : Frezee
objLayer.Freeze = True : Thaw
IN
Kim tra tnh trang ng bng ca Layer :
G T
N
If objLayer.Freeze Then ... 'Thi hnh nu layer ng bng
Thuc tnh Locking/Unlocking ca Layer
T H
GH
N
Bn khng th chn cc thc th b kha bng chnh s. Tuy nhin, in\ tng vn hin
NG
th nu layer khng b ng bng, v bn vn c th s dng cc phng thc truy bt im vi chng.
C
Trong lc layer b kha, bn vn c th thm cc thc th ha vo ayer .
A
KHO
objLayer.Lock = False : Unlock
objLayer.Lock = False : Lock
N TIN
AutoCAD gn cho mi object mt gi tr handle hoc ID duy nht. N tn ti v khng thay i
cng vi s tn ti Object . Bn c th truy cp n handle ca cc Object thng qua phng thc
BM Handle nh sau :
Dim objLayer As AcadLayer
Dim strLayerHandle As String
Handles c s dng rng ri khi bn lm vic vi extended entity data. Extended entity data,
or Xdata, l nhng thng tin khng phi l ha c gn vi Object bi application program.
Layer Colors
T IN
Mi layer c thuc tnh Color cung cp mu cho tt c cc thc th c v trong layer nu
N G
thuc tnh Color c thit lp l ByLayer. Mc nh, mu ca mt layer mis l trng hoc en ty
T H
thuc vo mu nn ca AutoCAD. Ta c th gn gi tr mu ca Layer t 0 n 256. 9 trong s 9
H
c lit k trong AutoCAD VBA constant nh sau:
G
NobjLayer.Color = acRed
NG
C 6-2: AutoCAD-Defined Color Constants
A
Table
K HO
CONSTANT COLOR INDEX COLOR
acByBlock 0 ByBlock
acRed 1 Red
acYellow 2 Yellow
acGreen 3 Green
acCyan 4 Cyan
acBlue 5 Blue
acMagenta 6 Magenta
acWhite 7 White/Black (depending on the screen
background color)
acByLayer 256 ByLayer
N G
Ly gi tri mu ca mt layer :
D
intColor = objLayer.Color
X Y
Tng t bn c th thay i mu ca tng thc th vi c Cnh sau : objLayer.Color =
I H php
acColor
Layer Linetypes
NG
Mi Layer c mt thuc tnh T R Mc nh kiu nt ca cc i tng c v trong layer
Linetype.
s c kiu nt l Linetype ca layer. Tr khi thc th c ngi dng thit lp ti mt kiu nt khc.
66
KS. GV. TRN ANH BNH
BM strLayerLinetype = objLayer.Linetype
End Sub
N G
Thit lp v ly cc thng s v linetype's scale v description.
Truy cp Linetypes trong VBA NG
DimA C
K H O
Set
objLinetypes
objLinetypes =
As AcadLineTypes
ThisDrawing.Linetypes
tham chiu n mt i tng LineTypeTo c sn, s dng phng thc Item:
Dim objLinetype As AcadLineType
Set objLinetype = objLinetypes.Item(Index)
Set objLinetype = objLinetypes.Item(NameLinetype)
NameLinetype kiu string l tn dng ng c load vo trong bn v
Index kiu interger, cng ging nh trong Layer Collection, Index nm t 0 n
(Linetypes.Count 1).
Ging nh tt c cc collection khc trong AutoCAD, Phng thc Item l phng thc mc
nh trong Linetypes collection.
Kim tra s tn ti ca mt Linetype
Public Sub CheckForLinetypeByIteration()
Dim objLinetype As AcadLineType
Dim strLinetypeName As String
N G
D
Y
strLinetypeName = InputBox("Enter a Linetype name to search for: ")
X
If "" = strLinetypeName Then Exit Sub
C
' exit if no name entered
I H
If 0 = StrComp(objLinetype.Name,N G
For Each objLinetype In ThisDrawing.Linetypes
strLinetypeName, vbTextCompare) Then
MsgBox "Linetype '" & strLinetypeName & "' does not exist"
End Sub
N G
D
Ngoi ra ta c th by li kim tra s tn ti ca mt LineType :
X Y
C
Public Sub CheckForLinetypeByException()
H
Dim strLinetypeName As String
C
NAME
LineTypeName O
A
DATA TYPE DESCRIPTION
K H String Tn ca linetype
LinetypeFilename String ng dn ca file cha LineType cn Load
i tn Linetype
N G
S dng thuc tnh Linetype.Name property, bn c th thay i tn ca mt dng ng.
D
Y
Deleting a Linetype
C X
Phng thc Linetype.Delete cho php bn xa mt i tng Linetype t Linetypes collection.
I H
Ta khng th xa mt dng ng ra khi bnG
LinetypeObject.Delete
N v khi :
R linetype.
N l linetype hin hnh.
N l ByLayer, ByBlock, or T
Continuous
N l mt Xref-dependent linetype.
Ly Hanhdle ca Linetype
68
KS. GV. TRN ANH BNH
N G
D
Set objLinetype = ThisDrawing.Linetypes("Center")
Y
strLinetypeHandle = objLinetype.Handle
X
C
H
Thay i Description ca Linetype.
N TIN
AutoCAD Cho php bn read, add hoc modify description ca LineType bng cch s dng
phng thc Description ca Linetype object.
T IN
N G
T H
GH
N
Global Scale
NG
DimA C
H O dblNewLTScale As Double
K ThisDrawing.SetVariable "LTSCALE", 2#
dblNewLTScale = ThisDrawing.GetVariable("LTSCALE")
Individual Scale
Dim dblNewCELTScale As Double
ThisDrawing.SetVariable "CELTSCALE", 2#
dblNewCELTScale = ThisDrawing.GetVariable("CELTSCALE")
69
KS. GV. TRN ANH BNH
C
Set objDimStyle = ThisDrawing.DimStyles.Add("NewDimStyle")
Style
IN H
Thit lp mt Dimension
NthitT
bn
lp mt DimStyle trong VBA, bn phi nm vng tt c cc bin h thng m thng qua
TIN
Leader kch thc, dung sai, du dn, k c cc d liu ghi
G
(override) c trong cc dimension ny voDimStyleObject
Copy Dimension style v N ca Dimension style
Document
T H override
hin hnh ca bn v c ch nh trong Document
DimStyle
N GH style ca bn v hin hnh c ch
Copy Dimension
nhG
N
trong DimStyle
A C
KH O
V d sau to mt DimStyle mi, ly tn l NewDimStyle. DimStyle ny tha hng tt c cc
thuc tnh ca DimStyle hin hnh, tr mu ca dimension line, extension line, v dimension text c
t theo th t l red, blue, and white.
Y
ca n vo NewDimStyle
C X
S dng Dimension Style
H
Ithc)
Gn mt Dimstyle cho mt Dimension (mt bin kch
NG = DimStyleName
Object.StyleName
NAME DATA TYPETR DESCRIPTION
Object Dimension, Leader, or L object m bn mun p t Dimstyle
Tolerance object cho n.
70
KS. GV. TRN ANH BNH
N G
Cng nh cc thc th ha khc, to mt ng o kch thc, ta s dng phng thc
NG
AddDimXXX. Phng thc ny c th p dng trong ModelSpace, PaperSpace v Block objects.
A C
Trong mc ny, chng ta s nghin cu cc loi kch thc sau :
KHO
Dim3PointAngular Object
DimAligned Object
DimAngular Object
DimDiametric Object
DimOrdinate Object
DimRadial Object
DimRotated Object
Dim3PointAngular Object
Set Dim3PointAngularObject = Object.AddDim3PointAngular(VertexPoint, Point1,
Point2, TextPosition)
NAME DATA DESCRIPTION
TYPE
VertexPoint Variant VertexPoint l mng 3 phn t kiu Double m t ta
N G
mt nh ca gc cn o trong h ta WCS.
Point1 l mng 3 phn t kiu Double m tY D
Point1 Variant
trong 2 im cui trong h ta WCS.C X ta mt
m t ta mt
HDouble
Point2 l mng 3 phn t Ikiu
Point2 Variant
ta WCS.
G
trong 2 im cui trong h
N
TextPosition Variant
l mng 3 phn t kiu Double m t ta
TextPosition
TtrRm Text (gc o c) s hin th h ta WCS.
v
71
KS. GV. TRN ANH BNH
N G
D
X Y
C
H
N TIN
BM
DimAligned Object
Set DimAlignedObject = Object.AddDimAligned(Point1, Point2, TextPosition)
NAME DATA DESCRIPTION
TYPE
Point1 Variant Point1 l mng ta 3 phn t kiu Double m t ta
mt trong 2 im cui trong h ta WCS.
Point2 Variant
TIN
Point2 l mng 3 phn t kiu Double m t ta
G
N
mt trong 2 im cui trong h ta WCS.
H
hinT th h ta WCS.
TextPosition Variant TextPosition l mng 3 phn t kiu Double m t ta
H
NG
v tr m Text s
G
C N
O A
K H
DimAngular Object
Set DimAngularObject = Object.AddDimAngular(Vertex, Point1, Point2, TextPosition)
NAME DATA DESCRIPTION
N G
TYPE
D
Vertex Variant X Y
VertexPoint l mng 3 phn t kiu Double m t ta
C
H
mt nh ca gc cn o trong h ta WCS.
It kiu Double m t ta
Point1 Variant
Point1 l mng 3 phn
NGtrong h ta WCS.
mt trong 2 im cui
TR
Point2 Variant Point2 l mng 3 phn t kiu Double m t ta
mt trong 2 im cui trong h ta WCS.
TextPosition Variant TextPosition l mng 3 phn t kiu Double m t ta
72
KS. GV. TRN ANH BNH
X Y
C
H
N TIN
BM
DimDiametric Object
DimDiametricObject = Object.AddDimDiametric (ChordPoint1, ChordPoint2,
LeaderLength) T IN
N G
H
T
NAME DATA DESCRIPTION
GH
TYPE
ChordPoint1 Variant
G N
ChordPoint1 l mng 3 phn t kiu Double m t ta
N
mt trong 2 im cui ca dy cung trong h ta WCS.
O
ChordPoint2AC
Variant ChordPoint2 l mng 3 phn t kiu Double m t ta
KH mt trong 2 im cui ca dy cung trong h ta WCS.
LeaderLength Double Khong cch t im cui ca dy cung ChordPoint1
ti v tr ca gi tr Text o c.
N G
D
X Y
C
DimOrdinate Object
I H
G
N
Set DimOrdinateObject = Object.AddDimOrdinate(DefinitionPoint, LeaderEndPoint,
T R UseXAxis)
NAME DATA DESCRIPTION
TYPE
73
KS. GV. TRN ANH BNH
T IN
N G
T H
H
DimRadial Object
N G
NG
Set DimRadialObject = Object.AddDimRadial (CenterPoint, ChordPoint, LeaderLength)
NAME DATAC DESCRIPTION
KH OA TYPE
CenterPoint Variant CenterPoint l mng 3 phn t kiu Double m t ta
tm ca ng trn hay cung trn cn o trong h ta
WCS.
ChordPoint Variant ChordPoint l mng 3 phn t kiu Double m t ta
im nm trn dy cung trong h ta WCS.
LeaderLength Double Khong cch t Text n im ChordPoint
N G
D
X Y
C
H
G I
The DimRotated Object
N
TR
Set DimRotatedObject = Object.AddDimRotated(Point1, Point2, DimLocationPoint,
RotationAngle)
74
KS. GV. TRN ANH BNH
Y
mt trong 2 im cui ca on thng trong h ta
C X WCS.
Point2
IN HVariant Point2 l mng 3 phn t kiu Double m t ta
NT
mt trong 2 im cui ca on thng trong h ta
M
WCS.
T IN
N G
T H
GH
N
NG
A C
KHO
3. To cc leader.
N G
D
X Y
C
H
G I
N
TR
75
KS. GV. TRN ANH BNH
N To v chnh sa menu
M
To v chnh sa toolbar
B Toolbar ng v chc nng Docking.
T IN
MenuGroups collection cha cc MenuGroup object, n cha tt c cc i tng thuc
N G
ToolBars v PopupMenus collections. MenuBar collection s cha tt c PopupMenu object ang xut
hin trn AutoCAD menu bar.
T H
1. Menugroup collection
GH
G N
MenuGroups Collection
N
A Cload trong session hin tai ca AutoCAD c lu ct trong MenuGroup
Tt c cc menu c
Ngi dng c
HO
Kth
collection. Cc menu ny c th c hin th hoc khng c hin th trn menu bar ca Autocad.
iu khin s hin th ca cc menu thng qua lnh MenuLoad trong Autocad. Mi
mt menu MenuGroup object cung cp tt c cc toolbar and pop-up menu c trong Group .
Loading Menu Groups
Phng thc Load ca MenuGroup collection dng ti mt menu group c cha trong cc
file ( .mnc, .mns, or .mnu ) vo Autocad. C php ca lnh ny nh sau :
Set MenuGroupObject = MenuGroupsCollection.Load (MenuFileName [,BaseMenu])
NAME DATA DESCRIPTION
TYPE
MenuFileName String ng dn v tn File s c ti vo AutoCad.
BaseMenu Boolean Thng s ny xc nh menu group c ti l menu
c bn hay menu tng phn. Gia tr True l base menu.
Ngc li s l partial menu. Mc nh l False.
N G
D
X Y
S dng tham s BaseMenu vi gi tr True s tng ng vi vic thc hin lnh MENU
C
H
trong AutoCAD (hoc thi hnh lnh MENULOAD v check vo la chn Replace All). Ch
I
MenuGroup mi mi c Load v n s thay th tt c cc menu c trong AutoCad.
N G
Nh mt la chn, s dng phng thc Load Vi tham s BaseMenu l False, tng ng vi bn thi
ti thm vo AtutoCad.
TR
hnh lnh MENULOAD trong AutoCAD m khng check vo la chn. Replace All. Menu group c
76
KS. GV. TRN ANH BNH
N G
lngMenuGroupType = MenuGroupObject.Type
D
CONSTANT
AcBaseMenuGroup C X0
Y Menu group l base menu group.
VALUE DESCRIPTION
H 1
T IN
AcPartialMenuGroup Menu group l partial menu group.
N
M
V d sau s lit k tt c cc menu group oc ti vo trong AutoCad v kiu ca chng:
B Public Sub ListMenuGroups()
Dim objMenuGroup As AcadMenuGroup
Dim strMenuGroupNames As String
strMenuGroupNames = "The following menu groups are currently loaded, "
For Each objMenuGroup In Application.MenuGroups
If objMenuGroup.Type = acBaseMenuGroup Then
strMenuGroupNames = strMenuGroupNames & vbCrLf & _
objMenuGroup.Name & ": Base menu"
Else
strMenuGroupNames = strMenuGroupNames & vbCrLf & _
objMenuGroup.Name & ": Partial menu" T IN
N G
End If
Next
T H
MsgBox strMenuGroupNames
GH
N
NG
End Sub
C
Lu :
A
KHO
MenuGroups collection khng c phng thc Add. Tuy nhin bn c th to mt bn
copy file .mns vo mt file mi, sau ti v sa cha n theo ca bn. Bn cng c th
to mt file .mnu hoc .mns mi v ti chng t VBA.
Bn khng th chnh sa c cc menu hnh nh, menu mn hnh v cc bng s ha. Tuy
nhin, bn vn c th Load v UnLoad chng bng VBA.
2. Menugroup Object
Thnh phn ca MenuGroup Object
Bn Load mt MenuGroup vo trong AutoCAD, tng ng vi mt MenuGroup object c
thm vo MenuGroup collection. Mi MenuGroup object cha hai collection l PopupMenus and
Toolbars. C php truy cp n 2 collection trn nh sau :
Set PopupMenusCollection = MenuGroupObject.Menus
Set ToolbarsCollection = MenuGroupObject.Toolbars
Saving Menu Groups N G
Y D
Bn C hai phng thc ghi lai : Save v SaveAs.
X
C
MenuGroupObject.Save MenuFileType
H
I MenuFileType
MenuGroupObject.SaveAs FileName,
NGDESCRIPTION
TR
NAME DATA
TYPE
MenuFileType Long Xc nh kiu file s c ghi : File ngun hoc file
c bin dch (chi tit bng di).
77
KS. GV. TRN ANH BNH
X Yhng s AcMenuFileType
C
VALUE
Cc
CONSTANT
I N H DESCRIPTION
N T
acMenuFileCompiled 0 compiled menu file (.mnc extension)
G
Dim objMenu As AcadPopupMenu N
Sub RemoveMenus()
T R
For Each objMenu In ThisDrawing.Application.MenuBar
If MsgBox("Remove " & objMenu.Name & "?", vbYesNo) = vbYes Then
objMenu.RemoveFromMenuBar
78
KS. GV. TRN ANH BNH
Next
End Sub
NG
PopupMenusCollection.RemoveMenuFromMenuBar Index
D DESCRIPTION
NAME DATA
X Y
TYPE
C
VariantH Ging nh trong Phng thc InsertMenuInMenuBar.
TIN
Index
N
B M3. Sp xp li cc menu trn menubar
III. To v chnh sa Pull-down v Shorcut menus
1. To mi Pull-down menu
T IN
N G
T H
GH
Set PopupMenuObject = PopupMenusCollection.Add(MenuName)
N
NAME
DATA TYPENG DESCRIPTION
A C
O
MenuName String Tn ca PopupMenu object
KH
MenuName c th cha k t (&), dng dnh ngha accelerator key.
I
NAME DATAN H TYPE DESCRIPTION
N T
MIndex Variant Ging nh trong Phng thc InsertMenuInMenuBar
T IN
NAME DATA
G
DESCRIPTION
N
TYPE
T H
H
ToolbarName String Tn ca Toolbar object s c to
2. Thm mt nt chn vo toolbarN
G
N G
AC
Mt Toolbar button c i din bi ToolbarItem object. Bn c th s dng phng thc
H O
AddToolbarButton method thm mt Toolbar item vo mt v tr xc nh trn toolbar.
KToolbarItemObject = ToolbarObject.AddToolbarButton(Index, ButtonName,
Set
HelpString, Macro[, FlyoutButton])
NAME DATA DESCRIPTION
TYPE
Index Variant V tr m pop-up menu s c thm vo MenuBar.
Index l kiu Integer t 0 n N. N l s lng object trn
menu bar, hoc kiu string l tn ca mt Toolbar button
tn ti, button mi s c thm vo trc button c tn nh
trong index. Nu menu trong index khng tn ti th mt
button mi s c thm vo ti v tr cui cng ca toolbar.
ButtonName String Tn ca toolbar button s c to. (ch chp nhn cc
k t : alphanumeric, dashes (-), v underscores (_)).
HelpString String L chui ch thch
N G
D
Y
Macro String Macro s thi hnh khi ta chn nut lnh.
FlyoutButton Boolean
C X
Nu thit lp l True th s to mt flyout button. Mc
H
I
nh l False.
N G
Ch : Toolbar button cng ging nh menu item. Khi bn mun thay i ch s Index ca
TR
chng. Bn khng c php thay i lun gi tr Index. M u tin, bn phi xa toolbar button.
Sau bn thm n vo Toolbar ti v tr mi, v tr m bn mun thay i.
3. nh ngha hnh nh cho cc nt Toolbar Button.
80
KS. GV. TRN ANH BNH
NG
ToolbarItemObject.SetBitmaps SmallIconName, LargeIconName
Y D
ToolbarItemobject.GetBitmaps SmallIconName, LargeIconName
C XTYPE
H
NAME DATA DESCRIPTION
T IN String
SmallIconName Path v tn file ca small bitmap (1615 pixels)
N LargeIconName String
M Path v tn file ca large bitmap(2422 pixels)
B 4. Thm mt khong trng vo toolbar
Set ToolbarItemObject = ToolbarObject.AddSeparator(Index)
NAME DATA TYPE DESCRIPTION
Index Variant V tr ca khong trng trn Toolbar
Ch : Bn khng th thm khong trng vo u ca ToolBar
5. Floating v Docking Toolbars
Floating Toolbars
G TIN
N
H
ToolbarObject.Float Top, Left, NumberOfRows
T
DESCRIPTION
H
NG
NAME DATA
TYPE
G
LongN V tr bin trn ca Toolbar (pixel) tnh t mn hnh
A C pha trn.
Top
Left KH
O Long V tr bin di tnh t vi tr bin trn
NumberOfRows Long S dng m toolbar buttons c th phn b trn .
Nu NumberOfRows nhiu hn s lng buttons c trong
toolbar, tham s ny s b b qua.
V d :
Public Sub FloatDrawToolbar()
Dim objToolBarDraw As AcadToolbar
Set objToolBarDraw =
ThisDrawing.Application.MenuGroups.Item("ACAD").Toolbars.Item("Draw")
objToolBarDraw.Float 0, 0, 3
End Sub
N G
D
X Y
C
H
G I
N
TR
Docking Toolbars
81
KS. GV. TRN ANH BNH
ToolbarObject.Dock DockStatus
G
NAME DATA TYPE DESCRIPTION
GiN
D
DockStatus Long tr ca n xem trong bng di y.
X Y
C Hng s : AcToolbarDockStatus
IN H
N T
CONSTANT VALUE DESCRIPTION
V d minh ha acToolbarDockBottom
T IN
N G
T H
GH
N
NG
A C
KHO
6. To cc flyout toolbar
S dng Set ToolbarItemObject = ToolbarObject.AddToolbarButton(Index, ButtonName,
HelpString, Macro[, FlyoutButton]) vi tham s FlyoutButton l True. V d sau to hai toolbar. Ci
u tin cha flyout button. Toolbar th 2 c gn vo flyout button ca toolbar u tin.
Sub Ch6_AddFlyoutButton()
Dim currMenuGroup As AcadMenuGroup
' Add a flyout button to the first menu on the menu bar
Dim FlyoutButton As AcadToolbarItem
N G
D
Y
' Create the second toolbar. This will be attached to
' the first toolbar via the flyout button.
C X
H
I
Set FlyoutButton = FirstToolbar.AddToolbarButton("", "Flyout", "Demonstrates a flyout
button","OPEN", True)
N G
Dim SecondToolbar As AcadToolbar
TR
' Add a button to the next toolbar
Set SecondToolbar = currMenuGroup.Toolbars.Add("SecondToolbar")
82
KS. GV. TRN ANH BNH
N G
D
' Assign the macro the VB equivalent of "ESC ESC _open "
Y
openMacro = Chr(vbKeyEscape) + Chr(vbKeyEscape) + "_open "
X
C
Set newButton = SecondToolbar.AddToolbarButton ("", "NewButton", "Open a file.",
openMacro)
H
N TIN
' Attach the second toolbar to the flyout button on the first toolbar
BM FlyoutButton.AttachToolbarToFlyout currMenuGroup.Name,SecondToolbar.Name
IN
ToolbarItemObject.Delete
G T
V. To cc macro
N
1. Cc quy nh v macro T H
GH
Bng k t dng trong Macro v m ASCII tng ng.
N
NG
A C
H O
K chr(59)
CharacterASCII M t
; ENTER
^M chr(13) ENTER
^| chr(94) + TAB
chr(124)
SPACEBAR chr(32) Khong trng trong Macro s tng ng vi bn n
phm SPACEBAR
\ chr(92) Dng li nhp s liu
_ chr(95) Chuyn lnh ng sau n sang Ting Anh
+ chr(43) Tip tc macro dng lnh tip theo(t cui dng
lnh trc)
=* chr(61) + Hin th hin hnh top-level image, pull-down, v
chr(42) shortcut menu
*^C^C chr(42) + Dng lp li cc lnh ng sau n cho n khi bn n
chr(3) + Esc
N G
chr(3)
D
$ chr(36)
X Y
ti mt on menu section hoc thm mt on biu
thc DIESEL
C
H
I
^B chr(2) Bt hoc tt Snap (CTRL+B)
^C chr(3)
G
Cancels command (CTRL+C)
N
ESC chr(3) Cancels command (ESC)
^D
^E
chr(4)
chr(5) TR
Bt tt Coords (CTRL+D)
Thit lp mt phng cng kch thc (CTRL+E)
^G chr(7) Bt tt Grid (CTRL+G)
83
KS. GV. TRN ANH BNH
TIN
^Z chr(26) Null character t cui Macro xa cc k t pht
N
sinh cui ca menu Item.
B M Ch v k t kt thc macro nh sau. Nu bn kt thc macro m khng c cc k t c bit
kt thc macro nh ; th AutoCAD s t ng thm vo cui macro mt phm cch. Tuy nhin,
i vi cc lnh Text th phm cch ny s tr v mt k t trng ca text nhp vo. Do vy ta cn nm
chc quy tc sau :
Khi c mt du chm phy trong macro, AutoCAD s thay th n bng phm ENTER.
Nu dng macro kt thc bng cc k t (\), (+), hoc (;), AutoCAD s khng thm mt
khong trcngs sau n.
2. Cc v d v macro
T IN
N G
T H
GH
N
NG
A C
KHO
N G
D
X Y
C
H
G I
N
TR
84
KS. GV. TRN ANH BNH
Sau khi bn khai bo Object With event, v bn c th vit event procedures cho object
mi trong class module. (khi bn chn object by trong Object box, tt c cc events hp l
s c hin th trong Procedure drop-down list box nh hnh v trn)
Sau bn connect ti Application object
1. Trong ca s cha main module, bn thm cc dng khai bo sau :
N G
D
Dim X As New EventClassModule
Y
2. Cng trong ca s ny, bn thm th tc sau :
Sub InitializeEvents()
C X
H
Set X.ObjApp = ThisDrawing.Application
I
End Sub
N G
3. Trong main module, bn gi th tc InitializeEvents :
V d sau :
TR
Call InitializeEvents
85
KS. GV. TRN ANH BNH
KHO
If MsgBox("AutoCAD is about to load " & FileName & vbCrLf _
& "Do you want to continue loading this file?", _
vbYesNoCancel + vbQuestion) <> vbYes Then
Cancel = True
End If
End Sub
G
BeginLisp
N
D
BeginModal
Y
BeginOpen
BeginPlot
C X
BeginQuit
H
BeginSave
G I
EndCommand
N
EndLisp
EndModal TR
EndOpen
EndPlot
86
KS. GV. TRN ANH BNH
EndSave
LispCancelled
NewDrawing
N G
D
SysVarChanged
WindowChanged
X Y
C
WindowMovedOrResized
2. Document-levelH
IN nh application-level events, document-level events mc nh c khi bn ti
events
Khng T
N ging
Mvo
Project bn v. Nu bn chn AcadDocument Object trong Object List box ca Thisdrawing
B module ca AutoCAD
hnh v di y :
project, the document-level events c lit k trong danh sch bn phi nh
T IN
N G
T H
GH
N
NG
A C
KHO
Cc Event c s dng trong document level nh sau :
Activate
BeginClose
BeginCommand
BeginDoubleClick
BeginLisp
BeginPlot
BeginRightClick
BeginSave
BeginShortcutMenuCommand
BeginShortcutMenuDefault
BeginShortcutMenuEdit
BeginShortcutMenuGrip
N G
D
BeginShortcutMenuOsnap
Deactivate
X Y
EndCommand
C
H
I
EndLisp
EndPlot
EndSave
N G
EndShortcutMenu
LayoutSwitched TR
LispCancelled
ObjectAdded
87
KS. GV. TRN ANH BNH
ObjectErased
ObjectModified
SelectionChanged
N G
D
WindowChanged
Y
WindowMovedOrResized
X
C
H
3. Object-Level Events
TIN
s dng object-level events, u tin bn phi to mi mt class module v khai bo bin
N
tham chiu n i tng m bn mun by s kin Modified. Class module mi cha khai bo i
M
tng bng cch s dng VBA keyword WithEvents, v d :
B Public WithEvents objLine As AcadLine
t tn Class module l EventClassModule, sau vit Code cho Event :
1. Trong ca s cha main module, bn thm cc dng khai bo sau :
Dim X As New EventClassModule
2. Cng trong ca s ny, bn thm th tc sau :
Public Sub InitializeEvent()
Dim dblStart(2) As Double
Dim dblEnd(2) As Double
dblEnd(0) = 1: dblEnd(1) = 1: dblEnd(2) = 0
Set X.objLine = ThisDrawing.ModelSpace.AddLine(dblStart, dblEnd)
End Sub
T IN
G
3. Trong main module, bn gi th tc InitsializeEvents :
N
Call InitializeEvents
T H
GH
V d sau y to mt polyline vi Event
N
NG
C
Public WithEvents PLine As AcadLWPolyline
A
KHO
Sub CreatePLineWithEvents()
' This example creates a light weight polyline
Dim points(0 To 9) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 3
points(8) = 3: points(9) = 2
Set PLine = ThisDrawing.ModelSpace. AddLightWeightPolyline(points)
PLine.Closed = True
ThisDrawing.Application.ZoomAll
End Sub
Exit Sub TR
ERRORHANDLER:
MsgBox Err.Description
88
KS. GV. TRN ANH BNH
End Sub
II. S dng Form
N G
D
1. Lm vic vi Form v Macro
X Y
To mi mt form, chy form trong ch run_mode
C
Ging ht VB
H
N TIN
Chn controls vo form
M
Khng khc VB
B n, hin th form
Ging ht VB
Load v Unload form
Ging y nh VB
S dng Modal form
y l im khc ca VBA vi VB. Ch Modal form cho php bn cng mt lc lm vic vi
c Form v c mn hnh ca CAD nh vic Pick chut, nh lnh,
TIN
2. Lm vic vi module v macro
N G
Hmenu bng cch thay i menu Macro
Chy macro t toolbar v menu
Bn c th chy macro t AutoCAD toolbarThoc
G Hc dng :
N
property cho toolbar hoc menu . Macro property
N G
C
-VBARUN filename.dvb!modulename.macroname
Trong :
O A- filename l tn ca project file.
K H
- modulename l tn ca module cha macro cn chy.
- macroname l tn ca macro.
V d : -VBARUN Project1.dvb!module1.thongkethep
Ti Project mt cch t ng
C 2 cch Load Project mt cch t ng :
1. Khi VBA c ti, n s tm kim trong AutoCAD mt project c tn l acad.dvb. File
ny s c ti mt cch mc nh nh mt default project
2. Cng ging nh VBA, Autolisp cng c mt file c tn l acad.lsp cng c ti mt cch
t ng khi bn v mi xut hin. Dng lnh sau trong file acad.lsp dng ti project
myproj.dvb vo trong bn v mi khi mt bn v mi c m
(defun S::STARTUP()
(command "_VBALOAD" "myproj.dvb")
)
N G
Chy macro mt cch t ng D
X Y
C
C 2 cch chay macro mt cch t ng :
1. Bn c th chy cc macro mt cch H
tI ng, bng cch son tho AutoCAD
startup ca acad.lsp. V d, G
N t ng chy Macro c tn drawline, u tin bn
file project acad.dvb . Sau , m notepad.exe v
copy on macro vo trong
son on sau :TR
(defun S::STARTUP()
(command "_-vbarun" "drawline")
89
KS. GV. TRN ANH BNH
)
2. Trong Project acad.dvb, macro c tn AcadStartup s t ng c chay khi
VBA load.
N G
D
X Y
III. Tng tc vi cc ng dng v cc c s d liu khc
H CLisp
1. Tng tc vi Visual
T c IN
T
2. SN
M T c, ging VB
dng c s d liu DAO
B
3. Giao tip vi cc ng dng khc.
trao i thng tin gia cc Activex Model, ta lm theo cc bc sau :
1. Tham chiu n ActiveX Object Model ca ng dng cn giao tip vi.
2. To mt instance ca ng dng
3. Vit Code bng cch s dng c AutoCAD Object Model v Object Model ca ng
dng ngoi.
Tham chiu n ActiveX Object Library ca ng dng khc
Vic u tin khi bn trao i thng tin vi cc ng dng ngoi l tham chin n ActiveX
T IN
Object Library, v n cha tt c cc i tng, phng thc, thuc tnh, hng s v s kin do ng
dng nh ngha
N G
H
Thng thng, kt ni vi cc Activex Library, bn chn Tools menu References. , sau
T
H
mt danh sch cc object librarie VBA tm thy trong h thng ca bn s c hin ln. Sau bn
N G
chn nhng Library m bn cn trao i d liu ti n. V d, bn thm object library ca Microsoft
NG
Excel, chn Microsoft Excel object library entry trong danh sch.
C
Khi bn to tham chiu n object library ca ng dng ngoi, bn c th s dng VBA
A
KHO
Object Browser xem danh sch cc object ca ng dng m bn tham chiu n.
C th nh sau :
1. In the VBA IDE, open the Tools menu and select the References menu option.
2. Find and select the entry in the list of Available References for the application you want to
access.
3. Select OK to close the dialog box with your changes.
N G
D
X Y
C
H
G I
N
To mt Instance ca ng dng ngoiTR
90
KS. GV. TRN ANH BNH
X YExcelAppObj as Excel.Application
Dim
2. sau bn to Cinstance cho application. V d :
H mt
X Y If StrComp(Array1(Count).EntityName, _
C "AcDbAttribute", 1) = 0 Then
H ExcelSheet.Cells(RowNum, Count + 1).value = _
N TIN Array1(Count).TagString
End If
BM End If
Next Count
RowNum = RowNum + 1
For Count = LBound(Array1) To UBound(Array1)
ExcelSheet.Cells(RowNum, Count + 1).value = Array1(Count).textString
Next Count
Header = True
End If
End If
End With
Next elem
Excel.Application.Quit
T IN
N G
End Sub
T H
S dng GetObject, v NewObject
GH
N
NG
Nh trnh by trng I Cch lp trnh AutoCAD VBA trong Excel, Bn cng th
A C
GetObject, v NewObject connect ti cc ng dng khc
KHO
Bng lp ng dng
APPLICATION CLASS IDENTIFICATION
Excel Excel.Application.x (x l product version)
Word Word.Application.x (x l version index)
Err.Clear
Set App = CreateObject("Excel.Application") 'depends on application
G
'check to see if application was started
N
D
If Err Then
Y
'no, application could not be started - exit
X
Exit Sub
C
End If
H
N TIN End If
'set the application visibility
BM App.Visible = Visible
End Sub
T IN
Else
N G
H
MsgBox "Could not start Excel, exiting ...", vbCritical
T
H
Exit Sub
G
End If
End Sub
N
NG
C
IV. Lm vic vi Xdata
A
KHO
1. Khi nim v XData
Xdata l d liu nh km vi cc thc th. Xdata c th c hay khng c. Ngi dng thng
dng n ghi thm cc thng tin m rng v thc th. V d, mt s hiu thp ghi trong bn v b
tng thng c s hiu thp, phi, khong cch gia cc thanh. Nhng khng c di thanh . Ta c
th dng Xdata ghi thm di thp.
Extended data gii hn 16K cho mi thc th entity. Extended data gm cc group code DXF t
1000 n 1071. AutoCAD cha cc goup v d liu trong n nhng khng s dng chng. Bn c th
tham kho Group code v kiu d liu ca tng Group code trong bng DFX Code. Sau y l mt s
Group code in hnh :
String
Group Code th 1000. Strings trong extended data c di ti a l 255 bytes (vi byte th 256
dnh cho null character).
Application Name
N G
Group Code th 1001 (cng l gi tr kiu string). Application names c di ti a l 31 bytes
D
(byte th 32 dnh cho null character) v phi tun theo quy tc nh tn (nh tn ca layer). Mt
Y
application name c th cha cc ch ci nh : s, v cc k t c bit nh $, -, v _. Nhng
X
khng c php cha khong trng.
C
H
I
Layer Name
N G
Group code th 1003. Tn ca mt layer gn lin vi Xdata.
Database -Handle
T R
Group code th 1005. Handle ca entity trong drawing database.
3D Point
93
KS. GV. TRN ANH BNH
H
Note AutoLISP cannot directly handle binary chunks, so the same precautions that apply to long
(1071) groups apply to binary groups as well.
N G
World Space Position
NG
O A Cto3Dwhich
1011. Unlike a simple point, the WCS coordinates are moved, scaled, rotated, and mirrored
KH
along with the parent entity the extended data belongs. The WCS position is also stretched
when the STRETCH command is applied to the parent entity and when this point lies within the select
window.
World Space -Displacement
1012. A 3D point that is scaled, rotated, or mirrored along with the parent, but not stretched or
moved.
World -Direction
1013. A 3D point that is rotated or mirrored along with the parent, but not scaled, stretched, or
moved. The WCS direction is a normalized displacement that always has a unit length.
Distance
1041. A real value that is scaled along with the parent entity.
Scale Factor
N G
1042. Also a real value that is scaled along with the parent. D
X Y
2. Sets the extended data (XData) associated with an object.
C
C php nh sau
H
I XData
NG
object.SetXData XDataType,
Trong :
v , AttributeReference, Block, Dictionary, DimStyle,
T Rbn
Object : Tt c cc thc th
Group, Layer, Linetype, PlotConfigurations, RegisteredApplication, TextStyle, UCS,
View, Viewport; Xrecord.
94
KS. GV. TRN ANH BNH
N G
3. Gets the extended data (XData) associated with an object.
C php nh sau D
X Y
Tt
Object :H
C object.GetXData AppName, XDataType, XDataValue
NTGroup,
M
View, Viewport; Xrecord.
B AppName : String; input-only, chui rng s ta v tt c cc d liu c gn vi i
tng.
XdataType : Variant (array of short) Output-only
Xdata : Array of Variant; Output -only
4. Cc V d
V d 1 :
Sub Ch10_AttachXDataToSelectionSetObjects()
' Create the selection set
Dim sset As Object
Set sset = ThisDrawing.SelectionSets.Add("SS1")
T IN
' Prompt the user to select objects
N G
sset.SelectOnScreen
T H
H
' Define the xdata
N G
Dim appName As String, xdataStr As String
appName = "MY_APP"
NG
C
xdataStr = "This is some xdata"
A
DimK H O
xdataType(0 To 1) As Integer
Dim xdata(0 To 1) As Variant
' Define the values for each array 1001 indicates the appName
xdataType(0) = 1001
xdata(0) = appName
'1000 indicates a string value
xdataType(1) = 1000
xdata(1) = xdataStr
' Loop through all entities in the selection set and assign the xdata to each entity
Dim ent As Object
For Each ent In sset
ent.SetXData xdataType, xdata
Next ent
End Sub
N G
D
V d 2 :
X Y
C
Sub Example_SetXdata()
I H
' V d sau to ra mt ng line v gn extended data cho n.
NG
Dim lineObj As AcadLine R
' Create the line
T
Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double
startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0#
95
KS. GV. TRN ANH BNH
KHO
' Return the xdata for the line
Dim xdataOut As Variant
Dim xtypeOut As Variant
lineObj.GetXData "", xtypeOut, xdataOut
End Sub
V d 3 :
V d sau hin th tt c cc xdata trong selection set
Sub Ch10_ViewXData()
' Find the selection created in previous example
Dim sset As Object
Set sset = ThisDrawing.SelectionSets.Item("SS1")
' Define the xdata variables to hold xdata information
Dim xdataType As Variant
N G
D
Dim xdata As Variant
Y
Dim xd As Variant
'Define index counter
C X
Dim xdi As Integer
H
I
xdi = 0
N G
' Loop through the objects in the selection set and retrieve the xdata for the object
Dim msgstr As String
Dim appName As String
TR
Dim ent As AcadEntity
appName = "MY_APP"
96
KS. GV. TRN ANH BNH
mode = acSelectionSetWindowPolygon
pointsArray(0) = -12#: pointsArray(1) = -7#: pointsArray(2) = 0
pointsArray(3) = -12#: pointsArray(4) = 10#: pointsArray(5) = 0
pointsArray(6) = 10#: pointsArray(7) = 10#: pointsArray(8) = 0
pointsArray(9) = 10#: pointsArray(10) = -7#: pointsArray(11) = 0
TR
Xdata, nhng Xrecord khng b gii hn v kch thc cng nh th t v n c th cha bt k loi
d liu no.
Khc vi Xdata, XRecords cha d liu trong standard AutoCAD group codes, tc l khng phi
cha trong phn m rng nh Xdata. Cc group code ny nh hn 1000. Tt c cc standard
97
KS. GV. TRN ANH BNH
N TIN nng Save. Khi bn khi phc li (restore the layer setting, AutoCAD s ly d liu t
XRecord khi phc li).
BM
T IN
N G
Nh vy, ta cng c th ghi li cc d liu cn thit trong qu trnh lp trnh s l bn v bng
cch s dng Xrecord.
T H
H
Nhng Group code sau c th c s dng trong XRecord objects:
N
100 : Subclass marker (AcDbXrecord) G
NG
1-369 : (except 5 and 105)
C
XRecord obects c ghi li cng vi bn v, v chng c th c truy cp mt cch trc tip
A
KHO
bi ObjectARX v LISP. Do vy, nu bn cn bo mt d liu, bn phi m ha chng. :
VBA class name: AcadXRecord
Create using: Dictionary.AddXRecord
Access via: Dictionary.Item
Sub Example_AddXRecord()
' This example creates a new XRecord if one doesn't exist,
N G
' appends data to the XRecord, and then reads it back. To see data being added,
D
' run the example more than once.
X Y
CAs AcadXRecord
H
AsIVariant
Dim TrackingDictionary As AcadDictionary, TrackingXRecord
Dim XRecordDataType As Variant, XRecordData
G
Dim ArraySize As Long, iCount As Long
Dim DataType As Integer, Data N
' Unique identifiers to distinguish T
R As String, msg As String
this XRecordData from other XRecordData
Const TYPE_STRING = 1
Const TAG_DICTIONARY_NAME = "ObjectTrackerDictionary"
98
KS. GV. TRN ANH BNH
N G
D
MsgBox "The data in the XRecord is: " & vbCrLf & vbCrLf & msg, vbInformation
Exit Sub X Y
C
H
CREATE:
G I
N
' Create the objects that hold this XRecordData
TR
If TrackingDictionary Is Nothing Then ' Make sure to have tracking object
Set TrackingDictionary = _
ThisDrawing.Dictionaries.Add(TAG_DICTIONARY_NAME)
Set TrackingXRecord = _
99
KS. GV. TRN ANH BNH
TrackingDictionary.AddXRecord(TAG_XRECORD_NAME)
End If
Resume
N G
D
End Sub
X
3. Phng thc SetXRecordDataY
C
Hobject.SetXRecordData XRecordDataType, XRecordData
NG
' appends data to the XRecord, and reads it back. To see data being added,
A C
' run the example more than once.
H O
DimK
TrackingDictionary As AcadDictionary, TrackingXRecord As AcadXRecord
Dim XRecordDataType As Variant, XRecordData As Variant
Dim ArraySize As Long, iCount As Long
Dim DataType As Integer, Data As String, msg As String
G
Set TrackingXRecord = TrackingDictionary.GetObject(TAG_XRECORD_NAME)
N
D
On Error GoTo 0
G I
' If there is no array already, create one
N
TR
If VarType(XRecordDataType) And vbArray = vbArray Then
ArraySize = UBound(XRecordDataType) + 1
' Get the size of the data elements returned
ArraySize = ArraySize + 1
100
KS. GV. TRN ANH BNH
N TIN
End If
BM
' Append new XRecord Data
'
' For this sample, we only append the current time to the XRecord
XRecordDataType(ArraySize) = TYPE_STRING: XRecordData(ArraySize) = _
CStr(Now)
TrackingXRecord.SetXRecordData XRecordDataType, XRecordData
' Read back all XRecordData entries
TrackingXRecord.GetXRecordData XRecordDataType, XRecordData
ArraySize = UBound(XRecordDataType)
' Retrieve and display stored XRecordData
For iCount = 0 To ArraySize
' Get information for this element
T IN
N G
DataType = XRecordDataType(iCount)
Data = XRecordData(iCount)
T H
GH
N
If DataType = TYPE_STRING Then
NG
msg = msg & Data & vbCrLf
A
End If C
KHO
Next
MsgBox "The data in the XRecord is: " & vbCrLf & vbCrLf & msg, vbInformation
Exit Sub
CREATE:
' Create the objects that hold the XRecordData
If TrackingDictionary Is Nothing Then ' Make sure the tracking object is there
Set TrackingDictionary = _
ThisDrawing.Dictionaries.Add(TAG_DICTIONARY_NAME)
Set TrackingXRecord = _
TrackingDictionary.AddXRecord(TAG_XRECORD_NAME)
End If
Resume
G
End Sub
N
D
X Y
C
H
G I
N
TR
101