You are on page 1of 54

Chng IV

SketchUp Scripting by Kienking@Gmail.com

Cc php bin i hnh hc v thm i tng hnh hc

54

Chng IV

SketchUp Scripting by Kienking@Gmail.com

Mt trong nhng im mnh ca SketchUp l mt khi bn xy dng c mt m hnh th bn c th chnh sa cc i tng hnh hc ca n nh di chuyn mt con ng, scale mt ca s, hoc xoay mt ci ct hin nh. thc hin cc hot ng ny trong m ha, bn phi to mt i tng bin i nh r cch thc m mt i tng hoc nhiu i tng hnh hc s c thay i. C ba loi c bn ca php bin i v phn u ca chng ny trnh by chi tit tng loi. Phn th hai ca chng ny trnh by vic b sung cc thnh phn khc bn c th thm vo mt d n SketchUp. Chng trc cho thy cch thc lm th no thm c on thng v b mt, nhng chng ny i xa hn na v gii thch cch s dng cc i tng vn bn, i tng hnh nh, v cc i tng li a gic. Tt c chng s c b sung thm vo mt d n SketchUp ch khng phi ch c on thng v b mt n gin nh chng trc.

4.1 Cc php bin i.


Ngi nh trong hnh sau c mt vn . Ca i v ca s th nhn kh n, nhng mi cn phi thay i. C th, on thng nm gia mi cn phi c nng ln cc mi nh c th c hnh dng mi dc quen thuc nh m t hnh bn phi.

Nu nh bn ang s dng giao din ha ca SketchUp th tt c mi vic bn cn phi lm l chn cng c Move t thnh cng c, kch chn vo on thng nm gia mi v di chuyn con chut i thng ln trn. Nhng lm th no bn c th lm c nhng iu tng t nh vy trong m ha? Cho n nay, chng ta bit cch to ra on thng v b mt, nhng cha h bit cch lm th no di chuyn cc i tng ny sau khi chng c to ra. Lp Entities cung cp phng thc transform_entities cho chnh mc ch ny. Phng thc ny chp nhn hai tham s: mt i tng Entity hoc mt mng cc i tng Entity v mt i tng bin i. V d, nu i tng Edge i din cho on thng gia mi c tn l roof_line, cc dng m sau nng n ln 5 n v o cng chiu vi trc z dng so vi v tr ban u: ents = Sketchup.active_model.entities tr = Geom::Transformation.translation [0, 0, 5] ents.transform_entities tr, roof_line Trong dng m th hai, tip u ng Geom :: l cn thit bi v lp bin iTransformation c cha ng trong cc m-un Geom. Chng 8 s gii thch cc mun v cch thc chng lm vic. Mc tiu ca phn ny l gii thch lm th no to cc i tng nh tr v s dng chng trong m ha. Trong v d ny, tr l mt i tng bin i dng di chuyn roof_line ti mt v tr khc. Mt i tng bin i l s th hin chuyn ng ca mt i

55

Chng IV

SketchUp Scripting by Kienking@Gmail.com

tng Entity v s chuyn ng ny c th c t vo trong mt hoc nhiu cc trng hp sau : translation di chuyn mt i tng vi mt khong cch xc nh theo mt chiu nht nh. Trong SketchUp cng c Move thc hin vic di chuyn. rotation di chuyn mt i tng thng qua mt gc c a ra, c o t mt gc. Trong SketchUp, cng c Rotate thc hin cng vic ny . scaling tng hoc gim kch thc ca mt i tng dc theo khong cch ca n t gc. Trong SketchUp, cng c Scale thc hin cng vic ny .

Lp Transformation cung cp nhiu phng thc to ra cc i tng bin i mi v thng l c t nht hai cch to ra i tng ny. Ni chung, i tng bin i c th c to ra bng cch gi ra phng thc new hoc bng cch gi ra mt phng thc to ra mt loi i tng bin i c th no . Chng ny gii thch lm th no to v s dng cc i tng bin i, nhng b qua nn tng ton hc. L thuyt ton hc thng l khng cn thit cho vic m ha, nhng n tr nn quan trng khi bn cn phi g li cc hot ng ca php bin i hoc to ra chng trong qu trnh thc thi mt kch bn. Nn tng ton hc ca vect, ma trn v chuyn i s c trnh by trong Ph lc B: Hnh hc nng cao.

4.1.1 Php tnh tin-translation.


Mt dch chuyn t ch tin trong SketchUp s di chuyn mt i tng Edge vi mt khong cch xc nh theo mt chiu nht nh. xc nh mt dch chuyn tnh tin trong khng gian ba chiu, bn cn phi to mt mng gm ba phn t. Mi mt phn t thuc mng ny s c thm vo mt phn t tng ng trong mng ta ca Entity to ra mt mng bao gm cc ta mi cho Entity . V d, di chuyn mt hnh dng t v tr [ 1, 2, 3] ti [ 3 , 2, 1 ], bn dch chuyn tnh tin n bng cch s dng mng [ 2 , 0 , -2 ]. La chn mng ny l do [ 1+2, 2+0, 3 - 2 ] = [ 3 , 2, 1 ], y l v tr kt thc mong mun. V mng c cha ba phn t xc nh chiu v khong cch nn n c gi l mt vector dch chuyn tnh tin. API SketchUp cung cp ba cch sau to ra mt i tng bin iTransformation nhm thc hin dch chuyn tch tin:
1. 2. 3.

Gi ra Geom::Transformation.new vi mt vector dch chuyn tch tin Gi ra Geom::Transformation.translation vi mt vector dch chuyn tch tin Ch s dng mt vector dch chuyn tnh tin .

on m trong tp tin kch bn sau cho thy cch thc hot ng ca tng phng thc mt. N s to ra mt b mt hnh vung v dch chuyn t nh tin n ba ln. u tin, n dch chuyn t nh tin b mt ny 4 n v o theo chiu dng ca trc x ( ngha l dch chuyn dc theo trc x dng v v tr mi cch v tr c 4 n v o), sau l 6 n v theo chiu dng ca trc y v cui cng l 3 n v theo chiu m ca trc x.

translate.rb

# Create the face ents = Sketchup.active_model.entities

56

Chng IV

SketchUp Scripting by Kienking@Gmail.com

tran_face = ents.add_face [-1, -1, 0], [-1, 1, 0],[1, 1, 0], [1, -1, 0] # Translate four units in the +x direction t = Geom::Transformation.new [4, 0, 0] ents.transform_entities t, tran_face # Translate six units in the +y direction t = Geom::Transformation.translation [0, 6, 0] ents.transform_entities t, tran_face # Translate three units in the -x direction ents.transform_entities [-3, 0, 0], tran_face

S sau cho thy kt qu ln lt thc hin tng hot ng dch chuyn tnh tin. Lu rng bn c th thay th ba vect dch chuyn tnh tin trn bng mt vector dch chuyn tnh tin duy nht: [ 1, 6, 0] b mt v tr ban u khi to ra c dch chuyn ti v tr cui cng. [-3, 0, 0]

[0, 6, 0]

[4, 0, 0] Vic s dng dng lnh cui cng r rng l khng to ra mt i tng bin i, nhng li s dng vector dch chuyn tnh tin. y tuy l cch d nht thc hin dch chuyn tnh tin nhng n c mt nhc im: bn phi vit li vector dch chuyn tnh tin mi khi bn mun thc hin dch chuyn. Bng cch to ra mt i tng bin i, bn c th thc hin dch chuyn tnh tin nhiu ln vi vector m khng cn phi vit li.

4.1.2 Php xoay-Rotation.


xoay mt hnh, bn cn phi xc nh ba phn thng tin: im gc php xoay thc hin (mt im), trc xoay (mt vector) v gc xoay (mt gi tr thp phn). Nu bn tng v mt cung trn bng mt ci compa, bn c th tng tng im gc ca php xoay chnh l tm ca cung ( hoc l im m chn tr ca compa cm xung) v trc quay chnh l chn tr ca compa v gc xoay chnh l gc chn tm ca cung trn. Hai tham s u tin ( im gc v trc xoay) c th c xc nh l cc mng c ba phn t. Tham s cui cng (gc xoay) l gi tr ca gc xoay vi n v o gc l radian. C hai cch to ra mt i tng bin i thc hin php xoay:

57

Chng IV
1. 2.

SketchUp Scripting by Kienking@Gmail.com

Gi ra Geom::Transformation.new vi im gc, trc xoay v gc xoay. Gi ra Geom::Transformation.rotation vi im gc, trc xoay v gc xoay.

V d, cc i tng bin i sau dng xoay mt i tng Entity mt gc 30 quanh trc xoay z vi im gc ti gc ta [ 0, 0, 0]. tr = Geom::Transformation.new [0, 0, 0], [0, 0, 1], 30.degrees hoc tr = Geom::Transformation.rotation [0, 0, 0],[0, 0, 1],30.degrees Nu gi tr gc xoay l dng, i tng Entity xoay ngc chiu kim ng. C ngha l, nu bn t trn trc xoay nhn xung mt phng xoay ( mt phng i qua im gc v vung gc vi trc xoay ) th i tng Entity s di chuyn sang v tr mi theo mt chiu ngc chiu kim ng so vi v tr ban u. Hnh sau, nhn xung t trc z xung mt phng xoy v thy cch thc m i tng s xoay vi mt trong cc i tng bin i to ra trn :

Nu gi tr gc xoay l m, i tng Entity xoay cng chiu kim ng. i vi cc php xoay phc tp, bn c th xc nh cc thc hin xoay quanh ba trc ta ca n bi cc phng thc rotx , roty v Rotz. V d vi i tng bin i tr c to ra trn th iu ny c th hin nh sau: tr.rotx 0 tr.roty 0 tr.rotz 30 Nhng gc xoay c tr v vi n v o gc l . Bn c th thay i sang gi tr c n v o gc l radia bng cch thm mt phng thc chuyn i n v nh tr.rotz.degrees. on m trong tp tin kch bn sau s to ra mt b mt hnh vung, sau xoay b mt mt gc 600 quanh trc z. theo chiu kim ng h vi im gc l [0, 0, 0].

Rotation.rb

# Create the face

58

Chng IV

SketchUp Scripting by Kienking@Gmail.com

ents = Sketchup.active_model.entities rota_face = ents.add_face [3, -1, 0], [5, -1, 0],[5, 1, 0], [3, 1, 0] # Rotation about z direction, origin, 60 degree tr = Geom::Transformation.new [0, 0, 0], [0, 0, 1], 60.degrees ents.transform_entities tr, rota_face

S sau cho thy kt qu c thc hin.

600

4.1.3 Php qui m-Scale.


Trong SketchUp, cng c Scale dng thay i kch thc ca mt hnh v v tr ca n li khng thay i. Nhng khi bn to mt i tng bin i scale th vic scale s nh hng n c kch thc ca hnh v v tr tng i ca n so vi mt im gc. Theo mc nh th im gc l gc ta [ 0, 0, 0]. V d, cc dng m sau gim kch thc ca hnh Shape n ch bng mt na kch thc ban u v di chuyn n ti v tr nm gia v tr ban u v gc ta [ 0, 0, 0]. V tr ca hnh l ni n v tr im trng tm ca hnh. ents = Sketchup.active_model.entities t = Geom::Transformation.new 0.5 ents.transform_entities t, shape Mt i tng bin i tng t c th c to ra vi phng thc scaling ca lp Transformation. Cc dng m sau y cho ra kt qu tng t nh v d trc : ents = Sketchup.active_model.entities t = Geom::Transformation.scaling 0.5 ents.transform_entities t, shape i s 0.5 c gi l t l scale. Nu gi khong cch t trng tm ca hnh ban u n gc ta l L v t l scale l n th: - Nu n > 1: hnh ban u s c phng to ln n ln v khong cch t im trng tm ca hnh sau khi c phng to v di chuyn ti v tr mi ti gc ta s l L2 = n*L. L hnh bn phi di y.

59

Chng IV

SketchUp Scripting by Kienking@Gmail.com

- Nu n < 1: hnh ban u s c thu nh n ln v khong cch t im trng tm ca hnh sau khi c thu nh v di chuyn ti v tr mi ti gc ta s l L1 = L/n. L hnh bn bn tri di y.

Ty thuc vo cc i s ca n, phng thc scaling c th lm nhiu th hn l ch thu nh hoc phng to mt Entity. thay i im gc (trng vi gc ta ) ca scale, bn c th mt im gc mi pha trc i s t l scale. V d, dng m sau y tng gp i kch thc ca mt Entity v scale n quanh im gc mi [ 5 , 5, 5 ] : t = Geom::Transformation.scaling [5, 5, 5], 2 Khi s scale v di chuyn ca hnh cng ph thuc vo t l scale v v tr tng i gia v tr im trng tm ban u v im gc mi.

Ngoi vic xc nh im gc mi, bn cng c th thit lp t s scale ring r cho tng trc ta mt. lm iu ny, gi ra Transformation.scaling vi ba i s (khng nm trong mt mng). Nhng i s ny s c hiu l t l scale theo cc trc x, y v z. V d, i tng bin i sau s lm gim kch thc theo trc x cn mt na, phng to kch thc theo trc y ln ba ln, v khng thay i kch thc theo trc z: t = Geom::Transformation.scaling 0.5, 3, 1

(0.5,3,1)

60

Chng IV

SketchUp Scripting by Kienking@Gmail.com

