You are on page 1of 53

Chng I

SketchUp Scripting by Kienking@Gmail.com

Gii thiu v ngn ng kch bn trong SketchUp

Chng I

SketchUp Scripting by Kienking@Gmail.com

Hin nay c nhiu phn mm tr gip bn to dng m hnh 3D, v cc cuc tranh lun xem phn mm no cung cp cc tnh nng l tt nht vn din ra v cng gay gt. Nhng khi ni n vic d dng s dng v c u thch th phn mm SketchUp lun chin thng. Giao din s dng ca n rt trc quan nn hu ht ngi dng u c th d dng hiu c nhng iu c bn v n trong mt vi pht. Kh nng va hc tp va tch ly kinh nghim khi s dng n kh tt nn ngi mi cng c th tr thnh chuyn gia trong mt vi gi. Hu ht cc phn mm to dng m hnh 3D u nhm ti nhng i tng s dng c th. AutoCad hng ti cc k s ( nh kin trc, xy dng, c kh, in) trong khi Maya, Blender hoc 3ds Max hng ti cc nh lm phim hot hnh, game v ngh s ha. Nhng SketchUp th li c mt tm nhn ln hn, iu ny th hin qua khu hiu v l do tn ti ca n l 3D cho mi ngi-3D for Everyone. Nh nhng g ni, SketchUp sng theo ng mc tiu ca mnh. Khng nhng ch c kin trc s v k s chp nhn n, m cn th mc, ngh s ha, nh lm phim hot hnh, nh ton hc v nhng nh sng to khc trong m i lnh vc cng chn n. V nu nh SketchUp c th khng p ng c nhu cu c th no th bn c th tng cng thm cc tnh nng khc cho n bng cc Plugin-v y chnh l ch c tm hiu rt k trong cun sch ny. Mc d SketchUp l dnh cho mi ngi, nhng cun sch ny th khng. Bi v chng ta s khng s dng cc thao tc chn r i kch quen thuc na m tp trung giao tip v i SketchUp bng cc dng lnh vn bn. V pht trin hn na l chng ta s lu tr cc dng lnh ny trong cc tp tin c g i l cc kch bn-Script. Vi cc kch bn ng, bn c th thc hin tt c mi th m bn vn thng lm trong SketchUp v nhiu th khc hn na.

1.1 Mi l do hc ngn ng kch bn cho SketchUp.


Giao din s dng ca SketchUp chnh l mt trong nhng im mnh ca n. V vy nghe c v k l, thm ch l l i thi khi c mt cun sch vit v cc dng lnh vn bn dnh cho SketchUp. Nhng c rt nhiu l do ti sao vic hc hc tp ngn ng kch bn-Scripting cho SketchUp li l mt tng hay. Di y trnh by mi u im chnh ca kch bn-Script: 1. Qun l cc thit k phc tp: Cc Group v cc Component trong SketchUp khin n c th to ra h thng phn cp ca cc i tng khi xy dng m hnh. Mt m hnh c quy m ln, chng hn nh trung tm mua sm c th bao h m hng ngn cc Component m, cc Component con v thm ch l con ca con ca Component con. Vic qun l h thng phn cp cc i tng s tr nn d dng hn khi s dng Script so vi vic s dng ca s lm vic (work space) ca phn mm. Script cng c th khin n tr nn d dng hn cho nhng ng i khc mun quan st v phn tch m hnh ca bn. 2. Plugin-Phn b tr: Plugin cho SketchUp s ch thm cc tnh nng b tr cho phn mm, chng hn nh trnh n mi, cng c mi trn thanh cng c, hp thoi mi v nhiu kh nng khc na. Nh chng ta bit, mt plugin ch l mt tin Script nm trong ng th mc Plugin th mc ci t SketchUp ln cng. V ti chng 10 ca cun sch s gii thch cch m plugin c m ha v s dng. 3. Truy cp cc i tng thit k m khng cn dng con tr chut: Trong SketchUp kh nng tm v chn i tng hon ton ph thuc vo kho lo ca vic s dng chut ca bn. y khng phi l vn khi m hnh ca bn c to t cc hnh n gin, nhng n s tr nn kh iu khin hn khi m hnh ln v phc tp nh li a gic chng hn. Vi mt kch bn-Script, tht d dng quay tr li tt c cc i tng trong qu trnh xy dng m hnh v ch thc hin trn nhng i tng m bn quan tm. 4. To dng bt c th th, bt c ch no: Thng thng, bn ch c th to dng cc m hnh trong khung nhn (Camera view) ca SketchUp m hin ti bn ang quan st. Ngoi ra 2

Chng I

SketchUp Scripting by Kienking@Gmail.com

bn cn phi da vo vic truy bt im, cc trc ta y mu sc v hp thoi VCB trong SketchUp. i vi mt d n to dng m hnh mi bt u trong SketchUp th ch c th to ra cc hnh hc trong cc mt phng xy, xz v yz. Vi Script dnh cho SketchUp th s khng cn b nhng hn ch ny p t na, bn c th to dng bt c th g bn thch v bt c ch no bn mun. 5. Chuyn ng-Animation: SketchUp cung cp mt cch to ra s chuyn ng, l bn c th thay i khung nhn quan st (camera view) hoc to ra s trnh din lin tc ca nhiu cnh-Scene. Nhng vi nhng chuyn ng kiu khung xng th sao, Script c th gip bn to ra mt h thng chuyn ng phc hp t cc i tng n l s dng cc chuyn ng quay n gin (lnh Rotation). hiu nhng g ti ni th bn c th b qua nhng chng u v n vi Chng 12 hc cch to ra mt con Robot nhy nht. 6. H tr min ph v thn thin: Google vn duy tr mt nhm trc tuyn c bit chuyn h tr v thng bo v cc Script cho SketchUp: https://groups.google.com/d/forum/googlesketchup-developers . Tt c cc cu hi u c hoan nghnh v nhn c cu tr li trong vng 24 gi. Hn na c mt s din n nh http://www.sketchucation.com cng cung cp v h tr v s thng tin. 7. T ng ha: Mt trong nhng li th chnh ca vic lu tr cc dng lnh cho SketchUp trong mt tp tin kch bn l bn bn ch cn g cc dng lnh ng mt ln, v sau bn c th thc hin cc kch bn ny lp i lp li. thay i, bn c th d dng chnh sa l i kch bn bng mt phn mm son tho vn bn no , c th ct v dn cc dng lnh gia cc tp tin kch bn-Script vi nhau. 8. Truy sut thng tin t Web: S cp trong Chng 13, Script s gip bn to ra cc hp thoi Web (WebDialog) truy cp vo cc trang Web. Cc hp thoi ny c th p ng nh mt cu ni gia m JavaScript v m hnh ca bn trong SketchUp. 9. Phong ph cc kch bn-Script c sn: Cng ng pht trin SketchUp ang hot ng v pht trin rt mnh. Nu bn c nhu cn thm nhng tnh nng mi cho phn mm SketchUp phc v vic to dng m hnh, th c kh nng l mt ai vit v m ha kch bnScript ph hp vi mc ch, yu cu ca bn. V tp tin m ha Script cng c th c sn trn mng Internet bn ti v min ph hoc phi mua. 10. Nim vui: Ti tng vit cc ng dng thm cho rt nhiu phn mm to dng m hnh 3D nhng tt c chng khng mang li ci cm gic thc hin ging nh lm vi ngn ng Script cho SketchUp.

1.2 Mt v d n gin.
Ti bit, ti bit ri. Chng ta vn ang trong chng u tin ca cun sch ny m ti l i i vo su chi tit chuyn mn. Ti xin li, nhng trc khi tip tc tm hiu thm, ti mun cc bn c mt cht tng v vic th no l mt dng lnh trong SketchUp. Nu bn l ng i ham thch tm hiu v mun thc hin iu g , ti khuyn bn nn bt u bt phn m m SketchUp, chn mc ca Ruby Console trong trnh n Window trn menu chnh. Khi mt hp thoi c tn l Ruby Console s xut hin, y chnh l ni m tt c cc lnh dnh cho SketchUp s c nhp vo . Nu by gi bn mun dng mt on thng i t gc ta [0,0,0] n im c ta [5,5,5]. Thng thng dng c on thng ny th bn cn phi mt ti 3 ln kch chut. l mt ln kch chut chn cng c Line trn thanh cng c, mt ln kch chut vo i m gc ca h ta v mt ln kch chut con con tr chut nm v tr c ta [5,5,5]. Nhng bn cng c th dng on thng vi mt dng lnh sau y vo trong hp thoi Ruby Console : Sketchup.active_model.entities.add_line [0,0,0], [5,5,5] 3

Chng I

SketchUp Scripting by Kienking@Gmail.com

Nhn phm Enter lnh c thc thi, khi SketchUp s dng mt on thng n i gia hai im [0,0,0] v [5,5,5] ging nh khi bn s dng cng c Line. Bn s ngh l phi mt nhiu thi gian g lnh hn l vic di chuyn v kch chut. Nhng nu bn lu tr lnh trong mt tp tin kch bn th bn c th thc hin n (v cc lnh khc na) mt cch hon ton t ng. y khng phi l mt li ch ln khi bn dng ch mt on thng, nhng khi bn dng cc ng parabol, xon, v B- spline th tp tin kch bn-Script s rt tin dng. Vic t ng ha cc lnh c th phc tp nn nhiu ngi s dng s lun lun thch thao tc chn ri kch hn. iu khng c g l sai c. V tng v vic giao tip v i SketchUp bng nhng dng lnh s khin bn cm thy lo lng? cng khng c vn g v cun sch ny khng phi dnh cho tt c mi ngi. Tuy nhin, nu dng lnh trn gy mt cht t m v kch thch s ham mun tm hiu thm ca bn th y chnh l cun sch dnh cho bn. N s khng ch cho bn thy cch lm th no to ra tt c cc dng m hnh c th tng tng c trong SketchUp m bn cng s c th thm cc tnh nng c th ty chnh cho SketchUp, chng hn nh cc cng c, trnh n mi v cc plugin.

1.3 Ngn ng kch bn-Scripting v Ruby trong SketchUp.


Cc lnh dng trong SketchUp c cu to t cc thut ng c th ca SketchUp, nhng ngn ng c bn li l Ruby. Ruby l mt ngn ng lp trnh chnh c s dng trong s pht trin ca cc ng dng web ( Ruby on Rails ). Mc d ngn ng ny tng i mi nhng Ruby rt cun ht ngi dng, v c rt nhiu trang web cung cp ti nguyn cho vic hng dn v h tr n. C rt nhiu li ch khi cc lnh ca SketchUp da trn ngn ng Ruby. Trong c ba l i ch quan trng nht nh sau: 1. Tim nng rng m: Kch bn-Script ca SketchUp s rt hn ch nu bn ch s dng dng ng, b mt v cc i tng hnh hc tng t. Nhng vi cc tnh nng cao cp ca Ruby nh cu trc iu khin, vng lp, lnh c iu kin v nh hng i tng th cc kch bn cho SketchUp c th thc hin tt c cng vic cn s l m bn mong i t mt phn mm hin i, t truy cp h thng cp cao n ti u ha ha cp thp. 2. Phong ph cc hm c sn: Nu bn c yu cu xc nh mt v tr no bng cch s dng h ta cu thay v vic s dng h thng ta cc vung gc truyn thng th bt buc bn phi s dng n cc cng thc tnh lng gic nh sin v cos tnh ton, v i khi n s gy kh nhc do phi vit m t ng hn n. Nhng nh c Ruby th bn ch cn goi hai hm Math.sin v Math.cos. Cn phi c mt tp tin, phn tch mt chui hoc kt ni vo mt h thng t xa? Vi b th vin cc hm chun ca Ruby th s khng tn mt git m hi. Nu bn truy cp vo trang ti liu min ph ti a ch http://www.ruby-doc.org bn c th khm ph trc tuyn ton b cc kh nng ca Ruby. 3. nh hng i tng: T i tng-Object c dng rt nhiu trong cun sch ny. Mt mt n dng cp mt th g m bn dng trong mt d n SketchUp, chng hn 4

Chng I

SketchUp Scripting by Kienking@Gmail.com

nh mt on thng, mt ng trn hoc mt kh i lp phng. Mt khc, i tng cng c th c dng cp ti mt kiu cu trc d liu c th no . Nu nhng iu ny khin bn b i ri, ng lo lng. Tt c iu bn cn phi nh lc ny l nh hng i tng l mt trong nhng u tin quan trng trong vic pht trin phn mm hin i v nh hng i tng khng ch c lp trnh hng ti vic bo tr, c cu trc m tt m cn s dng khin bn tr nn khn ngoan hn, V tt nhin, nu bn tng lp trnh trong Ruby th l i ch ln nht ca giao tip v i SketchUp bng Ruby chnh l bn quen thuc vi ngn ng lp trnh. Trong trng hp , bn c th b qua rt nhiu cc phn ti liu gii thiu trong cun sch ny v ti khuyn bn nn i thng n Chng 3 khi bn c c hi. Nhng bi v mi xut hin gn y, nn kinh nghim v Ruby l rt him ngay trong c s cc lp trnh vin chuyn nghip. V vy, ng lo lng nu bn cha bao gi vit cc kch bnScript bng Ruby trc khi c cun sch ny. V ti s cho rng bn cha bao gi nghe ni v Ruby. V thc t, ti lun gi nh rng bn cha bao gi vit m bng Ruby trc khi trnh by tt c cc vn . y cng l mt thch thc: Ti mun cun sch ny tr nn thn thin nht c th cho nhng ngi mi m khng gy qu nhm chn cho nhng ngi bit. Phn sau y gi i thch cun sch ny c trnh by nh th no ph hp vi nhu cu ca c ngi m i v ngi bit.

1.4 Ni dung trnh by trong cun sch.


gii thiu y v Ruby th i h i t nht phi mt ba chng, v lc u tin ti ln k hoch dnh ba chng u cho mc ch ny. Nhng do ngn ng kch bn-Scripting cho SketchUp gy rt nhiu hng th nn ti quyt nh t ri rc cc chng v Ruby gia nhng chng tp trung v SketchUp. V vy cc chng 2,5 v 8 ch tp trung vo vic nghin cu Ruby. V th nu bn l l mt chuyn gia v Ruby th c th b qua cc chng ny. i vi cc chng ni c th v SketchUp, ti c gng xp xp cch trnh by mt cch trc quan, t n gin n phc tp v t bao qut n c th. Cun sch c chia lm ba phn vi s xp xp cc chng nh sau: Phn I: Bao gm cc chng t 2 n 6, cung cp mt khi nim c bn v Ruby v SketchUp. Sau khi hiu ht cc chng ny th bn c th to ra bt k loi hnh dng no trong khng gian lm vic ca SketchUp (Workspace). V bn cng c thit lp v tr, scale v s xut hin ca cc i tng m bn to ra. Phn II: Bao gm cc chng t 7 n 9, gii thch lm th no to ra v qun l h thng phn cp, v nh km thng tin qua cc thuc tnh (attribute), cc la chn (option) v s quan st. Nhng kh nng ny khng cn thit cho cc m hnh n gin nhng n s tr nn cc k quan trng nu m hnh ca bn tr nn phc tp. Phn III: Bao gm cc chng t 10 n 13, tho lun cc hot ng tin tin khc trong SketchUp m bn khng th thc hin bng cch s dng khng gian lm vic truyn thng ca SketchUp (work space). Cc chng tho lun v plugin v tt c cc cch thc khc nhau m bn c th thm cho giao din s dng ca SketchUp. Hai ch cui cng l th v nht v gn kt cht ch vi tt c cc tng ch ca cun sch: Chuyn ng-Animation v WebDialog. Trong sut cun sch ny, cc v d v kch bn-Script cho SketchUp s c cung cp lm r cc khi nim v th hin cch thc m lnh c s dng trong m ha. ti v cc v d v Script, hy truy cp vo trang web http://www.automaticsketchup.com. Trang web ny cng cung thng tin v l i v cp nht ni dung ca cun sch. 5

