Professional Documents
Culture Documents
VBA Cad 25-8-08
VBA Cad 25-8-08
N
D
Y
X
C
H
LP
TIN TRNH TRONG AUTOCAD
N
IN
T
G
N
H
T
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
T : 0983039940
Mail 1 : anhbinh0310@yahoo.com
Mail 2 : binhta@uce.edu.vn
TR
Y
X
C
H
I
N
D
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.
2.
Cn bn v AutoLisp
3.
4.
5.
Nhp d liu
6.
Mt s hm c bn
7.
X l danh sch
8.
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
VBA Projects
2.
To mi project
3.
4.
5.
Lm vic vi cc Macro
Cn bn v VBA.
1.
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.
N
D
M, ng v ghi li bn v
1.
M bn v.
2.
To mi bn v.
3.
Lu bn v.
3.
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
2.
Grid v Snap.
3.
IV.
V.
IN
1.
Nhp Chui
2.
Nhp ta mt im
3.
4.
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.
2.
3.
To cc khi c
4.
To i tng hatch
5.
Thm Text vo bn v
1.
To cc TextStyle
2.
Chn Text vo bn v
3.
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
V.
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.
3.
4.
Xa Group Object
2.
S dng linetype
3.
VIII.
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
I.
II.
III.
Menugroup collection
2.
Menugroup Object
2.
3.
To mi Pull-down menu
2.
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
To mi toolbar
2.
3.
4.
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
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.
1.
2.
3.
Lm vic vi Xdata
1.
2.
3.
4.
Cc V d
Lm vic vi Xrecord
1.
2.
3.
4.
TR
Y
X
C
H
I
N
D
TIN
N
N
D
Y
X
C
H
IN
KHO
II.
NG
H
G
N
T
G
N
H
T
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
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
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
TIN
N
Y
X
C
H
N
D
IN
H
G
N
T
G
N
H
T
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
c th theo di c kt qu cng nh T
liR
ca n.
Command: (- ( + 140 10) 30)
120
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
TR
Y
X
C
H
I
N
D
Phm vi bin
Bin ch c tc dng trong phm vi bn v
9
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
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
TIN
N
N
D
Y
X
C
H
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
TR
12
N
D
Y
X
Cthnh mt s nguyn : hm (Atoi String)
Chuyn i mtH
chui
IN : (Atof 15.4a)
TCommand
N
15
M
IN
H
G
N
T
G
N
H
T
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
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
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
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
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.
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
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.
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
/=
Gii thch
TR
Y
X
C
H
I
N
D
Tng t
EQ
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
Hm
C php
Gii thch
Atom
(Atom Item.)
Listp
(Listp Item)
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)
Type
(Type Item)
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
17
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
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)
(Ssget point)
(Ssget l)
Previous
(ssget p)
Window
Crossing window
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
All
V d :
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
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.
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)
20
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
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
IV.
NG
D Basic
V. C bn v ngn ng lp trnh Visual
Y
X
C
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
TR
Y
X
C
H
I
N
D
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
TIN
N
N
D
Y
X
C
H
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
TR
Y
X
C
H
I
25
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
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
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)
Y
X
C
H
I
N
D
TR
NG
D
Dim MenuGroupsCollection as AcadMenuGroups
Y
H
G
N
IN
T
G
N
H
T
KHO
NG
Y
X
C
H
I
On Error Resume Next
Err.Clear
TR
Sub Ch2_ConnectToAcad()
Dim acadApp As AcadApplication
N
D
28
End If
N
D
End If
MsgBox "Now running " + acadApp.Name + " version " + acadApp.Version
End Sub
TIN
N
Y
X
C
H
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
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()
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
iu khin ca s bn v
30
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
IN
KHO
NG
H
G
N
T
G
N
H
T
TR
Y
X
C
H
I
N
D
TIN
N
Y
X
C
H
N
D
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, -
Y
X
C
H
I
TR
N
D
32
TIN
N
N
D
Y
X
C
H
IN
H
G
N
T
G
N
H
T
KHO
IV.
NG
Y
X
C
H
I
N
D
TR
33
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
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
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
T
G
N
H
T
NG
H
G
N
intUserIntegerInput = UtilityObject.GetInteger([Prompt])
V d :
KHO
N
D
Y
X
C
H
I
varUserCornerInput = UtilityObject.GetCorner(BasePoint
[,Prompt])
G
N DESCRIPTION
NAME
TYPE
TR
BasePoint
Variant
TYPE
Prompt
DESCRIPTION
String
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
NAME
TYPE
DESCRIPTION
BasePoint
Variant
Prompt
String
dblUserDist
anceInput
Double
IN
T
G
N
H
T
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
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
TIN
N
Y
X
C
H
N
D
TYPE
DESCRIPTION
PickedEntity AcadEntity
PickPoint
Variant
Matrix
Variant
Context
Variant
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
CHNG 3 : TO V SA CC THC TH HA
G
N
trong ModelSpace. H
TSetINlineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
N
M
Cch khc, khai bo bin :
B
I.
To i tng bn v
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
TIN
N
TheMSpline Object
N
D
Y
X
C
H
DATA TYPE
DESCRIPTION
FitPoints
Variant
StartTangent
Variant
EndTangent
Variant
KHO
IN
NG
H
G
N
T
G
N
H
T
DATA TYPE
DESCRIPTION
CenterPoint
Variant
Radius
Double
StartAngle
Double
EndAngle
Double
Bn knh
TR
Y
X
C
H
I
N
D
39
TIN
N
TheMCircle Object
N
D
Y
X
C
H
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
DATA TYPE
DESCRIPTION
CenterPoint
Variant
MajorAxis
Variant
RadiusRatio
Double
TR
Y
X
C
H
I
N
D
3. To cc khi c
40
NGDESCRIPTION
Y
X
C
H
Variant
TINVariant
N
M
Point2
Point3
Point4
Point 3
Point 1
Point 4
Point 2
4. To i tng hatch
The Hatch Object
TIN
G
N
DESCRIPTION
H
T
DATA TYPE
PatternType
Long
PatternName
A
Associativity
O
H
K
NG
String
H
G
N
Boolean
Bng cc gi tr ca PatternType
CONSTANT
VALUE
DESCRIPTION
AcHatchPatternTypeUserDefined
AcHatchPatternTypePredefined
AcHatchPatternTypeCustomDefined
NG
D phng thc
Sau khi bn to Hatch object, bn phi xc nh boundary or loop bng cch s dng
Y
Object.AppendOuterLoop
loop
G
Object.AppendInnerLoop
loop
N
R
NAME DATA TYPE T
DESCRIPTION
Object
AcadHatch
i tng Hatch
41
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
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
DESCRIPTION
acUnion : ni 2 Region
acIntersection : ly phn giao nhau ca 2 Region
acSubtraction : ly phn khng giao nhau.
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
DATA TYPE
TextString
String
InsertionPoint
Variant
Height
DESCRIPTION
Ni dung text
Y
X
C
H
N
D
Double
TIN
N
Set MTextObject = Object.AddMText(InsertionPoint, Width, TextString)
M
The MText Object
NAME
DATA TYPE
DESCRIPTION
InsertionPoint
Variant
Width
Double
TextString
String
Ni dung text
KHO
NG
H
G
N
IN
T
G
N
H
T
TR
Y
X
C
H
I
N
D
N
D
Y
X
Object.Delete
C
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
C php nh sau : C
A
O
H
K Set DrawingObject = DrawingObject.Mirror(Point1, Point2)
Object.Highlight Highlighted
NAME DATA
TYPE
DESCRIPTION
Point1 Variant
Point2 Variant
TR
Y
X
C
H
I
N
D
Moving Objects
44
NG
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
NAME
NG
DATA
TYPE
AVariant
O
H
K
BasePoint
RotationAngle Double
Y
X
C
H
I
Scaling Objects
NAME
DESCRIPTION
DATA
TYPE
N
D
NG
DrawingObject.ScaleEntity
BasePoint, ScaleFactor
TR
DESCRIPTION
45
DATA
TYPE
Variant
DESCRIPTION
N
D
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
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
NG
D
Y
X
C
Long
H
NumberofObjects
TIN Double
AngleToFill
N
Variant
M ArrayCenter
NAME
DATA
TYPE
AngleToFill,
DESCRIPTION
IN
NG
H
G
N
T
G
N
H
T
A
O
H
K varObjectArray = DrawingObject.ArrayRectangular (NumberOfRows,
DATA
TYPE
DESCRIPTION
NumberofRows
Long
NumberOfColumns
Long
NumberOfLevels
Long
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
47
DATA
TYPE
DESCRIPTION
NG
gc.
DistBetweenLevels
IN
NT
Double
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
TR
Y
X
C
H
I
N
D
48
N
D
Y
X
C
H
TIN
N
Edit
MSplines
B
Vi splines bn c th thay i cc thuc tnh sau :
IN
KHO
IV.
NG
H
G
N
T
G
N
H
T
TR
Y
X
C
H
I
N
D
49
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
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 :
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)
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
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
DATA TYPE
D
Y
Document, PaperSpace,
ModelSpace or Block
objects
X
C
Objects
Variant
H
N
I
T
N
NewOwner Variant
M
IdMap
Variant
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
N
D
Y
X
C
H
I
Set BlockReferenceObject = Object.InsertBlock(InsertionPoint,
BlockName, _
G
Xscale, Yscale,
NZScale, RotationAngle)
TR
NAME
DATA
TYPE
DESCRIPTION
51
DATA
TYPE
InsertionPoint
Variant
BlockName
N
D
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
Yscale
Double
Zscale
Double
RotationAngle
Double
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
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
TR
52
NG
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
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.
Gi tr m
s ly i xng theo phng X ti im chn.
TR
Ta im chn.
53
TIN
N
Columns
M
Rows
DATA
TYPE
DESCRIPTION
N
D
Double
Double
Y
The rotation angle
X
C expressed
in radians.
H
Long
Long
RowSpacing
Double
ColumnSpacing
Double
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
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)
NAME
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 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
NAME
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
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
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
BlockObject.Bind(Merge)
55
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
N
D
TR
Y
X
C
H
I
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
Point2
Variant
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
acSelectionSetCrossing
acSelectionSetPrevious
acSelectionSetLast
acSelectionSetAll
TR
Y
X
C
H
I
N
D
Y
X
C
H
N
D
TIN
" set the code for layer
N
M intCodes(0) = 8
HO
Done:K
NG
H
G
N
IN
T
G
N
H
T
N
D
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
DESCRIPTION
Long
Vertices Variant
N
D
Y
X
C
H
TIN
N
CONSTANT
M
acSelectionSetFence
Bng gi tr Modes
VALUE
2
DESCRIPTION
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
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
N
D
Y
X
C
H
I
NG
59
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
67
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
N
D
Y
X
C
H
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>"
H
G
N
NG
IN
T
G
N
H
T
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
DATA TYPE
Name
String
N
D
TR
61
N
D
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
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
R
T
Set objLayers = ThisDrawing.Layers
Lm vic vi Layers
TIN
N
Y
X
C
H
N
D
IN
KHO
NG
H
G
N
T
G
N
H
T
X
For Each objLayer In ThisDrawing.Layers ' iterate layersC
H
If 0 = StrComp(objLayer.name, strLayername, vbTextCompare)
Then
I
End If
TR
N
D
Next objLayer
MsgBox "Layer '" & strLayername & "' does not exist"
63
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
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()
TR
Y
X
C
H
I
N
D
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.
IN
T
G
N
H
T
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
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
Y
X
C
H
N
D
Ly Handle ca mt Layer
TIN
N
IN
T
G
N
H
T
H
G
NobjLayer.Color = acRed
HO
K
acByBlock
G
N
Table
C 6-2: AutoCAD-Defined Color Constants
ByBlock
acRed
Red
acYellow
Yellow
acGreen
Green
acCyan
Cyan
acBlue
Blue
acMagenta
Magenta
acWhite
acByLayer
256
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
s c kiu nt l Linetype ca layer. Tr khi thc th c ngi dng thit lp ti mt kiu nt khc.
66
Y
X
C
H
N
D
objLayer = ThisDrawing.Layers("0")
TINSet
objLayer.Linetype = "Continuous"
N
strLayerLinetype = objLayer.Linetype
M
End Sub
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:
N
D
Y
X
C
H
For Each objLinetype In ThisDrawing.Linetypes
I
G
If 0 = StrComp(objLinetype.Name,N
strLinetypeName,
vbTextCompare) Then
End If
Next objLinetype
67
N
D
Y
X
C
H
TIN
N
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
N
D
Y
X
C
H
LinetypeObject.Delete
I
R linetype.
N l ByLayer, ByBlock, or T
Continuous
Deleting a Linetype
N l mt Xref-dependent linetype.
Ly Hanhdle ca Linetype
68
N
D
Y
X
C
H
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
TR
69
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")
STYLES COPIED
Dimension, Tolerance,
Leader
Document
DimStyle
A
O
H
K
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
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
Object
Dimension, Leader, or
Tolerance object
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
IN
2. To cc ng o kch thc
To cc Dimensions
H
G
N
T
G
N
H
T
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
TIN
N
Y
X
C
H
N
D
DimAligned Object
Set DimAlignedObject = Object.AddDimAligned(Point1, Point2, TextPosition)
NAME
Point1
DATA
TYPE
DESCRIPTION
Variant
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
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.
Variant
DATA
TYPE
DESCRIPTION
N
D
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
N
D
Y
X
C
DimOrdinate Object
H
I
R
T
NAME
DATA
TYPE
DESCRIPTION
73
DATA
TYPE
DefinitionPoint
Variant
DESCRIPTION
N
D
LeaderEndPoint Variant
TIN
N
M
UseXAxis
Boolean
IN
DimRadial Object
NG
H
G
N
T
G
N
H
T
KH
CenterPoint
ChordPoint
DATA
TYPE
OA
DESCRIPTION
Variant
Variant
LeaderLength Double
TR
Y
X
C
H
I
N
D
74
DATA
TYPE
Variant
Point2
IN
NT
DESCRIPTION
N
D
Y
X
C
Point2 l mng 3 phn t kiu Double m t ta
HVariant
M
DimLocationPoint
B
RotationAngle
Variant
Double
IN
KHO
3. To cc leader.
NG
H
G
N
TR
T
G
N
H
T
Y
X
C
H
I
N
D
75
TIN
N
N
D
Y
X
C
H
IN
T
G
N
H
T
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 .
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.
TR
76
N
D
lngMenuGroupType = MenuGroupObject.Type
M
V d sau s lit k tt c cc menu group oc ti vo trong AutoCad v kiu ca chng:
CONSTANT
VALUE
DESCRIPTION
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
NAME
MenuFileType
Long
N
D
DATA
TYPE
FileName
String
DESCRIPTION
N
D
Yhng s AcMenuFileType
X
Cc
C
VALUE
CONSTANT
DESCRIPTION
H
N
I
T
acMenuFileCompiled 0
compiled menu file (.mnc extension)
N
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
NAME DATA
TYPE
Index
DATA
TYPE
DESCRIPTION
MenuName String
Index
Ging nh trn.
Variant
N
D
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
objMenu.RemoveFromMenuBar
78
NG
D DESCRIPTION
PopupMenusCollection.RemoveMenuFromMenuBar Index
Y
X
C
Index
VariantH Ging nh trong Phng thc InsertMenuInMenuBar.
TIN
N
IN
H
G
N
T
G
N
H
T
NG
DATA TYPE
A
O
H
K
MenuName String
DESCRIPTION
Tn ca PopupMenu object
DESCRIPTION
Index
Variant
Label
String
Macro String
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.
N
D
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
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
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
FlyoutButton Boolean
Y
X
C
H
I
N
D
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
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
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
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
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
acToolbarDockRight
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
TR
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
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
TR
83
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
IN
KHO
NG
H
G
N
TR
T
G
N
H
T
Y
X
C
H
I
N
D
84
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
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
86
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
TR
Y
X
C
H
I
N
D
87
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
NG
T
G
N
H
T
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
S dng Form
1. Lm vic vi Form v Macro
Y
X
C
H
N
D
TIN
N
Khng khc VB
M
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
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
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
IN
KHO
NG
H
G
N
TR
T
G
N
H
T
Y
X
C
H
I
N
D
90
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
H
G
N
IN
T
G
N
H
T
ExcelAppObj.Application.Quit
KHO
NG
TR
Y
X
C
H
I
N
D
91
TIN
N
N
D
Y
X
C
H
IN
NG
H
G
N
T
G
N
H
T
KHO
Bng lp ng dng
APPLICATION CLASS
IDENTIFICATION
Excel
Word
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
92
TIN
N
Y
X
C
H
N
D
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
N
D
Y
X
C
H
I
R
T
Group code th 1005. Handle ca entity trong drawing database.
Database -Handle
3D Point
93
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
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
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 :
N
D
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
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
N
D
95
TIN
N
N
D
Y
X
C
H
H
G
N
IN
T
G
N
H
T
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
TIN
N
N
D
Y
X
C
H
End Sub
IN
V d 4 :
H
G
N
T
G
N
H
T
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
TR
TIN
N
Y
X
C
H
N
D
IN
T
G
N
H
T
KHO
NG
H
G
N
Create using:
Dictionary.AddXRecord
Access via:
Dictionary.Item
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
G
Dim ArraySize As Long, iCount As Long
N
Const TYPE_STRING = 1
Const TAG_DICTIONARY_NAME = "ObjectTrackerDictionary"
98
TIN
N
N
D
Y
X
C
H
IN
H
G
N
T
G
N
H
T
G
N
XRecordDataType(ArraySize)
= TYPE_STRING: XRecordData(ArraySize) = _
C
A
CStr(Now)O
KH
TrackingXRecord.SetXRecordData
XRecordDataType, XRecordData
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
N
D
Y
X
XRecordDataType, XRecordData
C
Hobject.SetXRecordData
Object
TIN: kiu XRecord Object, i tng s cha d liu.
N
XrecordDataType : Variant (array of short); input-only.
M
Description
100
H
G
N
IN
T
G
N
H
T
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
Y
X
C
H
I
N
D
TR
100
N
D
Y
X
C
H
TIN
N
'
' 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
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