Cui cng l bn c th to ra i tng bin i xc nh c im gc mi v cc t l scale ring r cho tng trc. i s im gc mi lun lun phi c xc nh u tin, do , v d s nh sau : t = Geom::Transformation.scaling [5, 5, 5], 0.5, 3, 1 Dng m ny s scale i tng tng t nh v d trn, nhng trong trng hp ny th v tr ca i tng s ging nh trng hp im gc mi [ 5 , 5, 5 ] trn. 4.1.4 Kt hp cc php bin i Cho n gi, tt c cc i tng bin i c to ra mi ch thc hin duy nht mt nhim v ca mt kiu bin i nh: dch chuyn tnh tin, xoay hoc scale. Tuy nhin , chng ta c th kt hp cc i tng chuyn i vi nhau bng php ton * . V d, nu i tng bin i t_tran dch chuyn tnh tin mt Entity v t_rot xoay mt Entity, dng m sau y to ra mt i tng bin i kt hp, u tin n dch chuyn tnh tin mt Entity bng t_tran v sau xoay n vi t_rot : t_prod = t_rot * t_tran i tng bin i pha ngoi cng bn phi lun lun c thc hin u tin. Trong trng hp ny, i tng bin i tng hp t_prod s thc thi t_tran u tin v t_rot l th hai. Nu bn o ngc th t ca chng th t_prod s thc thi t_rot u tin v th hai l t_tran to ra mt s bin i hon ton khc so vi trn. iu ny c th gy nhm ln, v vy chng ta hy xem mt v d khc: V d t1, t2 , t3 v t4 l cc i tng bin i v t_prod c a ra bi dng m sau y : t_prod = t1 * t2 * t3 * t4 Nu bn bin i mt Entity vi t_prod, vic i tng bin i t4 s c thc thi u tin, sau l t3 , tip theo l t2 v cui cng l t1. hiu l do ti sao i tng bin i ngoi cng bn phi c thc thi u tin v l do ti sao php ton nhn * c s dng kt hp nhiu i tng bin i li vi nhau, bn phi hiu rng ton hc l c s ca cc hot ng ny. Mi i tng bin i v c bn l mt ma trn c cha ng mi su gi tr thp phn. Nhng gi tr ny xc nh mt ma trn tnh tin, xoay, scale hoc thc hin mt s kt hp ca chng. Ph lc B tho lun v ch ny mt cch chi tit, v mc d ch l khng d hiu, n rt hu ch khi bn ang c gng g li mt bin i kt hp. 4.1.5 Php bin i h trc ta Gi s bn ang m hnh ha mt chic xe vi bn ci bnh. Khi bn xoay xe, nn cho ton b chic xe xoay quanh im gc ca chic xe. Nhng khi bn xoay bt k chic bnh xe no ca n, vng xoay nn c lin quan n trc ca bnh xe. Nh vy, vi mc ch bin i nh th nn mi bnh xe cn phi c im gc v trc xoay ca ring n. V h ta ring bit ny c goi l h trc ta a phng-local coordinate system ca bnh xe. H ta ca ton b chic xe gi l h trc ta tng th-global coordinate system. C mt s cch to ra mt i tng bin i c th bin i mt h trc ta sang h trc ta khc. Chng c a ra nh sau:
1. 2.

Gi ra Geom::Transformation.new vi mt im gc ta mi v trc z mi Gi ra Geom::Transformation.new vi mt im gc ta mi v trc x mi, trc y mi. Gi ra Geom::Transformation.new vi trc x mi, y mi,z mi v gc ta mi Gi ra Geom::Transformation.axes vi gc ta mi, trc x mi, y mi v z mi.

3. 4.

61

Chng IV

SketchUp Scripting by Kienking@Gmail.com

i tng bin i sau y bin i h trc ta tng th thnh mt h trc ta c gc ta ti [ 10 , 4, 6 ] v mt trc z cng chiu vi vector [ 4, 3, 3 ]: t = Geom::Transformation.new [10, 4, 6], [4, 3, 3] Trong trng hp ny, cc trc x v trc y c ty . kim chng rng im gc v trc c thit lp chnh xc, gi ra cc phng thc origin, xaxis, yaxis, v zaxis nh sau: t.origin 10, 4, 6] t.xaxis [-0.6, 0.8, 0] t.yaxis [-0.411597, -0.308697, 0.857493] t.zaxis [0.685994, 0.514496, 0.514496] Kt qu tr v ca trc z l vector khng bng vi tham s vector dng to ra i tng bin i v iu ny c v k l. Tuy nhin, vector kt qu tr v ca trc z c cng chiu vi vector [ 4, 3, 3 ], s khc bit l cc vector kt qu tr v ca trc z c tnh chiu di ca n. Ph lc B s gii thch ch v di vc t, chiu vector v cho thy cch chng c tnh ton nh th no. hiu r hn v vic kt hp cc php bin i, bn c th b qua v tin ti chng 12. Hot ng cu trc khung xng ph thuc nhiu vo cch s dng h trc ta a phng v h trc ta tng th to ra mt h thng chuyn ng c phn cp.

4.2 Text
Trong giao din s dng ca SketchUp c hai cng c to ra vn l: cng c Text v cc cng c 3D Text. Ni chung, cng c Text thm cc ghi ch n gin trong d n SketchUp , v n c bit hu ch cho vic cung cp d liu v kch thc (nh din tch, th tch). Cc dng Text ny trong d n SketchUp thng bt u bng mt mi tn v m bn c th thit lp v tr ca n bt c ch no. Khi bn to mt Text hai chiu trong m ha, kt qu tr v mt i tng Text. Khi ni n Text ba chiu (3D Text), m ha s tr nn phc tp hn. Trc tin, l thm cc tham s cn c xc nh, chng hn nh font ch, kch thc font v cn chnh vn bn. Th hai, phng thc c s dng to ra 3D Text khng tr v mt i tng Text m l mt ci g hon ton khc. 4.2.1 2D Text Cng nh i tng b mt c to ra bi add_face , cc i tng Text s c to ra bi phng thc add_text ca lp Entities. Khi bn gi phng thc ny, bn cn phi xc nh ti thiu hai thng s: ni dung ca Text s c hin th v v tr m Text to ra s c t vo. V d, lnh sau y tr v mt i tng Text hin th dng ch Hello, world! v n c chn gc ta tc im [ 0, 0, 0] :

62

Chng IV

SketchUp Scripting by Kienking@Gmail.com

ents = Sketchup.active_model.entities example_text = ents.add_text "Hello, world!", [0, 0, 0] Ni dung ca Text lun lun t v tr i din vi ngi dng, kch thc font v kiu font ca n c xc nh trong hp thoi Model Info/Text ( chn Window>Model Info trn menu chnh ca SketchUp). Hnh sau cho thy ni dung Text c hin th nh th no trong khung nhn 3 chiu:

Ti thi im vit cun sch ny, khng c cch no thay i c kiu font v kch thc font ca Text 2 chiu chiu thng qua i tng Text trong m ha. Tuy nhin, bn c th thm mt on thng c u mi tn c gi l ng neo-leader vo trc ni dung hin th ca Text trong d n SketchUp. thm mt leader cho Text, gi ra add_text vi ba tham s. Ging nh trn, tham s u tin s xc nh ni dung c hin th. Nhng by gi tham s th hai s thit lp v tr ca u mi tn ca -leader v tham s th ba xc nh vector on thng ca leader. ents = Sketchup.active_model.entities example_text=ents.add_text "Hello, world!",[0,0,0],[2,2,0] Hnh sau cho thy kt qu hin th khi nh km thm mt leader. Mc d v tr ca dng hin th ni dung ca Text thay i nhng n vn i din vi ngi dng.

Khi bn c c i tng Text c tr v bi phng thc add_text th bn c th gi ra bt k phng thc no c cung cp ch lp Text. Cc phng thc ny kim sot cch thc m text v leader s c th hin trong SketchUp, v chng c ra nh sau:

text= - Thit lp ni dung Text s c hin th point= - Xc nh v tr t dng Text hin th hoc im t ca u mi tn ca leather vector= - xc nh vector on thng ca leader line_weight= - Xc nh chiu dy ca on thng thuc leader

63

Chng IV

SketchUp Scripting by Kienking@Gmail.com

arrow_type= - Cu hnh s hin th ca u mi tn thuc leader trong d n SketchUp. Nu l 0 th khng c u mi tn ny, nu l 1 th thay u mi tn l ng cho, nu l 2 th thay u mi tn bng du chm ., nu l 3 th l u mi tn c v 4 th l u mi tn h.

leader_type= - Cu hnh kiu hin th ca leader trong d n SketchUp. 0 ngha l leader b n, 1 ngha l leader ch view-based, 2 ngha l leader ch pushpin. Xem li hp thoi Model Info/Text/Leader lines/Leader ( chn Window>Model Info trn menu chnh ca SketchUp).

on m sau to mt i tng Text km theo mt leader cho n, v sau cu hnh cc s hin th ca Text v leader trong d n SketchUp: ents = Sketchup.active_model.entities new_text = ents.add_text "Old Text Message!", [1,1,0], [3,0,0] new_text.text = "New Text Message!" # Pushpin-style leader new_text.leader_type = 2 new_text.line_weight = 4 # Dotted arrow-Thay mi tn l du chm new_text.arrow_type = 2 Kt qu Text s c thay th ni dung ban u l Old Text Message thnh New Text Message!v kiu hin th ca leader l pushpin. Chiu dy ca on thng thuc leader l 4 pixel v u mi tn ca n c thay th bng mt du chm. 4.2.2 3D Text 2D Text l tuyt vi cho cc ghi ch v d liu lin quan n kch thc, nhng nu text l mun ni n dng trang tr hoc cn phi c nh hng hoc cn n p theo mt cch c th th bn s phi lm vic trong khng gian ba chiu. y l th kh khn thc hin trong m ha v khng c i tng c th cho 3D text m ch c mt i tng Text i din cho 2D text. Cch duy nht to ra 3D text trong m ha l bng cch gi ra phng thc add_3d_text trong lp Entities. gi ra phng thc ny, bn cn cung cp mi tham s:
1. 2.

string Chui vn bn s xut hin. alignment canh dng ngang: TextAlignRight, TextAlignLeft hoc TextAlignCenter

64

Chng IV
3. 4. 5. 6. 7.

SketchUp Scripting by Kienking@Gmail.com

fontName Tn ca font dng cho chui vn bn s xut hin (v d., Times, Arial) bold La chn c in m chui vn bn hay khng (true hoc false) italic - La chn c in nghin chui vn bn hay khng (true hoc false) height Chiu cao ca cc ch trong chui vn bn tolerance Dung sai to ra ng cong trong ch thuc chui vn bn (mc nh l 0.0 s to ra cht lng cao nht cho chui vn bn ) baseZ V tr ca chui vn bn theo trc z ( cao ca n) filled La chn cc ch trong chui vn bn s c ph y ( tc l cc b mt trong cc ng bin bao quanh ch) (true hoc false)

8. 9.

10. extrusion chiu su ca cc k t 3D (ch vi la chn ca tham s filled l true)

Theo mc nh, cc 3D text khi c hin th trong d n SketchUp lun c t trong gc ca mt phng xy to bi chiu x v y dng. Bn c th thay i v tr ca n theo chiu trc z bng tham s baseZ, nhng mt khi bn to ra 3D text trong d n SketchUp th bn c th thay i v tr ca n bng cch s dng mt i tng bin i v phng thc transform_entities. on m trong tp tin kch bn sau y phng thc add_3d_text c gi ra ba ln to ra cc 3D text vi cch cn dng, phng ch v cc gi tr tolerance khc nhau. Trong cc trng hp, chiu cao ca cc chui vn bn lun c thit lp l 10 . text_3d.rb

# Access the Entities container ents = Sketchup.active_model.entities # Draw in Times New Roman, left-aligned, tolerance = 100 string1 = "This text is printed in \n \ left-aligned Times New Roman \n with a tolerance of 100." ents.add_3d_text string1, TextAlignLeft, "Times", 10, 100, 0, true, 10 ents.transform_entities [0, 60, 0], ents.to_a # Draw in bold Arial, center-aligned, tolerance = 10 string2 = "This text is printed in \n \ center-aligned bold Arial \n with a tolerance of 10." ents.add_3d_text string2, TextAlignCenter, "Arial", false, 10, 10, 0, true, 10 ents.transform_entities [0, 60, 0], ents.to_a # Draw in outline, italicized Courier New, tolerance = 1 string3 = "This text outline is printed in \n \ right-aligned, italicized \n Courier New with a tolerance of 1." true, false, false,

65

Chng IV

SketchUp Scripting by Kienking@Gmail.com

ents.add_3d_text string3, TextAlignRight, "Courier New", false, true, 10, 1, 0, false, 10

Hnh sau cho thy kt qu vic thc thi kch bn trn. Lu rng kh nng c c ca chui vn bn c ci thin khi gi tr dung sai-tolerance ca n gim. Hn na, khi vn bn th ba c dng ra khi gi tr thit lp ca tham s filled l false nn n khng c n p thnh cc khi 3D nh cc khi vn bn khc .

Trong khi phng thc add_text tr v mt i tng Text, add_3d_text tr v trng thi thc hin ca phng thc: true hoc false. Hn na, add_3d_text khng to ra mt i tng duy nht m n to ra hng trm v hng ngn cnh v b mt ring. V l do ny, cch duy nht di chuyn cc khi vn bn c to ra l gi ra phng thc transform_entities ca i tng Entities hin hnh cho tt c cnh v b mt cha ng trong khi vn bn to ra.

4.3 Hnh nh-Image


C hai cch to ra mt hnh nh trong d n SketchUp t mt tp tin nh: nh mt hoa vn-Texture hoc nh l mt hnh nh-Image. Texture s c trnh by trong chng 6, l hnh nh c p ln trn cc b mt trong d n SketchUp. Chng ch tnh cht vt liu ca cc m hnh trong d n v thng c s dng hin th cc m hnh c lm t ci g, v d Texture g c p ln b mt ca m hnh ni ln rng m hnh c lm t vt liu g. Mt hnh nh l mt Entity c lp nh cc i tng on thng v b mt. N c to ra bng phng thc add_image ca lp Entities vi ba tham s: ng dn cng vi tn ca tp tin hnh nh c chn, v tr im m hnh nh s c t ln v chiu rng mong mun ca hnh nh trong d n SketchUp. SketchUp chp nhn cc nh dng file sau ca tp tin hnh nh: *. jpg , *.Png, *. Bmp, *.tga v *.bmp. Theo mc nh t l gia chiu cao/chiu rng ca tp tin hnh nh chn gc s c gi nguyn khng i, nhng bn c th thay i c t l chiu cao/chiu rng ban u bng cch thm mt tham s ty chn th t xc nh chiu cao ca n khi c chn trong d n SketchUp.

66

Chng IV

SketchUp Scripting by Kienking@Gmail.com

