Lap trinh VBA.pdf

Embed Size (px)

Citation preview

  • 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