7/22/2019 Lap trinh VBA.pdf
1/101
LP TRNH TRONG AUTOCAD
Ging Vin : Trn anh BnhCp nht ngy 25/8/2007
Sch tham kho :
AutoCAD 2004 Bible Wileys & Sons Mastering in AutoCAD 2000 George Omura AutoCAD 2004 For Dummies John Wiley & Sons AutoCAD 2000 (1,2) KTS.Lu Triu Nguyn. AutoCAD 2004 (1,2) cbn v nng cao TS.Nguyn Hu Lc. Cc tin ch thit ktrn AutoCAD TS.Nguyn Hu Lc.
Nguyn Thanh Trung. AutoCAD 2004 (1,2) cbn v nng cao TS.Nguyn Hu Lc. AutoCAD 2004 Activex and VBA KS.Hong Thnh An.
Lin h: KS. GV. Trn Anh Bnh :- T : 0983039940- Mail 1 : [email protected] Mail 2 :[email protected]
n c : Sch lp trnh ARX v .DLL trong AutoCAD
mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]7/22/2019 Lap trinh VBA.pdf
2/101
KS. GV. TRN ANH BNH
2
LP TRNH TRONG AUTOCAD
CHNG 1 : GII THIU CHUNG
I. Ngn nglp trnh trong CADII. Tng quan vActivex Automation
III. Ngn nglp trnh AutoLisp
1. Gii thiu chung
2. Cn bn vAutoLisp
3. Bin trong Lisp
4. File chng trnh Lisp
5. Nhp dliu
6. Mt shm cbn
7. Xl danh sch
8. Biu thc iu kin
9. Vng lp
10. Tp hp cc i tng c chn
11. Lp trnh vi csdliu ca AutoCAD.
12. Phn tch v d:
IV. Ngn nglp trnh Visual LispV. Cbn vngn nglp trnh Visual Basic
VI. Lm quen vi VBA.
1. VBA Projects
2. To mi project
3. Tchc cc project vi VBA Manager
4. Son tho project vi VBA IDE
5. Lm vic vi cc Macro
VII. Cn bn vVBA.
1. M hnh i tng ca AutoCAD.
2. Object Hierarchy.
3. i tng Collection.
4. Property & Method (thuc tnh & phng thc).
5. Truy cp n i tng trong Object Hierarchy.
6. Truy cp n i tng Collection trong Object Hierarchy.
7. Truy cp n Object Hierarchy bng VB, VBA trong cc mi trng khc.
CHNG 2 : LM VIC VI MI TRNG AUTOCAD
7/22/2019 Lap trinh VBA.pdf
3/101
KS. GV. TRN ANH BNH
3
I. M, ng v ghi li bn v
1. Mbn v.
2. To mi bn v.
3. Lu bn v.
II. iu khin ca sbn v
1. iu khin ca sAutoCAD.
2. iu khin ca sbn v.
3. iu khin shin thbn trong ca sbn v.
III. Ly v thit lp cc thng shthng
1. Ly v thit lp cc bin hthng
2. Grid v Snap.
3. Ly v thit lp bin hthng trong Option.
IV. Sdng command line trong VBA
V. Nhp dliu ngi dng
1. Nhp Chui
2. Nhp ta mt im
3. Nhp mt k tin hnh cho Option
4. Nhp sthc, snguyn.
5. GetCorner Method, GetAngle Method, GetDistance Method
6. GetEntity Method, GetSubEntity Method
CHNG 3 : TO V SA CC THC THHA
I. To i tng bn v
1. Xc nh i tng cha thc th.
2. VLine, Arc, Circle, and Ellipse objects
3. To cc khi c
4. To i tng hatch5. To i tng Region, cc php ton trn Region
II. Thm Text vo bn v
1. To cc TextStyle
2. Chn Text vo bn v
3. Chn cc k tc bit, cc k tUnicode.
III. Sa cc i tng bn v
1. Cc php sa i cbn
2. Cc php bin i nng cao
3. Chnh sa PolyLine, SpLine
7/22/2019 Lap trinh VBA.pdf
4/101
KS. GV. TRN ANH BNH
4
IV. Block v thuc tnh ca block
1. Blocks v Block References
V. Chn i tng
1. To Selectionset.
2. Thm i tng vo selection set
3. Lc i tng trong selection set
VI. Lm vic vi Group
1. To mt Group Object
2. Truy cp ti cc Group Object
3. Thm bt thc thvo Group
4. Xa Group Object
VII. Sdng layer, color v linetype
1. Sdng layer, color
2. Sdng linetype
3. Gn layer, color, linetype cho i tng
VIII. Lm vic vi kch thc
1. Lm vic vi DimStyle
2. To cc ng o kch thc
3. To cc leader.
CHNG 4 : TY BIN MENUS V TOOLBARS
I. Cbn vmenu group v toolbar
1. Menugroup collection
2. Menugroup Object
II. Thay i menu bar
1. Chn thm menu vo menubar
2. Xo bmenu trn menubar3. Sp xp li cc menu trn menubar
III. 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. Chn mt khong trng vo Pull-down menu
4. Thm mt Menu Item vo Shortcut Menu
5. To Submenu cho menu item
6. Xa bt menu item
IV. To v chnh sa Toolbars
7/22/2019 Lap trinh VBA.pdf
5/101
KS. GV. TRN ANH BNH
5
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
5. Floating v Docking Toolbars
6. To cc flyout toolbar
7. Xa Toolbar v Toolbar Button
V. To cc macro
1. Cc quy nh vmacro
2. Cc v dvmacro
CHNG 5 : PHT TRIN NG DNG VI VBA
I. AutoCAD Events
1. Application-level events
2. Document-level events
3. Object-Level Events
II. Sdng Form
1. Lm vic vi Form v Macro
2. Lm vic vi module v macro
III. Tng tc vi cc ng dng v cc csdliu khc
1. Tng tc vi Visual Lisp
2. Sdng csdliu DAO
3. Giao tip vi cc ng dng khc.
IV. Lm vic vi Xdata
1. Khi nim vXData
2. Sets the extended data (XData) associated with an object.
3. Gets the extended data (XData) associated with an object.
4. Cc V d
V. Lm vic vi Xrecord
1. Khi nim vXrecord
2. Phng thc AddXRecord
3. Phng thc SetXRecordData
4. Phng thc GetXRecordData
7/22/2019 Lap trinh VBA.pdf
6/101
KS. GV. TRN ANH BNH
6
CHNG 1 : GII THIU CHUNG
I. Ngn nglp trnh trong CADCc cp ca ngi dung khi thao tc vi AutoCAD :
Cp I : Bit sdng CAD Cp II : Bit qun l v lm chmi trng CAD Cp III : Bit lp trnh tng ha qu trnh vAutocad cho ta cc cch c thtng qu qu trnh vnhsau :
Sdng cc ngn nglp trnh, sau kit xut ra bn vdi dng cc file vn bn DFX. Tng ha bng cc file Script. Lp trnh trong mi trng CAD nhLisp, Object ARX, VBA.AutoDesk cung cp cho chng ta mt bcc phn mrng kim sot AutoCad tngn ng.
Nhng phn mrng ny c gi l Object ARX. y l mt phng php tip cn vi CAD mtcch chuyn nghip nht tuy nhin n li qu phc tp.
AutoLisp l mt ngn nglp trnh thng dch, N l mt phin bn mi nht vngn nglptrnh nhn to c nht m ngy nay vn cn c s dng. Autolisp nm trong bCommon LISP.LISP vit tt ca LIST Processor !. Ni chung Lisp d hc bi c php ca n n gin nhng nkhng tng tc c vi cc csd liu nhExcel, access. Nn vic sdng n to ra cc ngdng phc tp l rt kh. Tuy nhin mc phc tp cng c gim bt i rt nhiu trong VisualLISP!
VBA vit tt ca Visual Basic Application. Cng nh Object Arx th VBA cng l mt mitrng lp trnh hng i tng sdng ngn ngVB. u im ca VBA l
Sdng VB, mt ngn nglp trnh tng i thng dng v dhc. VBA nm trong CAD nn tc chy cng tng i nhanh. Ddng trong vic to ra cc giao din (hp thoi, menu). Tng tc vi cc ng dng khc v cc csdliu 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 sd liu gia cc ng dng khc trongmi trng Window.
II. Tng quan vActivex Automation 2 u im ca AutoCAD ActiveX
Activex automation l chun mc c to ra bi hng Microsoft, trc y c gi l OLEactivex, cho php mt ng dng Windows ny kim sot mt ng dng Windows khc qua m hnhcc i tng r rng.
AutoCAD ActiveX l giao din cho php ngi lp trnh lm vic vi cc i tng caAutoCAD. AutoCAD Activex cho php bn s dng mt cch t ng khng ch trong phm viAutoCAD m ngoi cAutoCAD. Cc i tng ca AutoCAD c thc truy nhp n bi nhiu
ngn nglp trnh khc nhau nhMs word VBA, Ms Excel VBA,...
7/22/2019 Lap trinh VBA.pdf
7/101
KS. GV. TRN ANH BNH
7
2 u im ca AutoCAD ActiveX 2 u im ca AutoCAD ActiveX Tt ccc ngn nglp trnh u c thlm vic vi cc i tng trong AutoCAD (khng
gii hn vi C++ v AutoLISP nhtrc) Tt ccc ngn nglp trnh u c thlm vic vi cc i tng trong AutoCAD (khng
gii hn vi C++ v AutoLISP nhtrc) Chia sdliu vi cc ng dng khc trn mi trng Windows (Excel, Word...) Chia sdliu vi cc ng dng khc trn mi trng Windows (Excel, Word...)
M hnh client server. 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 ActivexAutomation bao gm hai chng trnh vi cc vai tr khc nhau. Client l ng dng khi to cuc hithoi. Server l ng dng hi p client. M Activex Automation chy trong client, trong khi cc hnhng m ny c kim sot thc hin trn server. Hnh di y trnh by mi quan hgia Client vServer trong mt cuc trao i Activex Automation c th.
Mc d Activex lun lun bao gm mt cuc hi thoi gia hai ng dng, n khng phi l cuchi thoi hai chiu gia cc thnh phn tng ng. Mi thnh phn chng trnh ActivexAutomation bao gm hai chng trnh vi cc vai tr khc nhau. Client l ng dng khi to cuc hithoi. Server l ng dng hi p client. M Activex Automation chy trong client, trong khi cc hnhng m ny c kim sot thc hin trn server. Hnh di y trnh by mi quan hgia Client vServer trong mt cuc trao i Activex Automation c th.
ClientClient
Starts conversation
Request Object
Supplies Object
Invokes Method
Close conversation
Server
Principle Activex Automation
Supplies Object
Di y l mt sng dng bn c thdung kim sot cc server activex, kcAutoCAD. Visual Basic Excel VBA Word VBA
7/22/2019 Lap trinh VBA.pdf
8/101
KS. GV. TRN ANH BNH
8
..... M hnh i tng ca Automation.
Mt Server Activex Automation (chng hn nhAutoCAD) thc hin cc chc nng qua cc itng. Mt i tng l mt i din ca thnh ng dng. Mt i tng c phn bit vi cc ditng khc bba c tnh :
Phn loi ca i tng Cc c tnh ca i tng Phng thc ca i tngV di tng Line, c tnh ca i tng cho php bn xc nh :
Mu sc Lp im khi u im kt thc diPhng thc i tng l
Sao chp xa i xng qua gng di chuyn quayCh , cc Autocad activex skhng hot ng nu cad ang thc hin lnh.
III. Ngn nglp trnh AutoLisp1. Gii thiu chung
u im : Tc chy nhanhNhc im : L ngn nglp trnh thng dch, ko cu trc Khng kt ni c vi cc csdliu nhAccess, Excel
2. Cn bn vAutoLisp2.1.Xy dng biu thc AutoLisp
Cu trc dliu cbn ca Lisp l danh sch (List) Danh sch l tp hp cc phn tcha trong cc du ngoc n, cc phn tc cch
nhau bi mt hoc nhiu du cch Danh sch c 2 loi : Biu thc ton hc (expression) v danh sch dliu (data list). Phn tu tin ca ca mt biu thc lun lun l mt hm Mt biu thc bao gm tn hm v cc tham scha trong cc du ngoc n. Khc vi
biu thc ton hc, cc tham strong biu thc Lisp l cc tham sc tht. Tham sl cc gi trcung cp cho hm tnh ton AutoLisp trvkt qutnh ton tbiu thc.
V d :(+ 30 20 50)Trvkt qu: 100
2.2.Cch nhp biu thc AutoLispBiu thc Lisp c thc nhp nhcc dng lnh ca AutoCAD, ch rng biu thc ca Lisp
lun lun nm trong du ngoc n ( ).Khi nhp trc tip bng dng lnh, bn nn ch ko di ca sAutoCAD Text Window ra
c ththeo di c kt qucng nhli ca n.Command: (- ( + 140 10) 30)120
7/22/2019 Lap trinh VBA.pdf
9/101
KS. GV. TRN ANH BNH
9
2.3.Cc hm shcHm cng (+) : (+ [number 1] [number 2] [number 3].)Danh sch bt u bng du + bo cho lisp l hm, cc phn tng sau n sl tham s.Dliu sc chia lm 2 loi :
Snguyn (ko c du chm) Sthp phn (c du chm)
Kt qutrvsc 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
Hm tr(-)
Hm nhn (*)
Hm chia (/)
Command: ( / 120 10 3)4
Command: ( * 3.75 3.775)14.0625
Lisp lu trti 14 sthp phn nhng kt qutrvtrn mn hnh schc 6 chsc nghatnh ttri sang phi.
V d: 18-[(3+6+9):(9-6)-12]Command: (- (- 18 (/ (+ 3 6 9) (- 9 6))) 12)0
3. Bin trong LispK hiu
Tn bin cng nhtn hm ko phn bit chhoa, chthng. Bin khng nht thit cn khai bo
Gn gi trcho binSdng hm Setq gn gi trcho mt bin. C php nhsau :
(SetQ Symbol1 value1 [symbol2 value2] )Ging nhcc hm khc, hm SetQ trvmt gi tr. Gi trny 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
Phm vi binBin chc tc dng trong phm vi bn v
7/22/2019 Lap trinh VBA.pdf
10/101
KS. GV. TRN ANH BNH
10
Sdng bin trong dng lnhCommand : (setq x 10)10Command : (!X)10
Command : circle
3P/.. : Nhp ta tmDiameter : !x
4. File chng trnh Lisp4.1.File lispQuy nh chung :
File Lisp c phn mrng l *.lsp Mt biu thc c thvit trn nhiu dng Cc biu thc khng phn bit chhoa, chthng Chui ch thch bt u bng du chm phy
Cc ti file lisp vo trong AutoCAD Sdng hm Load
Command : (Load E:/autoLisp/CHT.lsp)HocCommand : (Load E:\\toLisp\\T.lsp)
Sdng hm Appload (Application Load)
4.2.Hm tto
7/22/2019 Lap trinh VBA.pdf
11/101
KS. GV. TRN ANH BNH
11
Ngoi cc hm AutoCAD cung cp, ta cn c thto ra cc hm tto.
nh ngha hm ttoBng cch sdng hm Defun (define function). C php nhsau :(Defun Function_Name Argument_List expresstion)
Function_Name : tn hm tto. Tun theo quy tc t tn bin Argument_List : gm hai phn ngn cch nhau bi du /, Phn thnht cha cc tham s
cn thit khi gi l hm. Phn thhai chcc bin cc bca hm. Expression : cc biu thc tnh ton ca hm. Cc biu thc ny sln lt c tnh ton
theo thtttrn xung di.
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 bl bin c nh ngha trong phm vi hm v gi trca n smt i khi hm
kt thc.
4.3.To lnh AutoCAD mi.Tham sC:c thsdng hm tto nhl mt lnh trong AutoCAD, ta t k hiu C: vo trc tn
hm trong phn nh ngha hm tto.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
Tham sS::StartupKhi khi ng AutoCAD, hm S::startup nh ngha trong file ACADRx.lsp sc tng gi
v thi hnh. y l hm duy nht c tnh cht ny.
5. Nhp dliu5.1.Nhp dliu ngi dng
Nhp ta mt im : Hm getpoint(GetPoint [pt] [prompt])Hm ny s tr vmt danh sch. Danh sch ny thuc sng danh sch lu trd liu (Data
Storage list). Loi danh sch ny khc vi biu thc ch, phn tu tin ca danh sch khng phil mt hm. Khi ta nhp dliu vo, AutoCAD nhn bit c kiu dliu danh sch ta dng hmQuote (hoc du ).
V dta vng thng i qua mt im c ta (2,2,0) v mt im nhn c tngi 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)
7/22/2019 Lap trinh VBA.pdf
12/101
KS. GV. TRN ANH BNH
12
)Trnh tcc tham shm Command tng ng vi trnh tnhp lnh ti dng nhc. C php
y : (Command [argument])
Nhp snguyn (interger) : Hm getintC php : (Getint [prompt])
V d: Command : (Getint \n Enter an integer)12.0Requires an integer valueTry again : 2323
Nhp dliu sthc (real) : Hm GetrealC php nhsau : (Getreal [Prompt])
Nhp dliu kiu chui (string)C php nhsau : (Getstring [Prompt])
5.2.Kim sot dliu nhp voHm getint cung cp danh sch cc gi trnhp vo hp lbng cch gn cc bit kim tra (bit
code) v danh sch cc tkha. Cc loi hm nhp dliu nhGetpoint, getcorner, getint, Getreal,(ngoi trhm GetstringO u bkim sot bi hm initget. Hm c tc dng i vi hm nhp dliu tip theo sau n. C php ca hm nhsau :
(Initget [bits] [string])
Bits l mt snguyn. Gi trtham sny bng tng cc bit code tng ng vi cc chkim sot m t among mun
Tham sString cha danh sch cc tkha.Bit code Chkim sot
1 Gi trphi c nhp vo; khng chp nhgi trnull2 Gi trnhp vo phi khc khng4 Gi trnhp vo khng c l sm128 Cho php nhp chui k tkhng c trong danh sch cc tkha. Cc
bit code khc sc u tin trc.
Hm GetKword
Hm ny yu cu nhp dliu dng tkha. C php nhsau :(GetKWord [Prompt])Hm getkword chchp 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 ? ))
5.3.Bin hthngLy gi trbin hthng(Getvar Varname)
Gn gi trbin hthng(Setvar varname value)
Bin hthng quan trng
CmdEcho Value =1 : Kt qutnh ton trung gian sc hin ln trn mn hnh. Value =0 : Kt qutnh ton trung gian sko c hin ln trn mn hnh.
7/22/2019 Lap trinh VBA.pdf
13/101
KS. GV. TRN ANH BNH
13
6. Mt shm cbn6.1.Hm chuyn kiu dliuChuyn i mt sthnh sthc : Hm (Atof String)
Command : (Atof 15.4a)15.4
Chuyn i mt chui thnh mt snguyn : hm (Atoi String)Command : (Atof 15.4a)15
Chuyn i mt sthnh mt chui (real to string):Hm (Rtos Number [mode [precision]]) Precision : schsthp phn Mode l kiu s(scientific, decimal,)
Mode Format
1 Scientific
2 Decimal
3 Engineering4 Architectural
Number : ssc chuyn qua kiu (mode) vi schsthp phn c quy nh trong(precision) sau c chuyn thnh chui tng ng. Nu khng c 2 tham sny thAutoCAD sly bin hthng trong Units thc hin php ton.
V d(Rtof 215 2) trv: 2.15E+2
Chuyn i mt snguyn thnh chui : hm (Itoa integer)V d:
(Itoa 21) trv21(Itoa 30.2) trvli
Hm ASCII
C php : (Ascii String) : chuyn i k tu tin ca chui thnh m k tascii tng ng.V d:
(Ascii Abc) trv65.(Ascii 9Ac) trv57.
Hm CHR
C php : (Chr Integer) : chuyn i m ascii thnh k ttng ng trong bn m ASCII. Ccm ascii chun c gi trt32 n 126.
6.2.Hm ton hcHm kim sot dng s
(Fix Number) : trvphn nguyn ca mt sthc. (Float Number) : Chuyn sNumber thnh kiu sthc. (Abs Number) : trvtrtuyt i ca mt s.
Hm max,min
(Max Number1 Number 2 ) Ch khng chp nhn chui. (Mim Number1 Number 2 )
Hm lng gic (Sin Angle) Trvgi trca mt gc, n vAngle l radians. (Cos Angle) (Atan Angle). Gi trtrvtpi/2 n pi/2
Hm ly tha, khai cn, logarit
7/22/2019 Lap trinh VBA.pdf
14/101
KS. GV. TRN ANH BNH
14
(Expt Base Power)(Expt 4.0 4) trvgi tr64.0
(SQRT Number) (Log Number) trvlogarit ca mt s. (Exp Number) Trve mn.
6.3.Cc hm vkhong cch v gc oHm Cvunit (convert units)
C php : (cvunit Value From To)
Value : snguyn, sthc, hoc ta im 2D, 3D From n vo hin ti (kiu chui) To n vo schuyn sang (kiu chui)
V d:(Cvunit Pi RADIANS DEGREE) trv3.14159(Cvunit (1 3) FT IN trv(12.0 36.0)
Hm Angle
C php (Angle PT1 PT2) : Trv gc (Radians) gia ng thng i qua 2 im vi trc Xtrong mt phng XY. Nu 2 im ny khng nm trn mt phng XY, n sc chiu ln mt phngXY v tnh gc.
V dCommand : (Angle (5 6.10) (quote (10 5)))6.06664
6.4.Cc hm vchuiHm hin ththng tin kiu chui
C php : (Princ [Expr [file]] - Hm ny in ra mn hnh hoc in ra file C php : (Print [Expr [file]] - Hm ny in ra mn hnh hoc in ra file trn mt dng mi. C php : (Prin1 [Expr [file]] - Hm ny in ra mn hnh hoc in ra file trn mt dng
mi.V d:
Command: (princ "\nabc \nabc\n")abcabc"\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 tc bit cho hm Princ
\n : xung dng \t : cch ra nhmt khong Tab
Hm StrCase
C php : (StrCase String [switch])
Nu switch nill hm strvchui String trong cc k thoa c chuyn thnh chthng
Nu Switch ko c hoc bng nill th hm strvchui String trong cc kthng sc chuyn thnh k thoa.
Hm StrCat
C php : (StrCat String [string2]) : kt ni cc chui tham s.
Hm StrLen
7/22/2019 Lap trinh VBA.pdf
15/101
KS. GV. TRN ANH BNH
15
C php : (StrLen String [string]) : trvchiu di ca mt xu. Nu c nhiu xu hm strvtng chiu di ca cc xu tham s.
Hm SubStr
C php : (SubStr String Start [length]) : Trvmt xu con ca xu String bt u tvtr Startv di length k t. Nu khng c length, n sly n tn cui xu.
7. Xl danh sch7.1.Tng quanDanh sch (List) c phn lm 3 loi chnh
Biu thc (Expression list) : cha tn hm v cc tham sca hm. Biu thc trvgitr
Ta dim (Point Coordinate list) : c hm quote hoc du ng trc. Cha ta X, Y, Z ca mt im.
Kho dliu (Data storage List) : Cng nhPoint coordinate list. Nhng n cha dliubt k.
7.2.To danh schTt cc dliu 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 ccbin. Nhng khi s lng lu trd liu tng ln. Lisp khng cung cp kiu d liu ng v mngng. gii quyt vn ny, ta sdng kiu dliu List.
Mt trong nhiu phng php to ra danh sch l sdng hm ListC php : (List expression)V d
Command : (set q L1 (list abc 10 30.0 hoang)(abc 10 30.0 hoang)Trong v dtrn L1 c 4 phn t.
Ngoi ra ta c thsdng hm Quote hoc du ng trc. V d:Command: (setq a1 (quote("abc" 1 30 40)))("abc" 1 30 40)
HocCommand: (setq a1 '("abc" 1 30 40))("abc" 1 30 40)
Skhc nhau cbn gia List v quote (hoc ). List to ra danh sch nh gi tr, khi to radanh sch, lisp snh gi trv kiu dliu tng ng cho cc phn t trong danh sch. Cn quoteto ra danh sch cha nh gi tr. Chng ta xem xt v dsau :
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 xl danh sch cbnHm Car
C php : (Car List) : Dng ly gi tru tin ca danh sch.V d:
Command : (Car a1)abc
Hm CDR
C php : (CDR list) : To ra mt danh bng cch loi bphn tu tin ca danh sch gc.V d:
7/22/2019 Lap trinh VBA.pdf
16/101
KS. GV. TRN ANH BNH
16
Command : (setq a3 (CDR a1)(1 30 40)
Hm CADR, CADDR
(CADR list) trvphn tth2 ca danh sch. (CADDR list) trvphn tth3 ca danh sch.
Hm Last
C php : (Last list) : Trvphn tcui cng ca danh sch.
Hm Length
C php : (Length List) : trvslng phn tc trong danh sch.
7.4.Hm xl danh sch nng caoHm Assoc (association)C php : (Assoc Item AList) : Danh sch Alist phi cha phn t Item, v l danh sch phc
hp. Hm strvmt danh sch con ca Alist m phn tu tin l Item. Nu khng tm thy phntItem trong Alist th hm strvgi trnill.
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
Hm Cons (construct)
C php : (Cons Item List) bxung phn tItem vo vtr u tin ca danh sch.V d:Command : (Setq AL (list (Cons COLOR 4) (Cons LAYER 0)
Hm Member
C php : (Member Item list) : trvmt danh sch bt u bng phn tItem.V d:
Command : (Setq L (1 2 3 4 5)( 1 2 3 4 5)
Command : (member 3 L)(3 4 5)
Hm AppendC 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 kin8.1.Biu thc iu kinCc hm so snh
Hm C php Gii thch
= (= Atom Atom ..) Trvgi trT nu tt ccc phn tbng nhau.Tham skiu shoc kiu chui.
/= (/= Atom Atom ..) TrvT nu cc phn ti mt khc nhau
7/22/2019 Lap trinh VBA.pdf
17/101
KS. GV. TRN ANH BNH
17
< (< Atom Atom ..) TrvT nu mi phn tnhhn phn tngbn phi n
=; > Tng t Tng t
EQ (EQ Expr1 Expr2) So snh strng nhau ca 2 danh sch.
Equal (Equal Expr1 Expr2
[fuzz]
Hm nh gi trcc biu thc v kim tra cc gitrny c bng nhau hay khng. i vi d liukiu sFuzz quy nh sai strong php so snh
Cc hm kim tra dliu
Hm C php Gii thch
Atom (Atom Item.) Trvgi trNil nu Item l list
Listp (Listp Item) TrvT nu Item l danh sch hoc gi trNill
Numberp (numberp Item) TrvT nu gi trl snguyn
Minusp (minusp Item) TrvT nu gi trl sm
Zerop (Zerop Item) TrvT nu dliu =0 or 0.0
Null (Null Item) Kim tra mt bin c rng hay ko
Type (Type Item) Trvkiu dliu ca bin
8.2.Hm If v PrognCu trc rnhnh vi IfC php :
(If LogicExpr ThenExpr) (If LogicExpr ThenExpr ElseExpr)
Ch :
Hm If chchp nhn mt biu thc ThenExpr v ElseExpr. Nu sdng nhiu hn mtbiu thc th phi sdng 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 . Sdng hm (Distance PT1PT2).
8.3.Hm logic(Setq A 10 b 20 c 30)
Hm C php V d
And (And Expression .. ) (And (> 10 0) (< 10 20)) trvgi trT
Or (or Expression .. ) (Or (= A 10) (< b 0)) trvgit trT
Not (Not Item) (Not nill) = T. (Not T) = nill
7/22/2019 Lap trinh VBA.pdf
18/101
KS. GV. TRN ANH BNH
18
8.4.Hm Cond (Condition)Hm if cho php ta rti a 2 nhnh. Hm Cond gip ta rnhiu hn 2 nhnh. C php hm nh
sau :(Cound
(Test1 result1 )(Test2 result2 )(Testn resultn )
)Bi tp
Gii phng trnh bc 2.9. Vng lp
9.1.Vng lp cbnVng lp Repeat.Hm Repeat to ra vng lp vi sln nht nhC 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 repeatLp 10 ln khi I = 10+2*10 = 30; j= 2^10.
Vng lp While.Hm while to ra vng lp c iu kin. Vng lp ny sjt thc khi iu kin Testexpr khng
tha mn.C php : (While testexpr Expr ..)V d: Vng 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
9.2.Hm foreachC php : (Foreach Name List Expr )Hm Foreach duyt tng phn ttrong danh sch LIST. Ti mi thi im, gi trca tng phn
ttrong danh sch sc gn cho bin Name. Sau cc biu thc Expr sc 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 trth (itoa i) trong danh sch l (itoa so)))
)
7/22/2019 Lap trinh VBA.pdf
19/101
KS. GV. TRN ANH BNH
19
10.Tp hp cc i tng c chn10.1. Hm Ssget
Hm SSget
C php : (Ssget [Mode][PT1][PT2][PT-List][Filter-List])
Mode Phng php chn C phpNone Sdng mi phng php chn (hay dng) (Ssget)
Chn i tng i qua im Point (Ssget point)
L Last: chn i tng c to ra cui cng (Ssget l)
P Previous (ssget p)
W Window (Ssget W PT1 PT2)
C Crossing window (Ssget C PT1 PT2)
F Fence (Ssget F PT-list
WP Window polygon (ssget wp PT-list
CP Crossing polygon (ssget cp PT-list
X All (ssget x)
V d:Setq PT1 (0 0 0) PT2 (4 0 0) PT3 (4 4 0) PT4 (0 4 0))(setq SS (ssget WP (list pt1 pt2 pt3 pt4)))
Bng Group code.
Sdng filterV d:
(ssget ( (0 . text) (40 . 2.5)))(ssget ( (0 . line) (62 . 4)))
Sdng cc php so snh. Ch cc php so snh chp dng i vi cc group code c kiu s(nguyn hoc thc). Cc php so snh bao gm * = /= != > = ,
7/22/2019 Lap trinh VBA.pdf
20/101
KS. GV. TRN ANH BNH
20
11.Lp trnh vi csdliu ca AutoCAD.11.1. Ly Record dliu i tngHm EntGet (entity get)C php : (ENTGET entname) : trvdanh sch biu din Record dliu ca i tng c m
l entname.
11.2. Hiu chnh record i tngCc bc hiu chnh
To ra record mi cha cc field thay i bng hm Subst. Thay thRecord cca i tng bng record mi bng hm Entmod. Cp nht sthay i ca i tng ln mn hnh (thay cho lnh regen). Sdng hm
EntUpd
Hm Subst
to ra mt record mi bng cch si mt sphn tca record c.C php : (Subst new_Item Old_Item list)
Nu khng tm thy old_Item, hm strvdanh sch ging danh sch ban u.V d:
(Setq al (A 22 34 yes B 22))(Subst 22 11 al) trvA 11 34 yes B 22(setq El ((-1.) (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))
Hm Entmode
Hm entmode thay threcord ctrong csdliu 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 stm trong csdliu i tng c m nhtrong code -1 v thc hin vic thay th.Cc trng hp khng ththay thc hm strvgi trnill : Khng tm thy i tng Thay i m i tng Thay i m handle Hiu chnh i tng viewport Thay i kiu i tng,,,
Hm Entity update
C php : (EntUpd Ename) : Dng cp nht sthay i record ca i tng c tn l Enameln mn hnh ha.
11.3. To i tng mi.Hm (entmake Elist) to ra i tng miCc quy nh cho elist
Tham selist khng nht thit phi c cc thng s Field thnht bt buc phi l group code 0 cha kiu i tng M i tng AutoCAD stt khi i tng c to ra
12.Phn tch v d:;*******************************************************************************;* TRAN ANH BINH CDC-HUCE *
;*******************************************************************************(defun myerror (s) ; If an error (such as CTRL-C) occurs
; while this command is active...
7/22/2019 Lap trinh VBA.pdf
21/101
KS. GV. TRN ANH BNH
21
(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)
);*******************************************************************************(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))
7/22/2019 Lap trinh VBA.pdf
22/101
KS. GV. TRN ANH BNH
22
(SETQ DS (SUBST N13 O13 DS))(SETQ DS (SUBST N14 O14 DS))(ENTMOD DS)
))(SETQ DEM (+ DEM 1))
))(COMMAND "UCS" "P")(SETVAR "CMDECHO" CMD)(SETVAR "OSMODE" OSM)(setq *error* OLDERR) ; Restore old *error* handler(PRINC));******************************************************************************
7/22/2019 Lap trinh VBA.pdf
23/101
KS. GV. TRN ANH BNH
23
IV. Ngn nglp trnh Visual LispV. Cbn vngn nglp trnh Visual BasicVI. Lm quen vi VBA.
1. VBA ProjectsChng trnh VBA c tchc trong cc project, 1 Project l tp hp cc module: m, lp,
formVBA Project c thc lu trong file bn vDWG (chnhng) hoc c lu trong 1 file
ring (*.DVB)2. To mi project MVBA Manager,
Chn menu Tools/Macro/VBA Manager. Hoc trn command line, g lnh VBAMAN.
To mi VBA projectMVBA Manager, chn New, project mi sc tn l ACADProject.
i tn project.Bn phi sdng VBA IDE, nhn Alt+F11, click phi chut vo tn project, nhn Rename
Lu ct (save) projectProject nhng c lu khi lu bn vProject ko nhng phi lu qua VBA IDE (chc nng File/Save) hoc VBA Manager
Ti (load) 1 project cProject nhng c load ngay khi bn mbn vcha nProject khng nhng c lu li di dng file *.DVB, load project ny: trn ca sVBA
Manager, nhn nt Load.Trn hp thoi OpenFile, chn file DVB can moxem ni dung cua Project, nhan Alt+F11 hoac dung lenh VBAIDE tren dong command-line
3. Tchc cc project vi VBA ManagerGii thiu chc nng cc nt trong hp thoi VBA Manager
4. Son tho project vi VBA IDE
7/22/2019 Lap trinh VBA.pdf
24/101
KS. GV. TRN ANH BNH
24
Gii thiu cc ca sca VBA IDE
Ca sProject ManagerObjects (i tng)Forms
Gm cc hp thoi do ngi lp trnh to ra, sdng trong projectModulesCc hm dng chung trong ton bProject c tchc trong cc module ring (phthuc vo
chc nng ca chng)Class Modulesnh ngha cc lp i tng ca ngi dngthm 1 component (form, module, class module) vo projectChn project cn thm thnh phn - componentTrn menu [Insert], chn [UserForm], [Module], [Class Module] thm cc thnh phn ny
vo ProjectModule, Class module c son tho trn ca sCodeUserForm c son tho trn ca sUserFormson tho cc thnh phnTrn ca sProject Explorer, chn thnh phn cn son tho
Nhn nt [View code] mca sCodeNhn nt [View object] mca sUserFormSdng Option Explicit
Thm cc ActiveX :
7/22/2019 Lap trinh VBA.pdf
25/101
KS. GV. TRN ANH BNH
25
Sdng trnh son tho Code : TextEditor.
5. Lm vic vi cc Macro mca sMacro
Chn menu Tools/Macro/Macro.
Hoc sdng lnh VBARUN trn dng command-lineHp thoi Macro lit k tt ccc hm ca bn v, project (tutheo la chn ti mc [Macro in])
chy MacroMhp thoi Macro
Nhn nt [Run]
sa MacroMhp thoi Macro
Nhn nt [Edit]
to Macro miTrn mc [Macro name], nhp vo tn ca MacroNhn nt [Create]Trn hp thoi [Select project] chn project to Macro
VII. Cn bn vVBA.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 dhiu qun l tt ccci tng v mi quan hgia chng.
2. Object Hierarchy.Gi thiu :
7/22/2019 Lap trinh VBA.pdf
26/101
KS. GV. TRN ANH BNH
26
7/22/2019 Lap trinh VBA.pdf
27/101
KS. GV. TRN ANH BNH
27
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 thc chng c tao ra bng cch sdngcc kthut tng tnhau. Mi mt collection c mt method thm mt object vo collection. Huht cc collections sdng Add method cho mc ch ny. V d, thm mt thc th ta sdngmethod Add. For exam-ple, to add a line you would use the AddLine method.
4. Property & Method (thuc tnh & phng thc).Mi mt Object cha nhiu thuc tnh v phng thc khc nhau.
5. 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 phhbt u bng
ThisDrawing.
Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As DoubleDim LineObj as AcadLinestartPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0
Set LineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
truy cp i tng thng qua mt bin c khai bo trc. u tin ta phi khai bo binvi kiu tng ng, sau t bin ln cp trn ca i tng trong cy phh.
V d: on code sau khai bo bin (moSpace) thuc kiu AcadModelSpace vgn bin ny cho lp model space hin hnh:
Dim moSpace As AcadModelSpaceSet moSpace = ThisDrawing.ModelSpaceThe following statement then adds a line to the model space using the userdefinedvariable:Dim startPoint(0 To 2) As Double, endPoint(0 To 2) As DoubleDim LineObj as AcadLinestartPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0endPoint(0) = 30: endPoint(1) = 20: endPoint(2) = 0
Set LineObj = moSpace.AddLine(startPoint,endPoint)
Truy cp nApplication Object
Bi v ThisDrawing object cung cp link ti Document object, bn cng c th trdn ti thmc gc ca cy phh (Application object), Chng ta cng c th truy cp n Document objecttrong object hierarchy thng qua ng dn vng. Document object c mt thuc tnh gi lApplication, n cung cp link ti Application object.
V d: ThisDrawing.Application.Update
6. Truy cp n i tng Collection trong Object Hierarchy.Hu ht cc collection objects c thc truy cp n trong Document object. Document object
cha thuc tnh cho mi i tng trong Collection objects. V d, V dsau nh ngha mt bin vgn n cho tp hp i tng layer ca bn vhin hnh:
Dim layerCollection as AcadLayersSet layerCollection = ThisDrawing.LayersDocuments collection, MenuBar collection, and MenuGroups collection
7/22/2019 Lap trinh VBA.pdf
28/101
KS. GV. TRN ANH BNH
28
c truy cp thng qua Application object. The Application object cha mt thuc tnh cho mii tng nm trong cc collection ny. V d, on code sau nh ngha mt bin v gn chng chotp hp i tng MenuGroups cho ng dng.
Dim MenuGroupsCollection as AcadMenuGroupsSet MenuGroupsCollection = ThisDrawing.Application.MenuGroups
Thm mt i tng vo Collection.
Dim newLayer as AcadLayerSet newLayer = ThisDrawing.Layers.Add("MyNewLayer")
Truy cp n mt i tng trong collection.
Truy cp n mt i tng thuc tp hp, sdng Item method. Ta c thsdng tn ca Itemhoc ch s (s th t ca Item) trong tp hp. Lu l Item method l method mc nh cacollection. V d, 2 cch vit sau l nhnhau :
ThisDrawing.Layers.Item("ABC")ThisDrawing.Layers("ABC")
Xo mt i tng khi Collection Object
Sdng Delete method. V d, on m sau xo layer ABC:Dim ABCLayer as AcadLayerSet ABCLayer = ThisDrawing.Layers.Item("ABC")ABCLayer.Delete
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 ngkhc nhVB, VBA
trong Excel, Word,. Vic u tin ta phi Tham chiu n AutoCAD Type Library. lm vic nyta lm nhsau :
Chn References option tProject menu, hp thoi Reference dialog hin ln. Trong Referencesdialog box, chn Type library for AutoCAD, and then click OK.
Khi nim vType library for AutoCAD. Cc i tng, thuc tnh v phng thc c a rabi k thut tng ho i tng c cha mt type library. Mt type library l mt file hoc mtphn ca file miu t kiu ca mt hoc nhiu i tng.Type libraries khng cha Object; chngcha cc thng tin vObject. truy cp n type library, applications v browsers c thxc nhc c trng ca tng object, nhl giao din ca i tng, tn v a chca tng thnh phn cadao din .Trc khi bn sdng, Bn phi tham chiu n type library. AutoCAD VBA s tthamchiu n AutoCAD type library.i cc mi trng khc bn phi to tham chiu ti AutoCAD typelibrary, acax16enu.tlb. File ny mc nh nm trong thmc C:\program files\common files\autodeskshared.
Tuy nhin, stt hn nu bn add type library reference v nhng u im sau :- Chng trnh schay nhanh hn, n nh hn.- Function, properties, methods c thc kim tra khi bn nh code.- Chc nng tm kim v thxung sau du chm ca cc i tng.
Sub Ch2_ConnectToAcad()Dim acadApp As AcadApplication
On Error Resume NextSet acadApp = GetObject(, "AutoCAD.Application.16")If Err Then
Err.ClearSet acadApp = CreateObject("AutoCAD.Application.16")If Err Then
7/22/2019 Lap trinh VBA.pdf
29/101
KS. GV. TRN ANH BNH
29
MsgBox Err.DescriptionExit Sub
End IfEnd IfMsgBox "Now running " + acadApp.Name + " version " + acadApp.Version
End Sub
Dim acadDoc As AcadDocumentSet acadDoc = acadApp.ActiveDocumentacadApp.visible = True
Nu AutoCad ang chy GetObject skhng sinh ra li. Ngc li nu sinh ra li, tc l CADcha chy. Khi CreatObject s khi ng CAD. Nu c nhiu session ca CAD ang chy thchng trnh sly Session u tin trong Windows Running Object Table.
7/22/2019 Lap trinh VBA.pdf
30/101
KS. GV. TRN ANH BNH
30
CHNG 2 : LM VIC VI MI TRNG AUTOCAD
I. M, ng v ghi li bn v1. Mbn v.
mbn v, sdng phng thc Open method. Sdng hm DIR ca Visual Basic kimtra stn ti ca bn vtrc khi m.Bn cng c ththay i tn v ng dn ca bn vtrongng dn mc nh ca AutoCAD (Mc Option ca CAD).
Sub Ch3_OpenDrawing()Dim dwgName As StringdwgName = "c:\campus.dwg"If Dir(dwgName) "" Then
ThisDrawing.Application.Documents.Open dwgName
ElseMsgBox "File " & dwgName & " does not exist."
End IfEnd Sub
2. To mi bn v.To mi mt bn v, sdng phng thc Add.
Sub Ch3_NewDrawing()Dim docObj As AcadDocumentSet docObj = ThisDrawing.Application.Documents.Add
End Sub
3. Lu bn v.ghi bn vhin hnh. c 2 phng thc sau :
Sub Ch3_SaveActiveDrawing()ThisDrawing.Save ghi bn vhin hnh.ThisDrawing.SaveAs "MyDrawing.dwg" ghi bn vvi tn mi.
End Sub
kim tra xem bn v c ghi hay cha, ta sdng hm Saved :
Sub Ch3_TestIfSaved()If Not (ThisDrawing.Saved) Then
If MsgBox("Do you wish to save this drawing?", vbYesNo) = vbYes ThenThisDrawing.Save
End IfEnd If
End Sub
II. iu khin ca sbn v1. iu khin ca sAutoCAD.
Mc ch : Khi bn lm vic vi 1 ng dng khc, bn cn nhp s liu tngi dng chnghn. Bn cn thu nhhoc kim tra tnh trang ca ca sAutoCAD.
Sdng methods v properties c trong Application object, bn c ththay i position, size vvisibility ca ca sAutoCAD. Bn cng c thsdng WindowState property minimize,maximize v c thkim tra tnh trng hin ti ca ca sAutoCAD.
7/22/2019 Lap trinh VBA.pdf
31/101
KS. GV. TRN ANH BNH
31
Cc thuc tnh ca Position v size ca Application window l WindowTop, WindowLeft,Width, and Height properties
iu chnh ca sAutocad :Sub Ch3_PositionApplicationWindow()
ThisDrawing.Application.WindowTop = 0
ThisDrawing.Application.WindowLeft = 0ThisDrawing.Application.width = 400ThisDrawing.Application.height = 400
End Sub
Maximize the Application window
Sub Ch3_MaximizeApplicationWindow()ThisDrawing.Application.WindowState = acMax
End Sub
Minimize the Application window
Sub Ch3_MinimizeApplicationWindow()
ThisDrawing.Application.WindowState = acMinEnd Sub
Ly tnh trng ca Application windowSub Ch3_CurrentWindowState()
Dim CurrWindowState As IntegerDim msg As StringCurrWindowState = ThisDrawing.Application.WindowStatemsg = Choose(CurrWindowState, "normal","minimized", "maximized")MsgBox "The application window is " + msg
End Sub
Make the Application window invisibleSub Ch3_HideWindowState()
ThisDrawing.Application.Visible = FalseEnd Sub
2. iu khin ca sbn v.iu khin ca s bn v cng ging nhiu khin ca sAutoCAD, v d nhbn c th
minimize, maximize, reposition, resize, v kim tra tnh trng ca bt kDocument window no.Document window c th minimized hoc maximized bng cch s dng thuc tnh
WindowState, v bn c thly tnh trng ca Document window thng qua thuc tnh WindowState.
V dnhta gn cho Width and Height ca bn vhin hnh l 400 x 400 pixel.Sub Ch3_SizeDocumentWindow()
ThisDrawing.Width = 400ThisDrawing.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 = acMinEnd Sub
Find the current state of the active document window
7/22/2019 Lap trinh VBA.pdf
32/101
KS. GV. TRN ANH BNH
32
Sub Ch3_CurrentWindowState()Dim CurrWindowState As IntegerDim msg As StringCurrWindowState = ThisDrawing.WindowStatemsg = Choose(CurrWindowState, "normal","minimized", "maximized")MsgBox "The document window is " + msg
End Sub
3. iu khin shin thbn trong ca sbn v.Bn cng c ththay i shin thbn trong ca sbn vbng cch sdng phng thc
views, viewports, v zooming. AutoCAD ActiveX cung cp rt nhiu cch iu khin shin thbn trong ca sbn v.
Di chuyn n cc vng khc nhau trn bn v. Phng to thu nhhay di chuyn n cc vtr khc nhau trn bn v. Ghi li cc khung nhn v ly ra khi cn thit Hin thnhiu khung nhn ca mt bn vbng cch sdng splitting the screen trong nhiu
tiled viewports.
Position v Size the Document WindowUse the Document object to modify the position andsize of any document window. .
Define a Zoom Window
Sdng ZoomWindow or ZoomPickWindow method.Sub Ch3_ZoomWindow()' ZoomWindowMsgBox "Perform a ZoomWindow with:" & vbCrLf &"1.3, 7.8, 0" & vbCrLf & _ "13.7, -
2.6, 0", , "ZoomWindow"
Dim point1(0 To 2) As DoubleDim point2(0 To 2) As Double
point1(0) = 1.3: point1(1) = 7.8: point1(2) = 0point2(0) = 13.7: point2(1) = -2.6: point2(2) = 0ThisDrawing.Application.ZoomWindow point1, point2' ZoomPickWindowMsgBox "Perform a ZoomPickWindow", , "ZoomPickWindow"ThisDrawing.Application.ZoomPickWindowEnd Sub
III. Ly v thit lp cc thng shthng1. Ly v thit lp cc bin hthng
Trong cy phh, Document object cung cp 2 phng thc SetVariable v GetVariable thitlp v ly gi trca cc bin hthng ca AutoCAD.
V d: ThisDrawing.SetVariable "MAXSORT", 100
2. Grid v Snap. Sdng Snap, Grid Alignment
Cc iu khin Snap v Grid nm trong class Viewport.
Sub textsnap()Dim Vp As AcadViewport
Set Vp = ThisDrawing.ActiveViewportVp.SnapOn = True Bt chsnap lnDim newBasePoint(0 To 1) As DoublenewBasePoint(0) = 1: newBasePoint(1) = 1
7/22/2019 Lap trinh VBA.pdf
33/101
KS. GV. TRN ANH BNH
33
Vp.SnapBasePoint = newBasePoint ' Thay i gc ca snapDim Xspacing as Double, ySpacing as DoublexSpacing =20: ySpacing=20VP.SetSnapSpacing(xspacing,ySpacing) ' Thay bc nhy ca chutDim rotationAngle As DoublerotationAngle = 0.575Vp.SnapRotationAngle = totationangle ' Thay i gc quay ca Snap sang 30 o hay 0.575
radians' reset the viewportThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
End Sub
Ch : Vi cc lnh hiu chnh cc active Object nh active layer, active linetype,ActiveTextStyle, ta khng th dng phng thc update nhkhi ta hiu chnh cc i tng thngthng c. Thay i cc active object skhng c hin thngay trn bn v. Mun quan st sthay 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 ccc active object.
Cc iu khin Grid cng tng tnhSnap.
Sdng Ortho ModeThisDrawing.ActiveViewport.OrthoOn = True
3. Ly v thit lp bin hthng 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 ccc registry lu trong options trong Options dialog box.
Bn c thty bin tt ccc thit lp ca AutoCAD bng cch sdng properties trong cc Objectny. Cc Object bao gm : PreferencesDisplay PreferencesDrafting PreferencesFiles PreferencesOpenSave PreferencesOutput PreferencesProfiles PreferencesSelection PreferencesSystem
PreferencesUsertruy xut n Preferences object, sdng cc thuc tnh ca Application object:Dim acadPref as AcadPreferencesSet acadPref = ThisDrawing.Application.Preferences
V dsau thit lp 2 ru ca chut di kn mn hnh :Sub Ch2_PrefsSetCursor()
Dim acadPref As AcadPreferencesSet acadPref = ThisDrawing.Application.PreferencesacadPref.Display.CursorSize = 100
End Sub
IV. Sdng command line trong VBAS dng SendCommand method gi lnh mt cch trc tip cho AutoCAD. Phng thc
SendCommand sgi mt chui n ti dng lnh command line. Chuit phi cha cc tham scho
7/22/2019 Lap trinh VBA.pdf
34/101
KS. GV. TRN ANH BNH
34
lnh, th tvit trong chui nh vit trong macro hc trong phn Customize menu. . Phm cchhoc m ASCII tng ng stng ng vi phm ENTER trn bn phm keyboard.
V dsau vmt ng trn tm A(2, 2, 0), bn knh R= 4. sau sdng lnh Zoom All.Sub Ch3_SendACommandToAutoCAD()
ThisDrawing.SendCommand "_Circle 2,2,0 4 "
ThisDrawing.SendCommand "_zoom a "End Sub
V. Nhp dliu ngi dngCc iu khin nhp dliu ngi dng nm trong class Utility.
1. Nhp ChuiGetString method prompts cho php ngi dng nhp mt chui tbn dng lnh.C php nhsau :
RetVal = UtilityObject.GetString(HasSpaces[, Prompt])
HasSpacesiu khin phm spaces khi bn nhp chui.
0 : Spaces Bar khng cho php (SPACEBAR skt thc nhp chui) 1 : Chui nhp vo c thcha du cch (ENTER skt thc nhp chui).
Prompt khng bt buc, l chui sc a ra ti dng lnh vi mc ch thng bo.RetValgi trtrv, kiu Variant vi 3 ta (3D).
V d:Sub Ch3_GetStringFromUser()
Dim retVal As StringretVal = ThisDrawing.Utility.GetString(1, vbCrLf & "Enter your name: ")MsgBox "The name entered was: " & retVal
End Sub
2. Nhp ta mt imGetPoint method prompts cho php ngi dng nhp ta mt im t bn bn phm hoc
bng mt kch chut tri trn bn vC php nhsau :
RetVal = UtilityObject.GetPoint([Point][, Prompt])
Pointkhng bt buc, nu c sxut hin dy thun tim ny. Point kiu Variant vi 3 ta (3D).
Prompt khng bt buc, l chui sc a ra ti dng lnh vi mc ch thng bo.RetValgi trtrv, kiu Variant vi 3 ta (3D).
V d:Sub Ch3_GetPointsFromUser()Dim startPnt As VariantDim endPnt As VariantDim prompt1 As StringDim 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 pointstartPnt = 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 enteredThisDrawing.ModelSpace.AddLine startPnt, endPntThisDrawing.Application.ZoomAll
7/22/2019 Lap trinh VBA.pdf
35/101
KS. GV. TRN ANH BNH
35
End Sub
3. Nhp mt k tin hnh cho OptionGetKeyword Method prompts cho php ngi dng nhp mt k tin hnh tbn bn phm
cho mt mc la chnC php nhsau :
RetVal = UtilityObject.GetKeyword([Prompt])
Prompt khng bt buc, l chui cha la chn sc a ra dng lnh vi mc ch thngbo la chn.
RetValgi trtrv, kiu chui.
V d:Sub Ch3_KeyWord()
Dim keyWord As StringThisDrawing.Utility.InitializeUserInput 1, "Line Circle Arc"keyWord = ThisDrawing.Utility.GetKeyword(vbCrLf & "Enter an option
(Line/Circle/Arc): ")MsgBox keyWord, , "GetKeyword Example"
End Sub
4. Nhp sthc, snguyn.The GetInteger Method
Phng thc GetInteger cho php ngi dung nhp vo mt s nguyn (gi tr nhp vo t32,768 to +32,767).
C php nhsau :
intUserIntegerInput = UtilityObject.GetInteger([Prompt])
V d:Public Sub TestGetInteger()Dim intInput As Integer
With ThisDrawing.UtilityintInput = .GetInteger(vbCr & "Enter an integer: ").Prompt vbCr & "You entered " & intInput
End WithEnd Sub
The GetReal MethodPhng thc GetRealcho php ngi dung nhp vo mt sthc (gi trnhp vo t32,768 to
+32,767).C php nhsau :
dblUserRealInput = UtilityObject.GetReal([Prompt])
5. GetCorner Method, GetAngle Method, GetDistance MethodThe GetCorner Method
Trvim gc ca mt hnh chnhtC Php nhsau :
varUserCornerInput = UtilityObject.GetCorner(BasePoint [,Prompt])
NAME TYPE DESCRIPTIONBasePoint Variant Mng 3 gi tr kiu doubles m t im
gc ca hnh chnht.
7/22/2019 Lap trinh VBA.pdf
36/101
KS. GV. TRN ANH BNH
36
NAME TYPE DESCRIPTIONPrompt String Optional. A prompt for input.
varUserCornerInput Variant Gi trtrv3D
The GetDistance MethodPhng thc GetDistance nhp khong cch tngi dng. Khc vi GetReal, GetDistance c
thnhp vo mt sthc, sthc ny tng ng vi n vang sdng, hoc ta cng c thpick 2im trn bn v. C php ca phng thc nhsau :
dblUserDistanceInput = UtilityObject.GetDistance([BasePoint] [,Prompt])
NAME TYPE DESCRIPTION
BasePoint Variant L mt mng 3 pt kiu double th hin ta 3Dca im u m t ta bt u o (trong WCS). Nu
bn khng cung cp im ny, bn phi nhp vo 2.
Prompt String Chui thng bo ti dng lnhdblUserDistanceInput
Double
Ch : Hm cho php ta nhp vo mt sm. Nhng khi ta pick 2 im trn bn vth gi trtrvsmt sdng (khong cch gia 2 im )
Khi ta nhp khong cch bng cch pick 2 im, ti vtr con chut sxut hin dy thun. Mcnh l ta 3D. C th dng l InitializeUserInput vi Bit code 16 chiu cc ta sang 2D.AutoCAD stnh khong cch 2 im khi chiu sang 2D.
6. GetEntity Method, GetSubEntity MethodGetEntity Method
Sdng phng thc GetEntity chn mt i tng AutoCAD bng cch pick mt thc thtbn v. Phng thc c c php nhsau :
UtilityObject.GetEntity PickedEntity, PickedPoint[, Prompt]
NAME TYPE DESCRIPTION
PickedEntity AcadEntityobject
L dliu truyn ra. i tng ny stham chiu tii tng va c pick trn bn v.
PickPoint Variant Dliu truyn ra. L mt mng 3 phn tkiu double,
l ta im bn va pick trong hta WCS.Prompt String Chui thng bo trn dng lnh
V dsau ly mt thc thbng cch pick i tng trn bn v:Public Sub TestGetEntity()
Dim objEnt As AcadEntityDim varPick As VariantOn Error Resume Next
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
7/22/2019 Lap trinh VBA.pdf
37/101
KS. GV. TRN ANH BNH
37
End If.Prompt vbCr & "You picked a " & objEnt.ObjectName.Prompt vbCrLf & "At " & varPick(0) & "," & varPick(1)
End WithEnd SubGetEntity trvmt li nu gi trnhp vo l null, nhkhi bn pick khng trng mt thc th
ha no c, hoc khi bn nEnterm khng chn bt kmt thc thno
The GetSubEntity MethodSdng GetSubEntity nhp mt thc thphc. Mt thc thphc l mt thc thcha nhiu
thc thn khc v dnhng polyline, block. Phng thc c c php nhsau :
UtilityObject.GetSubEntity PickedEntity, PickPoint, Matrix, Context[, Prompt]
NAME TYPE DESCRIPTION
PickedEntity AcadEntity Object Output. Tr v tham chiu ti i mt itng va c pick.
PickPoint Variant Output. L mt mng 3 phn tkiu double, l ta im bn va pick trong hta WCS.
Matrix Variant Output. Trv1 mng n 4x4 phn tkiu doublesCha ma trn chuyn i ca i tng va c chn.
Context Variant Output. Tr v mt mng kiu long integer chaObjectIds cho mi block cha, cha cc i tng cchn, nu thc th l Bloock.
Prompt String Chui thng bo tai dng lnh
Thc thva chn trong Model ca block, tham sMatrix l ma trn chuyn thta blocksang hto WCS ca bn v. N bao gm tt ccc php bin i tmt thc thc lu trong
block sang mt thc thbn v, nhscale, rotation php bin i ta .Tham sContext output l mt mng cc ObjectIds ca cc i tng cha i tng va c
chn. V dc mt ng thng, nm trong block c tn l BL1. BL1 li nm trong block chao (Blocknng) c tn l BL2. Th Context sl mng 2 phn tcha 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 thnhp vo k tL (Last Object selection).Last Object Selection c th bng bng hay thuc layer va btt i.
7/22/2019 Lap trinh VBA.pdf
38/101
KS. GV. TRN ANH BNH
38
CHNG 3 : TO V SA CC THC THHA
I. To i tng bn v1. Xc nh i tng cha thc th.
i tng ha c thc to trong ModelSpace collection, PaperSpace Collection v Block
object. to thm mt thc thha, ta dng phng thc Addxxx. V d, vmt ng thngtrong ModelSpace.
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
Cch khc, khai bo bin :Dim moSpace As AcadModelSpaceDim paSpace As AcadPaperSpaceSet moSpace = ThisDrawing.ModelSpaceSet paSpace = ThisDrawing.PaperSpace
Set lineObj = moSpace.AddLine(startPoint,endPoint)
2. VLine, Arc, Circle, and Ellipse objectsVLine
Set LineObject = Object.AddLine(StartPoint, EndPoint)
NAME DATA TYPE DESCRIPTION
StartPoint Variant Mng 3 phn tkiu Double l ta 3D im uca ng thng trong hta WCS
EndPoint Variant Mng 3 phn tkiu Double l ta 3D im uca ng thng trong hta WCS
Vpolyline
Set LWPolylineObject = Object.AddLightWeightPolyline(Vertices)
NAME DATA TYPE DESCRIPTION
Vertices Variant Mt mng kiu doubles ch ra danh sch ta cc im 2-D trong h ta WCS c dng nh sau(i.e., p1x, p1y, p2x, p2y, etc.). Mng ny ti thiu phic 4 phn t(2 im).
Ch : Polyline khng bao cao Z. Nu bn mun v ti mt cao no , bn phi SetElevation
7/22/2019 Lap trinh VBA.pdf
39/101
KS. GV. TRN ANH BNH
39
The Spline Object
Set SplineObject = Object.AddSpline(FitPoints, StartTangent, EndTangent)
NAME DATA TYPE DESCRIPTION
FitPoints Variant L mng mt chiu kiu double chra danh schcc im m SPLine si qua bao gm ta X, Y vZ c dng (i.e., p1x, p1y, p1z, p2x, p2y, p2z, etc.).
StartTangent Variant Mng gm 3 ptkiu doubles xc nh tip tuynca spline ti im u.
EndTangent Variant Mng gm 3 ptkiu doubles xc nh tip tuynca spline ti im u.
Vcung 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 tmcung trn trong hta WCS
Radius Double Bn knh
StartAngle Double Gc bt u ca cung trn (radians), l gc hpvi trc X trong hta WCS
EndAngle Double Gc kt thc ca cung trn (radians), l gc hpvi trc X trong hta WCS
7/22/2019 Lap trinh VBA.pdf
40/101
KS. GV. TRN ANH BNH
40
The Circle Object
Set CircleObject = Object.AddCircle(CenterPoint, Radius)
NAME DATA TYPE DESCRIPTION
CenterPoint Variant Mng 3 phn tkiu Double l ta 3D tmng trn trong hta WCS
Radius Double Bn knh ng trn
The Ellipse Object
Set EllipseObject = Object.AddEllipse(CenterPoint, MajorAxis, RadiusRatio)
NAME DATA TYPE DESCRIPTION
CenterPoint Variant Mng 3 phn tkiu Double l ta 3D tmEllipse trong hta WCS.
MajorAxis Variant Mng 3 phn tkiu Double l ta 3D mt imm tvector ca trc ln Ellipse tnh ttm.
RadiusRatio Double Tlchiu di ca trc b v trc ln : 0
Recommended