Professional Documents
Culture Documents
54
Chng IV
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.
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
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.
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
56
Chng IV
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.
57
Chng IV
1. 2.
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
58
Chng IV
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
600
59
Chng IV
- 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
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
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
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
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.
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.
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
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.
66
Chng IV
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
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
# 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
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
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.
70
Chng IV
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
Bi hc th hai v Ruby:
72
Chng V
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.
Miu t
6 * 8 == 48 "J" != "X" 24 < 30 "B" > "A" 22 <= 22 "X" >= "W" !(2 + 2 == 5)
V d
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
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
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
75
Chng V
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
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.
77
Chng V
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
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.
79
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"
80
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.
81
Chng V
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
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.
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
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.
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
# 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.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
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
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.
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
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"]
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
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"
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
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 }
# 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.
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
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
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"
94