V d, on m sau to mt hnh nh t mt tp tin gi l lorca.png trong th mc con Ch4 ca th mc Plugins ca ni m SketchUp c ci trn my tnh ca bn. Hnh nh c chn t im [ 5 , 0, 0 ] v chiu rng ca n c thit lp l 20 . ents = Sketchup.active_model.entities path = Sketchup.find_support_file "Ch4/lorca.png", "Plugins" im1 = ents.add_image path, [5, 0, 0], 20 ( Nu tp tin hnh nh c ng dn l C:/CH4/lorca.png th bn c th thc hin dng lnh nh sau: im1 = ents.add_image C:/CH4/lorca.png, [5, 0, 0], 20 m khng cn dng lnh th hai nh trn). Hnh nh sau khi c chn trong d n SketchUp lun lun c t song song vi mt phng xy. thay i s nh hng ny ca n, gi ra phng thc transform! ca lp Image vi mt i tng bin i thc hin bin i xoay. Thm tham s th t thay i t l chiu cao/chiu rng ca hnh nh c chn. Dng lnh sau s to ra mt hnh nh trong d n SketchUp vi c chiu cao gp i chiu rng ca n v sau thc hin php bin i xoay n nm trong mt phng xz : im2 = ents.add_image path, [25, 0, 0], 20, 40 tr = Geom::Transformation.new [0, 0, 0], [1, 0, 0], 90.degrees ents.transform_entities tr, im2 Hnh sau th hin im1 v im2 c hin th nh th no trong d n SketchUp:

Mt khi bn to ra mt i tng hnh nh-Image, bn c th gi ra c phng thc ca n v cc phng thc ny m ch yu tr v thng tin kch thc ca hnh nh. V d, bn c th gi ra height, width, pixelheight hoc pixelwidth thit lp hoc ly ra kch thc ca hnh nh vi n v l inch hoc pixel. Phng thc normal vector php tuyn ca mt phng cha bc nh. Phng thc Path cung cp ng dn y n tp tin hnh nh gc dng chn vo trong d n SketchUp.

4.4 Li a gic-Polygonmesh
SketchUp l tuyt vi cho dng cc kt cu kin trc nh nh v cc hnh b vt mp, nhng i vi nhng kt cu khng bnh thng nh bn tay ca bn th sao? Bn c th to ra cc m hnh vi cc vng cung v cc phn on on thng, nhng n d dng hn khi bn xc nh mt lot cc im v to nn cc b mt a gic gia chng. Tp hp cc b mt a gic ny thng c gi l li a gic-Polygonmesh. Trong SketchUp, cc li a gic c i din bi cc i tng c to ra t lp PolygonMesh.

67

Chng IV

SketchUp Scripting by Kienking@Gmail.com

Lp PolygonMesh khc vi tt c cc lp khc m chng ta gp phi. Lp Entities khng c phng thc add_mesh hoc add_polygonmesh. Khi bn mun hin th mt li a gic trong d n SketchUp, bn phi gi ra phng thc add_faces_from_mesh ca lp Entities vi tn ca i tng PolygonMesh. Lnh ny s c cc a gic c trong li v mi a gic s c to ra mt b mt trong n. Mt PolygonMesh v c bn l mt mng cha cc a gic, v mi a gic l mt mng bao gm nhiu im. Qu trnh lm vic vi cc i tng PolygonMesh bao gm ba bc:
1.

To ra mt i tng PolygonMesh mi vi phng thc Geom::PolygonMesh.new. Phng thc ny chp nhp mt tham s ty chn xc nh s lng cc im v cc a gic trong li. Gi ra add_point thm mt im vo trong li v/hoc gi ra add_polygon thm mt a gic vi tham s l cc im ca n. Gi ra add_faces_from_mesh to cc b mt trong li v hin th chng trong d n SketchUp.

2.

3.

Phn kh nht ca vic thc hin vi cc i tng PolygonMesh l phng thc add_polygon, phng thc ny c yu cu thm mt mng mi bao gm cc im thuc a gic thm vo. Mi tham s ca add_polygon phi l mt im, nhng khng ging nh cc phng thc khc, nhng im khng th c ch nh bng cc mng c ba phn t n gin. Thay vo , chng phi c ch nh bi i tng Geom :: Point3D. Lu : Geom l mt m-un, ngoi lp Transformation th n cn cha cc lp PolygonMesh v Point3D . V l do ny, khi bn mun to ra i tng PolygonMesh mi v cc Point3D mi th bn phi gi ra Geom :: PolygonMesh.new v Geom :: Point3d.new. Chng 8 s trnh by chi tit v cc m-un v Ph lc B tho lun thm v cc lp khc trong cc m-un Geom. on m trong tp tin kch bn sau to ra 12 i tng im Geom::Point3d v gi ra phng thc add_polygon to ra mt khi c 20 mt a gic ni tip nhau t cc im . Cui cng, phng thc add_faces_from_mesh to cc b mt cho cc a gic v hin th chng trong d n.

mesh.rb

# GR is the Golden Ratio: (1 + sqrt(5))/2 GR = 1.618 # Create the points in the mesh pt0 = Geom::Point3d.new pt1 = Geom::Point3d.new pt2 = Geom::Point3d.new pt3 = Geom::Point3d.new pt4 = Geom::Point3d.new 0, 0, GR, -GR, 1, GR

-1, GR 0, 0, 1 1 0

1, -GR,

68

Chng IV pt5 = Geom::Point3d.new pt6 = Geom::Point3d.new pt7 = Geom::Point3d.new pt8 = Geom::Point3d.new pt9 = Geom::Point3d.new pt10 = Geom::Point3d.new pt11 = Geom::Point3d.new

SketchUp Scripting by Kienking@Gmail.com -1, -GR, 0, 0, GR, -GR, 1, -1, 0

1, -GR -1, -GR 0, 0, GR, GR, -1 -1 0 0

# The PolygonMesh contains 12 points and 20 triangular faces pm = Geom::PolygonMesh.new 12, 20 # Top half pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon # Middle pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon # Bottom half pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pm.add_polygon pt6, pt6, pt6, pt6, pt6, pt7, pt8 pt7, pt9 pt10, pt11 pt10, pt8 pt9, pt11 pt4, pt5, pt7 pt2, pt8, pt4 pt10, pt11, pt0 pt3, pt9, pt5 pt2, pt8, pt10 pt2, pt0, pt10 pt9, pt5, pt7 pt7, pt8, pt4 pt11, pt9, pt3 pt11, pt3, pt0 pt0, pt0, pt1, pt1, pt1, pt1, pt1, pt4, pt4, pt3, pt2 pt3 pt5 pt2 pt5

# Draw the Faces in the mesh ents = Sketchup.active_model.entities ents.add_faces_from_mesh pm

S nh hng ca cc im trong mt a gic ( theo chiu kim ng h hoc ngc chiu kim ng h ) quyt nh chiu ca vector php tuyn ca b mt a gic l hng vo pha trong hay ra ngoi khi. iu ny c th hin trong hnh sau, trong m t cc khi hai mi mt hnh thnh t a gic Mt s b mt a gic quay vo trong ( tc mt trc ca n hng vo trong khi) do chiu ca vector php tuyn ca n hng vo trong v mt s b mt

69

Chng IV

SketchUp Scripting by Kienking@Gmail.com

a gic quay ra ngoi ( tc mt trc ca n hng ra ngoi khi) do chiu ca vector php tuyn ca n hng ra ngoi.

Mt khi bn to ra v thit lp cu hnh a gic th cng c th gi ra cc phng thc cung cp cc thng tin v cc a gic thnh phn v cc im thuc li:

points hoc polygons tr v mng cha cc im cha cc im hoc cc a gic thuc li. count_points hoc count_polygons tr v s lng cc im hoc cc a gic thuc li point_at hoc polygon_at tr v im hoc a gic tng ng vi s th t (index) ca n trong li c a ra normal_at tr v vector php tuyn ca b mt a gic tng ng vi s th t (index) ca n trong li c a ra uv_at tr v ta UV ca cc Texture ph ln trn b mt a gic tng ng vi s th t (index) ca n trong li c a ra. uvs tr v mng cc ta UV Texture lin quan n li V d, cc dng m sau: pm.points pm.normal_at 3 pm.uv_at (1,1)

Hai phng thc cui cng lin quan n vic lp bn kt cu Texture, iu vt xa phm vi ca cun sch ny. Texture c bn l hnh nh gn lin vi cc i tng trong mt d n v chng 6 s gii thch lm th no to ra chng v p chng ln cc b mt, i tng.

4.5 Kt thc chng


Chng ny bt u vi mt s trnh by v mt trong nhng kha cnh quan trng nht ca SketchUp: Php bin i. Vi bin i, chng ta c th thc hin trong m ha cc hot ng tng t cng c Rotate, Scale v Move trong giao din s dng ca SketchUp. Ba loi bin i c bn ca php bin i l dch chuyn tnh tin, xoay v quy m scale. C th kt hp nhiu bin i li vi nhau bng php ton * v th t xp xp ca chng trong bin i kt hp rt quan trng. Trong khi chng ny ch tp trung trnh by v vic to ra v s dng cc php bin i, ph lc B s trnh by v cc nn tng ton hc c bn ca n. Ngoi ra, chng ny trnh by thm ba i tng trong SketchUp m chng cha c m t trong Chng 3, l cc i tng: Text, hnh nh- Image v li a gic

70

Chng IV

SketchUp Scripting by Kienking@Gmail.com

PolygonMesh. Tht n gin khi lm vic vi cc i tng vn bn hai chiu 2D Text, nhng vn bn ba chiu th khng n gin cht no-bn phi cu hnh cc thuc tnh ca n nh: tolerance, canh dng v cc cc ch c c ph y bn trong n khng. i tng Image rt d hiu khi lm vic vi n, min l bn nh cch bin i v tr ca chng t v tr ban u. i tng PolygonMesh l nhng hnh dng phc tp nht trong SketchUp, v mi im v a gic phi c xc nh mt cch ring bit. Tuy nhin, vi cc i tng PolygonMesh, bn c th to ra cc m hnh phc tp hn nhiu so vi vic ch s dng cnh v b mt xy dng m hnh.

71

Chng V

SketchUp Scripting by Kienking@Gmail.com

Bi hc th hai v Ruby:

Cu trc iu khin v truy xut tp tin

72

Chng V

SketchUp Scripting by Kienking@Gmail.com

Chng ny trnh by mt vn ngn gn nhng quan trng v hai tnh nng bc trung ca Ruby: cu trc iu khin v truy xut tp tin. Ch u tin lin quan n vic kim sot s thc thi ca m vi iu kin v s thc thi ca m vi vng lp. Ch th hai c lin quan vi cc tp tin: lm th no to ra chng, ghi ln chng, c t chng v xa chng i. Trnh by ny cng gii thch vic truy xut th mc ca Ruby v SketchUp truy xut file c th.

5.1 Thc thi c iu kin: if v case


Cho n nay, tt c cc lnh trong tp tin kch bn Ruby m chng ta gp phi l c thc thi theo trnh t. C ngha l, lnh u tin c thc thi, sau l lnh tip theo v tip theo, v c nh vy cho n lnh cui ca kch bn. Tuy khng thng xuyn nhng bn c l s mun s dng iu kin xc nh xem cc lnh no s c thc hin hay khng. V d, bn mun mt kch bn s thc thi mt tp hp cc lnh nu mt hnh no nm trong mt phng xy hoc mt tp hp cc lnh khc nu n khng nm. Ruby cung cp hai cch chnh thit lp cc iu kin: cu lnh if v cu lnh case. Cu lnh if kim tra xem mt iu kin c ng-true hay khng, v nu l ng th cc lnh tip theo cu lnh if s c thc thi. Cu lnh case kim tra mt bin v thc thi cc lnh khc nhau ty thuc vo gi tr ca bin.

5.1.1 Php ton logic v cu lnh if:


Bi hc Ruby u tin trong cun sch ny gii thch con s v cc php ton s. Trong Ruby, mt php ton s chp nhn mt hoc hai s v tr v mt s. By gi chng ta s xem xt mt loi mi ca php ton: php ton logic-logical operator. Bt hp thoi Ruby console trong SketchUp v g lnh sau : 20 > 10 Nhn phm Enter v kt qu hin th s l true bi v 20 ln hn 10. By gi hy th cu lnh sau : "S" == "E" Nhn phm Enter v kt qu hin th s l false bi v S khng th bng E. Trong Ruby, true v false l nhng gi tr c to ra bi cc php ton logic. Bng sau lit k > , == v cc php ton tng t khc. Cc v d s dng trong ct th ba lun lun tr v true.
Php ton
== Bng nhau Khng bng nhau Nh hn Ln hn Nh hn hoc bng Ln hn hoc bng Hm lun l o ngc ( NOT) Hm lun l v ( AND) Hm lun l hoc ( OR)

Miu t
6 * 8 == 48 "J" != "X" 24 < 30 "B" > "A" 22 <= 22 "X" >= "W" !(2 + 2 == 5)

V d

!= < > <= >= ! && ||

3 * 5 == 15 && 5 * 2 == 10 "A" == "A" || "J" == "K"

Php ton logic l c bit hu ch khi kt hp vi cu lnh if ca Ruby. Cu lnh ny bt u bng cch kim tra iu kin l kt qu ca mt php ton logic. Nu php ton logic

73

Chng V

SketchUp Scripting by Kienking@Gmail.com