Chng I

SketchUp Scripting by Kienking@Gmail.com

1.5 Li cui.
Vi ci nhn thong qua u tin, SketchUp c th trng ging nh ng dng v ca tr em hn l mt ng dng xy dng m hnh chuyn nghip. Nhng mt khi bn tr nn quen thuc hn vi SketchUp, bn c th s nh gi cao kh nng m rng tuyt vi ca cc chc nng v kh nng ca n. V iu ny mi ch l phn n i ca tng bng tri. Nu bn thc s mun to ra nhng th tt nht t SketchUp th bn cn phi bit cch lm th no vit c kch bnScript. Chng m u ny tho lun hi di dng v nhng gi tr ca ngn ng kch bnScripting cho SketchUp, nhng ti mun ch trng mt ln na vo kha cnh ca nim vui. Bnh thng, ti khng thch lp trnh lm nhng ngn ng kch bn cho SkethcUp khng gi ng nh cc m ha thng thng. Khi thc hin, mt kch bn-Script cho SketchUp c th ngay lp tc to ra cc i tng, cc m hnh, cc vt liu v thm ch c chuyn ng. i vi mt ngi khng c nng khiu h i ha vng v nh bn thn ti, ngi ch c th v ra nhng hnh ngi dng que, th chnh l nim vui tinh khit. Kch bn-Script cho SketchUp da trn ngn ng lp trnh Ruby, v trong cc chng tip theo, ti s lm ht sc mnh gii thch ca Ruby mc ph hp vi kh nng tip nhn ca SketchUp. Nu bn mun bit thm thng tin v Ruby, ti khuyn bn nn truy cp vo trang web http://www.ruby-doc.org v cun sch trc tuyn min ph Programming Ruby: The Pragmatic Programmers Guide Ruby ti a ch http://www.rubycentral.com/book/. c h tr thm v Script cho SketchUp, bn khng th c la chn no tt hn ngoi hai trang web http://www.sketchucation.com v https://groups.google.com/d/forum/google-sketchupdevelopers.

Chng II

SketchUp Scripting by Kienking@Gmail.com

Bi hc th nht v Ruby:

Cu trc d liu

Chng II

SketchUp Scripting by Kienking@Gmail.com

giao tip c vi SketchUp bng m ha, bn cn phi bit cch s dng ngn ng ca n l Ruby. Mc tiu ca chng ny l trnh by va cc kin thc c bn v lp trnh Ruby gip bn cm thy thoi mi vi ngn ng v cu trc d liu c bn ca n. Trnh by bt u vi vic gii thiu v cc con s, chui, khai bo bin, hng v mng. Ti mi bc u c rt nhiu v d c cung cp bn c th nhp v thc hin cc lnh trn SketchUp. Ti khuyn bn khng nn ch thc hnh theo nhng v d m chng ti cung cp m nn th nghim vi tt c cc lnh khc nhau, iu ny s nng cao s hiu bit ca bn v ngn ng lp trnh Ruby v cng lm cho bn cm thy thoi mi vi ton th mi trng m ha. Phn cui cng ca chng s quan tm ti lp trnh nh hng i tng trong Ruby, v gii thiu v i tng (Object), lp (Class) v phng thc (Method). Mt khi cc vn c sng t th bn sn sng cho Chng 3, c xy dng trn nn tng Chng 2 trnh din cc m hnh c bn ca SketchUp. mi thc s l lc m nim vui bt u nhng chng ta khng nn cha hc b lo hc chy, hy tp trung vo chng ny .

2.1 Hp thoi Ruby Console.


Nu bn cha sn sng th hy bt phn mm SketchUp, chn mc ca Ruby Console trong trnh n Window trn menu chnh. Khi mt hp thoi c tn l Ruby Console s xut hin, y chnh l ni m bn c th nhp v thc hin tng dng lnh mt. Chng sau s gii thch cch to ra cc kch bn-Script lu tr nhiu cu lnh Ruby, cn by gi chng ta s tm hiu cc lnh Ruby ring l. Giao din hp thoi Ruby Console rt n gin khi s dng: nhp dng lnh vo hp nhp pha di cng ca hp thoi v nhn phm Enter. Kt qu s c hin th ngay phn trn cng ca hp thoi. xem n hot ng nh th no, hy nhp dng lnh sau : 2 + 2

By gi hy nhn phm Enter. Khi hp thoi Ruby Console s hin th dng lnh v kt qu ca n.

Chng II

SketchUp Scripting by Kienking@Gmail.com

2 + 2 l mt dng lnh Ruby hp l, v n tng t nh mt biu thc ton hc. Biu thc ton hc l mt cch n gin nht bt u tm hiu v Ruby, v phn tip theo y s gii thch chi tit hn.

2.2 S v biu thc ton hc.


Khi bn to m hnh trong SketchUp bng Ruby, mt trong nhng cng vic thng xuyn nht i hi phi nh r cc im phn bit on thng v b mt. Mi im c cu to bi ba ta (x,y,z), v vy phi hiu c cch thc m Ruby s dng cc s l iu quan trng c bn nht. V phn ny s bn v cc nh dng s, php ton, v th t thc hin ca cc php ton. 2.2.1 S nguyn v s thp phn: Trong cun sch ny, chng ta s quan tm ti hai loi s l: s nguyn (Integer) v s thp phn (Floating-Point). Mt s nguyn i din cho mt s v khng c du thp phn. Mt k hiu du cng + ng trc s ch ra rng s l s nguyn dng v mt k hiu du tr ch ra rng s l s nguyn m, nu khng c k hiu no trc s th s c coi l s s nguyn dng. i vi nhng s c gi tr ln th thng c s dng cc du ( nh du phy ,) ngn cch gia cc hng trm, hng nghn, hng triu Ngoi ra Ruby cn cho php bn s dng du gch di _ ngn cch. V d, vi s 1,000,000 c th c th hin l 1000000 hoc 1_000_000. kim tra iu ny, hy nhp dng lnh sau y: 5_000 / 4 Kt qu l 1250 cng ging nh khi bn nhp 5000 / 4 S thp phn l s c s dng du thp phn . ngn cch phn nguyn v phn thp phn ca n. Trong Ruby, mi s thp phn bt buc phi c it nht mt s ng trc v mt s ng sau du thp phn. C ngha l bn c th th hin l 0.500 nhng khng bao gi l .5 Mt s thp phn cng c th thm du + hoc - ng trc c hiu l s thp phn dng hoc m. V ch e c vit ng sau khi s qu ln. Cc s thp phn sau y c coi l hp l: -25.4 ; 1.4959e11 ; 123_456.789_012 v 3,14159 . Ruby cng cung cp nhiu kiu s hc khc , bao gm c s phc v s hu t. Nhng i vi cc mc ch ca cun sch ny th bn s ch cn bit s nguyn v s thp phn l . 2.2.2 Php ton: Ruby cng nhn dng tt c cc php ton thng dng khi s dng trong C hoc ngn ng lp trnh khc, l: +, -, * v /. Ngoi ra cn thm php ton s m v s d.
Php ton
+ * / % **

tng ng 0.5 hoc

ngha

V d vi s nguyn
4 + 5 = 9 12 4 = 8 7 * 3 = 21 20 / 8 = 2 20 % 8 = 4 3 ** 2 = 9

V d vi s thp phn
4.0 + 5.0 = 9.0 12.0 4.0 = 8.0 7.0 * 3.0 = 21.0 20.0 / 8.0 = 2.5 20.0 % 8.0 = 4.0 3.0 ** 2.0 = 9.0

Cng Tr Nhn Chia D M

Chng II

SketchUp Scripting by Kienking@Gmail.com

iu quan trng l phi bit rng loi ca kt qu to ra (l s nguyn hay s thp phn) c quyt nh bi cc s u vo, v s u vo c gi l ton hng. Nu ly mt s nguyn tr i mt s nguyn khc th kt qu s lun lun l mt s nguyn , v cng c kt qu tng t i vi cc php ton cng, nhn v chia . Nu mt ton hng l mt s nguyn v mt ton hng khc l mt s thp phn th kt qu ca php tnh s lun lun l mt s thp phn. iu ny c th hin trong cc v d sau y : 90 82 90.0 - 82 3 * 4 3 * 4.0 4 / 3 4 / 3.0 3 / 4 3 / 4.0 tr v 8 tr v 8.0 tr v 12 tr v 12.0 tr v 1 tr v 1.33333333333333 tr v 0 tr v 0.75

Bn php tnh cui cng trong v d trn th hin vic s dng php ton chia v kt qu ca chng c l khng c r rng tng minh nh cc php tnh trc. Nu mt trong cc ton hng l s thp phn th kt qu ca php ton chia l thng l s thp phn. Nhng nu c hai ton hng u l s nguyn, chng hn nh 4 /3 th ch c kt qu l phn s nguyn ng trc du thn phn c tr v cn phn thp phn ng sau b b i. c c s d cn li ca php ton chia hai s nguyn, bn cn phi s dng php ton % (D). Cch tt nht hiu c iu ny l s dng v d. Nu ly 17 chia cho 5 th kt qu l 3 v phn d cn li l 2. Trong Ruby, th iu ny c hiu nh sau 17/5 = 3 v 17% 5 = 2. Nu l mt php chia ht th kt qu php ton d lun lun l s khng 0. 16 / 8 16 / 8 .0 16 % 8 tr v 2 tr v 2.0 tr v 0

Php ton cui cng ** th hin php tnh ly tha, a ** n c tnh ton tng t nh an = a * a * a. n Trong : n l s nguyn dng v n c gi l s m. V d: 2 ** 3 tr v 8 v 23 = 8. S m (n) cng c th khng phi l mt s nguyn v bn c th tnh ton cn bc 2 bng cch thit lp n l hoc tnh cn bc 3 bng cch thit lp l . iu c ngha l nu s m l s nguyn th l tnh ly tha, cn nu s m l phn s th l tnh khai cn. Lu s m 1/2 phi nhp l 1/2.0 v 1/3 phi nhp l 1/3.0 nu khng s m s bng 0 v y l php chia gia hai s nguyn. Tng t nh vy nu s m l s m th kt qu s tr v l gi tr nghch o ca php ton ly tha, ngha l a ** -n = 1/(an). V d 2.0**-3=1/(2.0**3)=1/8. Cc v d sau y th hin vic s dng php ton m **: 4 ** 2 tr v 16

10

Chng II 4 ** -2 4 ** 0.5 4 ** 0 4 ** (1/2) tr v 0.0625 tr v 2.0 tr v 1

SketchUp Scripting by Kienking@Gmail.com

tr v 1 (S m cho kt qu= 0, php chia gia hai s nguyn)

2.2.3 Th t thc hin ca cc php ton: Nu mt dng lnh ca Ruby c cha kh nhiu php ton, th th t thc hin ca cc php ton ny khng nht thit phi c thc hin t tri sang phi. Cc quy tc sau y s c p dng theo trnh t u tin t trn xung di: 1. Thc hin tt c cc php ton nm trong ngoc n t tri sang phi. 2. Thc hin tt c php ton m t tri sang phi. 3. Thc hin tt c php ton nhn ri chia t tri sang phi. 4. Thc hin tt c php ton cng ri tr t tri qua phi. V d, hy nhn dng lnh sau y: 1 + 3 * (6 4) ** 3 / (1 + 3) u tin Ruby s tnh ton cc php tnh nm trong ngoc n: ( 6-4 = 2) v ( 1+3=4). Tip theo, n s thc hin php ton m (23 = 8), v dng lnh s n gin ho thnh: 1 + 3 * 8 / 4 Cui cng, Ruby thc hin php ton nhn (3 * 8 = 24) v php ton chia (24 /4 = 6). Cu tr li cui cng c tnh ton l 1+ 6 = 7 . 2.2.4 Cc hm chuyn i n v trong SketchUp: Trc khi chng ta tm bit ch v cc con s v php ton, cn mt iu quan trng cn l phi cp ti l cc hm chuyn i n v o do SketchUp cung cp.
Hm
cm degrees feet inch km m mile mm radians to_cm to_feet to_inch to_km

ngha

V d
2.54.cm = 1 180.degrees = 3.14159265358979 1.feet = 12.0 -1.km = 39370.0787401575 1.m = 39.3700787401575 1.mile = 63360.0 1.mm = 0.0393700787401575 3.14159265358979.radians = 180 0.393700787401575.to_cm = 1 12.to_feet = 1.0 -39370.0787401575.to_km = 1

Chuyn i t cm sang inch Chuyn i t sang radian Chuyn i t feet sang inch Chuyn i t inch sang chiu di Chuyn i t km sang inch Chuyn i t mt sang inch Chuyn i t dm-mile sang inch Chuyn i t mm sang inch Chuyn i t radian sang Chuyn i t inch sang cm Chuyn i inche sang feet Chuyn i t chiu di sang inch Chuyn i t inch sang km

11

Chng II
to_l to_m to_mile to_mm to_yard yard

SketchUp Scripting by Kienking@Gmail.com Chuyn i t inch sang chiu di Chuyn i t inch sang mt Chuyn i t inch sang dm-mile Chuyn i t inch sang mm Chuyn i t inch sang yard Chuyn i t yard sang inch
-39.3700787401575.to_m = 1 63360.to_mile = 1.0 0.0393700787401575.to_mm = 1 36.to_yard = 1.0 1.yard = 36.0

Hu nh cc gi tr chiu di trong SketchUp c tnh bng n v inch, thm ch ngay c khi bn chn mt mu Template vi n v s dng l h mt-Meter. V th m hu ht cc hm chuyn i trong bng trn u l chuyn i t n v inch sang n v khc v t n v khc sang inch. s dng cc hm ny th bn cn phi t mt du chm . ng sau gi tr cn chuyn i ri n tn hm nh cc v d trong ct th 3. V d, hy nhp mt dng lnh chuyn i chiu di t 72 inch sang mt. 72.to_m Kt qu s l 1.8288 bi v 1.8288 mt c chiu di tng ng vi 72 inch. Cun sch ny thng khng ch r cc n v o kch thc di hoc gc trong cc v d, nhng c mt im quan trng cn lu . a s cc hm s dng trong SketchUp thng hay yu cu nhp gi tr o gc vi n v l Radian ch khng phi . Nhng do s dng vi s nguyn th cc v d s n gin hn nn cun sch ny s bt u vi n v o gc l v sau s chuyn i n sang radian. V d, chuyn i t 30 sang radian, bn s dng lnh sau: 30.degrees

2.3 Chui-String.
M ha vi cc s rt quan trng, nhng c rt nhiu trng hp bn s cn phi lm vic vi chui vn bn. Cc lnh v chui vn bn tr nn cn thit khi bn c cc k t t mt tp tin, xc nh nhn trong SketchUp, hoc thm cc ch thch cho mt cng c SketchUp mi. Trong kch bn Script ca mnh, ti thng xuyn s dng cc lnh v chui vn bn hin th cc thng bo trong qu trnh thc thi mt kch bn trong SketchUp. Trong nhiu ngn ng lp trnh, cc k t c lp n l c xem xt rt khc bit so vi tp hp nhiu k t. V d, trong Java, a c coi l mt k t v " abcd " l mt chui. Ruby th khng c s khc bit ny: c "a" v " abcd " u c coi l chui. Mt chui c cha ng mt hoc nhiu k t, bao gm ch ci, s , du chm cu v cc k t c bit . Trong Ruby, mt chui c th c t nm trong ngoc n () hoc du ngoc kp (). V d bn t thm lnh \\t to ra mt khong trng gia hai chui trong dng hoc \\n y chui sau xung mt dng mi vo bn trong nhm chui . Nu cc chui c t trong du ngoc kp th trong qu trnh thc thi Ruby s nhn ra c lnh bn trong chui v hin th chng cho ph hp vi lnh c t ra. Nu cc chui t trong du ngoc n th Ruby s b qua lnh bn trong. V vy nu bn nhp dng lnh l Line1\\nLine2 th kt qu thu c l Line1 v Line2, v chng s c in trn hai dng. Tuy nhin nu dng lnh l Line1\\nLine2 th kt qu thu c l Line1\\nLine2 in trn mt dng. 2.3.1 Cc php ton c bn cho chui. Ruby cung cp mt s php ton thao tc chui khi m ha. Hai trong s chng c s dng thng dng nht l cng + v nhn * , v vai tr ca chng cng rt d hiu.

