Sunday 19 March 2017

DYN04.10 : အေၿခခံ Geometry တည္ေဆာက္ၿခင္း - အပိုင္း(၁၀)

မဂၤလာပါ အေပါင္းအသင္းတို ့ေရ...

ဒီ Post မွာေတာ့ အေၿခခံ 3D Solid ေတြကိုဖန္တီးႀကတဲ့ ေနရာမွာ အသံုးၿပဳေလ့ရွိႀကတဲ့ Extrude, Sweep, Revolve,...စတဲ့ နည္းလမ္းေတြနဲ ့ အသံုးၿပဳ တင္ၿပေဆြးေႏြးသြားဖို ့ရွိပါတယ္။

Library ေအာက္က Geometry > Solid ဆီကို သြားတဲ့အခါ ေအာက္ေဖာ္ၿပပါ ပံုအတိုင္း Create အေနနဲ ့ Node (၈)ခု၊ Action အေနနဲ ့ Node (၉)ခု၊ Query အေနနဲ ့ Node (၂)ခု ကို ေတြ ့ၿမင္ႀကရမွာပါ။
ေဖာ္ၿပပါ Node ေတြထဲကမွ Solid.ByLoft(crossSections) ေလးနဲ ့ 3D Solid တခု ဖန္တီးႀကရေအာင္။

သူ ့မွာ input အေနနဲ ့က crossSections ဆိုတဲ့ တခုသာ ပါ၀င္ေနတာကို သတိထားမိႀကမွာပါ။ သူ ့ရဲ့ လိုအပ္ခ်က္ကေတာ့ Closed Curve (၂)ခုပါပဲ။ အဲ့ဒီအတြက္ Circle တခုနဲ ့ Ellipse တခုကို အရင္ဖန္တီးႀကတာေပါ့။
(အထက္ေဖာ္ၿပပါ ပံုကေတာ့ Circle တခုနဲ ့ Ellipse တခုကို ဖန္တီးတဲ့ေနရာမွာ သူတို ့ရဲ့ မူလ Node ေရာ Code Block ကိုပါ အသံုးၿပဳၿပေပးထားတာပါ။ အသံုးၿပဳသူအေနနဲ ့က ႏွစ္သက္ရာကို လြတ္လပ္စြာ အသံုးၿပဳႏိုင္ပါတယ္။ မူလ Node ေတြကိုပဲ သံုးခ်င္ရင္ေတာ့ သက္ဆိုင္ရာ input ေတြကိုပါ ၿဖည့္စြက္ေပးဖို ့ လိုအပ္ပါလိမ့္မယ္။)
က်ေနာ့္အေနနဲ ့ Code Block ေတြကိုပဲ အသံုးၿပဳၿပီး Run လိုက္တဲ့အခါ အထက္ေဖာ္ၿပပါ ပံုအတိုင္း Circle တခုနဲ ့ Ellipse တခုကို ဖန္တီးထားတာကို ၿမင္ေတြ ့ရမွာပါ။

ဒီေနရာမွာ အခက္အခဲတခု ႀကံဳေနရတာက Solid.ByLoft(crossSections) ရဲ့ input က တခုတည္းရွိေနၿပီး တကယ္ input လုပ္ရမွာက Circle နဲ ့ Ellipse ဆိုတဲ့ input (၂)ခု ၿဖစ္ေနတာပါပဲ။

အဲ့ဒီအခက္အခဲကို ေၿပလည္ေစဖို ့အတြက္ Dynamo က List.Create ဆိုတဲ့ Node ကို စီစဥ္ေပးထားပါတယ္။ List ဆိုတာ သက္ဆိုင္ရာ Element ေတြရဲ့ Information ေတြကို အစီအရီ ေနရာခ်ေပးတဲ့ အလုပ္ကို လုပ္ေဆာင္ေပးပါတယ္။ Dynamo မွာ Code ေတြကိုေရးႀကတဲ့အခါ မသိမၿဖစ္တဲ့ အစိတ္အပိုင္း လို ့လည္း ဆိုႏိုင္ပါတယ္။