khng tr v v false hoc nil th cc lnh sau cu lnh if s c thc thi cho ti lnh cui cng nm trc t kha end. Nu php ton logic tr v false hoc nil, cc lnh sau cu lnh if c b qua. Cc dng m sau y l mt v d n gin: if 6 * 8 == 48 puts "Six times eight equals forty-eight." puts "Therefore, this statement will be printed." end Nu bn t nhng dng m trn trong mt tp tin kch bn Ruby v thc thi kch bn. Do iu kin l php ton logic tr v mt gi tr true. V vy, cc lnh nm gia if v end s c thc thi, v trong giao din ca hp thoi Ruby console s hin th hai dng vn bn. Nu bn thc thi on m sau trong mt tp tin kch bn, iu kin l php ton logic s tr v gi tr false. iu ny c ngha cc lnh nm gia if v end s khng c thc thi. if "M" <= "F" puts "This statement will not be printed." end Hm lun l ! trong bng trn o ngc gi tr tr v ca mt php ton logic, chuyn i true thnh false hoc chuyn false thnh true. Php ton logic phi c t bn trong du ngoc n, nh th hin trong on m sau: if !(6 * 8 == 48) puts "The ! operator makes the condition false." puts "These lines of text won't be displayed." end Hm lun l && v ||kt hp vi kt qu ca hai php ton logic tr v mt kt qu duy nht. Hm lun l && tr v true nu c php ton logic u tr v gi tr true. Hm lun l || tr v true nu mt trong hai hoc c hai php ton logic tr v gi tr true. Cc on m sau y cho thy cch thc m cc hm lun l ny lm vic trong thc t. Cc php ton logic khng cn phi t trong du ngoc n, nhng ti t cho bn c m thy d hn. if ("B" > "A") || (14 == 9 * 2) puts "The first expression is true but the second is false." puts "Therefore, the || operator returns true." puts "These statements will be displayed." end

74

Chng V if ("B" > "A") && (14 == 9 * 2)

SketchUp Scripting by Kienking@Gmail.com

puts "The first expression is true but the second is false." puts "Therefore, the && operator returns false." puts "These statements will not be displayed." end Cu lnh if c th c s dng xc nh xem mt i tng tn ti hay khng. V d bn c gng to ra mt i tng b mt bi phng thc add_face ca lp Entities: face1 = Sketchup.active_model.entities.add_face p1, p2, p3 Nu phng thc trn hon thnh thc thi v thnh cng th face1 s l mt i tng Face, v nu khng thnh cng th face1 s l nil. Trong Ruby, nil c ngha l cc i tng khng c to ra thnh cng, hay chnh xc hn l cc i tng ny khng tn ti. Cu lnh if s tr li l nil hoc false. Cc on m sau y kim tra face1 c tn ti hay khng: if face1 puts "If you can read this, add_face completed successfully." puts "If not, face equals nil and you won't read this." end

5.1.2 Cu lnh ifelse v ifelsifelse:


Cu lnh if thc thi cc lnh tip sau n mi khi iu kin khng phi false hoc nil. Khi mt cu lnh if c thm cu lnh else tip sau n th c mt tp hp cc lnh khc s c thc thi khi iu kin tr v false hoc nil. Hy tng tng v n nh sau: if ch cho khi x l thc thi mt hng no nu iu kin l hp l, else ch cho khi x l thc thi theo mt hng khc nu iu kin l khng hp l. V d, on m sau y kim tra xem i tng new_edge c c to thnh cng hay khng. Nu tn ti, thng bo Successful! c hin th. Nu khng, thng bo Nil! c hin th. if new_edge puts "Successful!" else puts "Nil!" end Cc lnh nm gia if v else v cc lnh nm gia else v end s khng bao gi xy ra trng hp m c hai u c thc thi. Hoc l tp hp lnh u tin hoc l th hai s c thc thi ch bao gi l c hai.

75

Chng V

SketchUp Scripting by Kienking@Gmail.com

Mt cu lnh If .. else c th c lng bn trong mt cu lnh if..else khc kim tra nhiu iu kin. iu ny c th hin trong on m sau: if x > 5 puts "x is greater than 5." else if x < 5 puts "x is less than 5." else puts "x equals 5." end end Vic lng cc cu lnh if..else vo nhau c th tr nn ln xn, c bit c rt nhiu cc iu kin hn na c thm vo. Chnh v l do ny, Ruby cung cp thm mt cu lnh if..elsif..else lm cho bn thy d dng hn. iu ny c th hin trong on m sau: if day < 7 puts "First week." elsif day < 14 puts "Second week." elsif day < 21 puts "Third week." elsif day < 28 puts "Fourth week." else puts "After the fourth week." end Nh th hin trn on m trn, elsif vn hnh nh if v bn c th thm bao nhiu cu lnh elsif cng c nu bn mun.

76

Chng V

SketchUp Scripting by Kienking@Gmail.com

Trong Ruby, cu lnh if tr v mt gi tr bng gi tr ca lnh sau cng ca n c thc thi. y l khc bit so vi cu lnh if trong nhiu ngn ng khc, chng khng tr v mt gi tr no c. Cch tt nht hiu c iu ny l nhn vo mt v d: result = if 3 * 4 == 12 "truth" end Trong trng hp ny, lnh cui cng thc thi ch n gin l "truth.". Do , v iu kin php ton logic l hp l, nn result c thit lp bng "truth.". on m trong tp tin kch bn sau cho thy gi tr tr v ca mt cu lnh if.. elsif .. else c thit lp l mt bin v gi tr ca n ty thuc vo thit lp thi gian hin ti trong my tinh ca bn. season.rb

# Obtain the current month m = Time.new.month # Set s equal to the current season in the Northern Hemisphere s = if m < 4 "winter" elsif m < 7 "spring" elsif m < 10 "summer" else "fall" end # Display the value of s puts s

Bn c th thm rt nhiu la chn elsif nu bn mun, nhng Ruby li cung cp mt cch thun tin hn kim tra nhiu iu kin trong m ha. iu ny c thc hin vi cu lnh case v n s c trnh by trong phn tip theo.

5.1.3 Cu lnh case:


Ging nh cu lnh if.. elsif ..else trong on m trn, cc lnh thc thi trong mt cu lnh case ph thuc vo gi tr ca mt bin. Cu lnh case bt u vi t kha case v theo sau n thng thng l tn ca mt bin. Tip theo, t kha when ng trc cc cc gi tr khc nhau c thit lp cho bin. Nu bin bng bt k mt gi tr no ca n th cc lnh sau t kha when tng ng vi gi tr s c thc thi cho n khi gp t kha when tip theo hoc gp t kha end.

77

Chng V

SketchUp Scripting by Kienking@Gmail.com

Nu m n nghe c v kh hiu, mt v d ca on m sau s lm cho n r rng hn. Cu lnh case sau y kim tra bin letter v s hin th cc chui khc nhau ty thuc vo gi tr ca bin. case letter when "A" puts "First letter" when "M", "N" puts "Middle letter" when "Z" puts "Last letter" end T kha when th hai kim tra gi tr ca bin letter vi hai gi tr v chng cch nhau bng du phy. Mt cu lnh case cng c th kim tra xem gi tr ca mt bin c nm trong mt phm vi (range) cc gi tr hay khng nh th hin trong on m sau: case temp_in_C when -273 puts "Absolute zero" when -273..20 puts "Cold" when 20..25 puts "Comfortable" when 25..10_000 puts "Hot" else puts "You must be joking!" end Cu lnh else di cng cui cung cp mt phng n tng th. Nu khng c bt k lnh no trc n c thc thi, cu lnh case s hin th You must be joking!. Hai chc nng cui cng ca cu lnh case cn phi c cp n. u tin, ging nh mt cu lnh if, mt cu lnh case tr v gi tr ca lnh sau cng ca n c thc thi. Th hai, t kha then c th c chn vo sau when v t chng ln trn cng mt dng. V vy, v d on m trc c th c vit li nh sau: ans = case temp_in_C when -273 then "Absolute zero"

78

Chng V when -273..20 when 20..25 then "Cold"

SketchUp Scripting by Kienking@Gmail.com

then "Comfortable"

when 25..10_000 then "Hot" else "You must be joking!" end puts ans Khng ging nh cc t kha when t pha trc n, cu lnh else khng yu cu t kha then. Cu lnh else v lnh c th c t trc tip trn cng mt dng.

5.2 Thc thi c vng lp: while, until v for


Cc cu lnh while, until v for ca Ruby c gi l cu lnh lp hoc vng lp bi v chng c th thc thi mt tp hp cc lnh v lp i lp li chng nhiu ln. Cu lnh lp rt quan trng khi bn cn x l tt c cc phn t ca mt mng hoc lp li tt c cc gi tr nm trong mt phm vi-range. V d, nu bn cn gn tt c cc vector trong mt mng c mt trm phn t, mt vng lp c th ( nn c ) c s dng thay v mt trm dng lnh ring bit.

5.2.1 Vng lp: while v until


Cng ging cu lnh if thc thi cc lnh theo mt php ton logic, cu lnh while ca Ruby thc thi cc lnh lp i lp li cho n khi mt php ton logic tr v true. iu ny c th hin trong on m sau: x = 5 while x > 0 print x, " " x -= 1 end Nu bn t on m ny trong mt tp tin kch bn v thc thi n, trong giao din Ruby console s hin th : 5 4 3 2 1. Bin x ban u c gn bng 5, v iu kin x>0 tr v true nn hai lnh bn trong vng lp c thc thi. Lnh th hai l x-=1 ( ngha l x=x-1) s gim gi tr ca bin x i 1 n v nn bin x lc ny c gn l 4 vn tha mn iu kin x>0, v hai lnh trn li c thc hin thm ln na. C nh vy cho n khi bin x gim v bng 0 th iu kin x>0 khng cn ng na, tc tr v false v vng lp kt thc. iu quan trng l phi hiu rng cc lnh bn trong mt vng lp c th kim sot s vng lp li ca chnh n. Nu khng c s kim sot ny th vng lp hoc l s khng bao gi ngng hoc l s khng bao gi bt u. V d, cu lnh while sau y lp s hin th Looping! v thi hn. x = 5 while x > 0 # Never stops because x never changes # Continue loop as long as x > 0 # Print the value of x # Reduce x by 1

79

Chng V puts "Looping!" end

SketchUp Scripting by Kienking@Gmail.com

Mt vng lp khng bao gi kt thc c gi l mt vng lp v hn. iu ny thng l kt qu ca mt li no . Chc nng cu lnh until ca Ruby tng t nh cu lnh while, nhng o ngc li. Vng lp while thc thi cc lnh nu iu kin l php ton logic ca n tr v true v tip tc thc thi chng min l php ton logic tr v false. Vng lp until th lm ngc li: n bt u thc thi cc lnh nu php ton logic v false v tip tc thc thi cho n khi php ton logic ca n tr v true. Mt v d s lm r cch thc lm vic ny. Vng lp until sau y bt u bi v bin y gn l A nn khng bng "E". Lnh th hai trong vng lp thit lp y bng ch ci tip theo ca A ( t "A" n "B", "B" n "C" v c nh vy ) v vng lp tip tc cho n khi y c gn bng "E". iu ngha l vng lp tip tc cho n khi php ton logic y=="E" tr v true. y = "A" until y == "E" print y, " " y = y.next end Nu bn t a m ny trong mt tp tin kch bn v thc thi n, hp thoi Ruby console ca SketchUp s hin th : A B C D. Khng c hng dn r rng v bn nn s dng cu lnh while hay until trong m ha. C hai u phc v cng mt mc ch, do vic chn ci no hon ton ph thuc vo vn thun tin cho bn khi s dng. # Set y equal to the next letter # Continue loop until y equals "E"

5.2.2 Vng lp for


Vng lp while hoc until lp i lp li s thc thi cc cu lnh cho n khi iu kin l php ton logic tr v false hoc true. Trong Ruby, mt vng for s lp lp i lp li cc lnh min l bin nm trong mt phm vi-range cc gi tr nht nh. Trong Ruby, phm vi cc gi tr c xc nh bng mt trong hai cch sau: start..end (bt u .. kt thc) hoc start...end. Cch u tin ( c hai du chm ) s bao gm c gi tr end nhng trong cch th hai ( c ba du chm ) th khng. S khc bit ny c th hin trong cc v d sau: for count1 in 0..5 print count1, " " end for count2 in 0...5

80

Chng V print count2, " " end

SketchUp Scripting by Kienking@Gmail.com

Trong vng lp u tin, hp thoi Ruby console s hin th 0 1 2 3 4 5. Trong vng lp th hai, n s hin th 0 1 2 3 4. Mi vng lp bt u vi cu lnh for v kt thc l end. T kha in dng ngn cch gia bin vi phm vi. Cc gi tr to nn phm vi-range c th l cc s nguyn hoc chui, tr cc s thp phn th khng c. C ngha l, "ABC".."CBA" l mt phm vi c chp nhn trong mt vng lp, nhng 0.0 .. 5.0 th khng c chp nhn. Cc mng trong ruby cng c th c s dng nh trong v d sau: alph_array = ["alpha", "bravo", "charlie", "delta"] for aword in alph_array print aword, " " end Hp thoi Ruby console s hin th alpha bravo charlie delta.

5.3 Bin lp-Iterator v khi-Block


Cho n nay, cc cu trc lnh m chng ta xem xt (if, case, while, until, for) gn tng t vi cc cu trc lnh trong cc ngn ng khc nh C , C++ v Java. By gi chng ta s xem xt bin lp v khi, chng khng ging bt th g trong C v C++. Ti thy y l ch rt kh hiu khi ln u tin ti hc Ruby, nhng ti hiu v trnh by mt s nh gi tuyt vi v kh nng ca chng. Mt bin lp ca Ruby l mt kiu phng thc c bit c sn cho cc mng v i tng cha ng. Bin lp thc hin cc nhim v v c bn l ging nh vng lp for, nhng lm vic vi n th d dng hn. Mt s so snh s lm r iu ny. Trong on m sau, bin lp lp thng qua mt mng c nm phn t v hin th tn ca tng phn t: for name in five_array print name, " " end Kt qu tng t c th c thc hin ch vi mt dng m : five_array.each {|element| puts element} Khi lnh ny c thc thi, phng thc each ra lnh cho trnh bin dch ca Ruby x l cc cu lnh trong du ngoc nhn { } cho mi phn t trong mng five_array. C ngha l, n ra lnh cho trnh bin dch x l {|element| puts element} nm ln. Mt ci tn c t trong hai ng thng ng || ( v d ny l |element|)c gi l mt phn gi ch placeholder - n nhn gi tr ca tng phn t mng mt khi bin lp thc thi. V trong trng hp ny, mi phn t ca five_array c thc thi thnh cng s c gi l element. V vy, lnh gi ra puts element cho tng phn t mt thuc mng five_array hin th gi tr ca element trong phn gi ch.

81

Chng V

SketchUp Scripting by Kienking@Gmail.com