12

Chng II

SketchUp Scripting by Kienking@Gmail.com

Php ton cng + dng ni cc chui li vi nhau ging nh trong dng lnh sau y: "Hello," + " world" Hello, world Php ton nhn * dng lp li mt chui vi s ln nht nh ging nh trong dng lnh sau y: "Hello!" * 3 Hello!Hello!Hello! 2.3.2 Chui con-Substring. Mt trong nhng cng vic cng thng xuyn thc hin l truy xut vo cc k t trong mt chui theo v tr ca chng. V tr ca mt k t trong mt chui c gi l ch mcIndex ca n. Trong mt chui, ch mc-Index l cc tr s nm trong khong t s 0 n s bng di (tnh theo k t) ca chui tr i 1. V d chui Hello th Index nm trong khong t 0 n 4 ( do chui c di bng 5). Mt tp hp bao gm mt s cc k t lin k trong mt chui-String c gi l mt chui con-Substring, v bn c th truy xut ra mt chui con t mt chui bng cch xc nh phm vi-Range cho cc tr s Index ca cc k t. Mt phm vi-Range s i din cho mt di cc gi tr v c th c xc nh theo mt trong hai cch sau: Cch th nht, phm vi-Range c xc nh bi start..end (bt u .. kt thc), v i din cho di cc gi tr t u n cui, bao gm c s cui. Cch th hai, phm vi-Range c xc nh bi start...end (bt u ... kt thc), v i din cho di cc gi tr t u n cui, nhng khng bao gm c s cui. Cc v d sau y cho thy r iu ny : 0..4 0...4 -5...-3 'a'..'e' 'a'...'e' i din cho di gi tr i din cho di gi tr i din cho di gi tr i din cho di gi tr i din cho di gi tr [0, 1, 2, 3] [0, 1, 2, 3, 4] [5, 4, 3] ['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd', 'e']

c c mt chui con t mt chui hy t Range vi cc tr s Index mong mun trong ngoc vung v ng ngay ng sau chui . Hy th cc lnh sau trong hp thoi Ruby Console: "HelloWorld"[0..2] Hel "HelloWorld"[0...2] He "HelloWorld"[1..4] ello "HelloWorld"[1...4]

13

Chng II ell

SketchUp Scripting by Kienking@Gmail.com

Nu tr s ca Index l s dng th v tr ca cc k t c xc nh t pha bn tri chui. Cn nu tr s ca Index l s m th v tr ca cc k t c xc nh t pha bn phi chui. Ging nh trong hnh di y:

Cc lnh sau y gii thch cch thc s dng tr s Index m to ra c chui con : "HelloWorld"[-10..-6] Hello "HelloWorld"[-3...-1] rl Ngoi vic s dng phm vi-Range ly ra mt chui con nh trn, bn cng c th c c c mt chui con bng cch s dng tr s Index ca k t u tin v chiu di (length) ca chui con cn ly. nh dng s dng l [ Index , length ] v cc v d sau y cho thy cch thc ny c s dng to ra chui con : "HelloWorld"[3, 4] loWo "HelloWorld"[0, 5] Hello "HelloWorld"[-5, 5] World 2.3.3 Cc hm cp cao cho chui. Ngoi cc cch thc tc ng n n cc chui c trnh by trn, by gi bn c th truy sut ra nhiu th khc na bng cch thm mt du chm . v tn ca ca mt hm vo ngay ng sau chui. V d, length v size l hai hm tr v s lng k t c trong mt chui. Cc v d sau y cho thy cch thc hot ng ca hai hm ny: "HelloWorld".length 10 "HelloWorld".size 10 V bng sau y th hin cc hm cp cao dnh cho chui.

14

Chng II
Hm
downcase hex

SketchUp Scripting by Kienking@Gmail.com


ngha V d
"Hello".downcase "hello" "0x42".hex 66

Chuyn chui thnh ch thng Chuyn i mt hexadecimal ( h thp lc phn) sang dng s Kim tra xem chui c cha cc k t a ra khng (tr v true hoc false) Tr v v tr (Index) xut hin u tin trong chui ca k t a ra (tnh t bn tri sang).

include?

"hello".include? "ell" true "Hello".index("l") 2 (l l ch L)

index

length

Tr v s lng cc k t c trong chui (bao "Hello".length 5 gm c khong trng gia cc chui) Xa b cc khong trng (space) u chui. Thay th mt chui bng mt chui khc o ngc v tr cc k t trong chui Tr v v tr (Index) xut hin sau cng trong chui ca k t a ra (tnh t bn tri sang)
" Hello ".lstrip "Hello " "Hello!".replace("Hola!") "Hola!" "Hello".reverse "olleH" "Hello".rindex("l") 3 (l l ch L)

lstrip

replace reverse rindex

size

Tr v s lng cc k t c trong chui (bao "Hello".size 5 gm c khong trng gia cc chui) Chia tch chui thnh cc chui con theo k t a ra v tr v mt mng cha cc chui con . Xa b cc khong trng (space) u v cui ca chui.
"Hello,world,again".split(",") ["Hello","world","again"]

split

strip

" Hello ".strip "Hello"

to_f

Chuyn i mt chui thnh mt s thp phn "-1.3e10".to_f -13000000000.0 v tr v s thp phn Chuyn mt chui thnh s v tr v mt s s hc
"2000".to_i 2000

to_i

tr upcase

Thay th cc k t trong chui thnh cc k t "Hello".tr("le","ma") "Hammo" a ra theo th t Chuyn chui thnh ch in hoa
"Hello".upcase "HELLO"

Lu : - Hm to_f l chuyn i mt s no c th hin dng chui thnh mt s thp phn. - Hm to_i l chuyn i mt s no c th hin dng chui thnh mt s s hc. V dng s ny tnh ton bng cc php ton. - Trong v d hm tr th l tt c cc ch l trong chui s b thay th bng ch m v ch e s c thay th bng ch a. 2.3.4 In (hin th) chui. Ruby cung cp ba lnh hin th chui trong giao din giao tip vi ngi dng, l: puts , print v printf. Trong cun sch ny, cc Script v d ch yu da vo lnh puts , lnh ny to ra mt dng mi sau khi hin th chui. V d sau y cho thy cch m lnh puts c s dng :

15

Chng II

SketchUp Scripting by Kienking@Gmail.com

puts "Number of characters in Hello: " + "Hello".length.to_s Number of characters in Hello: 5

Hm to_s dng chuyn mt s l kt qu ca hm "Hello".length thnh mt chui bn c th cng chui vi nhau. Ruby khng thng xuyn chuyn i mt s s hc thnh mt chui nn chng ta phi dng hm ny chuyn i. Lnh print hot ng tng t nh lnh puts, nhng khng to ra mt dng mi sau khi hin th chui. Lnh printf hot ng nh lnh print, nhng cho php bn nh dng chui bng cch s dng cc k t nh dng c bit. nh dng trong lnh printf l mt ch phc tp, v ti s khng tho lun chuyn su v n. Nhng vi cc v d sau y s cung cp cho bn mt tng v cch thc n c s dng nh th no:
printf "The length of %s is %d\n", "Hello", "Hello".length The length of Hello is 5 printf "The last index of b in bubble is %d\n", "bubble".rindex("b") The last index of b in bubble is 3

Lnh printf ca Ruby cng hot ng ging ht nh lnh printf thng dng trong ngn ng C. Ch cn t m kim lnh ny trn Internet th bn s c tt c cc thng tin v nh dng v c php cho lnh ny.

2.4 Bin-Variable v hng s-Constant.


Chng ta quan tm hi nhiu ti cc s c bn v chui, nhng trong thc t th chng ta thng gn tn cho d liu v cc tn s c s dng thay v l cc d liu th. Trong Ruby, d liu c t tn c hai lo i l: bin v hng. Phn ny s gii thch chng c s dng nh th no v s khc bit gia chng. 2.4.1 Bin. Trong kch bn Script cho SketchUp, lm vic vi tn s thun tin so vi vic s dng s. V d, nu bn mun thay i chiu cao ca mt cnh ca t 86 inch n 94 inch nhng trong kch bn ca bn c rt nhiu dng lnh lin quan n chiu cao ca ca l s 86 v bn s rt mt cng thay i cc s lin quan n chiu cao t 86 thnh 94. Mi vic s tr nn d dng hn nu bn s dng mt tn nh door_height thay v s dng mt s th hin chiu cao. By gi bn c th thay i gi tr chiu cao mt cch d dng, l thit lp door_height thnh 94 bng mt dng lnh v gi tr chiu cao ny s c s dng cho mi dng lnh trc v sau ny. V ci tn door_height c gi l bin. Chng ta hy xem cch thc lm vic ny trong SketchUp. Trong hp thoi Ruby Console, gn gi tr cho bin x bng l 2 bi dng lnh sau y: x = 2 Ngay sau khi bn nhn phm Enter, SketchUp s dnh ring mt phn ca b nh nh bin x v t gi tr 2 ca n trong b nh cp pht. By gi bn c th s dng bin ny nh th n l mt s hc bnh thng. V d vi cc dng lnh: x + 5 x * 2 x ** 3 Tr v 7 Tr v 4 Tr v 8

16

Chng II

SketchUp Scripting by Kienking@Gmail.com

Trong cc dng lnh ny, bin x vn gi nguyn gi tr ca n sau mi lnh. thay i gi tr ca mt bin, bn c th thc hin cc lnh nh sau: x = x + 1 x = x 3 x = x * 7 x = x / 9 Bn c th thc hin cc lnh Ryby tt sau cng mang li kt qu tng t nh cc lnh trn: x += 1 x -= 3 x *= 7 x /= 9 Tt cc s c dng trong cc v d trn u l s nguyn, nhng nu thch bn c th thit lp bin x l mt s thp phn hoc mt chui. V d, cc dng lnh sau y to ra mt bin c gn gi tr l chui "Hello" v s dng php ton cng + chui ni thm mt chui khc: str = "Hello"
Hello

str += ", world!"


Hello, world!

Tn ca bin x v door_height chia s mt c im quan trng : c hai u bt u vi mt ch ci in thng. Trong Ruby, mt bin c th bt u vi du gch di (v d _x) hoc bt k ch ci in thng no . Nu d liu c gn cho mt ci tn bt u vi mt ch ci in hoa th trong qu trnh bin dch Ruby s coi n nh l mt hng s- s c gii thch phn tip theo. 2.4.2 Hng s. C rt nhiu trng hp m bn s phi lm vic vi cc gi tr m chng khng cn phi thay i. V d, s pi s lun lun bng khong 3.14159 v 2,54 cm lun lun tng ng vi 1 inch. Trong nhng trng hp ny, s dng mt bin khng phi l mt tng hay v gi tr ca n c th c thay i trong qu trnh thc thi ca kch bn Script. V l do ny, Ruby cung cp hng s-constant , hot ng ging nh cc bin v c th c gn cho cng kiu gi tr ging bin. Nhng nu mt hng s c gn gi tr th Ruby s to ra mt cnh bo cho bn bit rng gi tr ca n c thay i. xem cch n thc hin, bn cn nhp hai lnh sau trong hp thoi Ruby Console : X = 8 X += 2 Ngay sau khi cu lnh c thc thi, hnh di y s th hin thng ip kt qu trong hp thoi Ruby console: "already initialized constant X".

17

Chng II

SketchUp Scripting by Kienking@Gmail.com

Mc d c cnh bo, nhng lnh th hai vn thay i gi tr ca X t 8 sang10, v bn c th xc minh li iu ny vi cc lnh tng t. Nu bn lp li cc lnh v d trn vi x thay v l X , th s khng c cnh bo s xut hin. iu ny l do Ruby s dng cc ch ci u tin ca cu trc d liu phn bit hng s t bin. Nu ch ci u tin l ch ci in hoa , Ruby x l n nh mt hng s. Nu trng hp l ch ci in thng, Ruby coi n l mt bin.

2.5 Mng-Array.
Tt c cc i tng im, ng thng, v hnh hc trong mt d n SketchUp u c xc nh v tr bi ta x, y v z ca chng. qun l cc ta ca chng th vic t chng trong mt tp hp gi l mng-Array s dng hn l qun l ring l tng ci mt. Mt mng l mt cu trc d liu c cha mt chui cc gi tr c trt t c gi l cc phn telement. Mng cng tng t nh chui m chng ta nhn thy trc nhng chui ch bao gm cc k t. Cn mng th c th cha ng tt c mi th, l s, chui, cc bin, cc hng s v thm ch cc mng khc. Cng nh chui c t trong du ngoc n hoc du ngoc kp, mng cng c t trong du ngoc vung.V d, lnh sau y to ra mt mng c by phn t: arr = [1, 2, "ab", 4.0, 'Hello', 6.0, [1, 2, 3]] iu c ngha l to ra mt mng gi l arr c 4 phn t s 1,2, 4.0, 6.0 v 2 phn t chui ab, Hello v 01 phn t mng [1, 2, 3]. 2.5.1 Truy xut cc phn t trong mng Mi phn t s c truy xut theo v tr ca n trong mng, v tr tr bt u l 0 ng vi phn t ngoi cng bn tri. V tr ca mt phn t trong mng c gi l ch s-Index ca n. Lnh sau dng truy xut mt phn t trong mng arr c Index l 2 : x = arr[2]
ab

Lnh sau y dng thay th mt phn t trong mng c Index l 3 bng mt phn t khc. arr[3] = 12
[1, 2, "ab", 12, "Hello", 6.0, [1, 2, 3]]

( S dng dng lnh arr xem li cc phn t trong mng arr)

Ch s Index ca cc phn t mng cng tun theo cc quy tc tng t nh ch s ca cc k t trong chui. Index l 0 i din cho phn t u tin, Index l 1 i din cho phn t th hai, v Index l 3 i din cho phn t th ba... Nu gi tr ca Index l m th s truy xut

18

Chng II

SketchUp Scripting by Kienking@Gmail.com

bt u t cui mng ( phn t ngoi cng bn phi). C ngha l, Index l -1 s tr v phn t cui cng ca mng, -2 tr v phn t th hai tnh t pha cui cng ca mng. Cng nh chui, bn cng c th truy xut nhiu phn t trong mng bng cch xc nh mt phm vi-Range cho cc ch s-Index. iu ny c th c thc hin bng cch t hai hoc ba du chm gia cc gi tr Index bt u (start) v kt thc (end). Kt qu tr v y cng c th c gi l mng con Subarray. Cc dng lnh v d sau y s truy cp nhiu phn t trong mng arr ( v d u tin): arr[2..5] ["ab", 4.0, "Hello", 6.0] arr[0...3] [1, 2, "ab"] arr[-6..-4] [2, "ab", 4.0] Ngoi ra, bn c th thit lp mt phm vi-Range bao gm mt gi tr Index bt u (start) v mt s xc nh s lng (length) cc phn t s xut hin trong mng con. Lnh sau y to thnh mt mng con vi bn phn t v gi tr Index trong mng ban u l 2: arr[2, 4] ["ab", 4.0, "Hello", 6.0] Hoc bn cng c th dng lnh x= arr[2, 4] to ra mng con x gm 4 phn t "ab", 4.0, "Hello" v 6.0 t mng arr ban u. Ch n s khc bit gia [ 2 .. 4 ] v [ 2, 4 ]. Ghi nh iu ny nu bn gp bt k li no lin quan phm vi-Range. 2.5.2 Cc php ton mng Ruby cng cung cp mt s php ton khc nhau thao tc vi mng, v nhiu trong s hot ng tng t nh thao tc i vi chui c trnh by trc .
Php ton
+