Library ေအာက္ကေန Core > List > List.Create (or) Search Box > List.Create ကိုသံုးၿပီး List.Create ဆိုတဲ့ Node ကိုရယူပါမယ္။ ၿပီးရင္ေတာ့ ေအာက္ေဖာ္ၿပပါ ပံုအတိုင္း 3D Solid တခုကို ၿဖစ္ေပၚေစမယ့္ Code တခုကို ဖန္တီးပါ့မယ္။
ဒီတခါေတာ့ Solid.ByLoft(crossSections, guideCurve) ကို အသံုးၿပဳႀကည့္ပါမယ္။ သူ ့မွာ guideCurve ဆိုတဲ့ input တခု ပိုလာတာေႀကာင့္ Closed Curve (၂)ခု အၿပင္ Path တခုကိုပါ  ဖန္တီးေပးဖို ့လိုအပ္ လာပါတယ္။
ဒီ Code အရင္ဆံုး guideCurve အတြက္ Nurbs.ByPoints တခုကို ဖန္တီးပါမယ္။ အဲဒီအတြက္ လိုအပ္ေနတာက Point ေတြၿဖစ္တာေႀကာင့္ Code Block သံုးၿပီး Point (၃)ခုကို အရင္ ဖန္တီးပါ့မယ္။ ၿပီးရင္ေတာ့ ေအာက္က ပံုအတိုင္း guideCurve တခုဖန္တီးပါ့မယ္။