Khng c g c bit v ci tn element trong v d ny, v on m sau khi c thc thi s tr v cng mt kt qu nh trn: five_array.each {|e| puts e} Trong cc on m trn, phng thc each c gi l bin lp v cu lnh trong du ngoc nhn c gi l khi. Khi bin lp thc thi, cu lnh khi s c thc thi nhiu ln, mi ln thc thi l cho mt phn t thuc mng. Nhng each khng phi l bin lp duy nht trong lp Array. Ba bin lp hu ch nht c lit k nh sau:
1.

collect thay i tng phn t trong mt mng v tr v mt mng c cp nht cc thay i each_index t ch s v tr index ca tng phn t mng vo phn gi ch, Index ch khng phi l gi tr ca phn t. find p dng mt php ton logic cho tng phn t v tr v phn t u tin ( khng phi l phn t u mng) m kt qu ca n tr v mt gi tr true.

2.

3.

on m trong tp tin kch bn sau minh ha cch thc chng c s dng trong m. Ti ngh bn nn th nghim vi chng tng thm s hiu bit ca mnh. Nu s dng ng cch, bin lp c th gip bn tit kim rt nhiu thi gian m ha!

iterator_demo.rb

# Define the array five_array = ["one", "two", "three", "four", "five"] # Print the element indices print "The array indices: " five_array.each_index { |index| print index.to_s + " "} # Capitalize the name of each element and add "o'clock" five_array = five_array.collect { |name| name.capitalize + " o'clock" } # Print the new element names print "\n\nThe array elements: " five_array.each { |name| print name + " "} # Print the first element whose first letter is less than "G" print "\n\nFirst element less than G: " puts five_array.find { |name| name < "G"}

Thc thi kch bn trn s to c kt qu sau: The array indices: 0 1 2 3 4 The array elements: One o'clock Two o'clock Three o'clock Four o'clock Five o'clock

82

Chng V

SketchUp Scripting by Kienking@Gmail.com

First element less than G: Four o'clock Bin lp v khi l c bit quan trng trong SketchUp, ni cha ng tt c hnh dng, vt liu, lp v page ca d n SketchUp trong mt mng ging nh ci cng t n. Phn tip theo cung cp cc v d v cch thc s dng bin lp d dng tm v x l cc yu t ca m hnh trong SketchUp.

5.4 Bin lp v tp hp cc yu t ca m hnh trong SketchUp


Nhn qua Ph lc A, bn s nhn thy rng rt nhiu cc tn lp trong API SketchUp l s nhiu - Entities, Materials, Pages, Layers, Styles, RenderingOptions v nhiu hn na. Cc tp hp ny c th c truy xut nh cc mng, c ngha l cc phn t ca chng c th thng c truy xut bng cch s dng bin lp ging nh each. Lp i lp li qua mt i tng Entities ca model l mt nhu cu thng xuyn: bn c th cn phi thu thp tt c cc i tng nh-Vertex, n tt c cc cnh-Edge hay tm kim cc b mt-Face m vector php tuyn ca n theo mt hng nht nh. Nhng nhim v ny c th c thc hin vi vng lp for, nhng chng c th c thc hin bng mt cch n gin hn vi bin lp v cc khi. Phn ny trnh by cc v d v ba cng vic thng xuyn s dng bin lp.

5.4.1 Tm kim mt b mt theo mt hng nht nh


Gi s bn to ra mt khi ba chiu vi rt nhiu mt -Face v cnh-Edge, v bn mun t m b mt-Face m vector php tuyn ca n cng chiu vi trc x dng. Qu trnh ny bao gm ba bc :
1. 2. 3.

Truy xut i tng Entities ca model. i vi mi yu t m hnh, nh r nu typename ca n l Face. i vi Face, nh r nu vector php tuyn ca n l [1, 0, 0]. on m trong tp tin kch bn sau th hin cch s dng bin lp trong m ha:

find_face.rb

# Create the figure ents = Sketchup.active_model.entities face = ents.add_face [-1, -1, 0],[-1, 1, 0],[1, 1, 0],[1, -1, 0] face.pushpull 1 # Find the face that points in the x-direction xface = ents.find {|ent| ent.typename == "Face" && ent.normal == [1, 0, 0]} puts "The face is: " + xface.to_s

Phng thc find kt hp hai s so snh. u tin kim tra xem Entity c phi l mt Face hay khng v th hai l kim tra xem vector php tuyn ca Face c phi l [1, 0, 0] hay khng. Bn khng th o ngc th t ca cc php ton logic ny, nu bn c gng

83

Chng V

SketchUp Scripting by Kienking@Gmail.com

c c vector php tuyn ca mt Entity th Entity c th khng phi l Face v mt li s xy ra.

5.4.2 Tp hp cc i tng Vertex (nh) trong mt mng


Khi bn xut ra mt m hnh SketchUp sang nh dng file khc, SketchUp thng xuyn lit k cc im c trong d n SketchUp . on m trong tp tin kch bn sau to ra mt m hnh, bin lp thng qua tng Edge mt tm i tng Vertex (nh) ca n.

find_vertices.rb

# Create the figure ents = Sketchup.active_model.entities face = ents.add_face [-1, -1, 0],[-1, 1, 0],[1, 1, 0],[1, -1, 0] face.pushpull 1 # Create and populate the array vertex_array = [] ents.each {|ent| if ent.typename == "Edge" vertex_array = vertex_array | ent.vertices end } vertex_array.each {|pt| puts "Point: " + pt.position.to_s}

Trong trng hp ny, mng ch cha cc i tng Vertex duy nht. iu ny l do kt hp php ton | ngn nga mng vertex_array nhn cc i tng Verter b trng lp.

5.4.3 Lm mt cc cnh ca mt i tng


Trong SketchUp, bn c th lm mt cc cnh ca mt i tng bng cch chn i tng, kch chut phi v chn Soften/Smooth Edges trn menu ng cnh xut hin. N khng phi l n gin trong m ha, nhng trong tp tin kch bn sau bin lp thng qua tng cnhEdge trong model, nh r nu im u v cui ca n mang honh dng th thit lp thuc tnh Edge's smooth ca n l true.

smooth_edges.rb

# Create the figure ents = Sketchup.active_model.entities face = ents.add_face [-1, -1, 0],[-1, 1, 0],[1, 1, 0],[1, -1, 0]

84

Chng V face.pushpull 1

SketchUp Scripting by Kienking@Gmail.com

# Smooth the edges with positive x-values ents.each {|ent| if ent.typename == "Edge" && ent.start.position.x > 0 && ent.end.position.x > 0 ent.smooth = true; end }

Nu bn thc thi kch bn ny, bn c th xc minh rng n lm vic mt cch chnh xc bng cch m hp thoi Entity Info v nhp vo tng cnh thuc i tng. Ch c cc cnh m im u v cui ca n l honh dng th s c lm mt-smooth.

5.5 Lm vic vi tp tin trong Ruby


Khi tri nghim ca bn v SketchUp nhiu ln th bn s thy rng mnh thc hin vi rt nhiu loi tp tin khc nhau, chng hn nh tp tin d n (*.skp), tp tin vt liu (*.skm), tp tin phong cch ( *.style) v cc tp tin component (*.skp). Bn cng c th thng xuyn mun nhp vo hoc xut ra cc m hnh t cc phn mm ha khc. V l do ny, iu quan trng l phi bit lm th no tm kim, c v chnh sa cc tp tin . Ruby cung cp hai lp c s cho cc hot ng ca tp tin : Dir v File. Lp u tin i din cho ng dn ca th mc lm vic hin ti v ni dung bn trong th mc. Lp th hai cung cp cc phng thc to, c v chnh sa cc tp tin mi v hin c. Phn ny tm hiu c hai, v cho thy cc phng thc trong m-un Sketchup c s dng cho n d dng truy xut cc tp tin theo ng dn lin quan n th mc cp cao ca SketchUp.

5.5.1 To v m tp tin
Cc phng thc new v open trong lp File c gi ra theo cng mt cch v thc thi cc nhim v tng t nhau: Chng u to v m mt tp tin mi hoc m mt tp tin hin c, v chng u tr v mt i tng File. C hai phng thc u yu cu hai tham s chui-String: tn ca tp tin v du hiu xc nh ch hot ng ca tp tin khi n c m ra. Bng sau lit k cc ch c sn .
Du hiu
r

Ch
Ch c

Miu t M mt tp tin hin c ch c d liu t u tp tin ( y l ch mc nh) M mt tp tin hin c c t u tp tin hoc ghi d liu ln trn u Xa cc ni dung bn trong mt tp tin hin c hoc to mt ni dunng mi. M tp tin ghi d liu vo u tp tin. Xa cc ni dung bn trong mt tp tin hin c hoc to mt ni dunng mi. M tp tin c hoc ghi d liu vo u tp tin. To ra mt tp tin mi hoc m mt tp tin hin c. Ghi d liu vo cui tp tin. To ra mt tp tin mi hoc m mt tp tin hin c. c hoc ghi d liu vo cui tp tin.

r+ w

c-ghi Ch ghi

w+

c-ghi

Ch ghi

a+

c- ghi

85

Chng V

SketchUp Scripting by Kienking@Gmail.com

Ch n s khc bit gia ch w/w+ vi ch a/a+. Ch w/w+ bt u ghi vo u ca tp tin v xa ni dung hin c ca tp tin nu n c. Ch a/a+ ghi d liu vo cui ca tp tin v khng xa ni dung hin c ca tp tin. V d, lnh sau y to ra mt tp tin gi l new_file.txt, m n trong ch cghi, v tr v mt i tng File: new_file = File.new "new_file.txt", "w+" Kt qu tng t c th c thc hin vi phng thc open nh sau: new_file = File.open "new_file.txt", "w+" Nu tp tin cn m bng open m khng tn ti th n s to ta tp tin mi. Vic s dng ch mc nh ca File.open v File.new m mt tp tin hin c trong ch ch c. V d, mi lnh sau y s m ra tp tin old_file.txt ch c. file = File.new "old_file.txt", "r" file = File.open "old_file.txt", "r" file = File.new "old_file.txt" file = File.open "old_file.txt" Nu bn gi ra new hoc open vi ch r hoc r+ th yu cu cc tp tin c gi phi c mt trong th mc hin hnh. Nu bn c th to ra mt tp tin bng cch s dng cc ch ny, bn s nhn c mt li ENOINT v cc tp tin khng tn ti. Mt khi bn to ra mt tp tin, bn c th thit lp cc quyn hn cho n bng phng thc chmod. Phng thc ny chp nhn mt gi tr s theo quy c c thit lp bi cc quyn hn truy xut tp tin UNIX. Ngha l gi tr s ny bao gm ba gi tr bt phn (octal): cc quyn hn cho ch s hu, cc quyn hn cho nhm, v cc quyn hn cho ngi dng khc. Mt gi tr bt phn bao gm ba gi tr nh phn (binary) v mi gi tr nh phn l 1 bit.

Bit u tin ca mt gi tr bt phn xc nh xem tp tin c th c c khng. Bit th hai ca mt gi tr bt phn xc nh xem tp tin c th ghi ln c khng. Bit th ba ca mt gi tr bt phn xc nh xem tp tin c th thc thi c khng

Trong nh phn (0 v 1) th 0 l khng c v 1 l c quyn. Bng chuyn i mt s t nh phn sang bt phn. 000 --> 0 001 --> 1 010 --> 2 011 --> 3 100 --> 4 101 --> 5 110 --> 6 111 --> 7 V d, bn mun to ra mt tp tin gi l ex_file v bn mun ch s hu (l bn) c quyn c, ghi v thc thi ( 111 = 7). Bn mun cc thnh vin ca nhm c quyn c v thc

86

Chng V

SketchUp Scripting by Kienking@Gmail.com

thi ( 101 = 5) v nhng ngi dng khc ch c quyn n gin l c ( 100 = 4). Trong trng hp ny, bn s thc hin cc lnh : new_file = File.new "ex_file", "w+" new_file.chmod 754 Hot ng thc t ca phng thc chmod ph thuc vo cc chnh sch trong h iu hnh ca bn.

5.5.2 c d liu t tp tin


Khi mt tp tin c m trong ch c hoc c-ghi, c rt nhiu phng thc sn c truy xut d liu ca n. Chng khc nhau ty theo bn cht ca d liu c c - byte hoc cc dng vn bn, v xem hot ng cn c thc thi mt ln hay nhiu ln. Hu ht cc phng thc sn c c lit k nh sau:

getc/readchar c mt byte t tp tin read c nhiu byte t tp tin v lu tr chng trong bin trung gian no each_byte bin lp thng qua cc byte trong tp tin gets/readline c mt dng vn bn tp tin each/each_line bin lp thng qua cc dng vn bn trong tp tin readlines to ra mt mng t cc dng vn bn trong tp tin

C hai phng thc getc v phng thc readchar u tr v gi tr s ca byte c c. Phng thc chr chuyn i s ny sang k t tng ng ca n. V d, nu t u tin trong mt tp tin l That, phng thc getc v readchar s tr v cc kt qu sau : file.getc 84 file.getc.chr h file.readchar 97 # Corresponds to 'a' # Corresponds to 'T'

file.readchar.chr t Hot ng c s bt u t u ca tp tin ( trn l bt u t k t T) v thc thi c mt k t cho mt ln lnh, ln lnh th hai s c k t tip theo. Phng thc rewind thit lp li v tr s c c hoc ghi tip theo ( c th gi l v tr con tr) tr v v tr bt u u tp tin. Trong on m sau thit lp li v tr con tr tr v u ca mt tp tin ang m c cha duy nht t That. N gi ra read lu tr bn byte trong mt bin trung gian no v sau cng cc tr s byte ca chng li vi nhau bng cch s dng phng thc each_byte: file.rewind

87

Chng V buff = file.read That file.rewind sum = 0

SketchUp Scripting by Kienking@Gmail.com