ngha

V d
[6, 7] + ["aa", "bb", "cc"] [6, 7, "aa", "bb", "cc"]

T hp hai mng thnh mt mng ln hn. To ra mng mi t mng ban u bng cch xa b i cc phn t c trong mng th hai To ra mng mi bng cch lp li cc phn t c trong mng Thm mt phn t vo cui mng Ch t hp cc phn t khng ging nhau ca hai mng thnh mt mng Ch t hp cc phn t ging nhau ca hai mng thnh mt mng

[1, 2, 3, 4] [1, 2] [3, 4] ["a", "b"] * 3 ["a", "b", "a", "b", "a", "b"] ["x", "y", 12] << 13 ["x", "y", 12, 13] [1, 2, 3] | [2, 3, 4] [1, 2, 3, 4]

<< |

&

[1, 2, 3] & [2, 3, 4] [2, 3]

19

Chng II

SketchUp Scripting by Kienking@Gmail.com

Php ton th ba * c bit rt hu ch khi bn mun khi to mt phn t mng c nhiu phn t ging nhau. V d lnh sau u s to ra mng zero_array c mi hai phn t l s 0. zero_array = [0] * 12 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Php ton << dng bit thm mt phn t vo cui ca mt mng. Nu thm vo mt mng khc th mng s tr thnh mt phn t c lp ca mng u tin nh cc phn t khc. V d, vi lnh

[1, 2, 3] << [4, 5, 6]

Tr v [1, 2, 3, [4, 5, 6]], thay v [1, 2, 3, 4, 5, 6]. Nu bn mun thm cc phn t ca mng th hai thnh cc phn t ca mng th nht th s dng hm concat s c trnh by di y. 2.5.3 Cc hm v mng
Hm
new

ngha

V d
num_list = Array.new(30)

To ra mt mng mi Tr v s lng cc phn t ca mt mng

length

[1, 2, 3, 4].length

index

Tr v v tr-Index trong mng ca phn t c a ra Ni hai mng

[1, 2, 3].index(1)

[1, 2, 3].concat([4, 5]) concat

[1, 2, 3, 4, 5]
a = [1, 2, 3] a.delete_at(1) a

delete_at

Xa i mt phn t trong mng c v tr (index) trong mng tng ng vi gi tr Index a ra

[1, 3]

a = [1, 2, 3, 2] delete

Xa i tt c cc phn t trong mng m chng ging vi phn t c a ra Xa i tt c cc phn t c trong mng v tr v mt mng rng Xa i cc phn t ging nhau trong mng Thay th tt c cc phn t c trong mng bng mt phn t c a ra Xp xp th t cc phn t Tr v phn t u tin ca mng

a.delete(2) a

[1, 3] []

clear

["a", "b", "c"].clear

uniq

[1, 1, 2, 2, 3].uniq [1, 2, 3]

fill

[1, 2, 3].fill(7)

(7, 7, 7)

["ab", "yz", "wx", "ac"].sort sort

["ab", "ac", "wx", "yz"]


[1, 2, 3].first

first

20

Chng II
last

SketchUp Scripting by Kienking@Gmail.com


Tr v phn t cui cng ca mng 3

[1, 2, 3].last

Hm new dng to ra mng mi. Ngoi cch s dng nh v d trn th n cn c s dng bng ba cch khc nhau na, ging nh cc v d sau y: 1. num_list = Array.new 20 To ra mt mng vi mt kch thc ( s lng cc phn t) nht nh m khng phi to ra cc phn t cho n. 2. num_list = Array.new 4, "xyz" To ra mt mng mi gm bn phn t, trong cc phn t u l "xyz". 3. num_list = Array.new old_list To ra mt mng mi c cc phn t tng t nh cc phn t c trong mng old_list. Hm concat tng t nh php ton + ca mng, cng to ra mt mng l t hp tt c cc phn t ca hai mng ban u. S khc bit gia chng chnh l php ton + s to ra mt mng th ba lu tr cc kt qu t hp hai mng ban u, cn hm concat th ch thay i bn thn mng c gn hm concat khi c thm mng khc vo cui n. Cc lnh sau y cho thy cch thc m n thc hin: first_array = [5, 4, 3, 2, 1] second_array = [8, 7, 6] second_array.concat(first_array) Dng lnh th ba s thm cc phn t ca mng first_array vo cui ca mng second_array (hin c) v kt qu s l [8, 7, 6, 5, 4, 3, 2, 1]. Hm delete_at v delete u xa i cc phn t trong mng nhng cch thc hot ng ca chng th khc nhau. Hm delete_at xa i mt phn t mng ng vi mt gi tr Index c th c a ra xa, trong khi hm delete th li xa b tt c cc phn t ging vi phn t xa c a ra. Cc v d sau y th hin cch thc hot ng ca hai hm: test = [10, "x", 9, "x", 8, "y", "x"] test.delete_at 4 test.delete "x"

test = [10, "x", 9, "x", "y", "x"] test = [10, 9, "y"]

Hm delete_at xa i phn c v tr index l 4 tc phn t 8. Hm delete xa i tt c cc phn t ging phn t "x". Hm fill ngoi cch s dng nh v d trn th n cn c s dng bng cc cch khc nhau na, ging nh cc v d sau y: fill_test = [1, 2, 3, 4, 5, 6] fill_test.fill 9 fill_test.fill 10, 0..2 [9, 9, 9, 9, 9, 9] [10, 10, 10, 4, 5, 6]

Thay th cc phn t c gi tr Index t 0 n 2 thnh phn t 10 fill_test.fill 21, 4, 2 [1, 2, 3, 4, 21, 21]

Thay th hai phn t bng phn t 21, bt u thay th t phn t c gi tr Index l 4

21

Chng II

SketchUp Scripting by Kienking@Gmail.com

Hm sort dng xp t cc phn t ca mng theo th t s hoc th t ch ci, nhng ch p dng khi tt c cc phn t trong mng l s hoc l ch ci. Hm first tr v phn t u tin ca mng v hm last tr v phn t cui cng ca mng. Bn c th thay th hai hm ny bng cch truy sut cc phn t trong mng ( ni phn u ca mng) vi tr s Index l 0 v -1.

2.6 i tng-Object, lp-Class v phng thc-Method.


Trong thi k u ca ngnh lp trnh my tnh, cch duy nht lu tr d liu l to ra cc bin, hng, chui v mng. Nhng theo dng thi gian cc ng dng ngy cng pht trin v phc tp khin cc lp trnh vin tr nn mt mi vi vic qun l hng ngn nhng s liu xp xp v t chc .V vy, h quyt nh nhm cc d liu lin quan v cc cch thc hot ng vo mt cu trc c gi l i tng (Object). Tnh cht ca d liu v cc cch thc hot ng trong mt i tng c xc nh bi lp (Class) ca i tng, v cc hnh vi trong mt lp c xc nh bi phng thc (Method) ca n .

Cun sch ny hon ton c vit v ch lp trnh nh hng i tng, do s tho lun v cc i tng trong Ruby ca phn ny s c trnh by vn tt. bit thm thng tin, ti khuyn bn nn c Object-Oriented Analysis and Design with Applications ca Grady Booch , Robert A. Maksimchuk , Michael W. Engel v Bobbi J. Young. Ngoi ra, c rt nhiu ti liu min ph trn web tho lun v cc nguyn tc ca lp trnh nh hng i tng. 2.6.1 i tng. xy dng mt m hnh c quy m ln trong SketchUp, bn cn phi xc nh cc tr s cho nhiu thuc tnh, bao gm c ta , vt liu (Material), hoa vn (Texture) v mu sc (Color). C th truy cp d dng cc thit lp trong cc hp thoi ca SketchUp, nh kch chut phi vo mt on thng trong m hnh v chn Intity Info t menu ng cnh xut hin v SketchUp s cho bn bit rt nhiu thuc tnh v on thng . Nhng trong kch bn-Script cho SketchUp, qun l nhiu d liu thuc tnh cho nhiu i tng ( i tng y l cc on thng, mt v hnh dng trong d n SketchUp) l mt cng vic kh khn . thay i iu , chng ta s t chc cc thuc tnh c lin quan vo cc cu trc d liu c phn cp. V d, nu chng ta vit mt Script to dng m hnh mt ngi nh, chng ta s to ra mt cu trc d liu ton cc cho ngi nh v n cha ng cc cu trc d liu con cp thp hn cho bc tng, ca ra vo, v mi nh. V mt cu trc d liu con l ca cng c th cha ng cc cu trc con ca chnh n nh cc ph kin: ca , kha, v cc bn l... Trong cc ngn ng lp trnh, cc cu trc d liu ny c gi l cc i tng-Object. V i tng c th c s dng ging nh cc bin-Variable m chng ta bit trc . Nhng khng ging nh bin, mt i tng c th cha nhiu gi tr lin quan. V d, trong khi bin door_height (v d phn bin) ch xc nh mt thuc tnh l chiu cao ca ca th mt i tng Door c th cha nhiu nhiu thuc tnh ca ca nh: chiu cao, chiu rng, chiu dy, vt liu v mu sc. Lu : T i tng-Object c dng rt nhiu trong cun sch ny. Mt mt n dng cp mt th g m bn dng trong mt d n SketchUp, chng hn nh mt on thng, mt ng trn hoc mt khi lp phng. Mt khc, i tng c dng cp ti mt cu trc d liu c th no . y l mt iu rt hu ch phn bit i tng vi mng. Trong Ruby, mt mng c th cha ng rt nhiu kiu phn t ( nh bin, s, chui), nhng mt i tng ch cha ng d liu cn thit m hnh ha mt i tng vt th hoc mt nguyn tc tru tng no . V d, nu vit Script m hnh ha mt ngi nh cn phi theo di chiu cao, chiu rng v cc vt liu ca tng ca mt, sau lu tr gi tr ca cc thuc tnh ny trong kiu i

22

Chng II

SketchUp Scripting by Kienking@Gmail.com

tng Door. V Script cng c th cha cc kiu i tng v ca s-Window, hin nhPorch v nh xe- Garage . Hai i tng cng kiu phi c cc thuc tnh ging nhau, nhng khng nht thit phi ging nhau v gi tr. Nu Door l kiu i tng xc nh mt chiu cao v chiu rng ca ca, v cc i tng door1 v door2 c cng kiu vi i tng Door , th door1 v door2 phi lu tr cc gi tr v chiu cao v chiu rng, nhng khng nht thit chng phi ging nhau. Biu hin c th cho mt kiu i tng gi l cc lp (class) ca n. iu quan trng l phi hiu c mi quan h gia cc i tng v cc lp, v chnh l trng tm ca trnh by sau y. 2.6.2 Lp. Mt lp s xc nh cu trc ca mt i tng ging nh mt tp hp cc bn thit k xc nh cu trc ca mt ta nh hoc mt chui ADN xc nh cu trc ca mt sinh vt .C th hn, mt lp xc nh cc d liu cha ng trong mt i tng v cc cch thc c sn s dng cc d liu . Ch v m ha cc lp mi s c trnh by trong Chng 8. By gi, bn ch cn bit th no l lp v lm sao to ra cc i tng t cc lp hin c. Trong cc th vin ca Ruby v API cho SketchUp c hng trm lp c sn. Trong Ruby, tt c mi th m chng ta lm vic vi n u l mt i tng.V vy, tt c mi th chng ta lm vic vi n u c mt lp. Hm class hin th tn lp ca mt i tng, nh th hin trong on m sau: 5.class Fixnum 3.14159.class Float "Hello, world".class String [5, 6, 7].class Array Trong : 5 l mt i tng ca lp Fixnum ( s nguyn nh ) , 3.14159 l mt i tng ca lp Float ( s thp phn ) , "Hello, world" l mt i tng ca lp String (chui) v [ 5 , 6, 7] l mt i tng ca lp Array (mng). Nu bn phn tch m ca ngi khc, hm class lm cho vic xc nh chnh xc loi d liu bn ang lm vic tr nn d dng. Cc lp Fixnum, Float, String v Array u c cung cp bi th vin tiu chun ca Ruby (Ruby Standard Library). Nhng cc lp m chng ta s quan tm trong cun sch ny c to sn bi SketchUp API. Hai lp c bit quan trng sau y s c tho lun trong chng tip theo: * Edge cnh: Mt i tng c to t lp Edge i din cho mt on thng trong SketchUp. * Face mt: Mt i tng c to t lp Face i din cho mt b mt hai chiu trong SketchUp.

23

Chng II

SketchUp Scripting by Kienking@Gmail.com

Lu : Thay v s dng cc cm t nh " mt i tng c to t lp Face" hoc " mt i tng thuc kiu Face" cun sch ny s cp n cc i tng l i tng Face hoc Faces. Nhng hy nh rng Face l tn ca lp , khng phi l i tng. C hn tm mi lp khc nhau trong API SketchUp, v ph lc A lit k tt c chng. Bn cng c th truy cp vo trang web http://code.google.com/apis/sketchup/docs/index.html . , bn c th kch vo cc ng link xem cch m cc lp thc hin. 2.6.3 Phng thc th hin. Trong cc phn trnh by trc v chui gii thch cch thc hot ng ca cc php ton c bn nh + v * , v cng trnh by mt bng thng k cc hm dnh cho chui, nhng php ton v cc hm ny c gi l phng thc-Method. Cc phng thc ny thc hin cho cc i tng chui-String. Nu str l mt chui th str.length s tr v s lng cc k t trong chui, tng t nh vy str.downcase s chuyn i cc k t trong chui str sang ch in thng. c mt danh sch y cc phng thc cho chui, hy nhp vo lnh sau y trong hp thoi Ruby Console: "Hello".methods Danh sch ny lit k tt c cc phng thc c sn cho mt i tng chui. Nu str l mt bin dng chui, bn c th c c kt qu tng t bng cch gi chng vi lnh str.methods. Nhng phng thc ny c nh ngha cho lp String, v tt c cc i tng dng chui (chng hn nh str) u c th gi chng. Lp Array cng cung cp mt nhm cc phng thc cho cc i tng dng mng, nh y: arr = [0, 1, 2] arr.length 3 arr.first 0 arr.last 2 Mt phng thc l mt th tc c nh ngha trong mt lp v n hot ng trn d liu v i tng. Mt cch n gin, mt i tng i din cho mt vt v mt phng thc s cung cp mt phng tin tng tc vi cc thuc tnh ca vt . Phng thc c gi hoc dn ra bng cch s dng du chm . . C php nh sau: i tng + . + tn phng thc cn gi. V d, nu lp Auto nh ngha mt phng thc trong n gi l reverse, cn auto1 v auto2 l cc i tng thuc lp Auto th bn c th gi auto1.reverse v auto2.reverse. Nhiu phng thc yu cu b sung thm d liu n thc thi. Phng thc fill trong lp Array cn mt phn t u vo thay th cc phn t c trong trong mng u vo. D d liu thm ny c gi l mt i - argument hoc mt tham s- parameter, v n c th c t hoc khng t trong du ngoc n nh th hin trong cc lnh sau:

24

Chng II arr = [0, 1, 2, 3] arr.fill(7) [7, 7, 7, 7] arr.fill 7 [7, 7, 7, 7]

SketchUp Scripting by Kienking@Gmail.com