ဒုတိယ အဆင့္အေနနဲ ့ crossSections အတြက္ Closed Curve (၂)ခုကို ဖန္တီးရပါ့မယ္။ ဒီေနရာမွာ Closed Curve (၁)ခု ကို guideCurve ရဲ့ အစ Point မွာ ထားၿပီး ေနာက္ Closed Curve (၁)ခု ကို guideCurve ရဲ့ အဆံုး Point မွာ ထားခ်င္ပါတယ္။ ဒါတင္မကပဲ Closed Curve (၂)ခုဟာ guideCurve နဲ ့ Perpendicular လည္းက်ေနဖို ့ လိုအပ္ပါမယ္။
အဲ့ဒီအတြက္ Library ေအာက္ကေန Geometry > Curve (Action) > PlaneAtParameter ကို အသံုးၿပဳပါ့မယ္။ သူ ့မွာ input အေနနဲ ့ curve, param တို ့ပါ၀င္ေနပါမယ္။
curve အတြက္ကေတာ့ အထက္ေဖာ္ၿပပါ ပံုအတိုင္း ခ်ိတ္ဆက္ေပးလိုက္ရံုပါပဲ။ param အတြက္က်ေတာ့ {0,1}; လို ့ရိုက္ထည့္ေပးရပါမယ္။ ဆိုလိုတာက Plane တခုကို အစမွာ ဖန္တီးၿပီး ေနာက္ Plane တခုကိုေတာ့ အဆံုးမွာ ဖန္တီးမယ္ ဆိုတဲ့ သေဘာပါပဲ။
(တကယ္လို ့ guideCurve ရဲ့ 1/4 မွာ Plane တခု၊ 3/4 မွာ Plane တခု ထပ္ထည့္ခ်င္တယ္ဆိုရင္ေတာ့ {0,0.25,0.75,1}; လို ့ ရိုက္ထည့္ေပးလိုက္ရံုပါပဲ။)
အခုဆိုရင္ Plane (၂)ခု ရၿပီမို ့ Plane တခု မွာ Closed Curve တခုစီ ဖန္တီးဖို ့ လိုအပ္လာပါၿပီ။
ဆိုေတာ့ကာ...Library ေအာက္ကေန
- Geometry > Circle > ByPlaneRadius
- Geometry > Ellipse > ByPlaneRadii ... နဲ ့Circle တခု Ellipse တခုကို ဖန္တီးပါမယ္။
အခုအတိုင္း ဆိုရင္ေတာ့ Circle တခု နဲ ့ Ellipse တခုဟာ Plane (၂)ခုစလံုး အေပၚမွာ ဖန္တီးၿပီးေနတာကို ေတြ ့ၿမင္ႀကရမွာပါ။ လိုခ်င္တာက Plane တခုမွာ Closed Curve တမ်ိဳးစီသာ သီးၿခားစီ ဖန္တီးခ်င္တာပါ။ ဒါေႀကာင့္ပဲ List.RemoveItemIdex ဆိုတဲ့ Node ကိုအသံုးၿပဳၿပီး ကိုယ္မလိုခ်င္တဲ့ List ကို ဖယ္ရွားမွာ ၿဖစ္ပါတယ္။
ဒီေနရာမွာ List ေတြစီစဥ္ပံုကို အနည္းငယ္ တင္ၿပေဆြးေႏြးခ်င္ပါတယ္။
အခုလို Library ကေန Search Box > Watch လို ့ရိုက္ထည့္ၿပီး ရလာတဲ့ Watch (Node) ကို ခ်ိတ္ဆက္ၿပီး Run တဲ့အခါ အထက္ေဖာ္ၿပပါပံုအတိုင္း List စီစဥ္ပံုကို Watch မွာေတြ ့ၿမင္ႏိုင္ပါမယ္။ List ေတြကို စီတဲ့အခါ (0) ကေန စၿပီး ေရတြက္ေလ့ရွိတာကို သတိထားမိဖို ့လိုပါမယ္။ ဒါမွ ကိုယ္ဖယ္ရွားခ်င္တဲ့ List ကို အတိအက် ေရြးခ်ယ္ႏိုင္မွာ ၿဖစ္ပါတယ္။
ကဲ... List.RemoveItemIdex ကိုစၿပီး အသံုးၿပဳပါေတာ့မယ္။
အေပၚက ေဖာ္ၿပထားတဲ့ ပံုကို ေလ့လာရင္း List.RemoveItemIdex ရဲ့သေဘာကို နားလည္ႏိုင္မယ္လို ့ ေမွ်ာ္လင့္ပါတယ္။
အခုဆိုရင္ Plane တခုစီ ခြဲထားခဲ့ၿပီမို ့ Closed Curve ေတြကို ကိုယ္ႏွစ္သက္ရာ Plane ေပၚမွာ ဖန္တီးႏိုင္ႀကပါၿပီ။
ကဲ... အခုဆိုရင္ Closed Curve (၂) ခု နဲ ့ guideCurve (၁)ခုဟာ အဆင္သင့္ ၿဖစ္ေနၿပီမို ့က်ေနာ္တို ့လိုခ်င္တဲ့ Solid.ByLoft(crossSections, guideCurve) နဲ ့အတူ 3D Solid တခုကို ေအာက္ေဖာ္ၿပပါ ပံုအတိုင္း ဖန္တီးႏိုင္ပါၿပီ။
အေၿခအေနက ေမွ်ာ္လင့္ထားသလို ၿဖစ္မလာခဲ့ဘဲ Closed Curve (၂) ခုႀကား ဆက္သြယ္မွုတခု လစ္ဟေနၿပန္ပါတယ္။ အဲ့ဒီအတြက္ PolyCurve.ByJoinedCurve ဆိုတဲ့ Node ကိုသံုးၿပီး Closed Curve (၂)ခု ကိုဆက္စပ္ေပးလိုက္တဲ့ အခါက်ေတာ့မွပဲ လိုခ်င္တဲ့ 3D Solid တခုကို ေအာက္ေဖာ္ၿပပါ ပံုအတိုင္း ဖန္တီးႏိုင္ပါေတာ့တယ္။
ဒီ Post ဟာ အေတာ္ေလး ရွည္သလို လိုအပ္ခ်က္ေတြနဲ ့ အသံုးၿပဳရတဲ့ Node ေတြကလည္း အေၿခခံကို ေလ့လာေနသူအတြက္ နဲနဲေတာ့ စိတ္ရွုပ္ေထြးေစမွာ အမွန္ပါပဲ။
ဒါေပမယ့္ Programming ရဲ့သေဘာကိုက ကိုယ္လိုခ်င္တဲ့ ရလဒ္တခုကေန အေၿခတည္လိို ့ ထပ္ဆင့္လိုအပ္ခ်က္ေတြကို ၿဖည့္စြက္ရင္း Code ေတြေရးသားႀကရတာပါပဲ။

က်န္ေနေသးတဲ့ Extrude နဲ ့ Revolve အသံုးေတြကိုလည္း ကိုယ့္ဖာသာ ႀကိဳးစားၿပီး ဖန္တီးႀကည့္ႀကဖို ့ တိုက္တြန္းလိုက္ပါရေစ။

လာမယ့္ Post က်ရင္ေတာ့ List ေတြ အလုပ္လုပ္ပံုေတြကို အက်ဥ္းခ်ံဳးၿပီး တင္ၿပေဆြးေႏြးသြားဖို ့ စီစဥ္ထားပါတယ္။

No comments:

Post a Comment