file.each_byte {|b| sum = sum + b} sum 401 ( V t That c tng cc tr s byte l 84+104+97+116=401) Nu khng c tham s km theo, phng thc read c tt c cc byte c trong mt tp tin v tr chng v di dng mt chui-String. N c th mang theo hai tham s ty chn, tham s u tin xc nh c bao nhiu byte cn c c, tham s th hai xc nh mt bin kiu chui-String hin c gi cc byte c c. V d, lnh sau y c ba byte t i tng file v t chng trong mt bin kiu chui gi l buffer: buffer = "" file.read 3, buffer Hai phng thc gets v readline u tr v mt chui cha cc k t t v tr con tr n cui dng hin ti. Tng t nh vy, phng thc each v each_line l bin lp thng qua cc dng trong tp tin. Phng thc readlines to mt mng t cc dng trong tp tin, v c s dng nh sau: arr = file.readlines ["One\n", "Two\n", "Three\n", "Four\n"] iu ny cho php bn truy xut vo d liu tp tin bng cch s dng th t ca dng. Bn c th thm mt tham s cho phng thc ny nh hnh sau y : arr = file.readlines "," ["One\nTwo\nThree\nFour\n"]

5.5.3 Ghi d liu ln tp tin


Trong lp File, cc phng thc sn c ghi d liu tng t nh cc phng thc dng c d liu, nhng c mt cht s khc bit gia cc k t c ghi v dng vn bn. Cc phng thc c bn c a ra nh sau:

putc ghi mt byte hoc mt k t ln tp tin print/write ghi mt chui ln tp tin (khng c dng mi ) puts - ghi mt chui ln tp tin (thm dng mi) printf ghi mt chui c nh dng ln tp tin

88

Chng V

SketchUp Scripting by Kienking@Gmail.com

Phng thc putc c th chp nhn tham s l mt s ( s thp phn t 0 n 255-trong m ASCII ) tng ng vi mt byte hoc mt k t. V d, hai lnh sau y u ghi k t A ln tp tin c i din bi i tng file: file.putc 65 file.putc "A" Phng thc print, write v puts tng t, v ghi mt chui vo tp tin. Sau khi ghi th phng thc print tr v nil v phng thc write tr v s lng k t ca chui trong hp thoi Ruby console. Phng thc puts chn mt dng mi sau mi tham s (v d: file.puts Ah,cd)v n c th chp nhn tham s l mt mng c cc phn t l chui. iu ny c th hin bng cc lnh sau: colors = ["Red", "Yellow", "Green", "Blue"] file.puts colors Lnh th hai s ghi mi phn t ca mng colors l mt dng ring bit trong tp tin. Phng thc cui cng c lit k printf s dng cc m ha nh dng ghi mt chui c nh dng ln tp tin. Cc m ha gn nh l ging nh vic s dng printf trong ngn ng lp trnh C . # 65 is the ASCII code for the character A

5.5.4 ng v xa mt tp tin
Phng thc close lu gi li tt c cc hot ng ghi ln tp tin v ngn chn hot ng c v ghi thm na ln tp tin , ngha l n gii phng cho tp tin v khng tip tc truy xut na. Phng thc delete xa b cc tp tin trn my tnh ca bn. iu ny c th hin trong cc v d sau: File.delete "example.txt" Mt tp tin cn phi c ng trc khi n c th b xa. Nu bn c gng xa mt tp tin ang m, bn s nhn c mt li ni r rng quyn hn b t chi. on m trong tp tin kch bn sau cho thy cch m phng thc close v delete c s dng. Kch bn ghi ln mt tp tin, c t tp tin, ng tp tin v xa tp tin . file_ops.rb

# Create/open a file in read-write mode f = File.open "example.txt", "w+" # Write an array of five Strings to the file nums = ["One", "Two", "Three", "Four", "Five"] f.puts nums # Rewind the file, read its lines, and print the third line f.rewind arr = f.readlines puts arr[2]

89

Chng V # Close the file f.close puts "Closed? " + f.closed?.to_s # Delete the file File.delete "example.txt"

SketchUp Scripting by Kienking@Gmail.com

puts "Exists? " + File.exists?("example.txt").to_s

Lu ti s khc bit trong cch s dng gia cc phng thc close v delete. Phng thc close hot ng trn mt i tng File nn n c gi ra l f.close. Cng nh File.new v File.open, delete l mt phng thc lp ( xem li khi nim chng 2) nn c ngha l n phi c gi ra nh sau File.delete.

5.5.5 Th mc ca tp tin
Trong tng v d trn, cc tp tin c to ra hoc m t bn trong th mc lm vic-woking directory. y l nn tng ca tt c cc ng dn c lin quan ti chng, chng hn nh ../../Sample.txt. Lp Dir cung cp phng thc truy xut vo th mc lm vic, to th mc mi v thng k nhng th c cha ng bn trong ca th mc hin c. Phng thc pwd (vit tt ca Print Working Directory ) hin th ng dn chi tit ca th mc lm vic hin ti: Dir.pwd C:/Documents and Settings/******/Desktop C:/Windows/System32 (Win XP) ( Win7 64b)

Phng thc chdir dng thay i th mc lm vic ti th mc khc. Trong khi cc tp tin thng c to ra bi File.new v File.open th th mc c to ra vi Dir.mkdir. Nu n thnh cng trong vic to ra mt th mc mi, phng thc ny tr v 0 v n khng phi l mt i tng. c c mt i tng Dir i din cho mt th mc, bn cn phi s dng Dir.new ngay sau Dir.mkdir. iu ny c th hin trong cc v d sau: Dir.mkdir "folder" 0 new_dir = Dir.new "folder" new_dir.class Dir Nu bn gi Dir.new vi tham s l tn ca mt th mc khng tn ti, bn s nhn c mt li ni rng khng c th mc . to mt th mc mi trong mt a ch no hy lm theo cch sau: Dir.mkdir "C:/folder" to ra thc mc folder trng a C Phng thc Close s ng i tng Dir v ngn chn cc hot ng c tn cc tp tin ca n thm na. Phng thc Dir.rmdir xa mt th mc trn my tnh ca bn, nhng ch dnh cho cc th mc rng .Nu th mc khng rng, rmdir to ra mt li.

90

Chng V

SketchUp Scripting by Kienking@Gmail.com

5.5.6 Truy xut tp tin trong mt th mc


Mt khi bn c mt i tng Dir ang m, bn c th c tn cc tp tin trong th mc theo cch tng t nh bn c vn bn t mt tp tin vn bn. C ngha l, bn c th gi ra phng thc read c ln lt tn tp tin c trong th mc. Hn na, phng thc entries trong lp Dir hot ng ging nh phng thc readlines ca lp File, nhng thay v to ra mt mng t cc dng vn bn ca tp tin, n to ra mt mng t tn ca cc tp tin c cha ng trong th mc . Mt v d s lm r iu ny. Mt th mc gi l colors c cha ba tp tin c tn l: red, yellow v blue. on m sau to mt i tng Dir v to ra mt mng vi cc phn t l chui t tn ca cc tp tin trong n: color_dir = Dir.new "colors" arr = color_dir.entries [".", "..", "blue", "red", "yellow"] arr2 = color_dir.entries [] Ln th hai gi entries ra th kt qu tr v mt mng rng, v ln gi ra trc c ton b tn cc file c trong th mc. Phng thc rewind s t con tr ln u ca danh sch th mc. Ngoi entries, bn c th gi ra bin lp thng qua tn cc tp tin trong th mc. on m trong tp tin kch bn sau to ra mt th mc gi l colors v chn cc tp tin c gi l red, yellow v blue. Sau , s dng each to v khi chy mt mng cc i tng File t tn ca cc tp tin c trong th mc colors:

dir_demo.rb

# Create the directory and its files Dir.mkdir "colors" File.new("./colors/red", "w+").close File.new("./colors/yellow", "w+").close File.new("./colors/blue", "w+").close # Create a Dir object and populate the file array color_dir = Dir.new "colors" file_array = [] color_dir.each {|f| if f[0].chr != "." file_array << File.new("./colors/" + f) end

91

Chng V }

SketchUp Scripting by Kienking@Gmail.com

# Display the names of the files in the file array file_array.each {|f| puts f.path} # Close and delete the files file_array.each {|f| filename = f.path f.close File.delete filename puts "Deleted " + filename } # Close and delete the directory color_dir.close Dir.rmdir "colors"