Nu mt phng thc i hi nhiu i s, cc i s phi c phn cch bng du phy cho d cc i s c c t trong du ngoc n hay khng. Ph lc A lit k cc phng thc c nh ngha trong mi lp ca API SketchUp. Nu bn nhn k, bn s nhn thy rng c rt nhiu tn ca cc phng thc c kt thc vi mt ch du ? trong khi nhng phng thc khc kt thc vi mt du =. iu ny cung cp cho bn mt tng v cch m phng thc thc thi. Nu tn ca mt phng thc kt thc bng mt du ? th kt qu n s tr v ng-true hoc sai-false. V d, phng thc include? nh ngha trong lp String tr v true nu i s l mt phn ca chui v l false nu khng phi. iu ny c th hin bng cc v d sau: str = "Hello, world" str.include? "ell" true str.include?("word") false Nu tn ca mt phng thc kt thc vi du =, n s cp nht i tng vi cc d liu c cung cp bi cc tham s. iu ny c th c chng minh bng cch s dng phng thc [] = ca lp Array lm thay th mt phn t trong mng thnh mt phn t khc bi tham s a ra. Lnh sau thay th phn t th ba ca mng arr thnh 5: arr[2] = 5 Cc phng thc trong Ruby c th c xu chui li vi nhau. C ngha l, nu phng thc method_B c th c thc thi trn kt qu tr v bi phng thc method_A th bn c th gi cng lc c hai phng thc vi c php method_A.method_B. V d, bn mun o ngc cc k t sau khi chuyn i thnh ch in hoa ca chui "Hello". Bn c th lm iu ny bng cch s dng nhiu lnh nh sau y : str = "Hello" str1 = str.upcase HELLO str2 = str1.reverse OLLEH Hoc bn c th thc hin lnh sau y ra kt qu tng t trn: str = "Hello".upcase.reverse OLLEH

25

Chng II

SketchUp Scripting by Kienking@Gmail.com

Trong v d ny, phng thc reverse thc thi trn kt qu ca "Hello". Upcase. Xu chui cc phng thc s lm gim s lng m bn cn phi nhp, nhng ng thi cng lm cho m ca bn tr nn kh c hn. 2.6.4 Phng thc lp. Cc phn trnh by trc ng rng tt c cc phng thc nh ngha trong mt lp ch c th c truy xut thng qua cc i tng. Thng nhiu trng hp l vy nhng n khng hon ton chnh xc. Mt s phng thc trong mt lp thc thi trn chnh lp . Phng thc thc thi trn lp c gi l phng thc lp-Class method. V phng thc thc thi trn cc i tng ny c gi l phng thc th hin-Instance method bi v mt i tng l mt s th hin ca mt lp. C mt phng thc lp quan trng cha trong tt c cc lp ca Ruby. y l phng thc new, v n to ra mt i tng mi t mt lp vi cch thc ging nh mt i xy dng to ra mt ta nh mi t bn thit k. V d, lnh sau y gi phng thc new ca lp String to ra mt i tng kiu chui mi : new_str = String.new new_str.class String Trong cun sch ny, phn ln cc phng thc m chng ta s c s dng l phng thc th hin. Bt k phng thc c trnh trong cun sch ny c th c coi l phng thc th hin, tr khi ch r c th n l phng thc lp.

2.7 Lp k tha-Class Inheritance .


Trong nhiu trng hp, bn c th truy xut vo cc lp c cng chung thuc tnh. V d, nu bn l mt kin trc s, bn ang cn m hnh ha khch sn v bnh vin, hai kt cu ny khc nhau nn yu cu c cc lp ring bit: Hotel-khch sn v Hospital-bnh vin . Nhng hai lp ny cng c nhng thuc tnh tng t nhau, chng hn nh v tr, vt liu v s tng. V l do ny, cc phng thc sau y c th p dng tt cho c hai lp Hotel v Hospital:
num_stories S lng tng trong mt kt cu location V tr a l ca kt cu material loi vt liu dng xy dng kt cu

Thay v mt hai ln m ha cho nhng phng thc ging nhau, v n s l hiu qu hn nu t chng trong mt lp th ba chng s sn sng s dng cho i tng Hotel v Hospital. Lp th ba ny nn th hin s tng ng vi hai lp kia, v trong v d ny chng ta s lp chung l Building. Chng ta cng s thit lp mt mi quan h gia Building, Hotel v Hospital c Hotel v Hospital u tip nhn c cc phng thc c nh ngha trong Building. Mi quan h gia cc lp c gi l k tha- Inheritance, v c hai Hotel v Hospital c cho l k tha t Building. Trong v d ny , Building c gi l lp cha - superclass ca Hotel v Hospital, cn Hotel v Hospital c gi l lp consubclass ca Building. Hnh sau y cho thy th no l mt h thng phn cp cc lp k tha.

26

Chng II

SketchUp Scripting by Kienking@Gmail.com

More general: Tng th hn na; More Specific; Ring bit hn na. By gi bn c th nh ngha cc phng thc num_stories, location, v material trong lp Building duy nht, v nu bn cn phi vit li bt k v chng, bn ch cn thay i trong mt lp duy nht. Ngoi ra, bng cch to ra lp Building bn c th d dng s dng cho nhiu lp con thm khc i din cho cc kt cu nh th vin- Librariy , nh th-Church v ca hng- Store. Hy xem xt mt v d thc t ca lp k tha. Qu trnh bin dch cc con s trong Ruby rt khc nhau ty thuc vo s lng b nh m chng chim lnh. Nu mt s nguyn chim 31 bit hoc t hn, l mt i tng lp Fixnum. Nu mt s nguyn chim hn 31 bit , l mt i tng lp Bignum. y l l do ti sao 24.class tr Fixnum v 1234567890.class tr Bignum. Hai lp ny i hi cc phng thc khc nhau cho cc thc thi nht nh, nhng gia chng cng c mt s phng thc tng t nhau. V d, cc phng thc next tr v mt s nguyn tip theo n. 24.next tr v 25 v 1234567890.next tr v 1234567891 . V l do ny, Ruby c mt lp c bit dnh cho s nguyn c gi l Integer. Cc phng thc chung nh next c nh ngha trong lp Integer, v do Fixnum v Bignum u k tha t lp Integer nn phng thc next l c sn cho cc i tng ca c hai lp ny s dng. Hnh sau cho thy v tr cc lp Integer, Fixnum v bignum trong h thng phn cp lp s trong Ruby.

Chng 8 s gii thch lm th no to ra lp v lp con trong m ha. By gi, tt c th m bn cn phi hiu v lp k tha l: Nu lp B k tha t lp A ( tc lp A l lp cha ca lp B) th tt c cc phng thc trong lp A l sn sng cho lp B s dng. iu ny c ngha rng bt k i tng thuc lp B c th truy sut tt c cc phng thc tng t nh mt i tng thuc lp A.

27

Chng II

SketchUp Scripting by Kienking@Gmail.com

2.8 Tng kt .
Mc tiu ca chng ny l cung cp cho bn mt nn tng Ruby bn c th hiu c i tng SketchUp cng nh hiu ci cch chng c s dng trong m ha. Bi hc ny bt u vi mt trnh by v con s, chui , mng , cc bin v cc hng s v tip theo sau l gii thch cc i tng v cc lp. Chng ta s lm vic vi cc cu trc d liu ny trong cun sch. Bin v hng hot ng tng i ging nhau, chng ch khc nhau khi bin c th thay i gi tr ty , cn hng thng khng thay i gi tr trong sut qu trnh thc thi kch bn ca Ruby. Nh cp trc , bn c th tng tng mt i tng l mt vt. Phng thc ca mt i tng l mt phng tin tng tc vi vt . Trong Ruby, mi cu trc d liu l mt i tng, bao gm c s v cc bin. S 5 c cc phng thc m c th c gi bng cch s dng mt du . ging nh khi gi cc phng thc ca mt chui hoc mng. Tt c cc i tng trong Ruby u phi thuc mt lp no , hay ni cch khc l lp to ra i tng. V d nh 1,2,3 thuc lp Interger v a, b thuc lp String, trong lp Interger v String l cc lp c sn trong Ruby v bn cng c th to ra cc lp mi. V mi lp u cc cc phng thc ring ca n v l phng tin dng truy sut vo d liu ca cc i tng thuc lp. V d lp String c phng thc ( hoc c th gi l hm) Length dng truy xut ra s lng cc k t ca mt i tng chui thuc lp String. Mt lp xc nh cu trc ca mt i tng, bao gm c d liu ca i tng v cc phng thc c sn thc thi trn i tng. Mt s phng thc chp nhn i s hoc tham s, v trong Ruby chng c th chn c t trong du ngoc n hoc khng. Nhiu i s hoc tham s phi c phn cch bng du phy. Mt s phng thc c gi l phng thc lp hot ng trn lp thay v trn mt i tng. Phng thc quan trng nht trong s ny l new dng to ra mt i. Lp trnh hng i tng l mt ch phc tp, v nu n khng c r rng cho lm th bn khng nn lo lng. Khi bn thc hnh thng qua cc v d trong cun sch ny, bn s c th nhn thy cc nguyn tc ca m ha OO (Object-oriented-nh hng) c th hin r rng trong cc on m thc t. Trong chng tip theo, chng ti s dnh mi quan tm v mt l thuyt v xem cch thc m cc i tng ca SketchUp lm vic cng nhau to ra m hnh 3 chiu.

28

Chng III

SketchUp Scripting by Kienking@Gmail.com

Nn tng c bn ca ngn ng kch bn cho SketchUp

29

Chng III

SketchUp Scripting by Kienking@Gmail.com

Trong chng ny, chng ta s t l thuyt lp trnh sang mt bn v nhn c nhng th th v l to ra cc hnh dng trong SketchUp bng m-code. Phn trnh by ny bt u vi cc on thng mt chiu v sau s l cc b mt hai chiu. n cui chng, bn s c th sp sa to ra c cc m hnh 3 chiu ca ring bn bng cch s dng cc c ch c sn tng t nh cng c Push/Pull v Follow Me ca SketchUp. Thng qua cc phn trnh by, chng ny s gii thch lm th no to ra cc tp tin kch bn-Script Ruby v thc thi chng trong SketchUp. Cho n by gi th bn mi ch nhp c lnh trong hp thoi Ruby console ca SketchUp v quan st kt qu. Nhng vi Script bn c th lu tr cc lnh ca bn trong cc tp tin thay v mi lnh ch c nhp mt ln trong hp thoi Ruby console. Hn na, Script s c lm r hn trong cc chng tip theo bn c th thc hin nhiu iu vi Script hn so vi vic bn c th vi cc lnh ring l. Chng ny ch yu lin quan ti i tng Edge (cnh) v Face (b mt) ca SketchUp, v mt khi bn hiu cch thc hot ng ca chng th bn c th xy dng bt c th g bn mun. Nhng trc khi bn c to ra cc i tng ny trong mt d n SketchUp th bn cn phi tr nn hiu r ba cu trc d liu khc nhau l: m un Sketchup , lp Model v lp Entities.

3.1 Ba cu trc d liu c bn trong SketchUp.


Gn nh tt c Script cho SketchUp u bt u bng cch truy xut vo ba cu trc d liu c bn l: Sketchup, Model, v Entities. Mt khi bn hiu cch thc chng hot ng v cch lm vic vi chng th bn sn sng xy dng cc m hnh SketchUp bng m ha-code.

3.1.1 M un SketchUp.
Khng ging nh cc lp v cc i tng c m t trong chng trc, Sketchup l mt m-un, cu trc d liu u tin chng ta s bt gp. Chng 8 trnh by rt chi tit v cc m-un, nhng by gi, tt c mi th bn cn phi bit l: mt m-un l mt tp hp cc phng thc-method. Hu ht cc Script Ruby trong cun sch ny bt u bng cch gi mt trong s cc phng thc thuc m-un ny. Cc phng thc trong m un Sketchup truy xut cc thuc tnh c lin quan n ton b phn mm SketchUp. hiu cch thc hot ng ny, m hp thoi Ruby Console (Window > Ruby Console trn menu chnh) v thc hin lnh sau : Sketchup.version Lnh ny s hin th s phin bn ca phn mm SketchUp hin hnh. Bn cng c th nhp Sketchup.os_language bit c ngn ng ( v mt giao din ) hin ti ang dng hoc Sketchup.get_locale bit c ngn ng ( v d ting Anh hoc ting Php) hin ti ang dng m ha trong SketchUp. bit tt c cc phng thc c cung cp bi m un Sketchup, hy tm chng trong bng lit k ca ph lc A cui cun sch ny hoc nhp lnh Sketchup.methods trong hp thoi Ruby Console. Phng thc quan trng nht trong s cc phng thc thuc m-un Sketchup l active_model. Phng thc ny tr v i tng Model tng ng vi i tng Model trong d n SketchUp hin ang hin hnh. Lnh sau y cho thy cch thc n hot ng: mod = Sketchup.active_model Lnh ny gi ra i tng model hin hnh v sau t mod tng ng vi i tng Model hin hnh. i tng model l ct yu trong tt c cc d n m hnh to bi phn mm SketchUp, v cc phn trnh by sau y gii thch l do ti sao .

30

Chng III

SketchUp Scripting by Kienking@Gmail.com

3.1.2 i tng ( hoc lp) Model.


Cng ging nh m-un Sketchup miu t ton b thng tin v phn mm SketchUp, i tng Model miu t mt tp tin SketchUp c lp (*.skp ), hay chnh xc hn l cc thng tin v m hnh d n cha trong tp tin. Khi bn m mt file c hoc to mi mt file trong SketchUp th cc thuc tnh ca m-un Sketchup vn gi nguyn nh c nhng nhng d liu c trong i tng Model hin hnh s bin i hon ton khc. V cc phng thc nh ngha bn trong lp Model ( i tng Model thuc lp Model) cung cp cc thng tin v d n SketchUp hin hnh. V d, phng thc modified? xc nh xem d n SketchUp ang hin hu b chnh sa (hoc thay i) ln no cha k t ln cui cng n c lu. Cc lnh sau y th hin cch thc m n c s dng: mod = Sketchup.active_model mod.modified? Kt qu tr v True tc l c thay i v tr v False c ngha l khng thay i. Phng thc title tr v tn tp tin lu tr ca d n SketchUp hin hnh trn my tnh ca bn v cc phng thc description tr v mt on vn bn miu t v file d n SketchUp hin hnh ( ly thng tin trong hp thoi Model Info/File/Description). Phng thc path ng tr v ng dn n tp tin lu d n SkethcUp hin hnh. Ph lc A lit k tt c cc phng thc c cung cp cho lp Model. Trong cun sch ny, cc phng thc ca lp Model s c chng ta s dng nhiu nht truy xut nhng th c cha ng bn trong i tng Model ca d n SketchUp hin hnh. Bn c th tng tng mt i tng Model s trng ging nh mt ci t c nhiu ngn ko. Model l mt i tng c lp c cha nhiu ngn, v mi ngn c th cha nhiu i tng. S sau cho thy su ngn quan trng nht trong s cc ngn ko cha i tng c cha ng bn trong mt i tng Model.

Bng cch thay i cc i tng trong su ngn cha trn th bn c th thit lp cu hnh gn nh mi kha cnh ca mt m hnh c dng trong SketchUp. truy xut chng, bn cn phi gi ra cc phng thc Model thch hp. l: 1. entities tr v mt i tng Entities cha ng cc hnh dng trong d n SketchUp hin ti ( c gii thiu trong chng ny v cp trong sut cun sch). 2. layers tr v mt i tng Layers cha ng cc layer-lp trong d n SketchUp hin ti (Trnh by ti chng 7). 3. definitions - tr v mt i tng ComponentDefinitions nm gi ton b cc component trong d n SketchUp hin ti (Trnh by ti chng 7).

31

Chng III

SketchUp Scripting by Kienking@Gmail.com

