You are on page 1of 101

G

N
D

Y
X
C
H

LP
TIN TRNH TRONG AUTOCAD
N

Ging Vin : Trn anh Bnh


Cp nht ngy 25/8/2007

IN

Sch tham kho :

T
G
N

H
T

H Wileys & Sons


G
N

AutoCAD 2004 Bible


Mastering in AutoCAD 2000
AutoCAD 2004 For Dummies
AutoCAD 2000 (1,2)
AutoCAD 2004 (1,2) c bn v nng cao
Cc tin ch thit k trn AutoCAD

NG

George Omura
John Wiley & Sons
KTS.Lu Triu Nguyn.
TS.Nguyn Hu Lc.
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.

KHO

Lin h : KS. GV. Trn Anh Bnh :


-

T : 0983039940
Mail 1 : anhbinh0310@yahoo.com
Mail 2 : binhta@uce.edu.vn

n c : Sch lp trnh ARX v .DLL trong AutoCAD

TR

Y
X
C

H
I

N
D

KS. GV. TRN ANH BNH

LP TRNH TRONG AUTOCAD

N THIU CHUNG
CHNG 1 :
GII

D
Y

XCAD
I.
Ngn ng lp trnhC
trong

II.
Tng quan
INvHActivex Automation
T
N ng lp trnh AutoLisp
III.
Ngn
M

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

9.

Vng lp

V.

H
G
11.
Lp trnh vi c s d liuN
ca AutoCAD.
G
12.
Phn tch v d
: N
C
A Visual Lisp
Ngn ng lp
trnh
O
H
K

VI.

Lm quen vi VBA.

10.

IV.

VII.

Tp hp cc i tng c chn

IN

T
G
N

H
T

C bn v ngn ng lp trnh Visual Basic


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

Cn bn v VBA.
1.

M hnh i tng ca AutoCAD.

2.

Object Hierarchy.

3.

Y
X
C
Truy cp n i tng trong Object Hierarchy. I H
Hierarchy.
Truy cp n i tng Collection trongG
Object
NVB, VBA trong cc mi trng khc.
Truy cp n Object Hierarchy
bng

TR

4.
5.
6.
7.

i tng Collection.

Property & Method (thuc tnh & phng thc).

N
D

CHNG 2 : LM VIC VI MI TRNG AUTOCAD


2

KS. GV. TRN ANH BNH


I.

M, ng v ghi li bn v
1.

M bn v.

2.

To mi bn v.

3.

Lu bn v.

3.

iu khin s hin th bn trong ca s bn v.

Y
X
C v
II.
iu khin ca s
bn
H
1. iu
TINkhin ca s AutoCAD.
N
2. iu khin ca s bn v.
M

III.

N
D

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

IN

1.

Nhp Chui

2.

Nhp ta mt im

3.

Nhp mt k t in hnh cho Option

4.

Nhp s thc, s nguyn.

5.
6.

H
G
N

T
G
N

H
T

G
N

GetCorner Method,
C GetAngle Method, GetDistance Method
A
GetEntity
KHOMethod, GetSubEntity Method
CHNG 3 : TO V SA CC THC TH HA

I.

II.

III.

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

Thm Text vo bn v
1.

To cc TextStyle

2.

Chn Text vo bn v

3.

Chnh sa PolyLine, SpLine

Y
X
C
3. Chn cc k t c bit, cc k t Unicode.

H
I
Sa cc i tng bn v

NG
1. Cc php sa i c bn

R
2. Cc php bin i nngT
cao

N
D

KS. GV. TRN ANH BNH


IV.

Block v thuc tnh ca block


1.

V.

Blocks v Block References

Chn i tng
1.
2.

Y
X
Thm i tng
Cvo selection set
H
N tng trong selection set
Lc
TIi
To Selectionset.

N
D

N vic vi Group
Lm
M

3.

VI.

VII.

1.

To mt Group Object

2.

Truy cp ti cc Group Object

3.

Thm bt thc th vo Group

4.

Xa Group Object

S dng layer, color v linetype


1.

S dng layer, color

2.

S dng linetype

3.

Gn layer, color, linetype cho i tng

VIII.

Lm vic vi kch thc


1.
2.
3.

H
G
To cc ng o kch thcN
G
N

To cc leader.C
A
O
H
K
Lm vic vi DimStyle

IN

T
G
N

H
T

CHNG 4 : TY BIN MENUS V TOOLBARS

I.

II.

III.

C bn v menu group v toolbar


1.

Menugroup collection

2.

Menugroup Object

Thay i menu bar


1.

Chn thm menu vo menubar

2.

Xo b menu trn menubar

3.

Sp xp li cc menu trn menubar

To v chnh sa Pull-down v Shorcut menus


1.

To mi Pull-down menu

2.

Chn mt menu Item vo Pull-down menu

3.
4.
5.
6.
IV.

Y
X
C
Chn mt khong trng vo Pull-down menu

H
Thm mt Menu Item vo Shortcut Menu I
G
To Submenu cho menu item N
Xa bt menu item
TR

N
D

To v chnh sa Toolbars
4

KS. GV. TRN ANH BNH


1.

To mi toolbar

2.

Thm mt nt chn vo toolbar

3.

nh ngha hnh nh cho cc nt Toolbar Button.

4.

Thm mt khong trng vo toolbar

Y
X
5. Floating v Docking
C Toolbars
H
N flyout toolbar
6. To
TIcc
N
7. Xa Toolbar v Toolbar Button
M

V.

N
D

To cc macro

1.

Cc quy nh v macro

2.

Cc v d v macro

CHNG 5 : PHT TRIN NG DNG VI VBA


I.

II.

III.

IV.

V.

AutoCAD Events
1.

Application-level events

2.

Document-level events

3.

Object-Level Events

IN

H
G
N

S dng Form

T
G
N

H
T

NG

C v macro
2. Lm vic vi
A module
O
Hvi cc ng dng v cc c s d liu khc
TngKtc
1.

Lm vic vi Form v Macro

1.

Tng tc vi Visual Lisp

2.

S dng c s d liu DAO

3.

Giao tip vi cc ng dng khc.

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

Lm vic vi Xrecord
1.

Khi nim v Xrecord

2.

Phng thc AddXRecord

3.

Phng thc SetXRecordData

4.

Phng thc GetXRecordData

TR

Y
X
C

H
I

N
D

KS. GV. TRN ANH BNH

CHNG 1 : GII THIU CHUNG


I.

Ngn ng lp trnh trong CAD


Cc cp ca ngi dung khi thao tc vi AutoCAD :
Cp I : Bit s dng CAD
Cp II : Bit qun l v lm ch mi trng CAD
Cp III : Bit lp trnh t ng ha qu trnh v
Autocad cho ta cc cch c th t ng qu qu trnh v nh sau :
S dng cc ngn ng lp trnh, sau kit xut ra bn v di dng cc file vn bn DFX.
T ng ha bng cc file Script.
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!
VBA vit tt ca Visual Basic Application. Cng nh Object Arx th VBA cng l mt mi
trng lp trnh hng i tng s dng ngn ng VB. u im ca VBA l
S dng VB, mt ngn ng lp trnh tng i thng dng v d hc.
VBA nm trong CAD nn tc chy cng tng i nhanh.
D dng trong vic to ra cc giao din (hp thoi, menu).
Tng tc vi cc ng dng khc v cc c s d liu khc.
Cho php ta ghi Project ra file ring hoc tch hp lun vo bn v. To iu kin pht
trin ng dng mt cch mm do trong vic chia s d liu gia cc ng dng khc trong
mi trng Window.

TIN
N

N
D

Y
X
C
H

IN

KHO

II.

NG

H
G
N

T
G
N

H
T

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,...

TR

Y
X
C

H
I

N
D

KS. GV. TRN ANH BNH

TIN
N

N
D

Y
X
C
H

2 u im ca AutoCAD ActiveX
Tt c cc ngn ng lp trnh u c th lm vic vi cc i tng trong AutoCAD (khng
gii hn vi C++ v AutoLISP nh trc)
Chia s d liu vi cc ng dng khc trn mi trng Windows (Excel, Word...)

IN

H
G
N

T
G
N

H
T

M hnh client server.


Mc d Activex lun lun bao gm mt cuc hi thoi gia hai ng dng, n khng phi l cuc
hi thoi hai chiu gia cc thnh phn tng ng. Mi thnh phn chng trnh Activex
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.

KHO

NG

Starts conversation
Request Object
Supplies Object

Client

Server
Invokes Method
Supplies Object

N
D

Y
X
C

H
Principle Activex Automation
I

NG
Di y l mt s ng dng bn c th
dung
kim sot cc server activex, k c AutoCAD.

Visual Basic
TR
Excel VBA
Close conversation

Word VBA
7

KS. GV. TRN ANH BNH


.....

M hnh i tng ca Automation.


Mt Server Activex Automation (chng hn nh AutoCAD) thc hin cc chc nng qua cc i
tng. Mt i tng l mt i din ca thnh ng dng. Mt i tng c phn bit vi cc di
tng khc b ba c tnh :
Phn loi ca i tng
Cc c tnh ca i tng
Phng thc ca i tng
V d i tng Line, c tnh ca i tng cho php bn xc nh :
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
Ch , cc Autocad activex s khng hot ng nu cad ang thc hin lnh.

TIN
N

Y
X
C
H

N
D

IN

III. Ngn ng lp trnh AutoLisp

H
G
N

T
G
N

H
T

1. Gii thiu chung


u im : Tc chy nhanh
Nhc im :
L ngn ng lp trnh thng dch, ko cu trc
Khng kt ni c vi cc c s d liu nh Access, Excel

KHO

NG

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)
Tr v kt qu : 100

N
D

Y
X
C
2.2. Cch nhp biu thc AutoLisp

H
I
Biu thc Lisp c th c nhp nh cc dng lnh ca
AutoCAD,
ch rng biu thc ca Lisp

lun lun nm trong du ngoc n ( ).


G
Khi nhp trc tip bng dng lnh, bn
nnN
ch ko di ca s AutoCAD Text Window ra

c th theo di c kt qu cng nh T
liR
ca n.
Command: (- ( + 140 10) 30)
120

KS. GV. TRN ANH BNH


2.3. Cc hm s hc
Hm cng (+) : (+ [number 1] [number 2] [number 3].)
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 :
S nguyn (ko c du chm)
S thp phn (c du chm)
Kt qu tr v s c kiu l kiu rng nht trong cc kiu ca tham s.
V d :
Command: ( + 140 10 30)
180
Command: ( + 140 10 30.0)
180.0
Command: (+ 140 10.10 30)
180.1
Command: (+ 10 a)
; error: bad argument type: numberp: nil

TIN
N

N
D

Y
X
C
H

Hm tr (-)
Hm nhn (*)

IN

T
G
N

H
T

Hm chia (/)
Command: ( / 120 10 3)
4
Command: ( * 3.75 3.775)
14.0625
Lisp lu tr ti 14 s thp phn nhng kt qu tr v trn mn hnh s ch c 6 ch s c ngha
tnh t tri sang phi.
V d : 18-[(3+6+9):(9-6)-12]
Command: (- (- 18 (/ (+ 3 6 9) (- 9 6))) 12)
0

KHO

NG

H
G
N

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)
3
Command (Setq x 3 y 4)
4
Command (Setq z (+ x y)
7
Command (Setq A Xyabg)
Xyabg

TR

Y
X
C

H
I

N
D

Phm vi bin
Bin ch c tc dng trong phm vi bn v
9

KS. GV. TRN ANH BNH


S dng bin trong dng lnh
Command : (setq x 10)
10
Command : (!X)
10
Command : circle
3P/..<Center point> : Nhp ta tm
Diameter <Radius> : !x

N
D

Y
X
C
H

TIN
N
4.
File chng trnh Lisp
M
4.1. File lisp

Quy nh chung :
File Lisp c phn m rng l *.lsp
Mt biu thc c th vit trn nhiu dng
Cc biu thc khng phn bit ch hoa, ch thng
Chui ch thch bt u bng du chm phy
Cc ti file lisp vo trong AutoCAD
S dng hm Load
Command : (Load E:/autoLisp/CHT.lsp)
Hoc
Command : (Load E:\\toLisp\\T.lsp)
S dng hm Appload (Application Load)

KHO

NG

H
G
N

TR

IN

T
G
N

H
T

Y
X
C

H
I

N
D

4.2. Hm t to
10

KS. GV. TRN ANH BNH


Ngoi cc hm AutoCAD cung cp, ta cn c th to ra cc hm t to.
nh ngha hm t to
Bng cch s dng hm Defun (define function). C php nh sau :
(Defun Function_Name Argument_List expresstion)
Function_Name : tn hm t to. Tun theo quy tc t tn bin
Argument_List : gm hai phn ngn cch nhau bi du /, Phn th nht cha cc tham s
cn thit khi gi l hm. Phn th hai ch cc bin cc b ca hm.
Expression : cc biu thc tnh ton ca hm. Cc biu thc ny s ln lt c tnh ton
theo th t t trn xung di.

TIN
N

N
D

Y
X
C
H

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.

IN

T
G
N

H
T

Tham s C:
c th s dng hm t to nh l mt lnh trong AutoCAD, ta t k hiu C: vo trc tn
hm trong phn nh ngha hm t to.
V d :
(Defun C: (/PT1 PT2)
(Setq PT1 (getpoint \n nhap diem thu nhat))
(Setq PT2 (getpoint \n nhap diem thu hai))
(command Line PT1 PT2 );
(Princ)
) ;ket thuc

KHO

NG

H
G
N

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
l mt hm. Khi ta nhp d liu vo, AutoCAD nhn bit c kiu d liu danh sch ta dng hm
Quote (hoc du ).
V d ta v ng thng i qua mt im c ta (2,2,0) v mt im nhn c t ngi dng.
(Defun C: (/PT1)
(setq PT1 (getpoint \n Nhap diem thu nhat))
(Command Line PT1 Quote(2 2 0))
)
Hoc :
(Defun C: (/PT1)
(setq PT1 (getpoint \n Nhap diem thu nhat))
(Command Line PT1 2,2,0)

TR

Y
X
C

H
I

N
D

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])

TIN
N

N
D

Nhp s nguyn (interger) : Hm getint


C php : (Getint [prompt])
V d :
Command : (Getint \n Enter an integer)
12.0
Requires an integer value
Try again : 23
23