on m ny to mt i tng File cho mi tp tin m tn ca i tng u tin khng phi l du chm nh kt qu v d phn 5.5.6 [".", "..", "blue", "red", "yellow". Hai tn file l . v .. i din cho th mc hin ti v mt th mc cha m cc file nm trong. Bn khng th to cc i tng File t cc th mc c bit ny. Sau khi cc tp tin c to ra, cc bin lp ca kch bn ny thng qua tng i tng File trong mng v s dng phng thc path c c tn ca chng. Sau , n ng tng i tng File v gi ra File.delete xa b cc tp tin ny trn my tnh ca bn. Cui cng, n ng v xa th mc colors.

5.6 Truy xut tp tin ca SketchUp


Ngoi cc phng thc trong lp Dir v File ca Ruby, bn cng c th truy xut cc tp tin v th mc bng cch s dng m-un Sketchup. Bn phng thc quan trng c lit k nh sau:
1.

file_new M SketchUp vi mt i tng model mi ( tc to mt d n SketchUp mi). open_file - M SketchUp vi mt i tng model trong tp tin hin c ( tc l m mt d n SketchUp ang c lu trn my tnh). find_support_file - Tr v ng dn ti mt tp tin trong th mc cp cao nht ca n find_support_files - Tr v cc ng dn ti cc tp tin trong th mc cp cao nht ca n.

2.

3.

4.

Hai phng thc u tin thay i i tng model hin ti ca SketchUp. Phng thc file_new m SketchUp vi mt i tng model trng rng, v n khng to ra mt tp tin lu model ny, v vy n phi c lu vi phng thc Model.save.

92

Chng V

SketchUp Scripting by Kienking@Gmail.com

Phng thc Model.save lu i tng model thnh mt tp tin nhng khng m chng trong SketchUp. m tp tin lu n, bn cn phi gi ra phng thc th hai open_file. on m trong tp tin kch bn sau cho thy cch thc m nhng phng thc ny lm vic cng nhau. N s m ra mt i tng model trng rng v thm mt hnh dng vo trong n. Sau , n lu thnh tp tin example.skp v m tp tin ny trong SketchUp.

su_file.rb

# Create a new design Sketchup.file_new ents = Sketchup.active_model.entities face = ents.add_face [-1, -1, 0],[-1, 1, 0],[1, 1, 0],[1, -1, 0] face.pushpull 1 # Save the design and open it in SketchUp Sketchup.active_model.save "example.skp" Sketchup.open_file "example.skp"

Trong khi ci t, SketchUp to ra mt th mc gi l Google SketchUp # , trong # l s ca phin bn SketchUp ( y l th mc ca cc bn tnh t bn 8 quay v trc, cn bn 2013 th tn th mc l SketchUp 2013). Chng ta s xem th mc ny l th mc cp cao ca SketchUp. Hai phng thc v tp tin trong m-un Sketchup l find_support_file v find_support_files u tr v ng dn c lin quan n th mc cp cao ny. Phng thc find_support_file chp nhn hai tham s: tn ca tp tin s c tm v th mc nm trong th mc cp cao cha tp tin. V d, lnh sau y cung cp ng dn n tp tin Blinds/Blinds_Weave.skm trong th mc Materials ca th mc cp cao SketchUp 2013: Sketchup.find_support_file "Blinds/Blinds_Weave.skm", "Materials" C:/Program Files (x86)/SketchUp/SketchUp 2013/

Materials/Blinds/Blinds_Weave.skm ( V d cho SketchUp 2013 trn Win 7-64bit) Tr v phng php nil nu tp tin khng th tm thy . Mt cng vic ph bin trong SketchUp l tm ng dn n th mc Plugins ca n. Cng vic ny c thc hin vi lnh sau y: Sketchup.find_support_file "Plugins", "" tm th mc Ch5 trong th mc cp cao Plugins th bn phi s dng nh sau: Sketchup.find_support_file "Ch5", "Plugins" Phng thc find_support_files hot ng ging nh find_support_file , nhng tham s chp nhn mt ui tp tin (v d: skm, rb, rbs) v tr v mt mng bao gm

93

Chng V

SketchUp Scripting by Kienking@Gmail.com

cc ng dn ca cc tp tin c ui nh th trong th mc c ch nh. V d, lnh sau y tr v mt mng cha cc ng dn cho tt c cc tp tin *. skm trong th mc Materials/Blinds. Sketchup.find_support_files "skm", "Materials/Blinds" Nu tham s ui tp tin trng, phng thc ny s tr v mt mng bao gm cc ng dn ca tt c cc tp tin v cc th mc con trong th mc c ch nh. Sketchup.find_support_files "", "Plugins"

5.7 Kt thc chng


Chng ny i qu su vo nhng th m ti gi l ch v hai tnh nng bc trung ca Ruby : cu trc iu khin v hot ng tp tin. Cc i tng ny s ng mt vai tr quan trng trong cc chng tip theo. Bin lp v khi c bit quan trng, cu lnh lm cho n c th lp lin tc thng qua cc phn t ca mt tp hp hoc mng m ch vi mt dng m. Mt khi bn bt u s dng bin lp v khi mt cch thun thc, bn s khng bao gi quay tr li cu trc lnh for v while na. Phn th hai ca chng ny trnh by v truy xut tp tin trong c Ruby v SketchUp. Lp File ca Ruby cung cp phng thc thc hin cc hot ng c bn v tp tin: to, m, c, ghi, ng v xa. Lp Dir cung cp phng thc truy xut vo th mc v xc nh tn ca cc tp tin bn trong chng. Cui cng, cc m-un Sketchup cung cp hai cp phng thc lin quan n tp tin, cp phng thc u tin m phn mm SketchUp vi mt tp tin mi hoc hin c v cp th hai tr v ng dn n cc tp tin nm trong th mc cp cao ca SketchUp.

94

Chng VI

SketchUp Scripting by Kienking@Gmail.com

Mu sc, texture v vt liu

95

Chng VI

SketchUp Scripting by Kienking@Gmail.com

Ti thi im ny, bn c nhng khi nim kh y v cch thc to ra cc i tng m hnh ca SketchUp trong m ha, chng hn nh cnh v b mt. Chng ny s ch cho bn bit cch lm th no thit lp s hin th ca chng trong d n SketchUp. C th, chng ny gii thch lm th no to cc i tng vt liu-Material v p chng ln cc i tng m hnh m chng ta bt gp trong cc chng trc. Mc d tn l vt liuMaterial nhng cc i tng ny khng ch r tnh cht vt l, t trng hoc trng lng ring. Mc ch duy nht ca mt Material trong SketchUp l cu hnh s hin th bn ngoi ca cc i tng m hnh trong d n. C ba cch ch r nt c trng ca mt vt liu: bng mu sc-Color, bng hoa vnTexture v Color vi Texture. Mt Color cu to t ba mu thnh phn l , xanh l cy v xanh nc bin cng vi m c ca n. Mt Texture l mt hnh nh c lp i lp li t bn ny n bn kia ca mt b mt ging nh mt hoa vn ca giy dn tng. Lu rng Texture khng c mi lin h vi Image c trnh by trong chng 4.

6.1 Vt liu.
Chng 3 gii thch model ca SketchUp lu tr cc i tng Entity trong mt i tng cha ng Entities nh th no. Tng t nh vy, cc i tng Material c lu tr trong mt i tng Materials. Phn ny gii thch c i tng Material ln lp Materials, nhng trc khi chng ta bt u m ha th iu quan trng l phi xem li cch thc m vt liu c qun l trong giao din s dng ca SketchUp.

6.1.1 Vt liu v qun l chng trong giao din s dng ca SketchUp.


Trong th mc cp cao ca SketchUp, bn s tm thy mt th mc c tn Materials cha cc th mc con nm trong n. Mi mt th mc con cha nhiu tp tin vt liu ( *.skm ) v chng c th c s dng ch nh tnh cht vt liu ca cc i tng m hnh trong d n SketchUp. Hp thoi Materials trong SketchUp l ni m bn c th la chn chng trong s cc vt liu c sn ny.

Nu bn khng hiu r cc vt liu ca SketchUp, ti khuyn bn nn thc hin cc bc sau: 1. M phn mm SketchUp, kch chn cng c Rectangle v to ra mt b mt hnh ch nht vi kch thc bt k.

96

Chng VI

SketchUp Scripting by Kienking@Gmail.com

2. Trn menu chnh ca SketchUp, m hp thoi Materials bng cch chn Window> Materials. Trong hnh trn hin th cc b su tp mu vt liu. S hin th ny tng ng vi th mc cp cao Materials ca SketchUp, v cc b su tp c hin th trong hp thoi tng ng vi th mc con ca Materials. Mi mt b su tp u c cha mt nhm cc mu vt liu khc nhau. 3. Trong hp thoi, kch chn vo b su tp c tn l Asphalt and Concrete. Khi mt lot cc hnh nh thu nh (Thumbnail) s xut hin. Di chuyn con tr chut ln hnh nh trn cng pha bn tri, mt tooltip xut hin hin th tn ca mu vt liu: Asphalt_new. Kch chut vo hnh nh ny Asphalt_new l loi vt liu hin hnh. 4. Kch vo hnh ch nht bn dng trong khng gian lm vic ca SketchUp. Vt liu m bn chn bc trn s c p cho ton b b mt. 5.Trong hp thoi Materials, chn b su tp Color-Named. Cc mu vt liu bn trong b su tp Asphalt and Concrete da trn hnh nh ( hay chnh xc l Texture), nhng cc mu vt liu trong b su tp ny c da trn mu sc c tn, chng hn nh as 0006_Pink. 6. Kch chut vo mt trong cc mu vt liu mu sc. Khi vt liu mu sc ny s thay th Asphalt_new lm vt liu hin hnh. Nu bn kch vo b mt hnh ch nht th b mt ny s c mu sc m bn chn. 7. Trong hp thoi Materials kch vo biu tng m ra hp thoi Create materials, cho php bn t tn cho mt loi vt liu mi v cu hnh mu sc v kt cutexture ca n. Bn c th cu hnh mu sc cho vt liu bng bnh xe mu sc (Color wheel) v thanh trt mu sc cua n. Hoc bn c th cu hnh mu sc ca n theo cc nh dng sau:

HLS : Hue-tng mu, Lightness- sng, Saturation- bo ha mu. Hay cn c gi l HSL. HSB - Hue-tng mu, Saturation- bo ha mu, Brightness - chi. RGB Red-, Green-xanh l cy, Blue-xanh nc bin

Trong hp thoi, phn Texture nm bn di phn Color. Nu bn nh du vo hp chn Use texture image, mt hp thoi s xut hin yu cu mt tp tin hnh nh s dng lm mt texture. Khi bn chn mt hnh nh, bn c th thay i t l kch thc ca n hoc hiu chnh mu sc ca n. Nu bn nhp vo hp chn Colorize, mu sc bn chn trong phn Color s c p cho Texture. 8. Nhp mt ci tn cho mu vt liu mi, thit lp cc thng s trong phn Color v Texture ty thch theo mun ca bn, v cui cng l nhn OK. Khi mu vt liu mi va c to xong ny s c thm vo trong d n SketchUp hin hnh. xc minh iu ny, hy nhp vo biu tng ngi nh v xem cc vt liu hin ang c s dng trong d n.

9. Kch chut phi vo mu vt liu m bn to ra v chn Save As t menu ng cnh xut hin. Chn mt th mc trn my tnh v nhn nt Save. iu ny s to ra mt tp tin c c ui l skm cha ng cc thng tin v mu vt liu . Khi bn lm vic vi cc vt liu ca SketchUp, c ba im cn nh :
1. 2. 3.

Mt vt liu c th c ch nh bi mt mu sc, mt texture hoc ng thi c hai. Mu sc c xc nh bng tn hoc bng s. Textures c xc nh bng hnh nh. Vt liu c lu thnh tp tin *.skm. Mt vt liu cn c np vo d n trc khi n c s dng.

97

Chng VI

SketchUp Scripting by Kienking@Gmail.com

6.1.2 To v p mt vt liu trong m ha Cc i tng Material trong mt d n SketchUp c lu tr trong mt i tng Materials. thm vt liu mi, bn cn truy xut vo i tng Materials ca d n v gi ra phng thc add ca n cng vi tham s l tn ca vt liu. V d, lnh sau y gi ra c i tng Materials hin hnh v thm mt vt liu mi c tn l New Material: mats = Sketchup.active_model.materials new_mat = mats.add "New Material" Khi bn thm mt vt liu mi, n s tr thnh vt liu hin hnh. Khi bn kch chn cng c Paint Bucket trong SketchUp th vt liu hin hnh l vt liu ang c gn ln cng c ny v t n trong trng thi sn sng s dng. V khi kch cng c Paint Bucket ln mt b mt th b mt c p vt liu hin hnh. Bn c th thit lp mt vt liu no l vt liu hin hnh bi phng thc current= ca lp Materials. Bn c th tm ra i tng vt liu ang hin hnh trong d n vi phng thc current. Trong m ha, vt liu hin hnh l khng quan trng. Bn c th p bt k loi vt liu no c trong Materials ln bt k Drawingelement no trong d n. Nh gii thch trong Chng 3, Drawingelement l lp cha ca Edge, Face, ComponentInstance, ComponentDefinition, Group, Image v Text. y l nhng loi i tng duy nht m s hin th tnh cht vt liu ca chng c th c ch nh bi cc i tng Material. Phng thc material= ca lp Drawingelement dng p mt vt liu. Tham s c th l bin c gn cho i tng Material hoc tn ca i tng Material. V d, c hai lnh ny u p vt liu New Material c to ra v d trn cho i tng m hnh face: face.material = new_mat face.material = "New Material" Thng qua bin Trc tip

Phng thc material ca lp Drawingelement tr v i tng Material ca i tng m hnh. Phng thc name v display_name ca lp Material tr v tn ca i tng Material c gn cho i tng m hnh. Cc dng m sau y cho thy cch thc m nhng phng thc ny lm vic vi nhau tr li tn cc vt liu lin quan n i tng m hnh face: face.material.name

New Material
face.material.display_name

New Material
Lp Material cng cha mt phng thc gi l materialType tr v mt trong ba gi tr:

0 Vt liu c ch nh bi mt mu sc 1 - Vt liu c ch nh bi mt Texture 2 Vt liu c ch nh bi c mu sc v Texture

V d, bin lp trong on m sau y thng qua tng i tng Material c trong d n SketchUp v hin th tn cng vi gi tr ca loi ch nh ca n :

98

Chng VI

SketchUp Scripting by Kienking@Gmail.com

mats = Sketchup.active_model.materials mats.each do |mat| puts "Material name = " + mat.name + ", type = " + mat.materialType.to_s end Ba dng tip sau y c th c to ra t on m trn: Material name = DimGray, type = 0 Material name = Charcoal, type = 0 Material name = [Asphalt_New], type = 1 Nh hin th, Material c ch nh bi mu sc c Type=0 v tn ca chng khng nm trong ci g c. Material c ch nh bi Textures c Type=1 v tn ca chng c t trong du ngoc vung. Hai phn tip theo s gii thch cch thc m SketchUp qun l mu sc v Textures, v lm th no bn c th s dng chng to ra vt liu mi trong m ha.

6.2 Mu sc.
SketchUp cung cp mt lp Color, ch dng khi bn quan tm vi cc tnh nng cao cp nh pha trn, bnh thng c th bn s khng cn n. Bn c th to ra cc i tng Color trc tip nu bn bit tn mu ca cc mu sc c dng trong SketchUp hoc cc gi tr cng mu thnh phn , xanh l cy v xanh nc bin (theo h mu RGB) ca n. V d, on m sau to mt vt liu-Material c tn l purple_mat, thit lp mu sc ca n l mu tm, v p n vo mt i tng nhm (group) c tn l purple_group: purple_mat = Sketchup.active_model.materials.add "Purple" purple_mat.color = [128, 0, 128] purple_group.material = purple_mat Phng thc color ca lp Material chp nhn mt i tng mu, nhng n cng chp nhn cc mng ging nh [ 128, 0 , 128 ] dng lnh th hai. Phn t u tin xc nh cng mu trong mu sc, phn t th hai xc nh cng mu xanh l cy v phn t cui cng xc nh cng mu xanh nc bin. H thng mu RGB l pha trn gia ba mu , xanh l cy v xanh nc bin. Ngha l mu sc c to ra bng cch thm cc thnh phn mu , xanh l cy v mu nc bin ln trn mt nn mu en, chnh v vy l [ 0, 0, 0] l mu en v [ 255, 255, 255 ] l mu trng. Cc lnh pha trn cho bn thy mt cch p mt vt liu ch nh bi mu sc ln mt i tng m hnh Drawingelement, nhng c mt cch thc thc hin nhanh hn l: purple_group.material = [128, 0, 128] y, mng [ 128, 0 , 128 ] c thay th cho i tng Material bt buc phi c ca phng thc material. Khi lnh ny c thc thi, SketchUp t ng to ra mt i tng Material vi mu sc c ch nh, cung cp cho n mt ci tn chung chung nh Material3 v thm n vo trong d n. Theo cch ny, bn c th p trc tip cc vt liu ch # The color purple

99

Chng VI

SketchUp Scripting by Kienking@Gmail.com

nh bi mu sc cho mt Drawingelement m khng cn truy xut vo i tng Material. Phng thc color trong lp Material tr v mt i tng mu-Color ch nh cho vt liu. Cc phng thc red, green v blue trong lp Color tr v cng cc thnh phn mu trong n. V d, cc lnh sau y cung cp thng tin lin quan n vt liu ca i tng purple_group: purple_group.material.color Color(128, 0, 128, 255)

purple_group.material.color.red 128 purple_group.material.color.green 0 purple_group.material.color.blue 128

6.2.1 Xc nh mu bng tn.


Nhiu trnh duyt web v .NET framework ca Microsoft's da trn mt tp hp bao gm cc ci tn xc nh mu sc, v SketchUp cng h tr chng. Chng thng c gi l b tn mu X11 v chng c s dng trong h thng X Window ( h thng ca s dng hin th ha). V d, tn mu X11 cho gi tr [ 128, 0 , 128 ] ca h mu RGB l Purple-mu tm, v cc lnh sau y u t kt qu nh nhau: purple_group.material = [128, 0, 128] purple_group.material = "Purple" Bn c th xem chi tit v cc tn mu v mi lin h gia n vi cc gi tr trong h mu RGB ti: http://vi.hexacolorpedia.com/color-names.html . Tt c cc tn mu ph bin u c sn trong SketchUp, chng hn nh Blue v Turquoise. C tng cng 140 tn mu, v bn c th xem mt danh sch y cc tn mu ny bng cch thc hin lnh sau: Sketchup::Color.names Cc tn mu u c s phn bit gia ch hoa v ch in thng, v chng c s dng quy c t tn CamelCase. C ngha l, ch ci u tin trong tt c cc t cu to nn tn mu l c phi vit hoa v khng c khong trng gia cc t. V d, SketchUp s nhn ra tn mu l YellowGreen, PeachPuff v MidnightBlue, nhng khng ra midnightblue hoc Midnightblue.

6.2.2 Cc cch xc nh mu khc.


Mng mu tiu chun gm ba phn t l ba s nguyn t 0 n 255, nhng cn c nhng cch khc xc nh cc mu theo dng s. Bn c th ch nh mt gi tr thp lc phn (hexadecimal ) su ch s vi mt lnh nh sau: purple_group.material = 0x800080

100

Chng VI

SketchUp Scripting by Kienking@Gmail.com

Trong trng hp ny, hai ch s u tin xc nh cc cng mu ( 80 trong h thp lc phn tng ng 128 trong h s 24 bit ), hai ch s tip theo i din cho cng mu xanh l cy v hai ch s cui cng xc nh cng mu nc bin ca mu. Bn cng c th s dng gi tr thp phn tng ng ca 0x800080 l 8388736, nhng iu ny l rt kh khn khi tnh ton. Hoc bn khng cn phi s dng cc s nguyn t 0 n 255. Mi mu c th c xc nh vi mt gi tr thp phn t 0.0 ti 1.0. Trong trng hp ny, th [ 0.0 , 0.0, 0.0 ] l mu en v [1.0 , 1.0 , 1.0 ] l mu trng. tnh ton ra mt mng gm c cc phn t thp phn t mt mng c cc phn t l s nguyn, hy chia cc phn t ca mng s nguyn cho 255. V d, cc lnh sau thit lp vt liu ca purple_group c ch nh l mu tm bng cch s dng cc gi tr thp phn: purple_group.material = [0.5, 0.0, 0.5] Cui cng, bn c th xc nh cc mu bng cch s dng cc mng gm bn phn t, trong phn t ban u l cng ca cc mu thnh phn ( , xanh l cy v xanh nc bin) v phn t th t l mt gi tr thp phn nm t 0.0 ti 1.0 hoc mt s nguyn t 0 n 255. Gi tr ca phn t th t ny xc nh m c ca mu. Thuc tnh ny, hay cn c gi l alpha l ch ca phn trnh by tip theo.

6.2.3 m c ca mu.
Cho n nay, tt c cc vt liu m chng ta to ra u khng trong sut, khi bn t mt i tng m hnh pha trc mt i tng m hnh khc th cc i tng pha sau b che khut hon ton. Nhng bn c th lm cho mt vt liu tr nn trong sut bng cch thay i gi tr alpha ca n. Theo mc nh, tt c cc mu m bn to ra c mt gi tr alpha l 255 ( s nguyn ) hoc 1.0 ( s thp phn). lm cho mt liu tr nn trong m hoc trong sut th bn cn phi gim gi tr ny. Khi gi tr alpha ca vt liu bng 0 th vt liu hon ton trong sut. Hnh sau cho thy cc gi tr alpha thay i s xut hin ca i tng b mt trong d n nh th no. Tt c bn hnh vung u l mu en, nhng vic gim gi tr alpha lm cho mt s hnh ny xut hin mu xm. Khi gi tr alpha gim xung bng 0.0 th hnh vung tr nn trong sut .

Bn c th ch nh mt gi tr alpha t lm v tr th t trong mt mng RGB hoc gi ra phng thc alpha c cung cp bi lp Color. Nhng trong kinh nghim ca ti,

101

Chng VI

SketchUp Scripting by Kienking@Gmail.com

cch duy nht thay i gi tr alpha ca vt liu l bng cch gi phng thc alpha ca i tng Material. Phng thc ny chp nhn mt gi tr thp phn nm t 0.0 (trong sut) n 1.0 ( c). V d, on m sau gn mt mu-Color vi mt gi tr alpha ca n l 128 cho mt Material. C mt s khc bit r rng gia hai cch thc s dng phng thc alpha: red_mat = Sketchup.active_model.materials.add "Red" red_col = Sketchup::Color.new 255, 0, 0, 128 red_col.alpha 128 red_mat.color = red_col red_mat.alpha 1.0 # Opaque

red_mat.alpha = 0.5 red_mat.alpha 0.5 # Translucent

Nh th hin, nu bn mun thay i gi tr alpha ca mt Material, bn phi gi phng thc alpha ca lp Material vi gi tr nm gia 0.0 v 1.0 .

6.2.4 Pha trn mu.


Qu trnh pha trn chp nhn hai mu v to ra mt mu th ba c thnh phn l gi tr trung bnh c trng s ca cc thnh phn trong mu u vo. Bn c th thc hin pha trn theo mt trong hai cch. Cch u tin, bn c th gi ra phng thc Color.blend vi tham s l hai mu v mt trng s. Bn cng c th truy xut vo mt i tng Color c th v gi phng thc pha trn ca n. V d, on m sau s dng c hai phng thc to ra mu tm t mu xanh v mu : blue = Sketchup::Color.new 0, 0, 255 red = Sketchup::Color.new 255, 0, 0 purple1 = Sketchup::Color.blend blue, red , 0.5 Color(127, 0, 127, 255) purple2 = blue.blend red, 0.5 Color(127, 0, 127, 255)

102

Chng VI

SketchUp Scripting by Kienking@Gmail.com

Trong on m trn trong s l 0.5, nu trng s c thit lp l 0 trong cc cu lnh trn th mu kt qu ca s pha trn s l mu v nu trng s c thit lp l 1 th mu kt qu s l mu xanh.

6.3 Texture.
Nu bn tng dn giy dn tng, bn s bit l n gy nhc u n mc no. Trc tin, bn phi o kch thc ca bc tng v qut h dn vo mt sau ca giy dn tng. Tip theo, bn phi tri giy dn tng mt cch cn thn ln trn mt tng, v nu c sai lch hoc c nhng ch b phng rp ln th bn phi bc tt c mi th ra v bt u li. Tht thoi mi v d chu khi nhn vo mt bc tng c dn giy dn tng hn l mt bc tng trng khng, nhng ti thng bn khon liu n c xng ng vi cng sc b ra. Trong Sketchup, Texture thc hin mt chc nng tng t nh giy dn tng, nhng qu trnh p chng kh xy ra li. Trc tin, bn to mt i tng Texture t mt tp tin hnh nh v s dng Texture to ra mt vt liu-Material. Sau , bn cng p vt liu ny ln b mt ging nh lc bn thc hin vi vt liu c ch nh bi mt mu phn trc. Bn khng phi lo lng v kch thc v nu nh nh hn b mt, n s c lp i lp li lp y b mt. V trn tt c l khng c ch no b phng rp ln!

6.3.1 To v p mt Texture mi.


i tng Texture c to ra bng phng thc texture ca lp Material. Phng thc ny chp nhn tham s l tn ca mt tp tin hnh nh v SketchUp chp nhn cc nh dng tp tin sau:

JPEG images (*.jpg/*.jpeg) Portable network graphic images (*.png) Photoshop images (*.psd) Tagged image files (*.tif) Targa files (*.tga) Windows bitmaps (*.bmp)

Mt hnh nh en trng kch thc 15x15 c tn l checker.jpg nm trong th mc CH6 km theo cun sch ny. Nu th mc ny c t trong th mc cp cao plugins ca SketchUp, cc lnh sau y to ra mt Texture t hnh nh : mats = Sketchup.active_model.materials new_mat = mats.add "Texture Test" save_path = Sketchup.find_support_file "Ch6/checker.jpg", "Plugins" new_mat.texture = save_path text = new_mat.texture Mt khi bn to ra mt Texture, bn c th gi ra phng thc lp ca n c c thng tin c bn v hnh nh to ra n: text.filename

103

Chng VI ../Ch6/checker.jpg text.image_width 15 text.average_color Color(126, 126, 126, 255)

SketchUp Scripting by Kienking@Gmail.com

Lp Texture c cha hai cp phng thc tr v kch thc: image_width/ image_height v width/height. Nhng phng thc ny khng th thay th cho nhau c. Cp u tin xc nh kch thc ca hnh nh texture theo n v pixel. Cp th hai xc nh kch thc ca hnh nh theo n v inch. Ngoi ra vic c c cc thng tin c bn ca n, bn c th p Texture ln mt i tng Edge, Face, ComponentInstance, ComponentDefinition, Group, Image hoc Text. p mt vt liu c ch nh bi mt Texture tng t nh p mt vt liu c ch nh bi mt mu. Dng m sau y to ra mt Texture t tp tin checker.jpg v p ln b mt c tn l new_face: new_face.material.texture = "checker.jpg" Hnh pha bn tri ca hnh sau cho b mt trc khi c p. Hnh pha bn phi cho thy b mt sau khi c p vt liu c ch nh bi mt Texture.

Khi bn to ra mt vt liu, bn khng cn phi bn khon v vic la chn ci no gia mt mu v mt Texture m bn c th kt hp c hai. on m trong tp tin kch bn sau to ra mt vt liu c ch bnh bi mt Texture c da trn tp tin hnh nh checker.jpg v mu DodgerBlue. Sau , p vt liu ln mt b mt.

colortexture.rb

# Create the new material mats = Sketchup.active_model.materials ct_mat = mats.add "Color_Texture" # Assign the texture and color

104

Chng VI

SketchUp Scripting by Kienking@Gmail.com

ct_mat.texture = Sketchup.find_support_file "Ch6/checker.jpg", "Plugins" ct_mat.color = "DodgerBlue" # Draw a Face and set its material ents = Sketchup.active_model.entities face = ents.add_face [1, -1, 1], [1, 1, 1], [-1, 1, 1], [-1, -1, 1] face.material = ct_mat # Display the average color puts "The average color is " + ct_mat.texture.average_color.to_s puts "The material type is " + ct_mat.materialType.to_s

Khi tp tin kch bn ny c thc thi, kt qu c hin th nh sau:

The average color is Color(30, 144, 255, 255) The material type is 2 Trong kch bn trn, vt liu ct_mat u tin c ch nh bi mt Texture v tip theo l ch nh bi mt mu. Th t ny rt l quan trng. Nu mu c ch nh u tin th n s b b qua khi Texture c ch nh bc tip theo. Bng cch ch nh mu bc th hai th bn cht ca kt cu c thay i. y l l do ti sao m mu ca i tng Texture c to ra cng ging vi mu c ch nh (DodgerBlue = [30,144,255]). Bn cng c th c c nhng kt qu tng t bng cch chn Colorize trong hp thoi Create Material ca SketchUp.

6.3.2 Lu Texture thnh tp tin.


Sau khi bn thm mu cho mt Texture v thay i kch thc ca n, bn c th lu n thnh mt tp tin bng cch s dng TextureWriter ca SketchUp. Sau , bn c th truy xut v sa i cc texture bng cc phn mm chnh sa nh ( nh Photoshop, Paint). c c mt TextureWriter, bn cn phi gi ra phng thc create_texture_writer cung cp bi module Sketchup. Mt khi bn lu, bn c th lu tr mt texture ca Entity vo mt tp tin bng cch gi phng thc write ca TextureWriter. V d, cc dng lnh sau truy xut mt TextureWriter v s dng n ghi Texture ca new_group ( mt Entity) thnh tp tin group_texture.jpg trong th mc plugins cp cao :

105

Chng VI

SketchUp Scripting by Kienking@Gmail.com

tw = Sketchup.create_texture_writer path = Sketchup.find_support_file "group_texture.jpg", "Plugins" tw.write new_group, path lu mt Texture ca mt b mt thnh mt tp tin, bn cn phi xc nh pha ca b mt c cha texture m bn quan tm ti (mt pha trc-front face hay mt pha sau-back face). lu Texture trn mt pha trc ca mt b mt th bn thm mt tham s th hai cho phng thc write vi gi tr thit lp l true. lu Texture trn mt pha sau th thit lp tham s th hai l false. V d, cc phng thc sau y lu Texture thuc mt sau ca b mt new_face thnh tp tin face_texture.jpg. tw.write new_face, false, "face_texture.jpg" Phng thc write tr v mt trong ba gi tr sau: 0 - Texture c lu thnh tp tin thnh cng. 1 - Texture khng c lu thnh tp tin do nh dng tp tin khng hp l 2 - Texture khng c lu thnh tp tin m khng bit l do ti sao. Bn cng c th chn nhiu i tng Entity v lu cc Texture ca chng thnh cc cc tp tin. Vic ny c hai bc: u tin, t cc i tng vo TextureWriter bng cch s dng phng thc load. Tip theo, gi ra write_all vi tn ca th mc m chng s c c lu tr. iu ny c th hin trong on m ca tp tin kch bn sau, to ra hai b mt v p mt vt liu cho c hai. Sau n lu c hai Texture thuc chng vo mt th mc.

texturewriter.rb

# Create two faces ents = Sketchup.active_model.entities face1 = ents.add_face -1, 1] face2 = ents.add_face 1, 1] [1, -1, 1], [1, 1, 1], [-1, 1, 1], [-1, [6, -1, 1], [6, 1, 1], [4, 1, 1], [4, -

# Create materials for the two faces mats = Sketchup.active_model.materials mat1 = mats.add "Mat1" mat2 = mats.add "Mat2" mat1.texture = Sketchup.find_support_file "Ch6/diamond.jpg", "Plugins" mat2.texture = Sketchup.find_support_file "Ch6/brick.jpg", "Plugins" face1.material = mat1 face2.material = mat2

106

Chng VI # Create the texture writer

SketchUp Scripting by Kienking@Gmail.com

tw = Sketchup.create_texture_writer tw.load face1, true tw.load face2, true path = Sketchup.find_support_file "Plugins", "" tw.write_all path + "/Ch6/figs", true

Cc dng lnh cui cng cho thy cch thc m TextureWriter c s dng. C hai phng thc load u yu cu mt tham s th hai bi v tham s u tin l mt i tng b mt- Face. Trong trng hp ny, true c ngha l texture trn mt trc ca b mt s c np vo TextureWriter. Nu tham s u tin khng phi l mt b mt th tham s th hai khng cn thm vo.

6.4 Kt thc chng.


Vt liu l mt trong nhng kha cnh th v nht ca SketchUp, v nu bn c nh to ra mt s trnh din c y cc c im ca SketchUp th y l mt ch quan trng cn hiu r. Rt may, khng c nhiu iu hc: Mt vt liu ch n gin l mt mu sc hoc texture (hoc kt hp c hai ) c th c p ln cc i tng hnh hc c trong mt d n SketchUp. Mu sc l loi vt liu rt d dng thc hin. Nu bn thit lp vt liu ca mt Drawingelement l mt mng RGB hoc l mt tn mu ph bin no th SketchUp s nhn ra mu sc v to ra mt vt liu mi. Tip theo, SketchUp s thm vt liu c ch nh bi mu sc vo i tng cha ng Materials ca d n SketchuUp v p n ln b mt ca i tng hnh hc. Tt c vic cn lm ch l mt dng m. Texture c phn rc ri hn bi v bn cn phi cung cp v tr ca mt tp tin hnh nh. Cng nh mu sc, hnh nh Texture c th c s dng trc tip to ra vt liu. Khi bn thit lp vt liu ca mt i tng hnh hc l mt hnh nh Texture, SketchUp s thm vt liu ny vo i tng model v p ln trn i tng hnh hc. Mt khi bn p mt Texture ln mt i tng hnh hc no trong d n SketchUp th bn c th thay i kch thc v mu sc ca n. Sau , bn c th lu Texture c sa i thnh mt tp tin bng cch truy xut vo i tng TextureWriter. C th np cc Texture c p trn mt hoc nhiu i tng hnh hc trong d n SketchUp v lu chng vo mt th mc no trn my tnh.

107

You might also like