4. materials - tr v mt i tng Materials qun l ton b cc vt liu s dng trong d n SketchUp hin ti (Trnh by ti chng 6). 5. options - tr v mt i tng OptionManager cung cp truy xut nhiu OptionsProviders (Trnh by ti chng 9) 6. pages - tr v mt i tng Pages cha ng cc page-trang trong d n SketchUp hin ti (Trnh by ti chng 10). Hu ht cc phng thc ny u c tn dng s nhiu ( +ies hoc +s ) nh entities, layers, definitions v materials. Chng tr v cc i tng thuc cc lp c tn tng ng: Entities, Layers, Definitions v Materials. Mt i tng tr v c nhiu i tng con bn trong v v c bn n ging mt mng, mt phn t ca mng Entities s l mt thc th-Entity. Tng t nh vy, mng Layers cha ng cc i tng lp-Layer v mng Material cha ng cc i tng vt liuMaterial, v cc lp khc tng t nh vy. Lu : iu ny c th gy nhm ln, v vy phi ch . Mt i tng Materials c cha nhiu i tng Material (vt liu). V mt i tng Materials c cha nhiu i tng Materials ( thm s ng sau). trng hp th hai nu "s" l ch trong m th i tng cha ng ang c tham chiu v nu "s" l trong ch thng thng th cc i tng c th ang c tham chiu. Ti thi im ny , tt c chng ta mun lm l dng cc hnh dng c bn trong SketchUp. bt u, bc u tin l gi ra phng thc entities ca lp Model truy xut vo i tng Entities ca d n SketchUp hin hnh. Cc dng m sau y cho thy cch thc ny c thc hin trong m ha: mod = Sketchup.active_model ents = mod.entities Bn cng c th c kt qu tng t nu xu chui hai phng thc ny vi nhau: ents = Sketchup.active_model.entities Phn ln ni dung ca cun sch ny l lin quan vi vic thm v chnh sa cc i tng thc th ring r c cha ng bn trong i tng Entities trong d n SketchUp hin hnh. Vn ny c trnh by phn tip theo ngay sau y.

3.1.3 i tng (hoc lp) Entities.


Mi mt i tng hnh hc trong mt d n SketchUp u c miu t bi mt thc th Entity hoc mt lp con ca chng, bao gm c on thng, b mt, hnh nh, vn bn, nhm-group v cc component. qun l hoc sa i i tng Entity trong mt d n SketchUp hin hnh th bn cn truy xut i tng cha ng chnh Entities. i tng cha ng ny phc v ba mc ch chnh:
1. Thm cc i tng Entity mi vo trong d n SketchUp hin hnh. 2. Move-di chuyn, scale-qui m, rotate-xoay v erase-xa cc i tng Entity trong

d n SketchUp hin hnh.


3. Lu tr cc i tng Entity vo mt mng c th truy xut bi ch s xc nh

v tr (index) ca cc phn t trong mng.

32

Chng III

SketchUp Scripting by Kienking@Gmail.com

Vai tr u tin l quan trng nht. Lp Entities cha ng rt nhiu phng thc thm cc i tng Entity mi vo trong d n SketchUp hin hnh. Phng thc thm n gin nht ( add_X ) c lit k nh sau:
add_line to ra mt i tng Edge t hai im add_edges to thnh mt mng i tng Edge t mt lot cc im add_circle - to thnh mt mng i tng Edge t hp chng thnh mt

ng trn
add_ngon - to thnh mt mng i tng Edge t hp chng thnh mt a gic add_face To ra mt i tng b mt Face t cnh hoc cc im add_text Thm mt nhn vo trong d n ti ti mt im nht nh

Khi ni n hnh dng, th Edge v Face l cc i tng Entity quan trng. Mi khi bn thm mt hnh dng vo trong i tng cha ng Entities th mt hnh dng tng ng xut hin trong khng gian lm vic (workspace) ca SketchUp. Sau , khi bn lu d n SketchUp ca bn th cc Edge v Face s nm trong i tng Model c lu tr. hiu y cc lp Edge v Face, bn cn phi lm quen vi lp cha-superclass ca chng l Entity v Drawingelement.

3.2 Lp Entity v lp Drawingelement.


Lp Entity l lp cha cho tt c cc hnh dng c th dng trong SketchUp. S sau cho thy h thng phn cp cc lp con ca lp Entity v chng s c trnh by trong cun sch ny.

Lp con chnh ca Entity l Drawingelement, v Drawingelement l lp cha ca nhiu lp khc, chng ta s nghin cu trong trong chng ny v cc chng khc. Trc khi tip tc hiu xa hn na, chng ta s c mt s xem xt ngn gn v hai lp cha quan trng ny. 3.2.1 Lp Entity. Trong s trn lp Entity nm trn cng ca h thng phn cp. Cc phng thc cha ng trong lp ny l c sn cho tt c cc lp bn di n. Nhiu trong s cc phng thc ny cung cp thng tin c bn v cc Entity, v chng bao gm nhng th sau y :
entityID tr v mt nh danh duy nht ca i tng Entity typename xc nh kiu hnh hc ca i tng Entity (Edge, Face, ...) valid? xc nh xem Entity ang c trong d n hay khng (true/false) deleted? xc nh xem Entity b xa khi d n hay khng(true/false)

33

Chng III

SketchUp Scripting by Kienking@Gmail.com

model tr v i tng Model ca d n

Khi mt Entity mi c to ra s c SketchUp t ng gn cho mt ci tn-nh danh no v n l duy nht v phng thc entityID dng truy xut tn ny. Cc lnh sau y cho thy cch thc s dng cc phng thc ny: test_line = Sketchup.active_model.entities.add_line [0,0,0], [1,1,1] #<Sketchup::Edge:0x767be50> (kq c th khc vi dng ny) test_line.typename Edge test_line.entityID 1895 (kq c th l mt s khc vi s ny) Ngoi nhng phng thc ny, mi Entity c th truy xut thng tin do ngi dng ch nh bng cch gi ra phng thc attribute_dictionaries. Sau Entity c th ly li, sa i hoc xa cc thuc tnh ny. Chng 9 s trnh by chi tit v vic s dng v hot ng ca lp AttributeDictionaries. Cui cng, mt Entity c th c mt hoc nhiu i tng quan st (Observer) km theo n. i tng quan st theo di tnh trng ca cc Entity v p ng vi nhng thay i ca i tng n quan st. Chng 9 s gii thch cch thc hot ng v cch thc to ra chng trong m. 3.2.2 Lp Drawingelement. Lp Drawingelement l lp cha ca cc lp Edge, Face, Group, Image, Text, ComponentDefinition v ComponentInstance. Nhiu trong s cc phng thc trong cc lp ny iu khin cch thc xut hin ca cc i tng trong SketchUp; thit lp cc thuc tnh nh bng-shadow, thnh phn vt liu v thit lp i tng l n-hide hay nhn thy c-visible. V chng tng t vi nhng tnh nng trong hp thoi Entity Info.

Lp Drawingelement cung cp mt phng thc hu ch c gi l bounds,n tr v mt i tng BoundingBox. N s th hin mt hnh hp ch ch nht nh nht m vn c th cha ng c Drawingelement , v cc cnh ca hnh hp ch nht song song vi cc trc ta x,y, z tng ng. Bn hy lin tng hnh hp ch nht ny vi hnh hp ch nht mu xanh da tri bao quanh 1 component khi bn kch chn n. Cc lnh sau y to ra mt BoundingBox cho mt on thng nm gia hai im c ta [ 0, 0, 0] v [ 2 , 2, 5 ].

34

Chng III

SketchUp Scripting by Kienking@Gmail.com

new_line = Sketchup.active_model.entities.add_line [0,0,0], [2,2,5] #<Sketchup::Edge:0x767ab18> box = new_line.bounds #<Geom::BoundingBox:0x76784d8> Mt khi BoundingBox c to, cc phng thc ca n s cung cp thng tin v kch thc, ng cho, gc, v im xa/gn nht. Lnh sau y hin th v tr trng tm ca mt BoundingBox v chiu di ng cho ca n (theo n v inch) . box.center Point3d(1, 1, 2.5) box.diagonal 5.74456264653803

3.3 i tng (hay lp) Edge-cnh.


Trong s cc lp con ca lp Drawingelement th Edge l lp d hiu nht, n miu t mt on thng ni gia hai im. i tng Edge c to ra bng phng thc add_line ca lp Entities theo v tr ca im u v im cui ca on thng. Khi bn gi ra phng thc ny, SketchUp s dng mt on thng ni gia hai im v thm mt Edge vo mng Entities hin hnh. V d , lnh sau y to ra mt Edge nm gia hai im c ta [ 5 , 0, 0 ] n [ 10 , 0, 0 ] : Sketchup.active_model.entities.add_line [5, 0, 0], [10, 0, 0] Hu ht cc phng thc trong lp Edge lp ri vo mt trong hai loi sau: 1. Phng thc cu hnh s hin th ca Edge 2. Phng thc truy xut cc i tng kt ni vi Edge Cc phng thc thuc loi th nht cu hnh s hin th ca Edge trong khng gian lm vic ca SketchUp (workspace). Ngoi phng thc hidden c cung cp bi lp Drawingelement, Edge cn cung cp phng thc Soft -mm mi v Smooth-trn. iu quan trng l phi nh c s khc nhau gia mt on thng n-hidden v mt on thng trn-smooth: mt on thng trn kt hp b mt lin k thnh mt (thng l cong) b mt duy nht, trong khi mt on thng n khng lm thay i b mt lin k. Tham kho cng c Soften Edges trong SketchUp hiu r thm. Trong th loi th hai, phng thc all_connected tr v mt mng bao gm tt c cc i tng Entity kt ni vi Edge . Tng t nh vy, phng thc face tr v mt mng cha cc i tng Face kt ni vi Edge. Trong SketchUp, im u v cui ca mt on thng-Edge c miu t bi cc i tng Vertex. Lp Edge c cha mt s phng thc tng tc vi chng:
vertices tr v mt mng gm hai i tng Vertex thuc Edge.

35

Chng III

SketchUp Scripting by Kienking@Gmail.com

Start tr v i tng Vertex bt u ca Edge. end

tr v i tng Vertex kt thc ca Edge.

other_vertex a ra mt trong hai i tng Vertex ca Edge, phng

thc ny s tr v i tng Vertex cn li. V d on thng AB, bn a ra im Vertex ca A th phng thc s tr v Vertex ca B v ngc li. Tm kim im i din ca im c a ra ca mt on thng.
used_by? xc nh xem mt i tng Vertex c kt ni vi Edge khng.

Kt qu tr v True nu kt ni (hay thuc ) v False nu khng. C hai phng thc trong lp Edge m khng ri vo mt trong hai loi trn: lengthchiu di v split -phn chia . Phng thc length tr v di ca on thng tng ng vi Edge. Phng thc split chp nhn mt im ( v d im C) trn on thng v to ra mt i tng Edge th hai. Sau khi phng thc split c gi ra, i tng Edge th nht s bt u t im u ca on thng ban u cho ti im a ra bi split-im C v i tng Edge th hai tip tc t im C n im cui ca on thng ban u. Cc lnh sau y cho thy cch thc m cc phng thc c gi ra trong thc t : line = Sketchup.active_model.entities.add_line [0,0,0], [6,3,0] line.length

6.70820393249937
new_line = line.split [4, 2, 0] line.length

4.47213595499958
line.start.position

Point3d(0, 0, 0)
line.end.position

Point3d(4, 2, 0)
new_line.length

2.23606797749979
new_line.start.position

Point3d(4, 2, 0)
new_line.end.position Point3d(6, 3, 0) Hnh ha sau m t kt qu. i tng Edge ban u (Original Line) l on thng ni t [ 0, 0, 0] n [ 6 , 3, 0]. Sau khi phng thc split c gi ra, i tng Edge ban u tr thnh on thng ni t [ 0, 0, 0] n [ 4 , 2, 0] v i tng Edge mi (New Line) l on thng ni t [ 4 , 2, 0] n [ 6 , 3, 0].

36

Chng III

SketchUp Scripting by Kienking@Gmail.com

3.4 Gii thiu v ngn ng kch bn cho SketchUp.


Ti thi im ny, bn c l tr thnh mt chuyn gia s dng Ruby Console ca SketchUp. Giao din ca hp thoi rt tt cho vic thc hin lnh Ruby n gin, nhng n s khin bn tr nn mt mi khi cn phi thc hin cc lnh phc tp. Thay v nhp lnh bng tay, v s l hiu qu hn khi nhm chng li v t trong cc tp tin ri yu cu SketchUp thc hin tt c chng theo trnh t. Nhng tp tin ny c gi l cc kch bn-Script. Bn cnh vic hiu qu, cn c nhiu l do khc s dng cc kch bn, v phn cn li ca cun sch ny s cung cp mt s v d v cc on m trong cc tp tin kch bn. Mt trong nhng u im ca kch bn l bn c th thm cc ghi ch cho ngi c gii thch hoc m t cc kha cnh ca on m.

3.4.1 Kch bn Ruby


Trong cc chng trnh ni chung, mt kch bn-Script l mt tp tin c cha cc lnh iu khin mt chng trnh ang chy. Kch bn UNIX hng cc lnh ti chng trnh Shell trong Linux, chng hn nh Bash. Trong Windows, kch bn c vit trong VBScript tng tc vi h iu hnh v chy cc chng trnh ny ging nh h iu hnh DOS. Tt c cc kch bn c trnh by trong cun sch ny u hng v SketchUp. Bn c th vit mt kch bn SketchUp trong bt k trnh son tho vn bn no m bn chn, nhng hy lun nh r ba iu sau trong u: 1. Cc lnh trong mt kch bn cho SketchUp phi c vit bng ngn ng lp trnh Ruby. 2. Nhng tp tin kch bn khng c m ha th ui file ca n phi l *.rb ( v d file Hello.rb). ui file ca nhng tp tin kch bn c m ha phi l *.rbs ( v d file Hello.rbs) . 3. thc thi mt kch bn, n phi c np vo trong SketchUp . iu cui cng ny rt quan trng. Mt trong nhng lnh Ruby hu ch nht cn phi bit l lnh load (np). Khi mt tp tin kch bn-Script file nm trong th mc qui nh (Plugins) ca SketchUp, th load ra lnh cho SketchUp c kch bn v thc thi cc lnh trong theo trnh t. V d sau cung cp cho chng ta mt v d u tin v on m trong kch bn. star.rb

# Access the current Entities object

37

Chng III

SketchUp Scripting by Kienking@Gmail.com

ents = Sketchup.active_model.entities =begin Create five points in three dimensions Each point is the vertex of a star shape =end pt1 = [0, 1, 0] pt2 = [0.588, -0.809, 0] pt3 = [-0.951, 0.309, 0] pt4 = [0.951, 0.309, 0] pt5 = [-0.588, -0.809, 0] # Draw five lines in a star pattern ents.add_line ents.add_line ents.add_line ents.add_line ents.add_line pt1, pt2, pt3, pt4, pt5, pt2 pt3 pt4 pt5 pt1

Cc on m v d trong cc tp tin kch bn-Script cho cun sch ny c th ti v t a ch http://www.autosketchup.com, v n bao gm cc th mc c tn nh CH3, CH4, v CH5 (CH vit tt ca Chapter). Nu trang web ny khng cn tn ti na th ng lo lng, ti s gi chng cho bn km theo cun sch ny. Bn hy chp tp tin start.rb vo th mc Plugins nm trong th mc m SketchUp c ci t trn my tnh ca bn .V tr ca th mc ny ph thuc vo h iu hnh ca bn: Win7 WinXP C:\Program Files (x86)\SketchUp\SketchUp 2013\Plugins C:\Program Files\SketchUp\SketchUp 2013\Plugins

Nu bn t cc tp tin kch bn nm bn trong cc th mc con ca th mc Plugins ( v d: /Plugins/Ch3 hoc /Plugins/Ch4 ), th bn cng c th d dng thc thi tp tin kch bn star.rb.Trong SketchUp, m hp thoi Ruby console v nhp vo dng lnh sau: load "Ch3/star.rb" Dng lnh ny ra lnh cho SketchUp truy xut vo tp tin kch bn star.rb v thc thi cc lnh c trong theo trnh t. Vic ny s to ra mt hnh ngi sao trong mt phng xy v tm ca hnh l gc ta . Hnh sau cho thy kt qu ca hnh dng to ra trng nh th no.