Y
X
C
H

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,
(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 :
(Initget [bits] [string])
Bits l mt s nguyn. Gi tr tham s ny bng tng cc bit code tng ng vi cc ch
kim sot m t among mun
Tham s String cha danh sch cc t kha.
Bit code
Ch kim sot
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.

IN

KHO

NG

H
G
N

T
G
N

H
T

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
Ly gi tr bin h thng
(Getvar Varname)
Gn gi tr bin h thng
(Setvar varname value)

Y
X
C

H
I

N
D

Bin h thng quan trng


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.

TR

12

KS. GV. TRN ANH BNH


6. Mt s hm c bn
6.1. Hm chuyn kiu d liu

N
D

Chuyn i mt s thnh s thc : Hm (Atof String)


Command : (Atof 15.4a)
15.4

Y
X
Cthnh mt s nguyn : hm (Atoi String)
Chuyn i mtH
chui
IN : (Atof 15.4a)
TCommand
N
15
M

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
(precision) sau c chuyn thnh chui tng ng. Nu khng c 2 tham s ny th
AutoCAD s ly bin h thng trong Units thc hin php ton.
V d
(Rtof 215 2) tr v : 2.15E+2

IN

H
G
N

T
G
N

H
T

Chuyn i mt s nguyn thnh chui : hm (Itoa integer)


V d :
(Itoa 21) tr v 21
(Itoa 30.2) tr v li

KHO
Hm ASCII

NG

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.
Hm max,min
(Max Number1 Number 2 )
(Mim Number1 Number 2 )

Y
X
C

H
I

Ch khng chp nhn chui.

N
D

Hm lng gic
(Sin Angle) Tr v gi tr ca mt gc, n v Angle l radians.
(Cos Angle)
(Atan Angle). Gi tr tr v t pi/2 n pi/2

TR

Hm ly tha, khai cn, logarit


13

KS. GV. TRN ANH BNH

(Expt Base Power)


(Expt 4.0 4) tr v gi tr 64.0
(SQRT Number)
(Log Number) tr v logarit ca mt s.
(Exp Number) Tr v e m n.

N
D

Y
X
6.3. Cc hm v khong
C cch v gc o
H
Hm Cvunit
IN(convert units)
T
N
C php : (cvunit Value From To)

M
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
Command : (Angle (5 6.10) (quote (10 5)))
6.06664

IN

T
G
N

H
T

H
G
N
Hm hin th thng tin kiu chui
G
N

C php : (Princ
[Expr [file]] - Hm ny in ra mn hnh hoc in ra file
C
C php
:A
(Print [Expr [file]] - Hm ny in ra mn hnh hoc in ra file trn mt dng mi.
O
H
K
C php : (Prin1 [Expr [file]] - Hm ny in ra mn hnh hoc in ra file trn mt dng
6.4. Cc hm v chui

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
D

Hm StrCase
C php : (StrCase String [switch])
Nu switch <> nill hm s tr v chui String trong cc k t hoa c chuyn thnh ch
thng
Nu Switch ko c hoc bng nill th hm s tr v chui String trong cc k thng s
c chuyn thnh k t hoa.

TR

Y
X
C

H
I

Hm StrCat
C php : (StrCat String [string2]) : kt ni cc chui tham s.
Hm StrLen
14

KS. GV. TRN ANH BNH


C php : (StrLen String [string]) : tr v chiu di ca mt xu. Nu c nhiu xu hm s tr v
tng chiu di ca cc xu tham s.

N
D

Hm SubStr
C php : (SubStr String Start [length]) : Tr v mt xu con ca xu String bt u t v tr Start
v di length k t. Nu khng c length, n s ly n tn cui xu.

Y
X
7. X l danh sch C
NH
Iquan
7.1. Tng
T
Nsch (List) c phn lm 3 loi chnh
Danh

M
Biu thc (Expression list) : cha tn hm v cc tham s ca hm. Biu thc tr v gi

tr
Ta dim (Point Coordinate list) : c hm quote hoc du ng trc. Cha ta
X, Y, Z ca mt im.
Kho d liu (Data storage List) : Cng nh Point coordinate list. Nhng n cha d liu
bt k.

7.2. To danh sch


Tt cc d liu ca AutoCAD (Auotcad database) u c lu di dng danh sch v c nh s
th t theo m (DXF Code). Khi vit chng trnh, qun l d liu, thng thng ta lu vo cc
bin. Nhng khi s lng lu tr d liu tng ln. Lisp khng cung cp kiu d liu ng v mng
ng. gii quyt vn ny, ta s dng kiu d liu List.
Mt trong nhiu phng php to ra danh sch l s dng hm List
C php : (List expression)
V d
Command : (set q L1 (list abc 10 30.0 hoang)
(abc 10 30.0 hoang)
Trong v d trn L1 c 4 phn t.
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)

IN

KHO

NG

H
G
N

T
G
N

H
T

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)
7.3. Hm x l danh sch c bn

Y
X
C

H
I

Hm Car
C php : (Car List) : Dng ly gi tr u tin ca danh sch.
V d :
Command : (Car a1)
abc

TR

N
D

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


Command : (setq a3 (CDR a1)
(1 30 40)

N
D

Hm CADR, CADDR
(CADR list) tr v phn t th 2 ca danh sch.
(CADDR list) tr v phn t th 3 ca danh sch.

Y
X
C
H

Hm Last
C php : (Last list) : Tr v phn t cui cng ca danh sch.

TIN
N

Hm Length
M C php : (Length List) : tr v s lng phn t c trong danh sch.

7.4. Hm x l danh sch nng cao


Hm Assoc (association)
C php : (Assoc Item AList) : Danh sch Alist phi cha phn t Item, v l danh sch phc
hp. Hm s tr v mt danh sch con ca Alist m phn t u tin l Item. Nu khng tm thy phn
t Item trong Alist th hm s tr v gi tr nill.
V d :
Command: (Setq Alist '((1 "Name" "NGuyen hoang anh") (2 "Toan" 10) (3 "Ly" 6)))
((1 "Name" "NGuyen hoang anh") (2 "Toan" 10) (3 "Ly" 6))
Command: (setq Toan (assoc 2 Alist))
(2 "Toan" 10)
Command: !toan
(2 "Toan" 10)
Command: (last (assoc 2 Alist))
10

IN

H
G
N

T
G
N

H
T

G
N

Hm Cons (construct)
C
A
C php : (Cons
Item List) b xung phn t Item vo v tr u tin ca danh sch.
O
V d : KH
Command : (Setq AL (list (Cons COLOR 4) (Cons LAYER 0)

Hm Member
C php : (Member Item list) : tr v mt danh sch bt u bng phn t Item.
V d :
Command : (Setq L (1 2 3 4 5)
( 1 2 3 4 5)
Command : (member 3 L)
(3 4 5)
Hm Append
C php : (Append list1 list2 ) : Gp nhiu danh sch thnh mt danh sch.
Command : (setq L2 (Append (member 3 L) (list 6)))
(3 4 5 6)
8. Biu thc iu kin
8.1. Biu thc iu kin
Cc hm so snh
Hm

C php

(= Atom Atom ..)

/=

(/= Atom Atom ..)

Gii thch

TR

Y
X
C

H
I

N
D

Tr v gi tr T nu tt c cc phn t bng nhau.


Tham s kiu s hoc kiu chui.
Tr v T nu cc phn t i mt khc nhau
16

KS. GV. TRN ANH BNH


<

(< Atom Atom ..)

<=; >=; >

Tng t

EQ

(EQ Expr1 Expr2)

Equal

Tr v T nu mi phn t nh hn phn t ng
bn phi n

Y
X
C Expr2
(Equal
Expr1
H
N
I[fuzz]
T
N

M
Cc hm kim tra d liu

N
D

Tng t

So snh s trng nhau ca 2 danh sch.


Hm nh gi tr cc biu thc v kim tra cc gi
tr ny c bng nhau hay khng. i vi d liu
kiu s Fuzz quy nh sai s trong php so snh

Hm

C php

Gii thch

Atom

(Atom Item.)

Tr v gi tr Nil nu Item l list

Listp

(Listp Item)

Tr v T nu Item l danh sch hoc gi tr Nill

Numberp

(numberp Item)

Tr v T nu gi tr l s nguyn

Minusp

(minusp Item)

Tr v T nu gi tr l s m

Zerop

(Zerop Item)

Tr v T nu d liu =0 or 0.0

Null

(Null Item)

Kim tra mt bin c rng hay ko

Type

(Type Item)

Tr v kiu d liu ca bin

8.2. Hm If v Progn

NG

H
G
N

IN

T
G
N

H
T

Cu trc r nhnh vi If
C php :
(If LogicExpr ThenExpr)
(If LogicExpr ThenExpr ElseExpr)
Ch :
Hm If ch chp nhn mt biu thc ThenExpr v ElseExpr. Nu s dng nhiu hn mt
biu thc th phi s dng cu trc Progn
(Progn Expression .)
V d :
(DEFUN C:11 ()
(if (= (getvar "pickstyle") 0) (setvar "pickstyle" 1) (setvar "pickstyle" 0))
(PRINC)
)
Bi tp
Gii phng trnh bc nht
Nhp vo 2 im, kim tra xem chng c nm trong gii hn Limmax v Limmin hay
khng. Nu c hy a ra khong cch gia 2 im . S dng hm (Distance PT1
PT2).

KHO

8.3. Hm logic
(Setq A 10 b 20 c 30)
Hm

C php

V d

And

(And Expression .. )

Or

(or Expression .. )

Not

(Not Item)

Y
X
C

H
I

N
D

(And (> 10 0) (< 10 20)) tr v gi tr T

TR (Or (= A 10) (< b 0)) tr v git tr T


(Not nill) = T. (Not T) = nill

17

KS. GV. TRN ANH BNH

8.4. Hm Cond (Condition)


Hm if cho php ta r ti a 2 nhnh. Hm Cond gip ta r nhiu hn 2 nhnh. C php hm nh
sau :
(Cound

Y
X
C
H

(Test1 result1 )
(Test2 result2 )

(Testn resultn )

TIN
N

M)

N
D

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)
(setq j 1)
(Repeat 10
(setq i (+ 2 i)
(setq j (* 2 j)
) ; kt thc hm repeat
Lp 10 ln khi I = 10+2*10 = 30; j= 2^10.

KHO

NG

H
G
N

IN

T
G
N

H
T

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
D

9.2. Hm foreach
C php : (Foreach Name List Expr )
Hm Foreach duyt tng phn t trong danh sch LIST. Ti mi thi im, gi tr ca tng phn
t trong danh sch s c gn cho bin Name. Sau cc biu thc Expr s c nh gi tr.
V d :
(setq I 0)
(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

TR

Y
X
C

H
I

KS. GV. TRN ANH BNH


10. Tp hp cc i tng c chn
10.1.

Hm Ssget

N
D

Hm SSget
C php : (Ssget [Mode][PT1][PT2][PT-List][Filter-List])
Mode

IN
NT

None

<Point>
M

Y
X
C
HSdng mi phng php chn (hay dng)
Phng php chn

C php
(Ssget)

Chn i tng i qua im Point

(Ssget point)

Last: chn i tng c to ra cui cng

(Ssget l)

Previous

(ssget p)

Window

(Ssget W PT1 PT2)

Crossing window

(Ssget C PT1 PT2)

Fence

(Ssget F PT-list

WP

Window polygon

(ssget wp PT-list

CP

Crossing polygon

(ssget cp PT-list

IN(ssget x)

T
G
N

Setq PT1 (0 0 0) PT2 (4 0 0) PT3 (4 4 0)


PT4
(0 4 0))
H
T
(setq SS (ssget WP (list pt1 pt2H
pt3
pt4)))
NG
Bng Group code.
G
N
C
A
S dngKfilter
HO
X
V d :

All

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
C php : (SSlength ss)

Y
X
C

H
I

N
D

10.3.
SSName
C php : (Ssname ss index) : tr v tn ca i tng th index trong tp hp chn SS. (lu :
s u tin ca tp hp chn index=0).
V d xa phn t th nht ca danh sch chn
(command erase (Ssname SS 0) )
Hm EntGet (entity get)
C php : (ENTGET entname)
(SETQ DS (ENTGET (SSNAME SS DEM)))
(SETQ KDL (CDR (ASSOC 0 DS)))

TR

19

KS. GV. TRN ANH BNH


11. Lp trnh vi c s d liu ca AutoCAD.
11.1.
Ly Record d liu i tng
Hm EntGet (entity get)
C php : (ENTGET entname) : tr v danh sch biu din Record d liu ca i tng c m
l entname.

N
D

Y
X
C i tng
11.2.
Hiu chnh
record
H
Cc bc Ihiu
N chnh
T
To ra record mi cha cc field thay i bng hm Subst.
N
M
Thay th Record c ca i tng bng record mi bng hm Entmod.

Cp nht s thay i ca i tng ln mn hnh (thay cho lnh regen). S dng hm


EntUpd

Hm Subst
to ra mt record mi bng cch s i mt s phn t ca record c.
C php : (Subst new_Item Old_Item list)
Nu khng tm thy old_Item, hm s tr v danh sch ging danh sch ban u.
V d :
(Setq al (A 22 34 yes B 22))
(Subst 22 11 al) tr v A 11 34 yes B 22
(setq El ((-1.<entity name 2d3314>) (0.Line) (5. 20) (100. ACDB
entity) (67 . 0) (8 . 0) (100 . acdbline) (10 0 0 0) (11 5.0 5.0 0))
(setq el (subst (8 . Layer Dim) (8 . 0) EL))

IN

H
G
N

T
G
N

H
T

Hm Entmode
Hm entmode thay th record c trong c s d liu bng mt record mi.
C php : (Entmode Elist)
Elist l mt danh sch c dng mt record i tng trong m i tng nm group code -1.
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,,,

KHO

NG

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
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

N
D

X
12. Phn tch v d :
C

H
I
;*******************************************************************************

NG
;* TRAN ANH BINH CDC-HUCE
*

;*******************************************************************************
TR
(defun myerror (s)

; If an error (such as CTRL-C) occurs


; while this command is active...

20

KS. GV. TRN ANH BNH


(cond
((= s "quit / exit abort") (princ))
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
)
(setvar "cmdecho" CMD)
; Restore saved modes
(setvar "osmode" OSM)
(setq *error* OLDERR)
; Restore old *error* handler
(princ)

TIN
N

N
D

Y
X
C
H

)
;*******************************************************************************
(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)
(COMMAND "UCS" "W")
(SETQ LTH (SSLENGTH SS))
(SETQ DEM 0)
(WHILE (< DEM LTH)
(PROGN
(SETQ DS (ENTGET (SSNAME SS DEM)))
(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)))
)
)
(SETVAR "OSMODE" 0)
(SETQ PTI (POLAR PT GOCX 2))
(SETQ PT13I (POLAR PT13 GOCY 2)) ; tao ra mot diem moi
(SETQ PT14I (POLAR PT14 GOCY 2)) ; (polar PT angle distance)
(SETQ PT13N (INTERS PT PTI PT13 PT13I NIL)) ; nill thi cac duong thang se dc keo
dai,
(SETQ PT14N (INTERS PT PTI PT14 PT14I NIL)); kha nill thi se khong dc keo dai
(SETQ O13 (ASSOC 13 DS))
(SETQ O14 (ASSOC 14 DS))
(SETQ N13 (CONS 13 PT13N))
(SETQ N14 (CONS 14 PT14N))

IN

KHO

NG

H
G
N

TR

T
G
N

H
T

Y
X
C

H
I

N
D

21

KS. GV. TRN ANH BNH


(SETQ DS (SUBST N13 O13 DS))
(SETQ DS (SUBST N14 O14 DS))
(ENTMOD DS)
)

Y
X
C
H

)
(SETQ DEM (+ DEM 1))
)

TIN
N

N
D

)
(COMMAND "UCS" "P")
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(setq *error* OLDERR)
; Restore old *error* handler
(PRINC)
)
;******************************************************************************

IN

KHO

NG

H
G
N

TR

T
G
N

H
T

Y
X
C

H
I

N
D

22

KS. GV. TRN ANH BNH

IV.

Ngn ng lp trnh Visual Lisp

NG

D Basic
V. C bn v ngn ng lp trnh Visual
Y

X
C

VI. Lm quen vi VBA.


H
N
I
T
1. VBA
Projects
N

M Chng trnh VBA c t chc trong cc project, 1 Project l tp hp cc module: m, lp,


form

VBA Project c th c lu trong file bn v DWG (ch nhng) hoc c lu trong 1 file
ring (*.DVB)
2. To mi project

M VBA Manager,
Chn menu Tools/Macro/VBA Manager. Hoc trn command line, g lnh VBAMAN.

To mi VBA project
M VBA Manager, chn New, project mi s c tn l ACADProject.

i tn project.
Bn phi s dng VBA IDE, nhn Alt+F11, click phi chut vo tn project, nhn Rename

Lu ct (save) project
Project nhng c lu khi lu bn v
Project ko nhng phi lu qua VBA IDE (chc nng File/Save) hoc VBA Manager

IN

NG

H
G
N

T
G
N

H
T

Ti (load) 1 project c
Project nhng c load ngay khi bn m bn v cha n
Project khng nhng c lu li di dng file *.DVB, load project ny: trn ca s VBA
Manager, nhn nt Load.
Trn hp thoi OpenFile, chn file DVB can mo
xem ni dung cua Project, nhan Alt+F11 hoac dung lenh VBAIDE tren dong command-line

KHO

3. T chc cc project vi VBA Manager


Gii thiu chc nng cc nt trong hp thoi VBA Manager

TR

Y
X
C

H
I

N
D

4. Son tho project vi VBA IDE


23

KS. GV. TRN ANH BNH


Gii thiu cc ca s ca VBA IDE

TIN
N

N
D

Y
X
C
H

IN

NG

H
G
N

T
G
N

H
T

Ca s Project Manager
Objects (i tng)
Forms
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
Nhn nt [View object] m ca s UserForm
S dng Option Explicit

KHO

Thm cc ActiveX :

TR

Y
X
C

H
I

N
D

24

KS. GV. TRN ANH BNH

TIN
N

N
D

Y
X
C
H

S dng trnh son tho Code :


Editor.

Text

IN

5. Lm vic vi cc Macro

NG

H
G
N

T
G
N

H
T

m ca s Macro
Chn menu Tools/Macro/Macro.
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])

KHO

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

VII. Cn bn v VBA.

N
D

1. M hnh i tng ca AutoCAD.


Hu nh mi Server Activex Automation cung cp nhiu hn mt i tng cho cc client.
AutoCAD cung cp cho cc client Activex Automation khong 100 i tng, vi tng s 2500
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.
2. Object Hierarchy.
Gi thiu :

TR

Y
X
C

H
I

25

KS. GV. TRN ANH BNH

TIN
N

N
D

Y
X
C
H

IN

KHO

NG

H
G
N

TR

T
G
N

H
T

Y
X
C

H
I

N
D

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
ny cha nhiu loi d liu khc nhau, nhng chng c th c chng c tao ra bng cch s dng
cc k thut tng t nhau. Mi mt collection c mt method thm mt object vo collection. Hu
ht cc collections s dng Add method cho mc ch ny. V d, thm mt thc th ta s dng
method Add<Entityname>. For exam-ple, to add a line you would use the AddLine method.

N
D

Y
X
C(thuc tnh & phng thc).
H
4. Property & Method
IN cha nhiu thuc tnh v phng thc khc nhau.
Mi mt
TObject
N

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.
Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As Double
Dim LineObj as AcadLine
startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0
endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0
Set LineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)

TIN
G
truy cp i tng thng qua mt bin c khai
boN
trc. u tin ta phi khai bo bin

H
vi kiu tng ng, sau t bin ln cp trn
caT
i tng trong cy ph h.
V d : on code sau khai bo bin (moSpace)
GH thuc kiu AcadModelSpace v
N
gn bin ny cho lp modelN
space
G hin hnh:

C
Dim moSpaceO
AsA
AcadModelSpace
KH= ThisDrawing.ModelSpace
Set moSpace
The following statement then adds a line to the model space using the userdefined
variable:
Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As Double
Dim LineObj as AcadLine
startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0
endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0
Set LineObj = moSpace.AddLine(startPoint,endPoint)

Truy cp n Application Object


Bi v ThisDrawing object cung cp link ti Document object, bn cng c th tr dn ti th
mc gc ca cy ph h (Application object), Chng ta cng c th truy cp n Document object
trong object hierarchy thng qua ng dn vng. Document object c mt thuc tnh gi l
Application, n cung cp link ti Application object.
V d : ThisDrawing.Application.Update

Y
X
C

H
I

N
D

6. Truy cp n i tng Collection trong Object Hierarchy.


Hu ht cc collection objects c th c truy cp n trong Document object. Document object
cha thuc tnh cho mi i tng trong Collection objects. V d, V d sau nh ngha mt bin v
gn n cho tp hp i tng layer ca bn v hin hnh:

TR

Dim layerCollection as AcadLayers


Set layerCollection = ThisDrawing.Layers
Documents collection, MenuBar collection, and MenuGroups collection
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
tp hp i tng MenuGroups cho ng dng.

NG

D
Dim MenuGroupsCollection as AcadMenuGroups
Y

Set MenuGroupsCollectionX= ThisDrawing.Application.MenuGroups


C
vo
H
Thm mt i tng
Collection.
N
I
T
Dim
NnewLayer as AcadLayer

Set newLayer = ThisDrawing.Layers.Add("MyNewLayer")


M

Truy cp n mt i tng trong collection.

Truy cp n mt i tng thuc tp hp, s dng Item method. Ta c th s dng tn ca Item


hoc ch s (s th t ca Item) trong tp hp. Lu l Item method l method mc nh ca
collection. V d, 2 cch vit sau l nh nhau :
ThisDrawing.Layers.Item("ABC")
ThisDrawing.Layers("ABC")
Xo mt i tng khi Collection Object
S dng Delete method. V d, on m sau xo layer ABC:
Dim ABCLayer as AcadLayer
Set ABCLayer = ThisDrawing.Layers.Item("ABC")
ABCLayer.Delete

H
G
N

IN

T
G
N

H
T

7. Truy cp n Object Hierarchy bng VB, VBA trong cc mi trng khc.


Ta cng c th truy cp n Object Hierarchy ca cad bng cc ngn ng khc nh VB, VBA
trong Excel, Word,. Vic u tin ta phi Tham chiu n AutoCAD Type Library. lm vic ny
ta lm nh sau :
Chn References option t Project menu, hp thoi Reference dialog hin ln. Trong References
dialog box, chn Type library for AutoCAD, and then click OK.
Khi nim v Type library for AutoCAD. Cc i tng, thuc tnh v phng thc c a ra
bi k thut t ng ho i tng c cha mt type library. Mt type library l mt file hoc mt
phn ca file miu t kiu ca mt hoc nhiu i tng.Type libraries khng cha Object; chng
cha cc thng tin v Object. truy cp n type library, applications v browsers c th xc nh
c c trng ca tng object, nh l giao din ca i tng, tn v a ch ca tng thnh phn ca
dao din .Trc khi bn s dng, Bn phi tham chiu n type library. AutoCAD VBA s t tham
chiu n AutoCAD type library.i cc mi trng khc bn phi to tham chiu ti AutoCAD type
library, acax16enu.tlb. File ny mc nh nm trong th mc C:\program files\common files\autodesk
shared.
Tuy nhin, s tt hn nu bn add type library reference v nhng u im sau :
Chng trnh s chay nhanh hn, n nh hn.
Function, properties, methods c th c kim tra khi bn nh code.
Chc nng tm kim v th xung sau du chm ca cc i tng.

KHO

NG

Y
X
C

H
I
On Error Resume Next

Set acadApp = GetObject(, "AutoCAD.Application.16")


NG
If Err Then

Err.Clear
TR

Sub Ch2_ConnectToAcad()
Dim acadApp As AcadApplication

N
D

Set acadApp = CreateObject("AutoCAD.Application.16")


If Err Then

28

KS. GV. TRN ANH BNH


MsgBox Err.Description
Exit Sub

End If

N
D

End If
MsgBox "Now running " + acadApp.Name + " version " + acadApp.Version
End Sub

TIN
N

Y
X
C
H

Dim acadDoc As AcadDocument


Set acadDoc = acadApp.ActiveDocument

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.

IN

KHO

NG

H
G
N

TR

T
G
N

H
T

Y
X
C

H
I

N
D

29

KS. GV. TRN ANH BNH

CHNG 2 : LM VIC VI MI TRNG AUTOCAD


I.

M, ng v ghi li bn v

Y
X
C
H

N
D

1. M bn v.
m bn v, s dng phng thc Open method. S dng hm DIR ca Visual Basic kim
tra s tn ti ca bn v trc khi m.Bn cng c th thay i tn v ng dn ca bn v trong
ng dn mc nh ca AutoCAD (Mc Option ca CAD).

TIN
N

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.

IN

T
G
N

H
T

Sub Ch3_NewDrawing()
Dim docObj As AcadDocument
Set docObj = ThisDrawing.Application.Documents.Add
End Sub

KHO

NG

H
G
N

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
kim tra xem bn v c ghi hay cha, ta s dng hm Saved :
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
End Sub

N
D

Y
X
C
1. iu khin ca s AutoCAD.

H
Mc ch : Khi bn lm vic vi 1 ng dng khc, bn
I cn nhp s liu t ngi dng chng

hn. Bn cn thu nh hoc kim tra tnh trang ca ca


Gs AutoCAD.
N
S dng methods v properties c trong
Application object, bn c th thay i position, size v
R
visibility ca ca s AutoCAD. BnT
cng
c th s dng WindowState property minimize,
II.

iu khin ca s bn v

maximize v c th kim tra tnh trng hin ti ca ca s AutoCAD.

30

KS. GV. TRN ANH BNH


Cc thuc tnh ca Position v size ca Application window l WindowTop, WindowLeft,
Width, and Height properties

TIN
N

N
D

iu chnh ca s Autocad :
Sub Ch3_PositionApplicationWindow()
ThisDrawing.Application.WindowTop = 0
ThisDrawing.Application.WindowLeft = 0
ThisDrawing.Application.width = 400
ThisDrawing.Application.height = 400
End Sub

Y
X
C
H

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()
Dim CurrWindowState As Integer
Dim msg As String
CurrWindowState = ThisDrawing.Application.WindowState
msg = Choose(CurrWindowState, "normal","minimized", "maximized")
MsgBox "The application window is " + msg
End Sub

IN

KHO

NG

H
G
N

T
G
N

H
T

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
Maximize the active Document window
Sub Ch3_MaximizeDocumentWindow()
ThisDrawing.WindowState = acMax
End Sub

Minimize the active Document window


Sub Ch3_MinimizeDocumentWindow()
ThisDrawing.WindowState = acMin
End Sub

TR

Y
X
C

H
I

N
D

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
CurrWindowState = ThisDrawing.WindowState
msg = Choose(CurrWindowState, "normal","minimized", "maximized")
MsgBox "The document window is " + msg
End Sub

TIN
N

Y
X
C
H

N
D

3. iu khin s hin th bn trong ca s bn v.


Bn cng c th thay i s hin th bn trong ca s bn v bng cch s dng phng thc
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. .

TIN
G
Define a Zoom Window
N

H
S dng ZoomWindow or ZoomPickWindow method.
T
Sub Ch3_ZoomWindow()
H
NG
' ZoomWindow
G
MsgBox "Perform a ZoomWindow
N with:" & vbCrLf &"1.3, 7.8, 0" & vbCrLf & _
C
2.6, 0", , "ZoomWindow"
A
O
Dim point1(0
To 2) As Double
H
K

"13.7, -

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.

Y
X
C

H
I

S dng Snap, Grid Alignment


Cc iu khin Snap v Grid nm trong class Viewport.
Sub textsnap()
Dim Vp As AcadViewport
Set Vp = ThisDrawing.ActiveViewport
Vp.SnapOn = True Bt ch snap ln
Dim newBasePoint(0 To 1) As Double
newBasePoint(0) = 1: newBasePoint(1) = 1

TR

N
D

32

KS. GV. TRN ANH BNH


Vp.SnapBasePoint = newBasePoint ' Thay i gc ca snap
Dim Xspacing as Double, ySpacing as Double
xSpacing =20: ySpacing=20
VP.SetSnapSpacing(xspacing,ySpacing) ' Thay bc nhy ca chut
Dim rotationAngle As Double
rotationAngle = 0.575
Vp.SnapRotationAngle = totationangle ' Thay i gc quay ca Snap sang 30 o hay 0.575
radians
' reset the viewport
ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
End Sub

TIN
N

N
D

Y
X
C
H

Ch : Vi cc lnh hiu chnh cc active Object nh active layer, active linetype,


ActiveTextStyle, ta khng th dng phng thc update nh khi ta hiu chnh cc i tng thng
thng c. Thay i cc active object s khng c hin th ngay trn bn v. Mun quan st s
thay i ny, ta phi dng phng thc Regen li viewport nh sau : ThisDrawing.Regen
(acNameViewports)
Ring i vi
ActiveUCS hoc ActiveViewport ThisDrawing.ActiveViewport
ThisDrawing.ActiveViewport. Phng thc ny p dng c cho tt c cc active object.
Cc iu khin Grid cng tng t nh Snap.

IN

S dng Ortho Mode


ThisDrawing.ActiveViewport.OrthoOn = True

H
G
N

T
G
N

H
T

3. Ly v thit lp bin h thng trong Option.


Trong mc options c 9 Objects, mi mt object c trng cho mt tab ca Options dialog box.
Cc object ny cung cp ng dn ti tt c cc registry lu trong options trong Options dialog box.
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 :
Sub Ch2_PrefsSetCursor()
Dim acadPref As AcadPreferences
Set acadPref = ThisDrawing.Application.Preferences
acadPref.Display.CursorSize = 100
End Sub

KHO

IV.

NG

Y
X
C

H
I

N
D

S dng command line trong VBA


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

TR

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
D

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()
ThisDrawing.SendCommand "_Circle 2,2,0 4 "
ThisDrawing.SendCommand "_zoom a "
End Sub

TIN
N

M
V.

Y
X
C
H

Nhp d liu ngi dng


Cc iu khin nhp d liu ngi dng nm trong class Utility.

1. Nhp Chui
GetString method prompts cho php ngi dng nhp mt chui t bn dng lnh.
C php nh sau :
RetVal = UtilityObject.GetString(HasSpaces[, Prompt])
HasSpaces iu khin phm spaces khi bn nhp chui.
0 : Spaces Bar khng cho php (SPACEBAR s kt thc nhp chui)
1 : Chui nhp vo c th cha du cch (ENTER s kt thc nhp chui).
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).

IN

T
G
N

H
T

V d :
Sub Ch3_GetStringFromUser()
Dim retVal As String
retVal = ThisDrawing.Utility.GetString(1, vbCrLf & "Enter your name: ")
MsgBox "The name entered was: " & retVal
End Sub

KHO

NG

H
G
N

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
Dim prompt2 As String
prompt1 = vbCrLf & "Enter the start point of the line: "
prompt2 = vbCrLf & "Enter the end point of the line: "
'
Get the first point without entering a base point
startPnt = ThisDrawing.Utility.GetPoint(, prompt1)
' Use the point entered above as the base point
endPnt = ThisDrawing.Utility.GetPoint(startPnt, prompt2)
' Create a line using the two points entered
ThisDrawing.ModelSpace.AddLine startPnt, endPnt
ThisDrawing.Application.ZoomAll

TR

Y
X
C

H
I

N
D

34

KS. GV. TRN ANH BNH


End Sub
3. Nhp mt k t in hnh cho Option
GetKeyword Method prompts cho php ngi dng nhp mt k t in hnh t bn bn phm
cho mt mc la chn
C php nh sau :

N
D

Y
X
C
RetVal =
UtilityObject.GetKeyword([Prompt])
H
IN bt buc, l chui cha la chn s c a ra dng lnh vi mc ch thng
PromptT
khng
N
bo la
chn.
M
RetVal gi tr tr v, kiu chui.
V d :
Sub Ch3_KeyWord()
Dim keyWord As String
ThisDrawing.Utility.InitializeUserInput 1, "Line Circle Arc"
keyWord = ThisDrawing.Utility.GetKeyword(vbCrLf &
(Line/Circle/Arc): ")
MsgBox keyWord, , "GetKeyword Example"
End Sub

"Enter

an

option

IN

4. Nhp s thc, s nguyn.

T
G
N

H
T

The GetInteger Method


Phng thc GetInteger cho php ngi dung nhp vo mt s nguyn (gi tr nhp vo t
32,768 to +32,767).
C php nh sau :

NG

H
G
N

intUserIntegerInput = UtilityObject.GetInteger([Prompt])
V d :

KHO

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
D

Y
X
C

H
I
varUserCornerInput = UtilityObject.GetCorner(BasePoint
[,Prompt])

G
N DESCRIPTION
NAME
TYPE
TR

The GetCorner Method


Tr v im gc ca mt hnh ch nht
C Php nh sau :

BasePoint

Variant

Mng 3 gi tr kiu doubles m t im


gc ca hnh ch nht.
35

KS. GV. TRN ANH BNH


NAME

TYPE

Prompt

DESCRIPTION

String

Optional. A prompt for input.

Gi
NtrGtr v 3D

varUserCornerInput Variant

Y
X
The GetDistance Method
C nhp khong cch t ngi dng. Khc vi GetReal, GetDistance c
H
Phng thc
GetDistance
IN
th nhp N
vo T
mt s thc, s thc ny tng ng vi n v ang s dng, hoc ta cng c th pick 2
bn v. C php ca phng thc nh sau :
im trn
M

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

dblUserDist
anceInput

Double

Chui thng bo ti dng lnh

IN

T
G
N

H
T

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 )
Khi ta nhp khong cch bng cch pick 2 im, ti v tr con chut s xut hin dy thun. Mc
nh l ta 3D. C th dng l InitializeUserInput vi Bit code 16 chiu cc ta sang 2D.
AutoCAD s tnh khong cch 2 im khi chiu sang 2D.

H
G
N

NG

6. GetEntity Method,
A CGetSubEntity Method
O
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

Prompt

String

D liu truyn ra. L mt mng 3 phn t kiu double,


l ta im bn va pick trong h ta WCS.
Chui thng bo trn dng lnh

V d sau ly mt thc th bng cch pick i tng trn bn v:


Public Sub TestGetEntity()
Dim objEnt As AcadEntity
Dim varPick As Variant
On Error Resume Next

Y
X
C

H
I

N
D

With ThisDrawing.Utility
.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

TR

36

KS. GV. TRN ANH BNH


End If
.Prompt vbCr & "You picked a " & objEnt.ObjectName
.Prompt vbCrLf & "At " & varPick(0) & "," & varPick(1)
End With
End Sub
GetEntity tr v mt li nu gi tr nhp vo l null, nh khi bn pick khng trng mt thc th
ha no c, hoc khi bn n Enter m khng chn bt k mt thc th no

TIN
N

Y
X
C
H

N
D

The GetSubEntity Method


S dng GetSubEntity nhp mt thc th phc. Mt thc th phc l mt thc th cha nhiu
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


Cha ma trn chuyn i ca i tng va c chn.

Context

Variant

Output. Tr v mt mng kiu long integer cha


ObjectIds cho mi block cha, cha cc i tng c
chn, nu thc th l Bloock.

IN

T
G
N

H
T

H
G
Prompt
String
Chui
N thng bo tai dng lnh
G
N

C
Thc th va chn
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
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 :
Ch : Thc th nhp vo bng GetEntity hoc bng GetSubEntity c th l i tng n
(Invisible). V khi bn chn, thay v pick object bn c th nhp vo k t L (Last Object selection).
Last Object Selection c th b ng bng hay thuc layer va b tt i.

TR

Y
X
C

H
I

N
D

37

KS. GV. TRN ANH BNH

CHNG 3 : TO V SA CC THC TH HA

G
N

1. Xc nh i tng cha thc th.


D
Y
i tng ha c th c
to
trong ModelSpace collection, PaperSpace Collection v Block
object. to thm mt thc
CthX ha, ta dng phng thc Addxxx. V d, v mt ng thng

trong ModelSpace. H
TSetINlineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
N
M
Cch khc, khai bo bin :

B
I.

To i tng bn v

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)
NAME

TIN
G
N

Mng 3 phn tH
kiu
Double l ta 3D im u
ca ngH
thng
Ttrong h ta WCS
G
N
Mng 3 phn t kiu Double l ta 3D im u
G
N ca ng thng trong h ta WCS

DATA TYPE

StartPoint

Variant

EndPoint

Variant

A
O
H
K

DESCRIPTION

V polyline
Set LWPolylineObject = Object.AddLightWeightPolyline(Vertices)
NAME
Vertices

DATA TYPE
Variant

DESCRIPTION
Mt mng kiu doubles ch ra danh sch ta
cc im 2-D trong h ta WCS c dng nh sau
(i.e., p1x, p1y, p2x, p2y, etc.). Mng ny ti thiu phi
c 4 phn t (2 im).

N
D

Y
X
Ccao no , bn phi Set
Ch : Polyline khng bao cao Z. Nu bn mun v ti
mt
H
Elevation
I

NG

TR
38

KS. GV. TRN ANH BNH

TIN
N

TheMSpline Object

N
D

Y
X
C
H

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.

KHO

IN

NG

H
G
N

T
G
N

H
T

V cung trn (Arc)


Set ArcObject = Object.AddArc(CenterPoint, Radius, StartAngle, EndAngle)
NAME

DATA TYPE

DESCRIPTION

CenterPoint

Variant

Mng 3 phn t kiu Double l ta 3D tm


cung trn trong h ta WCS

Radius

Double

StartAngle

Double

Gc bt u ca cung trn (radians), l gc hp


vi trc X trong h ta WCS

EndAngle

Double

Gc kt thc ca cung trn (radians), l gc hp


vi trc X trong h ta WCS

Bn knh

TR

Y
X
C

H
I

N
D

39

KS. GV. TRN ANH BNH

TIN
N

TheMCircle Object

N
D

Y
X
C
H

Set CircleObject = Object.AddCircle(CenterPoint, Radius)


NAME

DATA TYPE

CenterPoint

Variant

Radius

Double

DESCRIPTION
Mng 3 phn t kiu Double l ta 3D tm
ng trn trong h ta WCS
Bn knh ng trn

IN

KHO

NG

H
G
N

T
G
N

H
T

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.

TR

Y
X
C

H
I

N
D

3. To cc khi c
40

KS. GV. TRN ANH BNH


The Solid Object
Set SolidObject = Object.AddSolid(Point1, Point2, Point3, Point4)

NGDESCRIPTION

NAME DATA TYPE


Point1

Y
X
C
H

Variant

Mng 3 phn t kiu Double l ta 3D im u, im


cui ca ng th nht trong h ta WCS.

TINVariant
N

M
Point2

Mng 3 phn t kiu Double l ta 3D im u, im


cui ca ng th hai trong h ta WCS.

Point3

Point4

Point 3

Point 1

Point 4

Point 2

4. To i tng hatch
The Hatch Object

TIN
G
N

DESCRIPTION
H
T

Set HatchObject = Object.AddHatch(PatternType, PatternName, Associativity)


NAME

DATA TYPE

PatternType

Long

PatternName

A
Associativity
O
H
K

NG
String

H
G
N

Boolean

Loi ca Pattern, c 3 gi tr c lit k bng


i.
Tn ca Hatch c nh ngha trong file *.pat.
True : associative hatch.
Flase : disassociative hatch.

Bng cc gi tr ca PatternType
CONSTANT

VALUE

DESCRIPTION

AcHatchPatternTypeUserDefined

Cho php nh ngha Pattern da


trn kiu Line hin.

AcHatchPatternTypePredefined

S dng tn pattern t nhng


Pattern nh ngha trc trong
file acad.pat.

AcHatchPatternTypeCustomDefined

S dng tn pattern t nhng


Pattern nh ngha trc trong
file acad.pat.

NG

D phng thc
Sau khi bn to Hatch object, bn phi xc nh boundary or loop bng cch s dng
Y

AppendOuterLoop. C th xc nh thm cc o nh bn trong min bn trong


X min ln bng cch s
sauC
:
dng phng thc AppendInnerLoop. Phng thc ny c c php nh
H
I

Object.AppendOuterLoop
loop
G
Object.AppendInnerLoop
loop
N

R
NAME DATA TYPE T
DESCRIPTION
Object

AcadHatch

i tng Hatch
41

KS. GV. TRN ANH BNH


NAME DATA TYPE
Loop

Array of
AcadEntity

IN
NT

DESCRIPTION
L mng thc th. Ch l cc thc th ny bt buc
phi to thnh chu trnh khp kn, nu khng Autocad s
bo li

N
D

Y
X
C
H

Outer

Inner

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

ObjectsArray

The Region Boolean

Array of Entity

DESCRIPTION

IN

H
G
N

Object.Boolean(Operation, Object1)
NG

A
DATA TYPE
O
H
K
Operation
AcBooleanType
NAME

T
G
N

H
T

L mng cc thc th. Ch l cc thc th ny


bt buc phi to thnh chu trnh khp kn, nu
khng Autocad s bo li.

DESCRIPTION

acUnion : ni 2 Region
acIntersection : ly phn giao nhau ca 2 Region
acSubtraction : ly phn khng giao nhau.

Region mi va to thnh s c gn cho bin Object.


II.

Thm Text vo bn v

1. To cc TextStyle
TextStyle nmt trong classe Textstyles collection.
Thm mt style dng phng thc ThisDrawing.TextStyles.Add (NameStyle). Bn cng c th
chnh s thuc tnh ca TextStyle. Cc thuc tnh gm :
FontFile
: File font.
BigFontFile
: Font shape.
Height
: Chiu cao ca font.
Width
: T l chiu rng ca ch.
ObliqueAngle
: Gc nghing ca ch.
TextGenerationFlag : Backward text, upside-down text, or both.

2. Chn Text vo bn v
The Text Object

TR

Y
X
C

H
I

N
D

Set TextObject = Object.AddText(TextString, InsertionPoint, Height)


42

KS. GV. TRN ANH BNH


NAME

DATA TYPE

TextString

String

InsertionPoint

Variant

Height

DESCRIPTION
Ni dung text

Y
X
C
H

N
D

Mng 3 phn t kiu Double l ta 3D im


chn Mtext trn bn v.

Double

Chiu cao ch (phi l mt s dng)

TIN
N
Set MTextObject = Object.AddMText(InsertionPoint, Width, TextString)

M
The MText Object

NAME

DATA TYPE

DESCRIPTION

InsertionPoint

Variant

Width

Double

Chiu rng ca Mtext

TextString

String

Ni dung text

Mng 3 phn t kiu Double l ta 3D im


chn Mtext trn bn v.

3. Chn cc k t c bit, cc k t Unicode.


The Specail characters
S dng %%nnn chn k t c bit. V d :
Dim percent as Long
percent = ASC("%")
TextString = chr(percent) + chr(percent) + "nnn"
Cc Code c bit nh sau
%%o Toggles overscore mode on and off
%%u Toggles underscore mode on and off
%%d Draws degree symbol
%%p Draws plus and minus tolerance symbol
%%c Draws diameter dimensioning symbol
%%% Draws single percent sign

KHO

NG

H
G
N

IN

T
G
N

H
T

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
Khi bn thay i mt thc th ha bng code, s thay i khng hin th ngay trn bn v
cho n khi bn s dng phng thc Update ca Object, hoc s dng phng thcRegen ca
Document Object. Trong mt s trng hp, AutoCAD s update trn bn v khi macro hoc program
ca bn hon thnh. Trong mc ny, ta thng xuyn s dng phng thc Update nh sau :
DrawingObject.Update
1. Cc php sa i c bn
Copying Objects

TR

Y
X
C

H
I

N
D

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


Set DrawingObject = DrawingObject.Copy
Deleting Objects

N
D

xa mt thc th ra khi bn v, ta dung phng thc Delete. Phng thc c c php nh

Y
X
Object.Delete
C

H tng t nh phng thc Delete. Nh phng thc ny ch p dng cho


Phng thc
Erase
N
I
T
selectionset
N groups. Bn khng th p dng n xa mt Object.

M Objects
Exploding
sau :

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 .
C php nh sau :

TIN
G
N

Tham s Highlighted kiu Boolean, Nhn gi tr


(True)
khi mun Object Highlight v (False)
H
T

nu mun i tng tr v trng thi bnh thng.


H
G
N
Mirroring Objects
G
N

C php nh sau : C
A
O
H
K Set DrawingObject = DrawingObject.Mirror(Point1, Point2)
Object.Highlight Highlighted

NAME DATA
TYPE

DESCRIPTION

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.

TR

Y
X
C

H
I

N
D

Moving Objects
44

KS. GV. TRN ANH BNH


DrawingObject.Move Point1, Point2

NG

Dt kiu Double l ta 3D im th nht ca


Point1 Variant
Mng 3Y
phn

Vector X
dch chuyn trong h ta WCS.
C

Point2 Variant
H Mng 3 phn t kiu Double l ta 3D im th hai ca
N
I
Vector dch chuyn trong h ta WCS.
T
N

M
NAME DATA
TYPE

DESCRIPTION

IN

Rotating Objects

H
G
N

T
G
N

H
T

DrawingObject.Rotate BasePoint, RotationAngle

NAME

NG

DATA
TYPE

AVariant
O
H
K

BasePoint

RotationAngle Double

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
Gc quay tnh bng radian.

Y
X
C

H
I

Scaling Objects

NAME

DESCRIPTION

DATA
TYPE

N
D

NG

DrawingObject.ScaleEntity
BasePoint, ScaleFactor
TR
DESCRIPTION

45

KS. GV. TRN ANH BNH


NAME
BasePoint

DATA
TYPE
Variant

DESCRIPTION

N
D

Mng 3 phn t kiu Double l ta 3D im tm


phng trong h ta WCS.

Y tr dng, l t l tng i kch thc ca hnh


Gi
X
C
H mi cho hnh c.

ScaleFactor Double

TIN
N

IN

G
N

2. Cc php bin i C
nng cao
A
Offsetting Objects
KHO

H
G
N

T
G
N

H
T

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.

Object Arrays

TR

Y
X
C

H
I

N
D

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


Creating a Polar Array of Objects
varObjectArray = DrawingObject.ArrayPolar (NumberofObjects,
ArrayCenter)

NG

D
Y

X
C
Long
H
NumberofObjects
TIN Double
AngleToFill
N

Variant
M ArrayCenter
NAME

DATA
TYPE

AngleToFill,

DESCRIPTION

S lng cc thc th phi ln hn 1.


Gi tr khc khng tnh bng radians.

Mng 3 phn t kiu Double l ta 3D im


tm array trong h ta WCS.

IN

NG

H
G
N

T
G
N

H
T

A
O
H
K varObjectArray = DrawingObject.ArrayRectangular (NumberOfRows,

Creating a Rectangular Array of Objects

NumberOfColumns, NumberOfLevels, DistBetweenRows, DistBetweenColumns,


DistBetweenLevels)
NAME

DATA
TYPE

DESCRIPTION

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


rectangular 3D array.

DistBetweenRows

DistBetweenColumns

N
Double
Khong cch gia cc dng. Gi tr nyD
dng
YNgc li,
th dng s m rng theo hng lnX
trn.
C
nu l gi tr m, dng s c
m rng xung di.

H
I
Nu bng khng, i
tng s c v ln trc thc

th gc.
G
N

Double
Khong cch gia cc ct Gi tr ny dng th
TRcts m rng theo hng sang tri. Ngc li, nu

l gi tr m, dng s c m rng sang phi. Nu


bng khng, i tng s c v ln trc thc th

47

KS. GV. TRN ANH BNH


NAME

DATA
TYPE

DESCRIPTION

NG

D Khong cch gia cc Level theo trc Z. Gi

gc.

Ytr ny dng th dng s m rng theo hng ln


X
C
trn. Ngc li, nu l gi tr m, dng s c m
H

DistBetweenLevels

IN
NT

Double

rng xung di. Nu bng khng, i tng s


c v ln trc thc th gc.

TIN
G
N
Nu bn lm vic trong 2D, tt nht bn t tham s NumberOfLevels
bng 1.

H
Transform Objects
T
H
G
Bn c th move, scale, hoc rotateN
mt object thng qua ma trn chuyn i 4 4 bng cch s
G
dng phng thc TransformBy.
C php ca phng thc nh sau :
N
C
A
anObj.TransformBy tMatrix
O
H
K
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)

TR

Y
X
C

H
I

N
D

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.
Coordinates property : Thay i tng nh ca mt polyline.
AddVertex method : Thm mt nh vo polyline.
S dng cc phng thc sau cp nht ch li lm v chiu rng ca mt polyline:
SetBulge : Thit lp cong ca polyline.
SetWidth : Thit lp b rng ca im u v im kt thc polyline.

N
D

Y
X
C
H

TIN
N

Edit
MSplines

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.
DeleteFitPoint : Xa mt fit point khi spline ti v tr Index.
GetFitPoint : Ly im fit point ca spline ti v tr Index.
Reverse : nghch o hng ca Spline.
SetControlPoint : Thit lp control point ca spline ti v tr index.
SetFitPoint : thit lp fit point ca spline ti v tr index.
SetWeight : Thit lp weight ca control point ti v tr index.
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.

IN

KHO

IV.

NG

H
G
N

T
G
N

H
T

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 :
Mt Block definition l mt kiu d liu tru tng nh ngha cc thc th ha nm
trong Block.
Mt Block reference (hay block insertion), l nhng v tr m ta chn Block vo bn v.
Thay i mt block definition tng ng vi vic tat hay i tt c cc block reference trn
bn v.
C 3 loi block :
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.

TR

Y
X
C

H
I

N
D

49

KS. GV. TRN ANH BNH


Externally referenced block : l kiu tham kho ngoi, bn c th chnh s chng

bng lnh REFEDIT.

Layout block : . cha dng hnh hc ca mt Layout object.

N
D

S dng thuc tnh IsLayout v IsXRef nhn dng kiu ca block definition. Nu c hai thuc
tnh trn u tr v gi tr False, th Block object s l simple block.

Y
X
C
H

Truy cp Block Objects

TIN
N

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 :

Dim objBlocks As AcadBlocks


Set objBlocks = ThisDrawing.Blocks
MsgBox "There are " & objBlocks.Count & " Block objects"

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
Set objBlock = ThisDrawing.Blocks.Item(Index)
Set objBlock = ThisDrawing.Blocks.Item(NameBlock)

Duyt qua cc Block Object ca Blocks Collection


Public Sub ListBlocks()
Dim objBlock As AcadBlock
Dim strBlockList As String

H
G
N

IN

T
G
N

H
T

NG

CIn ThisDrawing.Blocks
For Each objBlock
A= strBlockList
O
strBlockList
& vbCr & objBlock.Name
KH
strBlockList = "List of blocks: "

Next

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
InsertionPoint

DATA
TYPE

DESCRIPTION

Variant

Mng 2 phn t kiu doubles m t ta im


chn trong h ta WCS.

N
D

Y
X
C
AddXXX Methods

H
I vo Block object ging nh thm cc
ha
S dng phng thc AddXXX thm cc thc th

thc th vo bn v.
NG

CopyObject Method
TR
BlockName

String

Tn ca Block mi

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


varCopies = Owner.CopyObjects(Objects [, NewOwner] [, IdMap])
NAME
Owner

DATA TYPE

D
Y

Document, PaperSpace,
ModelSpace or Block
objects

X
C

Objects
Variant
H
N
I
T
N

NewOwner Variant
M

IdMap

Variant

NiGtng cha Object cn copy.


DESCRIPTION

Mng objects copy. Cc Object ny


phi thuc Owner object.
ch ti ca phng thc copy. Nu l
null th s Copy vo Owner object.
Xem IDPair objects.

i tn Block Object
i tn Block, bn gn mt chui mi cho thuc tnh Name. Khi thay i tn th tn ca cc
Block reference s t ng thay i theo.
Ch : Khi bn thay i Layout Block hoc khi bn thay i nhng Block khng c tn c th
(bt u bng du *) c th ph hng AutoCad.
Xa Block Object

TIN
G
Ch : Bn khng th xa Block khi :
N
Hmt
C BlockReference object tham chiu n n.T
Nu
BlockReference object tham chiu n
Block definition
block definition, bn khng th xa chng. Hxa
ny, bn phi s dng phng
G
N
thc Purge trong Document Object.
NGkhng cn thit phi xa n v thc cht AutoCAD khng lu tr
Khi n l mt Xref. Bn
cng

Xref trong bn v.
AC
O
KHMethod
The InsertBlock
BlockObject.Delete

Nh ni trn, mt BlockReference object c to ra khi :


Bn chn mt Block vo bn v t Block Definition
Bn chn mt block vo bn v t mt bn v khc ngoi a ca bn
Thao tc vi Block
The Item Method
S dng phng thc Item truy cp cng nh duyt qua cc i tng trong block definition
object. Phng thc c c php nh sau :
Set objEntity = BlockObject.Item(Index)
Index l v tr ca thc th trong trong Block. Item l phng thc mc nh ca BlockObject.
Set objEntity = BlockObject(Index)
The InsertBlock Method

N
D

Y
X
C

H
I
Set BlockReferenceObject = Object.InsertBlock(InsertionPoint,
BlockName, _

G
Xscale, Yscale,
NZScale, RotationAngle)

TR

S dng InsertBlock them mt BlockReference object vo bn v hoc vo mt Block lng.


C php nh sau :

NAME

DATA
TYPE

DESCRIPTION

51

KS. GV. TRN ANH BNH


NAME

DATA
TYPE

InsertionPoint

Variant

BlockName

N
D

Mng 3 phn t kiu Double l ta im chn vo


i tng (i tng c th l Block hay Document Object).

Y
ca Block object trong Blocks collection, hoc
X
C ngTn
dn v tn file ca bn v chn vo bn v hin hnh.

H
String

TIN
N

M
Xscale

DESCRIPTION

Double

L t l phng theo trc X, gi tr phi khc khng.


Nu nhn gi tr m th s ly i xng theo trc ti im
chn.

Yscale

Double

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.

TIN
G
Ging nh cc Object khc, bn s dng phng thc Delete
N xa block references. Phng

H
thc ch xa BlockReference object, khng xa Block T
definition object. C php nh sau :

BlockReferenceObject.Delete
GH
N
The Explode Method
NG

A C varArray = BlockReferenceObject.Explode
O
H
Ch : K
Deleting a Block Reference

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
FileName

DATA TYPE
String

SelectionSet SelectionSet
object

DESCRIPTION
Tn ca file s c ghi. Bn cng khng cn thit
phi ghi r c tn phn m rng ca file, phng thc s
s dng phn m rng l .dwg.

Y
X
C

H
I

N
D

selection set cha cc thc th cn ghi ra file.

Phng thc mc nh s dng im gc ca bn v mi l gc to WCS ca bn v hin


hnh. Bn c th sa li trc khi bn s dng Wblock bng cch sau :
Public Sub TestWBlock()
Dim objSS As AcadSelectionSet
Dim varBase As Variant

TR

52

KS. GV. TRN ANH BNH


Dim dblOrigin(2) As Double
Dim objEnt As AcadEntity
Dim strFilename As String

NG

Dyou only use as temporary storage and


'choose a selection set name
that
Y

'ensure that it does not


C Xcurrently exist
On Error Resume
Next

ThisDrawing.SelectionSets("TempSSet").Delete
IN H
T
objSS = ThisDrawing.SelectionSets.Add("TempSSet")
NSet
M
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
" WCS origin
dblOrigin(0) = 0: dblOrigin(1) = 0: dblOrigin(2) = 0
" move selection to the origin
For Each objEnt In objSS
objEnt.Move varBase, dblOrigin
Next

H
G
N

IN

T
G
N

H
T

G
N

" wblock selection


C to filename
A
ThisDrawing.Wblock
strFilename, objSS
KHO
" move selection back
For Each objEnt In objSS
objEnt.Move dblOrigin, varBase
Next

" clean up selection set


objSS.Delete
End Sub
Using MInsertBlock Objects
Set MInsertBlockObject = Object.AddMInsertBlock(InsertionPoint, BlockName, XScale,
YScale, ZScale, RotationAngle, Rows, Columns, RowSpacing, ColumnSpacing)
NAME

DATA
TYPE

InsertionPoint

Variant

BlockName

String

Xscale

Double

Yscale

Double

DESCRIPTION

N
D

Y
X
C collection, hoc
Tn ca Block object trong
Blocks
H
ng dn y ca bn v
cI sn trn a.

G phng X. Phi nhn gi tr khc 0.


T l phngN
theo

Gi tr m
s ly i xng theo phng X ti im chn.
TR
Ta im chn.

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


NAME
Zscale
RotationAngle

TIN
N

Columns
M
Rows

DATA
TYPE

DESCRIPTION

N
D

Double

T l phng theo phng Z. Phi nhn gi tr khc 0.


Gi tr m s ly i xng theo phng Z ti im chn.

Double

relative to the WCS X-axis,

Y
The rotation angle
X
C expressed
in radians.

H
Long

S dng, l s lng dng.

Long

S dng, l s lng ct.

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
purposes you can treat them as simple blocks. But sometimes you might also need to use external
references' special capabilities. This section explains the following Xref methods:

IN

Attaching and detaching


Loading and unloading
Binding

H
G
N

T
G
N

H
T

NG

C
Attaching External A
References
O
H
K
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.
Set ExternalReferenceObject = Object.AttachExternalReference(FileName, _
BlockName, InsertionPoint, Xscale, Yscale, Zscale, RotationAngle, Overlay)

Table 13-7 explains this method's parameters.

NAME

Table 13-7: AttachExternalReference Method Parameters


DATA DESCRIPTION
TYPE

FileName

String

BlockName

String

InsertionPoint Variant
Xscale

Double

Yscale

Double

N
D

The external AutoCAD drawing file's name. You must specify the .dwg
extension. Optionally, you can specify a path to the file. If you don't,
AutoCAD tries to find the file in the system search path.

Y
X
C

A name for the internal Block object that will


point to the external drawing file.
H
I
specifies
A three-element array of doubles
that
the 3D WCS coordinates where
G
the Xref will be inserted into
the Object.
N

A non-zero number
representing
the scaling factor for the Xref's X direction.
R
T
Negative numbers mirror the insertion on this axis.
A non-zero number representing the scaling factor for the Xref's Y direction.
54

KS. GV. TRN ANH BNH

NAME

Table 13-7: AttachExternalReference Method Parameters


DATA DESCRIPTION
TYPE

NG

Negative numbersD
mirror the insertion on this axis.
Y

Zscale
X number representing the scaling factor for the Xref's Z direction.
Double A non-zero
C

HNegative numbers mirror the insertion on this axis.


N
I
RotationAngle T
Double The rotation angle relative to the WCS X-axis, expressed in radians.
N
Overlay
M Boolean Controls how the Xref is attached. If True, the Xref is brought in as an overlay.

Overlay external references aren't visible if the current drawing is attached as


B
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.

The following example creates an Xref based on user input:


Detaching External References
You can detach an external reference from the current drawing using the Block object's Detach method.
It has this syntax:

IN

BlockObject.Detach

H
G
N

T
G
N

H
T

Note You detach an Xref's block definition, the method removes all associated ExternalReference
objects from the drawing too. This includes linetypes, textstyles, dimstyles, nested block
definitions, and layers.

KHO

NG

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.
Reloading External References
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
D

X
Binding External References
C

H
I to simple blocks. This operation
Use the Block object's Bind method to convert external references

NinGmuch the same way the InsertBlock method does


builds an internal copy of the external drawing file

to the external drawing database, Bind converts any


using an external filename. Instead of referring
R
T
former ExternalReference objects to simple block references. This method has the following syntax:
BlockObject.Reload

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
prefixes them to avoid collision with any other entry name in the current drawing. The prefix has the
form BlockName$X$EntryName, where

N
D

Y
X
C
H

BlockName is the block definition name for the current drawing's external reference
X is an automatically generated integer that makes the name unique in the current drawing
EntryName is the name of the symbol table entry in the externally referenced drawing file.

TIN
N
M
If Merge is set to True and an entry is already present in the current drawing, the method maps the
Note

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

IN

V.

Chn i tng

A
O
H
K
Thm mt Selectionset

NG

H
G
N

T
G
N

H
T

1. To Selectionset.
Selectionset nm trong class Selections collection.
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
D

Dim objSelection As AcadSelectionSet


Set objSelection = objSelections.Item(2)
Set objSelection = objSelections.Item("My SelectionSet")
Ch s ca Selection nm trong khong t 0 n (SelectionSets.Count 1). Trong Autocad
Selection collection th phng thc Item l phng thc mc nh. Do vy 2 v d trn c th vit
li nh sau :
Set objSelection = objSelections(2)
Set objSelection = objSelections("My SelectionSet")

TR

Y
X
C

H
I

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
SelectionSet ta dng phng thc SelectXXX. Ging nh trong AutoCAD, ta c VBA cho php ta
chn cc i tng theo : chn tng i tng (pick vo i tng), chn theo Window, theo fence (n
ch f, v chn 1 ng thng ct qua cc i tng c chn) hoc theo mt a gic (polygon).
The Select Method

TIN
N

Y
X
C
H

N
D

Phng thc Select cho php bn thm i tng vo selection set, ngoi ra n cng cho php
bn s dng Last SelectionSet. Phng thc c c php nh sau :
SelectionSetObject.Select Mode [, Point1, Point2] [, FilterCodes, FilterValues]

NAME

DATA
TYPE

DESCRIPTION

Mode

Long

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
thi vi nhau.

Kiu chn, c lit k bng di.

TIN
G
N cu trong mc sau.

FilterValues Variant
Dng lc thc th.
Nghin
H
T
H
NGcc kiu chn
Bng
G
N
CONSTANT CVALUE
DESCRIPTION
A
acSelectionSetWindow
0
Tt c cc thc th nm trong ca s c ch
KHO
ra bi im Point1 v Point2 c chn.
FilterCodes

Variant

Dng lc thc th. Nghin cu trong mc sau.

acSelectionSetCrossing

Tt c cc thc th nm trong hoc ct Window


c ch ra bi im Point1 v Point2 c chn.

acSelectionSetPrevious

Selection set gn nht s c chn. Point1 v


Point2 khng c s dng.

acSelectionSetLast

Thc th c to cui cng tnh n thi im


chn s c chn. Point1 v Point2 khng c
s dng.

acSelectionSetAll

Chn tt c cc thc th. Point1 v Point2


khng c s dng.

Lu l phng thc Select c th chn tt c cc thc th thuc tt c cc layer ngay c khi n


c ng bng hay c kha.
V d :
Public Sub TestSelectionSetFilter()
Dim objSS As AcadSelectionSet
Dim intCodes(0) As Integer
Dim varCodeValues(0) As Variant
Dim strName As String

TR

Y
X
C

H
I

N
D

On Error GoTo Done


57

KS. GV. TRN ANH BNH


With ThisDrawing.Utility
strName = .GetString(True, vbCr & "Layer name to filter: ")
If "" = strName Then Exit Sub

Y
X
C
H

N
D

" create a new selectionset


Set objSS = ThisDrawing.SelectionSets.Add("TestSelectionSetFilter")

TIN
" set the code for layer
N

M intCodes(0) = 8

" set the value specified by user


varCodeValues(0) = strName
" filter the objects
objSS.Select acSelectionSetAll, , , intCodes, varCodeValues
" highlight the selected entities
objSS.Highlight True

" dehighlight the entities


objSS.Highlight False
End With

HO
Done:K

NG

H
G
N

IN

T
G
N

H
T

" pause for the user


.Prompt vbCr & objSS.Count & " entities selected"
.GetString False, vbLf & "Enter to continue "

" 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
D

SelectionSet.SelectAtPoint Point [,FilterCodes, FilterValues]

Y
X
C mt im m

Point
Variant
Mng 3 phn t kiu Double
l
3
ta
H
I
thc th c chn i qua.
NG

The SelectByPolygon Method


TR
NAME DATA TYPE

DESCRIPTION

SelectionSetObject.SelectByPolygon Mode, Vertices [, FilterType, FilterData]


58

KS. GV. TRN ANH BNH


NAME DATA TYPE DESCRIPTION
Mode

Long

Kiu chn, c lit k bng di.

Vertices Variant

N
D

L mng mt chiu kiu double ch ra danh sch cc


im m a gic s i qua bao gm ta X, Y v Z trong
WCS c dng (i.e., p1x, p1y, p1z, p2x, p2y, p2z, etc.).

Y
X
C
H

TIN
N
CONSTANT
M
acSelectionSetFence

Bng gi tr Modes
VALUE
2

DESCRIPTION

Vertices s m t cc ng thng lin


tip nhau. Tt c cc thc th ct ng
thng ny u c chn. Vertices cha t
nht 2 im

acSelectionSetWindowPolygon 6

Vertices m t cc nh mt a gic.
Tt c cc thc th nm trong a gic ny
s c chn. Vertices cha t nht 3 im.

acSelectionSetCrossingPolygon 7

Vertices m t cc nh mt a gic.
Tt c cc thc th nm trong hoc ct qua
a gic ny s c chn. Vertices cha t
nht 3 im.

IN

Adding and Removing Items

H
G
N

T
G
N

H
T

SelectionSetObject.AddItem(Entities)

SelectionSetObject.RemoveItem(Entities)
NG

ADATA TYPE
O
H
Entities K Array of AcadEntity objects
NAME

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
D

Phng thc Erase xa tt c cc thc th nm trong SelectionSet object v xa khi bn v.


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.
3. Lc i tng trong selection set

Y
X
C

H
I

NG

Bn c th s dng 2 tham s FilterCodes


R and FilterValues c mt s iu kin lc. V d ta
T
ch chn cc i tng c mu, layer hay lintype, theo mun.

Selection Set Filters

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
Filter type

G
N

0
Object Type (String)
Dnh Line, Circle, Arc,
Y
Object Name
X(String)
C
Name (String) nh Layer 0.
8
Layer
H
IN
N60T Object Visibility (Integer). Gm 0 = visible, 1 = invisible.
2

62

Color Number (Integer) L mt s t 0 ti 256. Gi tr 0 :


BYBLOCK. Gi tr 256 l BYLAYER. Gi tr m l layer tt.

67

Ch s Model/paper space (Integer). Gi tr 0 hoc khng gn = model


space, 1 = paper space.

FilterValues l mt mng kiu variant, Mi phn t ca mng FilterValues phi tng ng vi


mt phn t ca mng FilterCodes. Do vy hai mng ny phi c cng chiu di.
V d :
FilterType(0) = 0
FilterData(0) = "Circle"

IN

T
G
N

H
T

Sub Ch4_FilterMtext()
Dim sstext As AcadSelectionSet
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
Set sstext = ThisDrawing.SelectionSets.Add("SS2")
FilterType(0) = 0
FilterData(0) = "Circle"
sstext.SelectOnScreen FilterType, FilterData
End Sub

KHO

NG

H
G
N

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"

"AND>"

One or more

"<OR"

"OR>"

One or more

"<XOR"

"XOR>"

Exactly two

"<NOT"

"NOT>"

Exactly one

V d :
Public Sub TestSelectionSetOperator()
Dim objSS As AcadSelectionSet
Dim intCodes() As Integer
Dim varCodeValues As Variant
Dim strName As String
On Error GoTo Done
With ThisDrawing.Utility

TR

Y
X
C

H
I

N
D

60

KS. GV. TRN ANH BNH


strName = .GetString(True, vbCr & "Layer name to exclude: ")
If "" = strName Then Exit Sub

N
D

" create a new selectionset


Set objSS = ThisDrawing.SelectionSets.Add("TestSelectionSetOperator")

Y
X
C
H

" using 9 filters


ReDim intCodes(9): ReDim varCodeValues(9)

INand values - indented for clarity


" setT
codes
N
intCodes(0) = -4:
varCodeValues(0) = "<and"
intCodes(1)
M
= -4:
varCodeValues(1) = "<or"

intCodes(2) = 0:
intCodes(3) = 0:
intCodes(4) = 0:
intCodes(5) = -4:
intCodes(6) = -4:
intCodes(7) = 8:
intCodes(8) = -4:
intCodes(9) = -4:

varCodeValues(2) = "line"
varCodeValues(3) = "arc"
varCodeValues(4) = "circle"
varCodeValues(5) = "or>"
varCodeValues(6) = "<not"
varCodeValues(7) = strName
varCodeValues(8) = "not>"
varCodeValues(9) = "and>"

" filter the objects


objSS.Select acSelectionSetAll, , , intCodes, varCodeValues
" highlight the selected entities
objSS.Highlight True

H
G
N

" pause for the user


.Prompt vbCr & objSS.Count & " entities selected"
.GetString False, vbLf & "Enter to continue "

NG

IN

T
G
N

H
T

" dehighlight the entities


objSS.Highlight False
End With

KHO

Done:
" if the selection was created, delete it
If Not objSS Is Nothing Then
objSS.Delete
End If
End Sub

VI.

Lm vic vi Group
Khi mt group c to, theo mc nh khi ta chn mt thc th trong group , tt c cc thc
th khc trong group s c chn. Nu bn mun chn tng thc th trong group, hy thay i
bin h thng PICKSTYLE nhn gi tr 0 (mc nh nhn gi tr 1)
1. To mt Group Object
Cc goup Object nm trong Group Collection, ta dng phng thc add thm mt Group
Object v Group Collection, c php nh sau :

Y
X
C
DESCRIPTION

H
I s c to
Tn ca
Group

G
N

Set GroupObject = GroupsCollection.Add(Name)


NAME

DATA TYPE

Name

String

N
D

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
D

Set objGroup = objGroups.Item(Index)


Set objGroup = objGroups.Item(NameGroup)

Y
X
C thc mc nh ca Group collection, do vy ta c th duyt qua cc
Phng thc item
l phng
H
Group Object nh
TINsau :
Public Sub ListGroups()
N

Dim objGroup As AcadGroup


M
Dim strGroupList As String

For Each objGroup In ThisDrawing.Groups


strGroupList = strGroupList & vbCr & objGroup.Name
Next
MsgBox strGroupList, vbOKOnly, "List of Groups"
End Sub
3. Thm bt thc th vo Group
Bn c tht thm hay bt thc th trong group bng phng thc AppendItem v RemoveItem

TIN
G
GroupObject.RemoveItem(Entities)
N

H
NAME
DATA TYPE
T DESCRIPTION
H
NG Mng cc thc th s bt ra khi group
Entities Array of AcadEntity objects
G
N
C
Ch : phng thc
A RemoveItem khng xa thc th khi bn v m ch xa lin kt thc th
O
H
vi group. K
GroupObject.AppendItem(Entities)

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
Thit lp hay ly cc thng s Color v Linetype ca layer.

N
D

Y
X
C

AutoCAD cung cp Layers collection cha tt c cc i


tng
Layer c trong bn v. Bn c
H
I
th to ra cc layer bng cc thn layer object vo Layers
collection.
Bn c th truy sut vo Layers collection bng
NGcch nh sau :

Dim objLayers As AcadLayers

R
T
Set objLayers = ThisDrawing.Layers
Lm vic vi 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


Dim objLayer As AcadLayer
Set objLayer = objLayers.Item(Index)
Set objLayer = objLayers.Item("Name of Layer")
Index l mt s integer i din cho v tr ca layer trong Layers collection. Name Layer l mt
chui, l tn ca Layer m ta mun truy cp n n. Nu bn s dng index th n phi nm trong
khong t 0 n ( Layers.Count 1).
Ging nh cc AutoCAD collections khc, Item l phng thc mc nh ca Layer collection.
C ngha l tn phng thc ny c th khng c vit vo nhng cad vn hiu l phng thc
Dim objLayer As AcadLayer

TIN
N

Y
X
C
H

N
D

Set objLayer = objLayers(index)


Set objLayer = objLayers("Name of Layer")
Duyt qua cc Layers trong Layer Collection
S dng For Each loop duyt qua cc layer trong Layer Collection:
Public Sub ListLayers()
Dim objLayer As AcadLayer
For Each objLayer In ThisDrawing.Layers
Debug.Print objLayer.Name
Next
End Sub
Ngoi ra ta c th duyt qua cc Layer thng qua ch s Index. S dng thuc tnh
objLayers.Count 1 nh sau :
Public Sub ListLayersManually()
Dim objLayers As AcadLayers
Dim objLayer As AcadLayer
Dim intI As Integer
Set objLayers = ThisDrawing.Layers

IN

KHO

NG

H
G
N

T
G
N

H
T

For intI = 0 To objLayers.Count - 1


Set objLayer = objLayers(intI)
Debug.Print objLayer.name
Next
End Sub
Kim tra s tn ti ca mt Layer
Public Sub CheckForLayerByIteration()
Dim objLayer As AcadLayer
Dim strLayerName As String
strLayername = InputBox("Enter a Layer name to search for: ")
If "" = strLayername Then Exit Sub ' exit if no name entered

X
For Each objLayer In ThisDrawing.Layers ' iterate layersC
H
If 0 = StrComp(objLayer.name, strLayername, vbTextCompare)
Then
I

MsgBox "Layer '" & strLayername & "'


Gafterexists"
Exit Sub
'N
exit
finding layer

End If
TR

N
D

Next objLayer
MsgBox "Layer '" & strLayername & "' does not exist"

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()
Dim strLayerName As String
Dim objLayer As AcadLayer

N
D

Y
X
C
strLayerName =
InputBox("Enter
a Layer name to search for: ")
H
If "" = strLayerName
Then Exit Sub ' exit if no name entered
TIN
N

' handle exceptions inline


M On Error Resume Next
Set objLayer = ThisDrawing.Layers(strLayerName)

If objLayer Is Nothing Then


' check if obj has been set
MsgBox "Layer '" & strLayerName & "' does not exist"
Else
MsgBox "Layer '" & objLayer.Name & "' exists"
End If
End Sub
Creating a New Layer

TIN
G
Set LayerObject = LayerCollection.Add(LayerName)
N

H
T
H
NAME DATA TYPE
DESCRIPTION
NG
G
LayerName
String N Nu bn Add mt Layer c tn trng vi Layer
A C c sn. AutoCAD s sinh ra mt li.
O
H
K
Public Sub AddLayer()

to mi mt Layer, ta s dng phng thc Add trong Layer Collection nh sau :

Dim strLayerName As String


Dim objLayer As AcadLayer
strLayerName = InputBox("Name of Layer to add: ")
If "" = strLayerName Then Exit Sub
' exit if no name entered
On Error Resume Next
' handle exceptions inline
'check to see if layer already exists
Set objLayer = ThisDrawing.Layers(strLayerName)
If objLayer Is Nothing Then
Set objLayer = ThisDrawing.Layers.Add(strLayerName)
If objLayer Is Nothing Then ' check if obj has been set
MsgBox "Unable to Add '" & strLayerName & "'"
Else
MsgBox "Added Layer '" & objLayer.Name & "'"
End If
Else
MsgBox "Layer already existed"
End If
End Sub

TR

Y
X
C

H
I

N
D

Chuyn Layer thnh Layer hin hnh.


64

KS. GV. TRN ANH BNH


C php nh sau :
DocumentObject.ActiveLayer = LayerObject

N
D

V d : ThisDrawing.ActiveLayer = ThisDrawing.Layers("Walls")
ly Layer hin hnh nh sau :

Y
X
ThisDrawing.ActiveLayer.Name
C

V d : If ThisDrawing.ActiveLayer.Name
= "Walls" Then ...
IN H
T
Turning
a Layer On/Off
N
M
LayerObject.LayerOn = blnLayerOn
B
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
Kim tra tnh trang ng bng ca Layer :

IN

T
G
N

H
T

If objLayer.Freeze Then ... 'Thi hnh nu layer ng bng


Thuc tnh Locking/Unlocking ca Layer

H
G
N

Bn khng th chn cc thc th b kha bng chnh s. Tuy nhin, in\ tng vn hin
th nu layer khng b ng bng, v bn vn c th s dng cc phng thc truy bt im vi chng.
Trong lc layer b kha, bn vn c th thm cc thc th ha vo ayer .

KHO

NG

objLayer.Lock = False : Unlock


objLayer.Lock = False : Lock

Kim tra tnh trng ca Layer :


If objLayer.Lock Then ... ' Thi hnnh nu layer ang b kha.
Thit lp ch in cho Layer (Plottable or Not)
C php nh sau :
objlayer.Plottable = False : Khng in khi bn thc hin lnh in
objlayer.Plottable = False : S in khi bn thc hin lnh in
Ch : Mt s Layer to bi ACIS hoc ShapeManager solid-modeling engine nh layer
DEFPOINTS s lun lun khng c in ra.
i tn cho Layer (Plottable or Not)
C php nh sau :
Deleting a Layer
C php :

Y
X
C
objLayer.Name = strLayerName

H
I

NG

TRLayerObject.Delete

N
D

Phng thc Layer.Delete xa mt i tng Layer object ra khi Layers collection. Trong mt
s trng hp sau, layer s khng c xa :
65

KS. GV. TRN ANH BNH

L layer hin hnh.


L layer "0" (zero).
L layer c cha thc th.
L mt Xref-dependent layer.
Nu bn c tnh xa n, Autocad s sinh ra mt li.

Y
X
C
H

N
D

Ly Handle ca mt Layer

TIN
N

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
Handle nh sau :
Dim objLayer As AcadLayer
Dim strLayerHandle As String
Set objLayer = ThisDrawing.Layers("0")
strLayerHandle = objLayer.Handle
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

IN

T
G
N

H
T

Mi layer c thuc tnh Color cung cp mu cho tt c cc thc th c v trong layer nu


thuc tnh Color c thit lp l ByLayer. Mc nh, mu ca mt layer mis l trng hoc en ty
thuc vo mu nn ca AutoCAD. Ta c th gn gi tr mu ca Layer t 0 n 256. 9 trong s 9
c lit k trong AutoCAD VBA constant nh sau:

H
G
NobjLayer.Color = acRed

HO
K
acByBlock

G
N

Table
C 6-2: AutoCAD-Defined Color Constants

CONSTANT COLOR INDEX COLOR


0

ByBlock

acRed

Red

acYellow

Yellow

acGreen

Green

acCyan

Cyan

acBlue

Blue

acMagenta

Magenta

acWhite

acByLayer

256

White/Black (depending on the screen


background color)
ByLayer

Ly gi tri mu ca mt layer :

N
D

Y
X
Cnh sau : objLayer.Color =
Tng t bn c th thay i mu ca tng thc th vi c
php
H
acColor
I

Layer Linetypes
NG

Mi Layer c mt thuc tnh T


Linetype.
R Mc nh kiu nt ca cc i tng c v trong layer
intColor = objLayer.Color

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


Mc nh, kiu ng ca mt layer mi l Continuous, tc l mt solid line. Bn c th thay i
chng da trn thuc tnh Layer.Linetype
V d nh sau :
Public Sub Layer0Linetype()
Dim objLayer As AcadLayer
Dim strLayerLinetype As String

Y
X
C
H

N
D

objLayer = ThisDrawing.Layers("0")
TINSet
objLayer.Linetype = "Continuous"
N

strLayerLinetype = objLayer.Linetype
M
End Sub

Lu , khi ta s dng Linetype, bn phi m bo rng Linetypes m bn s dng c Load


vo trong bn v.
Layer Lineweights
C php ca thuc tnh nh sau : objLayer.Lineweight
2. S dng linetype
Trong phn ny chng ta s nghin cu nhng mc sau :
Truy cp Linetype collection v Linetype object.
Kim tra s tn ti ca mt linetype.
Ti mt linetype vo trong bn v v chuyn mt Linetype thnh dng ng hin hnh.
i tn v xa mt dng ng.
Thit lp v ly cc thng s v linetype's scale v description.

IN

H
G
N

T
G
N

H
T

NG

C
DimA
objLinetypes
As AcadLineTypes
O
H
Set
objLinetypes
=
ThisDrawing.Linetypes
K
tham chiu n mt i tng LineTypeTo c sn, s dng phng thc Item:

Truy cp Linetypes trong VBA

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
D

Y
X
C

H
For Each objLinetype In ThisDrawing.Linetypes
I

G
If 0 = StrComp(objLinetype.Name,N
strLinetypeName,
vbTextCompare) Then

MsgBox "Linetype '" & strLinetypeName


&
"'
exists"
Exit Sub
TR ' exit after finding linetype
strLinetypeName = InputBox("Enter a Linetype name to search for: ")
If "" = strLinetypeName Then Exit Sub
' exit if no name entered

End If
Next objLinetype

67

KS. GV. TRN ANH BNH


MsgBox "Linetype '" & strLinetypeName & "' does not exist"
End Sub

N
D

Ngoi ra ta c th by li kim tra s tn ti ca mt LineType :

Y
X
C
H

Public Sub CheckForLinetypeByException()


Dim strLinetypeName As String
Dim objLinetype As AcadLineType

TIN
N

M strLinetypeName = InputBox("Enter a Linetype name to search for: ")

If "" = strLinetypeName Then Exit Sub ' exit if no name entered

On Error Resume Next


' handle exceptions inline
Set objLinetype = ThisDrawing.Linetypes(strLinetypeName)
If objLinetype Is Nothing Then ' check if obj has been set
MsgBox "Linetype '" & strLinetypeName & "' does not exist"
Else
MsgBox "Linetype '" & objLinetype.Name & "' exists"
End If
nd Sub
Ti mt Linetype vo trong bn v

IN

T
G
N

H
T

H
G
Set LinetypeObject = LinetypesCollection.Load(LinetypeName,
LinetypeFilename)
N
G
N

NAME
DATA
TYPE
DESCRIPTION
C
A
LineTypeName O
String
Tn ca linetype
H
K
LinetypeFilename
String
ng dn ca file cha LineType cn Load

C php Load lintype nh sau :

V d : ThisDrawing.Linetypes.Load Hidden, "acad.lin"


Chuyn Linetype thnh dng ng hin hnh
S dng phng thc ActiveLinetype nh sau :
DocumentObject.ActiveLinetype = LinetypeObject
V d sau bin dng ng "TRACKS" thnh dng ng hin thnh ca bn v hin hnh :
ThisDrawing.ActiveLinetype = ThisDrawing.Linetypes("TRACKS")
i tn Linetype

N
D

S dng thuc tnh Linetype.Name property, bn c th thay i tn ca mt dng ng.

Y
X
C

H
LinetypeObject.Delete
I

Ta khng th xa mt dng ng ra khi bnG


v khi :
N
N l linetype hin hnh.

R linetype.
N l ByLayer, ByBlock, or T
Continuous

Deleting a Linetype

Phng thc Linetype.Delete cho php bn xa mt i tng Linetype t Linetypes collection.

N l mt Xref-dependent linetype.

Ly Hanhdle ca Linetype
68

KS. GV. TRN ANH BNH


Dim objLinetype As AcadLinetype
Dim strLinetypeHandle As String

N
D

Set objLinetype = ThisDrawing.Linetypes("Center")


strLinetypeHandle = objLinetype.Handle

Y
X
C
H

Thay i Description ca Linetype.

TIN
N

AutoCAD Cho php bn read, add hoc modify description ca LineType bng cch s dng
phng thc Description ca Linetype object.
Dim strLineTypeDescription As String
objLineType.Description = "Linetype Description: -.-.-."
strLineTypeDescription = objLineType.Description
The following example changes a Linetype description based on user input:
Scaling Linetypes
Bn c th s dng hai loi t l phng : global linetype scale (LTSCALE) v individual
linetype scale (CELTSCALE).

IN

NG

Global Scale

H
G
N

T
G
N

H
T

DimA
dblNewLTScale As Double
O
H
"LTSCALE", 2#
K ThisDrawing.SetVariable
dblNewLTScale = ThisDrawing.GetVariable("LTSCALE")

Individual Scale
Dim dblNewCELTScale As Double
ThisDrawing.SetVariable "CELTSCALE", 2#
dblNewCELTScale = ThisDrawing.GetVariable("CELTSCALE")
3. Gn layer, color, linetype cho i tng
S dng cc thuc tnh sau :
Object.Layer
Object.Color
Object.LineType
VIII. Lm vic vi kch thc
1. Lm vic vi DimStyle

N
D

Y
X
C

DimStyle object thit lp s xut hin ca mt nhm ccIkch


thc v cc leader. Cc DimStyle
H
objects nm trong DimStyles collection, do vy chng
ta
c th truy cp n n thng qua phng
G
thc Item ca DimStyles collection's.
N

to mt DimStyle, chng ta s dng


phng thc Add nh sau :

TR

Thm mt DimStyle Object.

Set DimStyleObject = DimStylesCollection.Add(DimStyleName)

69

KS. GV. TRN ANH BNH


NAME

DATA TYPE

DimStyleName

String

NG

DESCRIPTION
Tn ca DimStyle

D
Y

V d :

X
C
Style
Thit lp mt Dimension
H
IN
N
thitT
lp mt DimStyle trong VBA, bn phi nm vng tt c cc bin h thng m thng qua
bn
c th iu khin tt c cc TAB trong Dimension Style.
nM
Dim objDimStyle As AcadDimStyle
Set objDimStyle = ThisDrawing.DimStyles.Add("NewDimStyle")

Phng thc CopyFrom.

Bn c th s dng phng thc CopyFrom copy mt DimStyle object, c php nh sau :


DimStyleObject.CopyFrom SourceObject
Thng s SourceObject l i tng DimStyle object c copy. Kiu Copy ph thuc vo
ngunc Copy m bn s dng c lit k ra trong bng di y :
OBJECT

STYLES COPIED

Dimension, Tolerance,
Leader
Document
DimStyle

A
O
H
K

VBA s copy tt c cc d liu v Dimension style ca


kch thc, dung sai, du dn, k c cc d liu ghi
(override) c trong cc dimension ny voDimStyleObject

TIN
G
N ca Dimension style
Copy Dimension style v
override
H
hin hnh ca bn v c
ch
nh
trong Document
T

Copy Dimension
GH style ca bn v hin hnh c ch
N
nhG
trong DimStyle
N

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.
Public Sub NewDimStyle
Dim objDimStyle As AcadDimStyle
Set objDimStyle = ThisDrawing.DimStyles.Add("NewDimStyle")
SetVariable "DIMCLRD", acRed
SetVariable "DIMCLRE", acBlue
SetVariable "DIMCLRT", acWhite
SetVariable "DIMLWD ", acLnWtByLwDefault
objDimStyle.CopyFrom ThisDrawing
End Sub
Gii thch nh sau : khi thay i cc thng s h thng ca Dimension style, Cad s to ra mt
kiu kch thc ghi (override) da trn kiu kch thc hin hnh. on m
objDimStyle.CopyFrom ThisDrawing s copy ton b thit lp ca Dimstyle hin hnh v override
ca n vo NewDimStyle

Y
X
C

H
Gn mt Dimstyle cho mt Dimension (mt bin kch
Ithc)

Object.StyleName
NG = DimStyleName

NAME
DATA TYPE
DESCRIPTION
TR

N
D

S dng Dimension Style

Object

Dimension, Leader, or
Tolerance object

L object m bn mun p t Dimstyle


cho n.
70

KS. GV. TRN ANH BNH


NAME
DimStyleName

DATA TYPE
String

DESCRIPTION
Tn ca Dimstyle

N
D

Y
X
C thnh DimStyle hin hnh, bn s dng phng thc ActiveDimStyle
chuyn mt DimStyle

H
nh sau :
TIN Set DocumentObject.ActiveDimStyle = DimStyleObject
N

M
Chuyn mt DimStyle thn Dimstyle hin hnh

NAME

DATA TYPE

DimStyleObject

DESCRIPTION

DimStyle object

L bin kiu Dimstyle m bn mun chuyn n


thnh Dimstyle hin hnh.
V d sau hin th kiu kch thc hin hnh ca bn v hin hnh.
Msgbox Kiu kch thc hin hnh : & ThisDrawing.ActiveDimStyle.Name
Dim objDimStyle As AcadDimStyle
Duyt qua cc Dimstyle c trong bn v hin hnh.
For Each objDimStyle In ThisDrawing.DimStyles
Msgbox objDimStyle.Name
Next

IN

2. To cc ng o kch thc
To cc Dimensions

H
G
N

T
G
N

H
T

Cng nh cc thc th ha khc, to mt ng o kch thc, ta s dng phng thc


AddDimXXX. Phng thc ny c th p dng trong ModelSpace, PaperSpace v Block objects.
Trong mc ny, chng ta s nghin cu cc loi kch thc sau :
Dim3PointAngular Object
DimAligned Object
DimAngular Object
DimDiametric Object
DimOrdinate Object
DimRadial Object
DimRotated Object

KHO

NG

Dim3PointAngular Object
Set Dim3PointAngularObject = Object.AddDim3PointAngular(VertexPoint, Point1,
Point2, TextPosition)
NAME

DATA
TYPE

VertexPoint

Variant

Point1

Variant

Point2

Variant

TextPosition

Variant

DESCRIPTION
VertexPoint l mng 3 phn t kiu Double m t ta
mt nh ca gc cn o trong h ta WCS.

D
Point1 l mng 3 phn t kiu Double m tY
ta mt

X
trong 2 im cui trong h ta WCS.C
m t ta mt
HDouble
Point2 l mng 3 phn t Ikiu

ta WCS.
trong 2 im cui trong h
G
N
TextPosition
l mng 3 phn t kiu Double m t ta

v
TtrRm Text (gc o c) s hin th h ta WCS.

71

KS. GV. TRN ANH BNH

TIN
N

Y
X
C
H

N
D

DimAligned Object
Set DimAlignedObject = Object.AddDimAligned(Point1, Point2, TextPosition)
NAME
Point1

DATA
TYPE

DESCRIPTION

Variant

Point1 l mng ta 3 phn t kiu Double m t ta


mt trong 2 im cui trong h ta WCS.

TIN
G
N

TextPosition Variant
TextPosition l mng
3 phn t kiu Double m t ta
H
v tr m Text
s
hinT th h ta WCS.
H
NG
G
N
C
A
O
H
K
Point2

Variant

Point2 l mng 3 phn t kiu Double m t ta


mt trong 2 im cui trong h ta WCS.

DimAngular Object
Set DimAngularObject = Object.AddDimAngular(Vertex, Point1, Point2, TextPosition)
NAME

DATA
TYPE

Vertex

Variant

Point1

Variant

Point2

Variant

DESCRIPTION

N
D

Y
X
C

H
Point1 l mng 3 phn
It kiu Double m t ta

mt trong 2 im cui
NGtrong h ta WCS.

Point2 l mng 3 phn t kiu Double m t ta


TR

VertexPoint l mng 3 phn t kiu Double m t ta


mt nh ca gc cn o trong h ta WCS.

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


NAME

DATA
TYPE

DESCRIPTION

N
D

v tr m Text (gc o c) s hin th h ta WCS.

TIN
N

Y
X
C
H

DimDiametric Object
DimDiametricObject = Object.AddDimDiametric (ChordPoint1, ChordPoint2,
LeaderLength)

IN

NAME

DATA
TYPE

ChordPoint1

Variant

Variant
AC
O
KH

ChordPoint2

LeaderLength Double

GH
N
G
N

T
G
N
DESCRIPTION

H
T

ChordPoint1 l mng 3 phn t kiu Double m t ta


mt trong 2 im cui ca dy cung trong h ta WCS.
ChordPoint2 l mng 3 phn t kiu Double m t ta
mt trong 2 im cui ca dy cung trong h ta WCS.

Khong cch t im cui ca dy cung ChordPoint1


ti v tr ca gi tr Text o c.

N
D

Y
X
C

DimOrdinate Object
H
I

Set DimOrdinateObject = Object.AddDimOrdinate(DefinitionPoint,


LeaderEndPoint,
G
N
UseXAxis)

R
T
NAME

DATA
TYPE

DESCRIPTION

73

KS. GV. TRN ANH BNH


NAME

DATA
TYPE

DefinitionPoint

Variant

DESCRIPTION

N
D

DefinitionPoint l mng 3 phn t kiu Double m


t ta trong h ta WCS.

YDefinitionPoint l mng 3 phn t kiu Double m


X
C t ta v tr ca Text trong h ta WCS.
H

LeaderEndPoint Variant

TIN
N

M
UseXAxis

Boolean

Xc nh DefinitionPoint c o theo phng trc


X hay trc Y. Nu gi tr ny l True th, trc X ch s
dng nh l mt tham chiu.

IN

DimRadial Object

NG

H
G
N

T
G
N

H
T

Set DimRadialObject = Object.AddDimRadial (CenterPoint, ChordPoint, LeaderLength)


NAME

KH

CenterPoint

ChordPoint

DATA
TYPE

OA

DESCRIPTION

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.

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

The DimRotated Object

TR

Y
X
C

H
I

N
D

Set DimRotatedObject = Object.AddDimRotated(Point1, Point2, DimLocationPoint,


RotationAngle)

74

KS. GV. TRN ANH BNH


NAME
Point1

DATA
TYPE
Variant

Point2

IN
NT

DESCRIPTION

N
D

Point1 l mng 3 phn t kiu Double m t ta


mt trong 2 im cui ca on thng trong h ta
WCS.

Y
X
C
Point2 l mng 3 phn t kiu Double m t ta
HVariant

M
DimLocationPoint

B
RotationAngle

mt trong 2 im cui ca on thng trong h ta


WCS.

Variant

DimLocationPoint l mng 3 phn t kiu Double


m t ta im m ti CAD s v ng thng
cha mi tn v Text trong h ta WCS.

Double

Gc hp bi ng ghi kch thc v trc X, n


vi Radian.

IN

KHO

3. To cc leader.

NG

H
G
N

TR

T
G
N

H
T

Y
X
C

H
I

N
D

75

KS. GV. TRN ANH BNH

CHNG 4 : TY BIN MENUS V TOOLBARS


I.

TIN
N

C bn v menu group v toolbar


Trong mc ny, chng ta s nghin cu nhng mc sau :
Load, save, v unload mt menu group
Gn cc phm tt (accelerator key)
Thao tc vi cc menu bar
To v chnh sa menu
To v chnh sa toolbar
Toolbar ng v chc nng Docking.

N
D

Y
X
C
H

IN

T
G
N

H
T

MenuGroups collection cha cc MenuGroup object, n cha tt c cc i tng thuc


ToolBars v PopupMenus collections. MenuBar collection s cha tt c PopupMenu object ang xut
hin trn AutoCAD menu bar.
1. Menugroup collection

H
G
N

G
N

Tt c cc menu c
Cload trong session hin tai ca AutoCAD c lu ct trong MenuGroup
A
collection. Cc menu
ny c th c hin th hoc khng c hin th trn menu bar ca Autocad.
HO
Kth
Ngi dng c
iu khin s hin th ca cc menu thng qua lnh MenuLoad trong Autocad. Mi
MenuGroups Collection

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
TYPE

MenuFileName String
BaseMenu

Boolean

DESCRIPTION
ng dn v tn File s c ti vo AutoCad.
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.

Y
X
C

H
I

N
D

S dng tham s BaseMenu vi gi tr True s tng ng vi vic thc hin lnh MENU
trong AutoCAD (hoc thi hnh lnh MENULOAD v check vo la chn Replace All). Ch
MenuGroup mi mi c Load v n s thay th tt c cc menu c trong AutoCad.
Nh mt la chn, s dng phng thc Load Vi tham s BaseMenu l False, tng ng vi bn thi
hnh lnh MENULOAD trong AutoCAD m khng check vo la chn. Replace All. Menu group c
ti thm vo AtutoCad.

Kiu ca Menu Groups

TR

76

KS. GV. TRN ANH BNH


ly thng s kiu ca menu groups c ti vo trong AutoCAD, bn c th s dng
thuc tnh Type cho mi MenuGroup object. C php nh sau :

N
D

lngMenuGroupType = MenuGroupObject.Type

Y Menu group l base menu group.


AcBaseMenuGroup C X0
1
H
AcPartialMenuGroup
Menu group l partial menu group.
IN
T
N

M
V d sau s lit k tt c cc menu group oc ti vo trong AutoCad v kiu ca chng:
CONSTANT

VALUE

DESCRIPTION

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"
End If
Next
MsgBox strMenuGroupNames
End Sub

IN

NG

H
G
N

T
G
N

H
T

Lu :
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.

KHO

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

X
MenuGroupObject.Save MenuFileType
C

H
MenuGroupObject.SaveAs FileName,
I MenuFileType

NGDESCRIPTION
DATA

TYPE
TR

Bn C hai phng thc ghi lai : Save v SaveAs.

NAME
MenuFileType

Long

N
D

Xc nh kiu file s c ghi : File ngun hoc file


c bin dch (chi tit bng di).
77

KS. GV. TRN ANH BNH


NAME

DATA
TYPE

FileName

String

DESCRIPTION

N
D

ng dn y v tn file s ghi li.

Yhng s AcMenuFileType
X
Cc
C
VALUE
CONSTANT
DESCRIPTION
H
N
I
T
acMenuFileCompiled 0
compiled menu file (.mnc extension)
N

source menu file (.mns extension)


M acMenuFileSource 1

Unloading Menu Groups


Tng ng vi lnh MENULOAD hoc MENUUNLOAD trong AutoCad :
MenuGroupObject.Unload
II.

Thay i menu bar


Bn c th : Thm, bt, sp xp li cc menu trn menu bar.
1. Chn thm menu vo menubar

TIN
G
PopupMenuObject.InsertInMenuBar(Index)
N

H
DESCRIPTION
T
H
NG
G
V N
tr m pop-up menu s c thm vo MenuBar. Index l

Phng thc InsertInMenuBar ca PopupMenu object.

NAME DATA
TYPE
Index

CInteger t 0 n N. N l s lng object trn menu bar, hoc


Akiu
O
KH kiu string l tn ca mt menu tn ti (bao gm c h t & ca
Variant

accelerator key), pop-up menu s c thm vo trc menu c tn


nh trong index. Nu menu trong index khng tn ti th mt menu
mi s c thm vo ti v tr cui cng ca menu bar.

InsertMenuInMenuBar method of a PopupMenus collection.


PopupMenusCollection.InsertMenuInMenuBar MenuName, Index
NAME

DATA
TYPE

DESCRIPTION

MenuName String

Tn ca menu s c thm vo menu bar.

Index

Ging nh trn.

Variant

N
D

2. Xo b menu trn menubar


Ging nh thm menu vo menu bar, bn cng c 2 cch xa menu khi chng :

Y
X
C

PopupMenuObject.RemoveFromMenuBar
H
I

Sub RemoveMenus()
G
Dim objMenu As AcadPopupMenu N
For Each objMenu In ThisDrawing.Application.MenuBar
R
T
If MsgBox("Remove " & objMenu.Name & "?", vbYesNo) = vbYes Then

Phng thc RemoveFromMenuBar

objMenu.RemoveFromMenuBar
78

KS. GV. TRN ANH BNH


Next
End Sub

NG

D DESCRIPTION

PopupMenusCollection.RemoveMenuFromMenuBar Index

Y
X
C
Index
VariantH Ging nh trong Phng thc InsertMenuInMenuBar.
TIN
N

M3. Sp xp li cc menu trn menubar


NAME DATA
TYPE

III. To v chnh sa Pull-down v Shorcut menus


1. To mi Pull-down menu

IN

H
G
N

T
G
N

H
T

Set PopupMenuObject = PopupMenusCollection.Add(MenuName)


NAME

NG

DATA TYPE

A
O
H
K

MenuName String

DESCRIPTION

Tn ca PopupMenu object

MenuName c th cha k t (&), dng dnh ngha accelerator key.


2. Chn mt menu Item vo Pull-down menu
Set PopupMenuItemObject = PopupMenuObject.AddMenuItem(Index, Label, Macro)
NAME DATA
TYPE

DESCRIPTION

Index

Variant

Ging nh trong Phng thc InsertMenuInMenuBar.

Label

String

Label ca menu item. Label c th cha ngn ng DIESEL.

Macro String

Macro s thc hin khi menu c click.

D
Set PopupMenuItemObject = PopupMenuObject.AddSeparator(Index)
Y
X
NAME DATA
DESCRIPTION C
H
TYPE
I

Index Variant
Ging nh trong Phng
G thc InsertMenuInMenuBar. Nu
N
bi tham s index khng tn ti, th khong
menu item c xc
nh
R
trng s cT
t
cui ca menu.

3. Chn mt khong trng vo Pull-down menu

Ch : Bn khng th thm khong trng vo u ca Popup menu.


79

KS. GV. TRN ANH BNH


4. Thm mt Menu Item vo Shortcut Menu
Gi tr ca thuc tnh ShortcutMenu ca PopupMenu object nhn gi tr True nu menu l shortcut
menu. T , bn c th them mt item vo trong shortcut menu nh i vi drop-down menu.

N
D

5. To Submenu cho menu item

Y
X
C
H
NAME DATA
TYPE
DESCRIPTION
N
I
T
Index
Variant
Ging nh trong Phng thc InsertMenuInMenuBar
N

M
String
Label ca menu item. Label c th cha ngn ng
Label

Set PopupMenuObject = PopupMenuObject.AddSubMenu(Index, Label)

DIESEL.

6. Xa bt menu item
S dng phng thc Delete nh sau :
PopupMenuItemObject.Delete
IV.

To v chnh sa Toolbars
1. To mi toolbar
Set ToolbarObject = ToolbarsCollection.Add(ToolbarName)
NAME

IN

T
G
N

H
T

DATA
TYPE

DESCRIPTION

H
G
2. Thm mt nt chn vo toolbarN
G
N
Mt Toolbar button c
i din bi ToolbarItem object. Bn c th s dng phng thc

AddToolbarButton method
thm mt Toolbar item vo mt v tr xc nh trn toolbar.
AC
O
H
KToolbarItemObject = ToolbarObject.AddToolbarButton(Index, ButtonName,
Set
ToolbarName String

Tn ca Toolbar object s c to

HelpString, Macro[, FlyoutButton])

NAME
Index

DATA
TYPE
Variant

ButtonName String

DESCRIPTION
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.
Tn ca toolbar button s c to. (ch chp nhn cc
k t : alphanumeric, dashes (-), v underscores (_)).

HelpString

String

L chui ch thch

Macro

String

Macro s thi hnh khi ta chn nut lnh.

FlyoutButton Boolean

Y
X
C

H
I

N
D

Nu thit lp l True th s to mt flyout button. Mc


nh l False.

Ch : Toolbar button cng ging nh menu item. Khi bn mun thay i ch s Index ca
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.

TR

3. nh ngha hnh nh cho cc nt Toolbar Button.


80

KS. GV. TRN ANH BNH


thit lp hay ti v bitmap ca icons gn vi nt lnh ca toolbar, bn c th s dng phng
thc SetBitmaps v GetBitmaps. c 2 u c c php tng t nhau nh sau :

NG

D
ToolbarItemobject.GetBitmaps
SmallIconName, LargeIconName
Y

NAME
DATA
DESCRIPTION
C XTYPE

H
SmallIconName
Path v tn file ca small bitmap (1615 pixels)
IN String
T
N LargeIconName String
Path v tn file ca large bitmap(2422 pixels)
ToolbarItemObject.SetBitmaps SmallIconName, LargeIconName

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

TIN
G
ToolbarObject.Float Top, Left, NumberOfRows
N

H
T
DESCRIPTION
NAME
DATA
H
TYPE
NG
G
Top
LongN V tr bin trn ca Toolbar (pixel) tnh t mn hnh
A C pha trn.
O
Left KH
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

Docking Toolbars

TR

Y
X
C

H
I

N
D

81

KS. GV. TRN ANH BNH


ToolbarObject.Dock DockStatus
NAME

G
GiN
tr ca n xem trong bng di y.

DockStatus

DATA TYPE

DESCRIPTION

Long

Y
X
C Hng s : AcToolbarDockStatus

H
CONSTANT
VALUE
DESCRIPTION
IN
T
N
0
Toolbar c bm vo pha trn ca bn v.
acToolbarDockTop
M
acToolbarDockBottom
1
Toolbar c bm vo pha di ca bn v.

acToolbarDockLeft

Toolbar c bm vo bin tri di ca bn v.

acToolbarDockRight

Toolbar c bm vo bin phi ca bn v.

V d minh ha acToolbarDockBottom

IN

KHO

NG

H
G
N

T
G
N

H
T

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
' Create the first toolbar
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
Dim FirstToolbar As AcadToolbar
Set FirstToolbar = currMenuGroup.Toolbars.Add("FirstToolbar")
' Add a flyout button to the first menu on the menu bar
Dim FlyoutButton As AcadToolbarItem

Y
X
C

H
I

N
D

' Create the second toolbar. This will be attached to


' the first toolbar via the flyout button.
Set FlyoutButton = FirstToolbar.AddToolbarButton("", "Flyout", "Demonstrates a flyout
button","OPEN", True)

Dim SecondToolbar As AcadToolbar

TR

' Add a button to the next toolbar


Set SecondToolbar = currMenuGroup.Toolbars.Add("SecondToolbar")
82

KS. GV. TRN ANH BNH


Dim newButton As AcadToolbarItem
Dim openMacro As String

N
D

' Assign the macro the VB equivalent of "ESC ESC _open "
openMacro = Chr(vbKeyEscape) + Chr(vbKeyEscape) + "_open "
Set newButton = SecondToolbar.AddToolbarButton ("", "NewButton", "Open a file.",
openMacro)

TIN
N

Y
X
C
H

' Attach the second toolbar to the flyout button on the first toolbar
FlyoutButton.AttachToolbarToFlyout currMenuGroup.Name,SecondToolbar.Name

' Display the first toolbar, hide the second toolbar


FirstToolbar.Visible = True
SecondToolbar.Visible = False
End Sub
7. Xa Toolbar v Toolbar Button
Bn c th xa c toolbars v toolbar buttons bng phng thc Delete nh sau :
ToolbarObject.Delete
ToolbarItemObject.Delete
V.

To cc macro

IN

T
G
N

H
T

1. Cc quy nh v macro
Bng k t dng trong Macro v m ASCII tng ng.

A
O
ASCII
H
K chr(59)

Character
;
^M
^|

NG

chr(13)
chr(94) +
chr(124)
SPACEBAR chr(32)
\
_
+

chr(92)
chr(95)
chr(43)

=*

chr(61) +
chr(42)
chr(42) +
chr(3) +
chr(3)
chr(36)

^B
^C
ESC
^D
^E
^G

chr(2)
chr(3)
chr(3)
chr(4)
chr(5)
chr(7)

*^C^C

H
G
N

M t

ENTER
ENTER
TAB
Khong trng trong Macro s tng ng vi bn n
phm SPACEBAR
Dng li nhp s liu
Chuyn lnh ng sau n sang Ting Anh
Tip tc macro dng lnh tip theo(t cui dng
lnh trc)
Hin th hin hnh top-level image, pull-down, v
shortcut menu
Dng lp li cc lnh ng sau n cho n khi bn n
Esc

Y
X
C

H
I

N
D

ti mt on menu section hoc thm mt on biu


thc DIESEL
Bt hoc tt Snap (CTRL+B)
Cancels command (CTRL+C)
Cancels command (ESC)
Bt tt Coords (CTRL+D)
Thit lp mt phng cng kch thc (CTRL+E)
Bt tt Grid (CTRL+G)

TR

83

KS. GV. TRN ANH BNH


^H
^O
^Q

chr(8)
chr(15)
chr(17)

^T
^V
^Z

Y
X
C
H
chr(20)
chr(22)
chr(26)

Tr v phm backspace
Bt tt ch Ortho (CTRL+O)
Khng hin th tt c cc thng bo, cc dng tnh trng
lm v d liu nhp vo (CTRL+Q)
Bt tt menu s ha Tablet (CTRL+T)
Changes current viewport (CTRL+V)
Null character t cui Macro xa cc k t pht
sinh cui ca menu Item.

N
D

TIN
N

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

IN

KHO

NG

H
G
N

TR

T
G
N

H
T

Y
X
C

H
I

N
D

84

KS. GV. TRN ANH BNH

CHNG 5 : PHT TRIN NG DNG VI VBA

I.

AutoCAD Events
Event xut hin nh mt kt qu ca mt s kin xy ra khi chng trnh ang chy. Autocad
cung cp 3 cp Event : application, document, and object. Event handlers (b qun l s kin) l mt
Sub procedures, th tc ny s c chy mt cch t ng khi cc s kin gn vi n xy ra.
Application-Level Events : Xut hin khi c s thay i trong mi trng ng dng
AutoCAD. N bao gm cc s kin m bn v, ng bn v, thc thi dng lnh, thay i
cc bin h thng v thay i ca s ng dng AutoCAD.
Document-Level Events : Xut hin khi c s thay i trong bn v nh thm, sa mt i
tng, ti sinh li bn v.
Object-Level Events : xut hin khi c s thay i cp thc th trong bn v, nh s kin
thay i (Modified).

TIN
N

N
D

Y
X
C
H

1. Application-level events
Application-level events khng mc nh c trong VBA khi bn load mt Project. s dng
cc Event ny, bn phi lm qua cc bc sau :
u tin, bn insert mt class module, v khai bo mt declare an object vi kiu
AcadApplication vi KeyWord Withevents. V d :
Bn to mt Class module c tn l EventClassModule
Public WithEvents objApp As AcadApplication

IN

KHO

NG

H
G
N

T
G
N

H
T

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 :
Dim X As New EventClassModule
2. Cng trong ca s ny, bn thm th tc sau :
Sub InitializeEvents()
Set X.ObjApp = ThisDrawing.Application
End Sub
3. Trong main module, bn gi th tc InitializeEvents :
Call InitializeEvents
V d sau :
Public WithEvents ACADApp As AcadApplication
Sub Example_AcadApplication_Events()

TR

Y
X
C

H
I

N
D

85

KS. GV. TRN ANH BNH


' This example intializes the public variable (ACADApp)
' which will be used to intercept AcadApplication Events
'
' Run this procedure FIRST!
' We could get the application from the ThisDocument
' object, but that would require having a drawing open,
' so we grab it from the system.
Set ACADApp = GetObject(, "AutoCAD.Application.16")
End Sub

TIN
N

N
D

Y
X
C
H

Private Sub ACADApp_BeginFileDrop _


(ByVal FileName As String, Cancel As Boolean)
' This example intercepts an Application BeginFileDrop event.
'
' This event is triggered when a drawing file is dragged
' into AutoCAD.
'
' To trigger this example event:
' 1) Make sure to run the example that initializes
' the public variable (named ACADApp) linked to this event.
'
' 2) Drag an AutoCAD drawing file into the AutoCAD
' application from either the Windows Desktop
' or Windows Explorer
' Use the "Cancel" variable to stop the loading of the
' dragged file, and the "FileName" variable to notify
' the user which file is about to be dragged in.
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

IN

KHO

NG

H
G
N

Danh sch cc Event trong application level:


AppActivate
AppDeactivate
ARXLoaded
ARXUnloaded
BeginCommand
BeginFileDrop
BeginLisp
BeginModal
BeginOpen
BeginPlot
BeginQuit
BeginSave
EndCommand
EndLisp
EndModal
EndOpen
EndPlot

TR

T
G
N

H
T

Y
X
C

H
I

N
D

86

KS. GV. TRN ANH BNH


EndSave
LispCancelled
NewDrawing
SysVarChanged
WindowChanged
WindowMovedOrResized

N
D

Y
X
C
H
2. Document-level
events
IN nh application-level events, document-level events mc nh c khi bn ti
Khng T
ging
N
Project
bn v. Nu bn chn AcadDocument Object trong Object List box ca Thisdrawing
Mvo
module
ca
AutoCAD
project, the document-level events c lit k trong danh sch bn phi nh

B
hnh v di y :

IN

KHO

NG

H
G
N

T
G
N

H
T

Cc Event c s dng trong document level nh sau :


Activate
BeginClose
BeginCommand
BeginDoubleClick
BeginLisp
BeginPlot
BeginRightClick
BeginSave
BeginShortcutMenuCommand
BeginShortcutMenuDefault
BeginShortcutMenuEdit
BeginShortcutMenuGrip
BeginShortcutMenuOsnap
Deactivate
EndCommand
EndLisp
EndPlot
EndSave
EndShortcutMenu
LayoutSwitched
LispCancelled
ObjectAdded

TR

Y
X
C

H
I

N
D

87

KS. GV. TRN ANH BNH


ObjectErased
ObjectModified
SelectionChanged
WindowChanged
WindowMovedOrResized

Y
X
C
H

3. Object-Level Events
s dng object-level events, u tin bn phi to mi mt class module v khai bo bin
tham chiu n i tng m bn mun by s kin Modified. Class module mi cha khai bo i
tng bng cch s dng VBA keyword WithEvents, v d :
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
3. Trong main module, bn gi th tc InitsializeEvents :
Call InitializeEvents

TIN
N

N
D

IN

H
G
N

V d sau y to mt polyline vi Event

NG

T
G
N

H
T

Public WithEvents PLine As AcadLWPolyline

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
Private Sub PLine_Modified (ByVal pObject As AutoCAD.IAcadObject)
' This event is triggered when the polyline is resized.
' If the polyline is deleted the modified event is still
' triggered, so we use the error handler to avoid
' reading data from a deleted object.
On Error GoTo ERRORHANDLER
MsgBox "The area of " & pObject.ObjectName & " is: " _
& pObject.Area

TR

Y
X
C

H
I

N
D

Exit Sub
ERRORHANDLER:
MsgBox Err.Description

88

KS. GV. TRN ANH BNH


End Sub
II.

S dng Form
1. Lm vic vi Form v Macro

Y
X
C
H

N
D

To mi mt form, chy form trong ch run_mode


Ging ht VB

TIN
N

Khng khc VB
M

Chn controls vo form

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
G
N
Hmenu bng cch thay i menu Macro
Bn c th chy macro t AutoCAD toolbarThoc
Hc dng :
property cho toolbar hoc menu . Macro property
G
N
G
-VBARUN
filename.dvb!modulename.macroname
N

C
Trong :
A- filename l tn ca project file.
O
H
K
2. Lm vic vi module v macro

Chy macro t toolbar v menu

- 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")
)
Chy macro mt cch t ng

N
D

Y
X
C
C 2 cch chay macro mt cch t ng :

H
1. Bn c th chy cc macro mt cch
tI ng, bng cch son tho AutoCAD

startup ca acad.lsp. V d, G
t ng chy Macro c tn drawline, u tin bn
N
copy on macro vo trong
file project acad.dvb . Sau , m notepad.exe v
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
D

Y
X
1. Tng tc vi Visual
CLisp
H
T c IN
T
2.
SN
dng c s d liu DAO
M T c, ging VB

III. Tng tc vi cc ng dng v cc c s d liu khc

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
Object Library, v n cha tt c cc i tng, phng thc, thuc tnh, hng s v s kin do ng
dng nh ngha
Thng thng, kt ni vi cc Activex Library, bn chn Tools menu References. , sau
mt danh sch cc object librarie VBA tm thy trong h thng ca bn s c hin ln. Sau bn
chn nhng Library m bn cn trao i d liu ti n. V d, bn thm object library ca Microsoft
Excel, chn Microsoft Excel object library entry trong danh sch.
Khi bn to tham chiu n object library ca ng dng ngoi, bn c th s dng VBA
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.

IN

KHO

NG

H
G
N

TR

To mt Instance ca ng dng ngoi

T
G
N

H
T

Y
X
C

H
I

N
D

90

KS. GV. TRN ANH BNH


Sau khi tham chiu n Object library, bn phi to mt instance ca ng dng . Cc bc
thc hin nh sau :
1. Bn khai bo mt bin i din cho application. V d, khai bo mt bin i din cho
Excel.Application :

N
D

Dim
YExcelAppObj as Excel.Application
X
Cinstance cho application. V d :
2. sau bn to
mt
H
Set ExcelAppObj = New Excel.Application
TIN
N
cho Objects t ng dng ngoi
Vit
MCode

B
V d sau y iu khin s hin h ca Excel sau khi tao Instance cho n :
ExcelAppObj.Visible = TRUE

Bn c th s dng VBA Object Browser tm cc i tng v s dng help file c thm


v bt k mt Object Model m bn tham chin n.
Thot khi ng dng
Khi ng dng ngoi chy, n chim mt b nh nht nh trong my tnh. Sau khi khng s
dng n chng trnh na, tt nht bn nn tt tt c cc ng dng m bn to Instance cho n.
V d, thot session Excel nh sau :
List AutoCAD attributes on an Excel spreadsheet

H
G
N

IN

T
G
N

H
T

ExcelAppObj.Application.Quit

V d : th tc sai tm tt c cc block references trong bn v hin hnh. Lit k tt c cc


attributes ca cc block references :
Sub Ch12_Extract()
Dim Excel As Excel.Application
Dim ExcelSheet As Object
Dim ExcelWorkbook As Object
Dim RowNum As Integer
Dim Header As Boolean
Dim elem As AcadEntity
Dim Array1 As Variant
Dim Count As Integer
' Launch Excel.
Set Excel = New Excel.Application
' Create a new workbook and find the active sheet.
Set ExcelWorkbook = Excel.Workbooks.Add
Set ExcelSheet = Excel.ActiveSheet
ExcelWorkbook.SaveAs "Attribute.xls"
RowNum = 1
Header = False
' Iterate through model space finding
' all block references.
For Each elem In ThisDrawing.ModelSpace
With elem
' When a block reference has been found,
' check it for attributes
If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
If .HasAttributes Then
' Get the attributes
Array1 = .GetAttributes

KHO

NG

TR

Y
X
C

H
I

N
D

91

KS. GV. TRN ANH BNH


' Copy the Tagstrings for the
' Attributes into Excel
For Count = LBound(Array1) To UBound(Array1)
If Header = False Then
If StrComp(Array1(Count).EntityName, _
"AcDbAttribute", 1) = 0 Then
ExcelSheet.Cells(RowNum, Count + 1).value = _
Array1(Count).TagString
End If
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
End Sub

TIN
N

N
D

Y
X
C
H

IN

S dng GetObject, v NewObject

NG

H
G
N

T
G
N

H
T

Nh trnh by trng I Cch lp trnh AutoCAD VBA trong Excel, Bn cng th


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)

Microsoft Product Versions


PRODUCT VERSION EXAMPLE
Office 95

Word.Application.7

Office 97

Excel.Application.8

Office 2000

Word.Application.9

Office XP

10

Powerpoint.Application.10

Office 2003

11

Outlook.Application.11

N
D

X
V d :
C

Public Sub StartExcel(App As Excel.Application, Visible


As
Boolean)
H
I
'handle errors inline

On Error Resume Next


NG

Set App = GetObject(,


"Excel.Application") 'depends on application
TR

'check to see if application is running


If Err Then
'no, application will need to be started

92

KS. GV. TRN ANH BNH


Err.Clear
Set App = CreateObject("Excel.Application") 'depends on application
'check to see if application was started
If Err Then
'no, application could not be started - exit
Exit Sub
End If
End If
'set the application visibility
App.Visible = Visible
End Sub

TIN
N

Y
X
C
H

N
D

Kim tra xem connect c vi Excel hay cha :


Public Sub Start()
Dim oExcel As Excel.Application
'attempt to start Excel
StartExcel oExcel, True
If Not oExcel Is Nothing Then
MsgBox "Success"

IV.

Lm vic vi Xdata

KHO

NG

H
G
N

IN

T
G
N

H
T

Else
MsgBox "Could not start Excel, exiting ...", vbCritical
Exit Sub
End If
End Sub

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
D

Group Code th 1001 (cng l gi tr kiu string). Application names c di ti a l 31 bytes


(byte th 32 dnh cho null character) v phi tun theo quy tc nh tn (nh tn ca layer). Mt
application name c th cha cc ch ci nh : s, v cc k t c bit nh $, -, v _. Nhng
khng c php cha khong trng.
Layer Name

Y
X
C

H
I

Group code th 1003. Tn ca mt layer gn lin vi Xdata.

R
T
Group code th 1005. Handle ca entity trong drawing database.

Database -Handle
3D Point

93

KS. GV. TRN ANH BNH


Group code th 1010. 3 gi tr kiu Real, l ta mt im.
Real
Group code th 1040. Mt s thc.

N
D

Y
X
Group code th 1070.
Mt s 16-bit integer.
C
H
Long
TIN
N
Group code th 1071. Mt s 32-bit long. Nu gi tr ny c gn cho mt s short integer hoc
Mth
real,
n s c quy i v s kiu long integer. Nu gi tr khng hp l(v d nh kiu string), n
Integer

c quy i v s long zero (0L).


Control String

Group code th 1002. Xdata control string can be either "{" or "}". These braces enable the
application to organize its data by subdividing it into lists. The left brace begins a list, and the right
brace terminates the most recent list. Lists can be nested.
Note If a 1001 group appears within a list, it is treated as a string and does not begin a new
application group.
Binary Data

IN

T
G
N

H
T

1004. Binary data that is organized into variable-length chunks, which can be handled in
ObjectARX with the ads_binary structure. The maximum length of each chunk is 127 bytes.
Note AutoLISP cannot directly handle binary chunks, so the same precautions that apply to long
(1071) groups apply to binary groups as well.

H
G
N

NG

1011. Unlike a simple


point, the WCS coordinates are moved, scaled, rotated, and mirrored
A Cto3Dwhich
O
along with the parent
entity
the extended data belongs. The WCS position is also stretched
KH
World Space Position

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
1042. Also a real value that is scaled along with the parent.

N
D

Y
X
C

H
I XData
object.SetXData XDataType,

NG
Trong :

v , AttributeReference, Block, Dictionary, DimStyle,


Object : Tt c cc thc th
Rbn
T
Group, Layer, Linetype, PlotConfigurations, RegisteredApplication, TextStyle, UCS,

2. Sets the extended data (XData) associated with an object.


C php nh sau

View, Viewport; Xrecord.


94

KS. GV. TRN ANH BNH

XdataType : Variant (array of short) input-only


Xdata : Array of Variant; input-only

N
D

3. Gets the extended data (XData) associated with an object.


C php nh sau

Y
X
C
Object :H
Tt
c cc thc th bn v , AttributeReference, Block, Dictionary, DimStyle,
IN Layer, Linetype, PlotConfigurations, RegisteredApplication, TextStyle, UCS,
Group,
NT
object.GetXData AppName, XDataType, XDataValue

View, Viewport; Xrecord.


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")
' Prompt the user to select objects
sset.SelectOnScreen
' Define the xdata
Dim appName As String, xdataStr As String
appName = "MY_APP"
xdataStr = "This is some xdata"

NG

H
G
N

IN

T
G
N

H
T

A
O
H
DimK
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

Y
X
C
Sub Example_SetXdata()

H
' V d sau to ra mt ng line v gn extended data cho n.
I

NG
' Create the line

Dim lineObj As AcadLine R


T
V d 2 :

N
D

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


endPt(0) = 5#: endPt(1) = 5#: endPt(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
ZoomAll
' Initialize all the xdata values. Note that first data in the list should be
' application name and first datatype code should be 1001
Dim DataType(0 To 9) As Integer
Dim Data(0 To 9) As Variant
Dim reals3(0 To 2) As Double
Dim worldPos(0 To 2) As Double

TIN
N

N
D

Y
X
C
H

DataType(0) = 1001: Data(0) = "Test_Application"


DataType(1) = 1000: Data(1) = "This is a test for xdata"

DataType(2) = 1003: Data(2) = "0"


' layer
DataType(3) = 1040: Data(3) = 1.23479137438413E+40 ' real
DataType(4) = 1041: Data(4) = 1237324938
' distance
DataType(5) = 1070: Data(5) = 32767
' 16 bit Integer
DataType(6) = 1071: Data(6) = 32767
' 32 bit Integer
DataType(7) = 1042: Data(7) = 10
' scaleFactor

H
G
N

IN

T
G
N

H
T

reals3(0) = -2.95: reals3(1) = 100: reals3(2) = -20


DataType(8) = 1010: Data(8) = reals3
' real

worldPos(0) = 4: worldPos(1) = 400.99999999: worldPos(2) = 2.798989


DataType(9) = 1011: Data(9) = worldPos
' world space position
' Attach the xdata to the line
lineObj.SetXData DataType, Data
' Return the xdata for the line
Dim xdataOut As Variant
Dim xtypeOut As Variant
lineObj.GetXData "", xtypeOut, xdataOut
End Sub

KHO

NG

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
Dim xdata As Variant
Dim xd As Variant
'Define index counter
Dim xdi As Integer
xdi = 0
' Loop through the objects in the selection set and retrieve the xdata for the object
Dim msgstr As String
Dim appName As String
Dim ent As AcadEntity
appName = "MY_APP"

TR

Y
X
C

H
I

N
D

96

KS. GV. TRN ANH BNH


For Each ent In sset
msgstr = ""
xdi = 0
' Retrieve the appName xdata type and value
ent.GetXData appName, xdataType, xdata
' If the xdataType variable is not initialized, there
' was no appName xdata to retrieve for that entity
If VarType(xdataType) <> vbEmpty Then
For Each xd In xdata
msgstr = msgstr & vbCrLf & xdataType(xdi) _
& ": " & xd
xdi = xdi + 1
Next xd
End If
' If the msgstr variable is NULL, there was no xdata
If msgstr = "" Then msgstr = vbCrLf & "NONE"
MsgBox appName & " xdata on " & ent.ObjectName &
":" & vbCrLf & msgstr
Next ent

TIN
N

N
D

Y
X
C
H

End Sub

IN

V d 4 :

H
G
N

T
G
N

H
T

V d sau, lc tt c cc vng trn cha xdata ca MY_APP application:

NG

Sub Ch4_FilterXdata()
Dim sstext As AcadSelectionSet
Dim mode As Integer
Dim pointsArray(0 To 11) As Double

KHO

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
Dim FilterType(1) As Integer
Dim FilterData(1) As Variant
Set sstext = ThisDrawing.SelectionSets.Add("SS9")
FilterType(0) = 0
FilterData(0) = "Circle"
FilterType(1) = 1001
FilterData(1) = "MY_APP"
sstext.SelectByPolygon mode, pointsArray, FilterType, FilterData
V.

Lm vic vi Xrecord

Y
X
C

H
I

N
D

1. Khi nim v Xrecord


Xrecord l i tng thuc Collection Dictionaries. Khi nim v Xrecord cng tng t nh
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

TR

KS. GV. TRN ANH BNH


AutoCAD group codes u c s dng cha d liu. Mt iu quan trng na l ta c th qun l
Xrecord bng object IDs.
V d : Cc bc AutoCAD ghi li cc thng tin ca mt Layer nh sau :
To ra mt t in m rng (Extension dictionary) trong layer collection.
To mt Dictionary object ly tn l ACAD_LAYERSTATE trong extension dictionary.
Lu tt c cc thuc tnh ca layer vo mt XRecord object trong ACAD_LAYERSTATE
dictionary. AutoCAD lu tt c cc thit lp ca cc layer vo Xrecord nu bn chn chc
nng Save. Khi bn khi phc li (restore the layer setting, AutoCAD s ly d liu t
XRecord khi phc li).

TIN
N

Y
X
C
H

N
D

IN

T
G
N

H
T

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.
Nhng Group code sau c th c s dng trong XRecord objects:
100 : Subclass marker (AcDbXrecord)
1-369 : (except 5 and 105)
XRecord obects c ghi li cng vi bn v, v chng c th c truy cp mt cch trc tip
bi ObjectARX v LISP. Do vy, nu bn cn bo mt d liu, bn phi m ha chng. :
AcadXRecord
VBA class name:

KHO

NG

H
G
N

Create using:

Dictionary.AddXRecord

Access via:

Dictionary.Item

2. Phng thc AddXRecord


RetVal = object.AddXRecord(Keyword)

Object : kiu Dictionary, i tng s cha XRecord.


Keyword : String, input-only. L tn ca XRecord trong dictionary.
RetVal : XRecord object

Sub Example_AddXRecord()
' This example creates a new XRecord if one doesn't exist,
' appends data to the XRecord, and then reads it back. To see data being added,
' run the example more than once.

N
D

Y
X
CAs AcadXRecord

Dim TrackingDictionary As AcadDictionary, TrackingXRecord


H
AsIVariant
Dim XRecordDataType As Variant, XRecordData

G
Dim ArraySize As Long, iCount As Long
N

Dim DataType As Integer, Data


R As String, msg As String
' Unique identifiers to distinguish T
this XRecordData from other XRecordData

Const TYPE_STRING = 1
Const TAG_DICTIONARY_NAME = "ObjectTrackerDictionary"

98

KS. GV. TRN ANH BNH


Const TAG_XRECORD_NAME = "ObjectTrackerXRecord"
' Connect to the dictionary in which to store the XRecord
On Error GoTo CREATE
Set TrackingDictionary = ThisDrawing.Dictionaries(TAG_DICTIONARY_NAME)
Set TrackingXRecord = TrackingDictionary.GetObject(TAG_XRECORD_NAME)
On Error GoTo 0

TIN
N

N
D

Y
X
C
H

' Get current XRecordData


TrackingXRecord.GetXRecordData XRecordDataType, XRecordData
' If there is no array yet then create one
If VarType(XRecordDataType) And vbArray = vbArray Then
ArraySize = UBound(XRecordDataType) + 1
' Get the size of the data elements returned
ArraySize = ArraySize + 1
' Increase to hold new data
ReDim Preserve XRecordDataType(0 To ArraySize)
ReDim Preserve XRecordData(0 To ArraySize)
Else
ArraySize = 0
ReDim XRecordDataType(0 To ArraySize) As Integer
ReDim XRecordData(0 To ArraySize) As Variant
End If

IN

H
G
N

T
G
N

H
T

' Append new XRecord Data


' For this sample we only append the current time to the XRecord

G
N

XRecordDataType(ArraySize)
= TYPE_STRING: XRecordData(ArraySize) = _
C
A
CStr(Now)O
KH
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
DataType = XRecordDataType(iCount)
Data = XRecordData(iCount)
If DataType = TYPE_STRING Then
msg = msg & Data & vbCrLf
End If
Next

N
D

MsgBox "The data in the XRecord is: " & vbCrLf & vbCrLf & msg, vbInformation
Exit Sub

Y
X
C

H
I

CREATE:
' Create the objects that hold this XRecordData
If TrackingDictionary Is Nothing Then ' Make sure to have tracking object
Set TrackingDictionary = _
ThisDrawing.Dictionaries.Add(TAG_DICTIONARY_NAME)
Set TrackingXRecord = _

TR

99

KS. GV. TRN ANH BNH


TrackingDictionary.AddXRecord(TAG_XRECORD_NAME)
End If
Resume
End Sub

N
D

Y
X
XRecordDataType, XRecordData
C
Hobject.SetXRecordData

3. Phng thc SetXRecordData

Object
TIN: kiu XRecord Object, i tng s cha d liu.
N
XrecordDataType : Variant (array of short); input-only.
M

The following group codes are common to all XRecord objects:


Group codes

Description

100

Subclass marker (AcDbXrecord)

1-369 (except 5 and 105) Gi tr c th c s dng bi bt k ng dng no.


4. Phng thc GetXRecordData
object.GetXRecordData XRecordDataType, XRecordDataValue

H
G
N

IN

T
G
N

H
T

Object : kiu XRecord Object, i tng s cha d liu.


XrecordDataType : Variant (array of short); Output-only.

Sub Example_SetXRecordData()
' This example creates a new XRecord if one doesn't exist,
' appends data to the XRecord, and reads it back. To see data being added,
' run the example more than once.

NG

A
O
H
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

' Unique identifiers to distinguish our XRecordData from other XRecordData


Const TYPE_STRING = 1
Const TAG_DICTIONARY_NAME = "ObjectTrackerDictionary"
Const TAG_XRECORD_NAME = "ObjectTrackerXRecord"
' Connect to the dictionary in which the XRecord is stored
On Error GoTo CREATE
Set TrackingDictionary = ThisDrawing.Dictionaries(TAG_DICTIONARY_NAME)
Set TrackingXRecord = TrackingDictionary.GetObject(TAG_XRECORD_NAME)
On Error GoTo 0

Y
X
C

H
I

' Get current XRecordData


TrackingXRecord.GetXRecordData XRecordDataType, XRecordData

N
D

' If there is no array already, create one


If VarType(XRecordDataType) And vbArray = vbArray Then
ArraySize = UBound(XRecordDataType) + 1
' Get the size of the data elements returned
ArraySize = ArraySize + 1

TR

100

KS. GV. TRN ANH BNH


' Increase to hold new data
ReDim Preserve XRecordDataType(0 To ArraySize)
ReDim Preserve XRecordData(0 To ArraySize)
Else
ArraySize = 0
ReDim XRecordDataType(0 To ArraySize) As Integer
ReDim XRecordData(0 To ArraySize) As Variant
End If

N
D

Y
X
C
H

TIN
N

' Append new XRecord Data


M

'
' 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
DataType = XRecordDataType(iCount)
Data = XRecordData(iCount)

IN

H
G
N

T
G
N

H
T

If DataType = TYPE_STRING Then


msg = msg & Data & vbCrLf
End If

KHO

NG

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
End Sub

TR

Y
X
C

H
I

N
D

101

You might also like