38

Chng III

SketchUp Scripting by Kienking@Gmail.com

Nu bn khng th nhn thy m hnh ngi sao mt cch r rng, chn trnh n Camera trn meu chnh ca SketchUp v chn Standard View ri Top. Sau , vn trn trnh n Camera chn Parallel Projection. Cui cng, vo cng c Zoom Extents khung nhn tp trung vo m hnh mi dng. V quan trong bn phi nh l n v Inch c dng dng m hnh ny nn bn phi chn n v h thng (Model Info/Units>Length Units) trong SketchUp cho ph hp. Nu bn khng thch t cc tp tin kch bn ca bn trong th mc Plugins ca SketchUp th bn c th t bt k ni no m bn mun. V truy cp vo mt tp tin kch bn bn ngoi th mc Plugins, hy gi ra load vi y ng dn cha tp tin kch bn ca bn.V d, nu bn lu tp tin vo th mc nh C :/ ruby_scripts , bn c th ti star.rb vi lnh sau y : load "C:/ruby_scripts/star.rb" Trong cc phn cn li ca cun sch ny, cc v d s ri vo mt trong hai loi l v d lnh v on m. V d lnh l tp hp cc lnh dng chng minh cc khi nim n gin. Chng c th c nhp trc tip trong hp thoi Ruby console ( nh trong cc v d phn u chng). on m-code listing nh v d trn, c c cha trong cc tp tin kch bn nh km theo cc chng (v d nh file star.rb ). Mi tp tin kch bn ny c th c thc thi bng cch gi ra lnh load trong hp thoi Ruby console.

3.4.2 Ch thch trong Ruby


Trong v d u tin v on m c cha mt kha cnh khc ca Ruby m chng ta cha gp phi trc : ch thch-comment. Mt ch thch l mt lu c t bn trong kch bn m t nhng g m dng m s thc thi. Ch thch trong Ruby c hai loi : 1.Mt dng ch thch : Bt u vi k t # v vit ch thch cho n ht dng . 2 .Nhiu dng ch thch: Bt u vi = begin Vit cc dng ch thch, Kt thc vi = end. Bt k dng m no c t trong mt ch thch s khng c x l khi Ruby bin dch. V vy, bn c th vit bt c iu g bn thch trong mt ch thch, min l n ng c php. C ba ch thch trong tp tin kch bn star.rb. Ch thch u tin l: # Access the Entities object N di thch dng m u tin ( truy xut i tng Entities). Ch thch th hai l: =begin Create five points in three dimensions Each point is the vertex of a star shape =end

39

Chng III

SketchUp Scripting by Kienking@Gmail.com

N miu t mc ch ca vic khai bo nm bin ( To ra nm im trong khng gian 3D v mi im s l mt nh-i tng Vertex ca hnh ngi sao). Ch thch th ba l: # Draw five lines in a star pattern Gii thch nm dng cui cng thc hin vic g ( Dng nm cnh ca mt hnh ngi sao). To ch thch thng xuyn l mt kha cnh quan trng ca lp trnh vin chuyn nghip khng ch nhng ngi khc c th c c kch bn ca bn m cn bn thn gi nh n mc nh hot ng ca dng m.

3.5 Vector.
Trc khi trnh by v cch thc dng mt ng cong, bn cn phi c mt hiu bit c bn v vect. T Vector c nhiu ngha khc nhau ty thuc vo vic bn ang trnh by v ton hc, vt l hay k thut. Trong SketchUp, chng ta ch yu s dng vector xc nh hng. V l do ny, chng ti s th hin cc vector di dng ha hnh mi tn. Hnh sau m t mt s vect trong mt khng gian ba chiu ca SketchUp.

Do ch xc nh hng nn vector trong SketchUp cng l mt on thng xc nh bi hai im: im th nht trng vi gc ta v im th hai dng xc nh hng v chiu ca n nh trong hnh trn, chiu dng ca vector chnh l chiu ca mi tn. Chnh v th m trong m ha, mt vector c xc nh bi ba tr s. Tr s u tin xc nh v tr im th hai ca n theo hng trc x ( hoc gi honh ca n), tr s th hai xc nh v tr im th hai ca n theo hng trc y ( hoc gi tung ca n) v tr s th ba xc nh v tr im th hai ca n theo hng trc z ( hoc gi tung ca n). V nhng tr s ny c gi l cc thnh phn ca mt vector. Mt vector s c miu t l mt mng [ a, b, c ] trong phn t a l honh , phn t b l tung v phn t c l tung . Trong SketchUp, mt vector php tuyn-nomal vector l mt loi c th ca vector s c dng xc nh hng ca mt hnh dng l b mt. Vc t php tuyn ca mt b mt ( hoc mt phng) l mt vector vung gc vi b mt . Mt lu quan trng l trong SketchUp mt b mt s c hai mt l mt trc (front face) v mt sau (back facce) ca n, v mt trc l mt cng chiu vi chiu ca vecto, cn mt sau th ngc li. V d, nu bn dng mt b mt hnh trn trong mt phng xy v bn mun n hng mt trc ln trn ( cng chiu trc z), mt vector php tuyn c chp nhn l [ 0, 0, 1 ], vector php tuyn ny trng v cng chiu vi trc z dng. Nu vector php tuyn c thit lp l [ 0, 0, -1] th b mt s c mt trc quay xung di (ngc chiu trc z), vector php tuyn ny trng v ngc chiu vi trc z dng. Mt cu hi t ra l. Ti sao chng ta khng cn n vector php tuyn khi dng hnh dng ngi sao trong on m v d trn, nhng chng ta li cn vector php tuyn dng ng cong trn (vng cung hay vng trn)? Cu tr li l cc on thng hnh thnh ln ngi

40

Chng III

SketchUp Scripting by Kienking@Gmail.com

sao l loi mt chiu. Chng c chiu di, nhng khng c din tch. Khi bn chn mt im bt u v im kt thc th ch c mt on thng duy nht c xc nh Nhng nu tt c ci bn c l mt im tm v mt bn knh ca mt vng trn hoc vng cung th bn khng th xc nh c chnh xc ng cong trn cn dng. V s c v hn cc vng trn hoc vng cung c th c dng ln t mt im tm xc nh v mt bn knh khc khng. Ngha l cc vng trn hoc vng cung s nm trn mt hnh cu v bn knh trng vi tm v bn knh ca vng trn hoc vng cung cn dng. iu ny c th hin trong hnh sau.

xc nh c vng trn hoc vng cung cn dng, bn phi xc nh thm cc im thuc chng. Nhng s d dng hn khi bn ch r vc t php tuyn cho mt phng cha ng vng trn hoc vng cung . Nu bn ph kn mt vng trn th s tr thnh mt b mt v mt trc ca n s cng chiu vi vector php tuyn, v nu bn s dng cng c Push / Pull ca SketchUp to ra mt hnh tr t b mt th phng ca vector php tuyn chnh l hng ko theo.

3.6 ng cong, vng trn, vng cung v a gic.


Bn c th s dng cng c Arc v Circle ca SketchUp dng hnh, nhng bn khng thc s to ra cung v vng trn nh trong cc phn mm nh Autocad. Thay vo , cc cung v vng trn trng ging nh l mt chui gm nhiu on thng nh lin tc ni tip nhau. Trong m ha, lp Entities cha ng ba phng thc to ra cc hnh dng ging ng cong, v mi phng thc trong s chng s tr v mt mng cc cc i tng Edge. Ba phng thc l add_curve, add_circle v add_arc. V mt phng thc dng dng a gic l add_ngon.

3.6.1 ng cong
Phng thc to ra ng cong n gin nht add_curve. N chp nhn mt lot cc im lin tip nhau v tr v mng cc i tng Edge kt ni gia cc im. V d, cc lnh sau y to ra hnh dng ngi sao ging nh mc 3.4.1 trc ca chng. pt1 = [0, 1, 0] pt2 = [0.588, -0.809, 0] pt3 = [-0.951, 0.309, 0] pt4 = [0.951, 0.309, 0] pt5 = [-0.588, -0.809, 0] curve = Sketchup.active_model.entities.add_curve pt1, pt2, pt3, pt4, pt5, pt1 curve.class

41

Chng III

SketchUp Scripting by Kienking@Gmail.com

Array
curve.length

5
y, phng thc add_curve to ra mt mng gm nm i tng Edge, v kt qu thc s l mt ng polyline (ng nhiu nt) thay v l mt ng cong trn. B sung thm cc im, chng st vo nhau th ng polyline s tr nn ging nh mt ng cong trn. Thng thng, s dng phng thc add_circle v add_arc s d dng hn khi to ng cong trn.

3.6.2 Vng trn


Phng thc add_circle to ra mt vng trn vi mt im tm, vector php tuyn, v bn knh. Vector php tuyn dng xc nh phng vung gc vi mt phng cha vng trn. V d, lnh sau y to ra mt vng trn vi tm ti im [ 1 , 2, 3 ], vector php tuyn [ 4, 5, 6] v bn knh l 7 : circle = Sketchup.active_model.entities.add_circle [1, 2, 3], [4, 5, 6], 7 circle.class

Array
circle.length

24
circle[0].class

Edge
Phng thc add_circle to ra mt mng gm 24 i tng Edge, trong gc tm chn mt cnh ca ng trn l 15 . 24 l s phn on mc nh trong mt vng trn, bt k bn knh hoc s nh hng. Tuy nhin, bn c th thm mt tham s th t cho phng thc add_circle ty chnh s lng phn on trong vng trn. V d, lnh sau y to ra mt vng trn vi 72 phn on: circle = Sketchup.active_model.entities.add_circle [1, 2, 3], [4, 5, 6], 7, 72 Hnh sau cho thy s xut hin ca mt vng trn b nh hng bi s lng phn on ca n. Vng trn c 72 phn on gn ng vi hn mt vng trn trong thc t hn so vi vng trn 24 phn on hoc vng trn 12 phn on, nhng hot ng trn vng trn nhiu phn on tc nhiu i tng Edge s i hi nhiu thi gian hn.

42

Chng III

SketchUp Scripting by Kienking@Gmail.com

Vng trn cng c t cc phn on th n s cng trng ging nh mt a gic. Nu bn ch nh mt s phn on l nm, add_circle s to ra mt hnh ng gic. Tuy nhin, phng thc add_ngon c gi ra to a gic l ph bin hn. V iu ny s c trnh by phn tip theo.

3.6.3 a gic
Phng php thc add_ngon ging gn nh ht add_circle , v hai phng thc u to cc hnh v c bn l ging nhau. S khc bit duy nht l s lng phn on, vi add_circle th s lng phn on mc nh l 24 nhng bn c th ty chn thit lp mt s khc. Phng thc add_ngon khng c s lng phn on mc nh nn bn lun lun phi ch nh s lng cc phn on ca a gic trong m ha. lm r iu ny, on m trong kch bn sau to ra bn hnh dng l: mt a gic c 8 cnh, mt vng trn vi 8 phn on, mt a gic c 24 cnh v mt vng trn c 24 phn on. poly_circle.rb

ents = Sketchup.active_model.entities normal = [0, 0, 1] radius = 1 # Polygon with 8 sides ents.add_ngon [0, 0, 0], normal, radius, 8 # Circle with 8 sides ents.add_circle [3, 0, 0], normal, radius, 8 # Polygon with 24 sides ents.add_ngon [6, 0, 0], normal, radius, 24 # Circle with 24 sides ents.add_circle [9, 0, 0], normal, radius

quan c cc hnh dng to ra, chn trnh n Camera trn meu chnh ca SketchUp v chn Standard View ri Top . Sau , vn trn trnh n Camera chn Parallel Projection. Cui cng, vo cng c Zoom Extents khung nhn tp trung vo hnh dng mi dng.

3.6.4 Vng cung


To ra mt vng cung tng t nh vic to ra mt vng trn, nhng cc tham s b sung l cn thit. Trc tin, bn phi xc nh gc bt u v gc kt thc. Cc gc phi c o (n v o gc l radian) t mt trc, v vy bn cn phi xc nh 1 vector n c coi l cnh radian 0 gip vic o. Danh sch sau cha y ca cc tham s cho cho add_arc:

43

Chng III

SketchUp Scripting by Kienking@Gmail.com

center Mt im xc nh tm ca vng cung zero_vec Mt vector xc nh hng ca gc 0 (c radian ln u bng 0). normal Mt vector php tuyn, vung gc vi mt phng cha vng cung radius Bn knh ca vng cung start_angle Gc bt u, tnh t vector zero_vec end_angle - Gc kt thc, tnh t vector zero_vec num_segments ( khng bt buc chn) S lng cc phn on cho vng cung

Lnh sau y to ra mt vng cung c tm-center ti [ 0, 0, 0] gc bt ustart_angle l 0 , gc kt thc-end_angle l 90 . Cc gc bt u c o t trc y dng, v vy vector-zero_vec l [ 0, 1, 0]. Vng cung c bn knh-radius l 5 v nm trong mt phng xy , v vy vector php tuyn-normal ca n l [ 0, 0, 1 ]. S lng cc phn on- num_segments gi tr mc nh ca n (tc khng nhp). arc = Sketchup.active_model.entities.add_arc [0,0,0], [0,1,0], [0,0,1], 5, 0, 90.degrees arc.length 6 Cung c gc chn tm l 900 v cung c cha 6 i tng Edge, nn mi cnh ca n s b chn bi vi gc tm l 150 v n ging vi vng trn c 24 phn on. Bn c th thm cc phn on cho vng cung bng cch thm mt tham s cho phng thc add_arc. Ph lc B trnh by mt phng thc to mt vng cung t ba im cho trc. N thun tin hn so vi phng thc add_arc, phng thc i hi bn phi bit c tm ln bn knh ca vng cung.

3.7 To ra hnh dng trong 3 D


By gi bn to ra c on thng v ng cong, v bn cng sn sng bt u xy dng b mt. y l nhng b mt kn hai chiu m SketchUp lp y bng mu sc. Mt khi bn to ra mt i tng b mt, tht d dng n p n thnh mt khi ba chiu bng cch s dng cc c ch tng t nh cc cng c Push / Pull v Follow Me ca SketchUp.

3.7.1 To ra mt b mt
i tng Face c to ra bng phng thc add_face ca lp Entities. iu ny cng tng t nh phng thc add_curve m t trn: n chp nhn mt lot cc im hoc mt lot cc cnh, v chng c th c cung cp trong mt danh sch c du phy ngn cch hoc trong mt mng. V d, tp tin kch bn pentagon.rb sau y ng ln mt b mt ng gic t nm im: pentagon.rb

# Create the five points of the pentagon

44

Chng III pt1 = [0, 1, 0] pt2 = [-0.951, 0.309, 0]

SketchUp Scripting by Kienking@Gmail.com

pt3 = [-0.588, -0.809, 0] pt4 = [ 0.588, -0.809, 0] pt5 = [ 0.951, # Draw the face pent = Sketchup.active_model.entities.add_face pt1, pt2, pt3, pt4, pt5 # Display the locations of the stored vertices puts "Point 0: " + pent.vertices[0].position.to_s puts "Point 1: " + pent.vertices[1].position.to_s puts "Point 2: " + pent.vertices[2].position.to_s puts "Point 3: " + pent.vertices[3].position.to_s puts "Point 4: " + pent.vertices[4].position.to_s 0.309, 0]

Hnh sau cho thy kt qu to ra trng nh th no trong khng gian lm vic ca SketchUp, ton b b mt ca mt i tng Face c lp kn.

Lnh Puts trong on m trn s hin th th t v ta cc nh ca ng gic trong hp thoi Ruby console nh sau:

Khi bn xc nh cc im to ra mt b mt-Face, th t ca chng trong m ha l rt quan trng. Nu bn hon i v tr gia im pt2 v pt3 trong danh sch cc tham s, th hnh dng to ra s khng c bt c im g n trng ging nh mt hnh ng gic. Tuy

45

Chng III

SketchUp Scripting by Kienking@Gmail.com

nhin, s nh hng ca im ( theo chiu kim ng h hoc ngc chiu kim ng h ) l khng quan trng. Cho d cc im c lit k t pt1 n pt5 hoc t pt5 n pt1 th i tng b mt kt qu vn ging nhau. Tuy nhin, nhn vo kt qu hin th th t v ta nh trong hp thoi Ruby console. Bn c th thy rng th t cc nh ca i tng Face xp xp theo mt trt t hon ton khc so vi th t cc im c lit k trong on m. Khi thc thi on m ny th phng thc add_face thit lp pt2 l nh bt u-Point 0 ca ng gic v sp xp cc nh theo chiu ngc chiu kim ng h, v vector php tuyn lun lun ch xung nn mt trc (front face) ca b mt ny quay xung di. tr v th t xp xp cc nh ng nh trong danh sch lit k, ngha l pt1 l nh bt u-Point 0, xp xp th t cc nh theo chiu cng chiu kim ng h v vector php tuyn hng ln trn tc l mt trc ca ng gic quay ln trn ( cng chiu vi trc z) th bn c th thm dng m sau vo di dng m dng b mt a gic trong on m trn: pent.reverse!

Pentagon_rev_no.rb

# Create the five points of the pentagon pt1 = [0, 1, 0] pt2 = [-0.951, 0.309, 0]

pt3 = [-0.588, -0.809, 0] pt4 = [ 0.588, -0.809, 0] pt5 = [ 0.951, # Draw the face pent = Sketchup.active_model.entities.add_face pt1, pt2, pt3, pt4, pt5 # Reverse order list and pent.reverse! # Display the locations of the stored vertices puts "Point 0: " + pent.vertices[0].position.to_s puts "Point 1: " + pent.vertices[1].position.to_s puts "Point 2: " + pent.vertices[2].position.to_s puts "Point 3: " + pent.vertices[3].position.to_s puts "Point 4: " + pent.vertices[4].position.to_s normal vector 0.309, 0]

Vector php tuyn ca mt b mt xc nh chiu n p khi to thnh khi 3D ca n . V d, nu cc im vector php tuyn ca b mt trn quay xung di ( cng chiu trc z m) th phng thc pushpull s ko n xung. Nhng c nhiu khi 3D, to ra n i hi phi ko b mt hng ln v vy bn c th cn o ngc chiu ca vector php tuyn bng cch gi ra phng thc reverse!c trong lp Face.

46

Chng III

SketchUp Scripting by Kienking@Gmail.com

3.7.2 Cc phng thc v c trng hnh hc ca lp Face


Mt khi bn to ra mt b mt-Face, bn c th gi cc phng thc c trong lp Face kim tra cc thuc tnh ca n hoc n p n thnh mt khi 3D. Mt s phng thc Face thc hin vi vt liu-material v khoa vn-texture, v chng s c khm ph trong cc chng sau. Ngay by gi, chng ti s xem xt cc phng thc phn tch cc c trng hnh hc ca Face. Hu ht cc phng thc ca lp Face cung cp thng tin v cc c trng hnh hc ca n: phng thc edges v mt mng gm cc i tng cnh-Edge to nn b mt v phng thc vertices tr v mt mng gm cc i tng nh-Vertex ca b mt. Phng thc area tr v din tch ca b mt v phng thc normal tr v vector php tuyn ca n . Phng php classify_point chp nhn mt im v xc nh v tr tng i ca im vi vi b mt. iu ny rt hu ch khi bn cn pht hin cc giao ct hoc xc nh xem b mt no m ngi dng kch chut vo. Phng thc tr v mt trong su gi tr sau :
0 im khng xc nh. 1 im nm trong b mt. 2 im nm trn mt cnh ca b mt. 4 im l mt trong cc nh ca b mt. 8 im nm trong mt phng c cha b mt nhng n khng thuc b mt. 16 im khng nm trong mt phng c cha b mt.

Cc lnh sau y to ra mt b mt hnh vung c trng tm trng vi gc ta v th hin cch thc m phng thc classify_point xc nh v tr tng i ca mt im vi n: face = Sketchup.active_model.entities.add_face [-1, -1, 0], [-1, 1, 0], [1, 1, 0], [1, -1, 0] face.classify_point [0, 0, 0] 1 face.classify_point [1, 1, 0] 4 face.classify_point [1, 2, 0] 8 face.classify_point [1, 1, 1] 16 Phng thc outer_loop ca lp Face tr v mt i tng Loop c cha cc cnh ca b mt. Phng thc loops tr v mt mng gm cc i tng Loop tip gip vi b mt. i tng Loop rt hu ch trong cu trc lin kt nhng s khng c tm hiu trong cun sch ny. 3.7.3 Phng thc pushpull Lp Face cung cp hai phng thc n p thnh khi 3D t cc b mt hai chiu l: pushpull v followme. Chng thc hin cc hot ng tng t nh cng c Push / Pull v Follow Me ca SketchUp.

47

Chng III

SketchUp Scripting by Kienking@Gmail.com

Phng thc pushpull rt n gin s dng v hiu c n. N chp nhn mt s nguyn, v nu cc s nguyn l dng th phng thc s ko b mt dc theo vector php tuyn ca b mt v to mt khi 3 chiu. Nu s nguyn c gi tr m th phng thc ny s y b mt theo chiu ngc li chiu ca vector php tuyn. Nu mt b mt ca mt khi 3 chiu c y bng mt cch no li su vo trong lng th th tch ca n s b gim i. loi b mt phn ca mt khi ba chiu, to ra mt hoc nhiu i tng cnhEdge bao quanh phn s b loi b. Phn b chn ny s tr thnh mt b mt mi. Gi ra phng thc pushpull trn khun mt ny vi mt gi tr m ct n ra khi khi ban u. on m trong tp tin kch bn cutbox.rb sau cho thy s lm vic ny trong thc t. N bt u vi mt b mt hnh ch nht v n p n to thnh mt khi hnh hp ch nht. Sau n v mt on thng chn gc ca b mt trn cng pha bn phi, gi ra pushpull loi b khi gc ny khi khi hnh hp.

cutbox.rb

# Create the box ent = Sketchup.active_model.entities main_face = ent.add_face [0,0,0], [6,0,0], [6,8,0], [0,8,0] main_face.reverse! main_face.pushpull 5 # Draw a line across the upper-right corner cut = ent.add_line [6,6,5], [4,8,5] # Remove the new face cut.faces[1].pushpull -5 Trnh t thc hin c on m trn s din ra nh hnh di y:

48

Chng III

SketchUp Scripting by Kienking@Gmail.com

Lnh cui cng l s phn tch k lng rt ng gi. i tng b mt- Face th hai trong gc khng c to ra mt cch r rng trong on m. Thay vo , n s t ng xy dng khi Edge mi c dng chn qua gc ca b mt trn cng. Sau khi dng, Edge ny c kt ni vi hai b mt: mt l i din b mt chnh v mt i din cho b mt gc .Mi Edge c th truy xut vo mt mng bao gm cc i tng mt lin k ca n, v b mt mi c ch s-Index l 1. Do , dng m lnh: cut.faces[1].pushpull -5 n b mt th hai i xung, loi b khi gc khi khi hnh hp. 3.7.4 Phng thc followme Khi bn gi pushpull, bn c th n p theo mt trong hai hng: cng chiu vi vector php tuyn ca b mt v ngc chiu vi vector php. Vi phng thc followme, s n ra vn thc hin dc theo mt vc t, nhng by gi bn iu khin hng ca vector. C ngha l bn ch nh ng dn cho vic n ra. ng dn n ra c th c xc nh vi mt hoc nhiu cnh. Nu ng dn c nhiu hn mt cnh th hai yu cu phi c p ng:
1. Cc cnh to thnh ng dn n ra phi c kt ni vi nhau. 2. Tt c cc cnh to thnh ng dn n ra khng c nm cng trong mt phng

cha b mt c n ra. Mt khi bn xc nh c ng dn, bn c th gi ra phng thc followme vi mt mng bao gm cc cnh ca ng dn. N s n b mt dc theo mi cnh ca ng dn n ra. on m trong tp tin kch bn followme.rb sau cho thy cch thc lm vic ny. N to ra mt b mt trn v n n dc theo cc cnh ca mt hnh ch nht.

Listing 3.5: followme.rb

# Access the Entities container model = Sketchup.active_model ent = model.entities # Create the primary face circle = ent.add_circle [0,0,0], [0,0,1], 2 circle_face = ent.add_face circle # Create the path path = ent.add_curve [10,0,0], [10,0,5], [10,5,5], [10,5,0], [10,0,0] # Extrude the circle along the path circle_face.followme path

Pha bn tri ca hnh sau y cho thy b mt ban u v ng dn n ra hnh ch nht. Pha bn phi cho thy khi 3 chiu c to ra bi phng thc followme.

49

Chng III

SketchUp Scripting by Kienking@Gmail.com

( Chn View>hidden Geometry trn menu chnh ca SketchUp c kt qu ging trn.) Hy xem xt mt cch s dng khc ca followme. on m trong kch bn sau to ra mt ci bnh bng cch quay mt b mt xung quanh mt trc. y, b mt c xy dng t mt mng bao gm nhiu im v c tr v bi phng thc add_curve.

lathe.rb

# Access the Entities object model = Sketchup.active_model ents = model.entities # Create the 2-D shape curve = ents.add_curve [0, 0, 1.244209], [0.116554, 0, 1.238382], [0.160261, 0, 1.217985], [0.186486, 0, 1.188846], [0.1894, 0, 1.165536], [0.17483, 0, 1.145139], [0.142778, 0, 1.127656], [0.096157, 0, 1.118914], [0.093243, 0, 1.063551], [0.175152, 0, 0.996269], [0.175152, 0, 0.915269], [0.28237, 0, 0.871026], [0.375392, 0, 0.801741], [0.448486, 0, 0.711683], [0.497151, 0, 0.606398], [0.51839, 0, 0.492371], [0.510894, 0, 0.376625], [0.475126, 0, 0.26629], [0.413287, 0, 0.168161], [0.329188, 0, 0.088283], [0.228007, 0, 0.031575], [0.115978, 0, 0.001531], [0, 0, 0], [0, 0, 1.244209] curve_face = ents.add_face curve # Create the circular path path = ents.add_circle [0, 0, 0], [0, 0, 1], 2 # Create the figure curve_face.followme path

50

Chng III

SketchUp Scripting by Kienking@Gmail.com

Pha bn tri ca hnh sau cho b mt hai chiu ca ci bnh v ng dn ca n l vng trn. Pha bn phi cho thy chic bnh c to ra bi sn xut bi followme.

Nh pushpull, phng thc followme c th loi b cc phn ca mt khi ba chiu. lm iu ny, to thnh mt b mt trn khi bng cch to ra mt hoc nhiu i tng cnh-Edge. Sau to ra ng dn bng cch chn cc cnh thuc phn khi s b ct b. Gi ra phng thc followme vi ng dn loi b phn b chn . on m trong tp tin kch bn sau cho thy cch lm vic ny. N to ra mt khi hp ba chiu v gi followme ct b cc cnh ph trn ca hp. chamfer.rb

# Create the box ents = Sketchup.active_model.entities main_face = ents.add_face [0,0,0], [5,0,0], [5,8,0], [0,8,0] main_face.reverse! main_face.pushpull 6, true # Draw a line across a corner cut = ents.add_line [5, 7, 6], [5, 8, 5] # Create the chamfer cut.faces[0].followme main_face.edges

Hnh gia cho thy hp vi mt Edge c dng chn ngang qua gc trn cng. Hnh bn phi hin th hp b vt sau followme c gi.

ng dn ct thu c bng cch gi phng thc edges cho i tng b mt-Face trn cng ca khi hp. iu ny tr v mng bao gm cc i tng cnh-Edge bao bc b mt trn cng. Khi bn cn phi p dng followme cho tt c cc cnh ca mt b mt, gi ra phng thc edges d dng hn vic xc nh v tr ca tng i tng cnh ring r. Trong on m trn, phng thc pushpull c thm mt tham s th hai vi thit lp l true. Thng thng, pushpull s xa i b mt c s dng n ra khi 3 chiu. Nhng tham s (true) khng bt buc chn ny m bo rng main_face s vn truy xut

51

Chng III

SketchUp Scripting by Kienking@Gmail.com

c sau khi pushpull c gi ra. Hy nh ly iu ny nu bn nhn c bt k li reference to deleted Face"-tham chiu n b mt xa" khi thc thi kch bn ca bn. 3.7.5 To ra mt khi cu Tt c mi ngi nn bit lm th no to ra mt khi cu trong SketchUp, v ging nh cc v d trn, n s d dng c thc hin bi phng thc followme. Trong trng hp ny, c b mt v ng dn n ra l hai vng trn c tm trng nhau. iu ny c th hin trong hnh sau.

on m trong kch bn sau to ra b mt hnh trn v ng dn vng trn, v sau gi followme n ra khi cu. Lu rng, hai vng trn c tm trng nhau nhng vector php tuyn vung gc vi nhau. sphere.rb

# Access the Entities object ents = Sketchup.active_model.entities # Create the initial circle center = [0, 0, 0] radius = 5 circle = ents.add_circle center, [0, 0, 1], radius circle_face = ents.add_face circle # Create the circular path path = ents.add_circle center, [0, 1, 0], radius + 1 # Create the sphere circle_face.followme path # Remove the path ents.erase_entities path

Dng m cui cng trong on m dng xa i cc i tng cnh to nn ng dn n ra. y l mt ch quan trng khi bn s dng phng thc followme.

3.8 Kt thc chng


Chng ny trnh by mt lng ln thng tin, t cu trc d liu c bn ca SketchUp cho cc i tng i din cho cc hnh dng trong mt d n SketchUp. Phn u ca chng ny trnh by v m-un Sketchup, v phng thc ca n dng cung cp ton b cc thng tin v phn mm SketchUp. Ngc li, lp Model ch i din cho mt d n

52

Chng III

SketchUp Scripting by Kienking@Gmail.com

SketchUp ang hin hnh v n c th c lu thnh mt tp tin c ui m rng l *. skp. Mt i tng Model c s dng nh l mt ci cng t n: n cha ng nhiu i tng nh Entities, Materials, Layers, Tools v cc th khc na. i tng Entities c bit quan trng bi v n lu tr tt c cc i tng ha trong d n SketchUp hin hnh. Cc i tng ha ny c gi l cc i tng Entity, v lp Entity c mt s lp con quan trng. Mt lp con l Drawingelement c s dng nh l lp cha ca tt c cc hnh dng trong API SketchUp. Phn cui cng ca chng ny trnh by v hnh dng thc t c dng to nn cc m hnh trong SketchUp: cnh, nhiu cnh, b mt v hnh khi. Cc lp v phng thc ca chng tht l d hiu, nhng n c th s kh khn khi phi hp tt chng li vi nhau dng hnh. V vy, ti khuyn bn nn thc hnh to ra cc i tng trong kch bn: to b mt t cc cnh v s dng phng thc pushpull v followme n p b mt thnh khi ba chiu. Ngoi ra, hiu cc cch thc thc hin ca tng dng m trong cc on m tp tin kch bn th ti khuyn bn nn chu kh g ln lt tng dng m ny trong hp thoi Ruby console ca SketchUp. API l vit tt ca cm t application programming interface, ngha l giao din lp trnh ng dng ca SketchUp. API l mt giao din m mt h thng my tnh hay ng dng cung cp cho php cc yu cu dch v c th c to ra t cc chng trnh my tnh khc, v/hoc cho php d liu c th c trao i qua li gia chng. Chng hn, mt chng trnh my tnh c th (v thng l phi) dng cc hm API ca h iu hnh xin cp pht b nh v truy xut tp tin.

53

You might also like