Showing posts with label DYNAMO. Show all posts
Showing posts with label DYNAMO. Show all posts

Monday, 11 September 2017

DYN06.03 : Data-Shapes Package ႏွင့္ မိတ္ဆက္ၿခင္း အပိုင္း(၂)

မဂၤလာပါ။

ဒီပို ့စ္မွာေတာ့ Revit နဲ ့Excel အႀကား Information ေတြ အၿပန္အလွန္ ခ်ိတ္ဆက္ပံု၊ ဖလွယ္ပံုကို Dynamo Code  အသံုးၿပဳပံုၿပီး တင္ၿပေဆြးေႏြးသြားမွာ ၿဖစ္ပါတယ္။ End-user ေတြ အသံုးၿပဳရလြယ္ကူေစမယ့္ Code ၿဖစ္ဖို ့လည္း လိုအပ္တာေႀကာင့္ Data-Shapes Package ထဲက Node ေတြကိုလည္း တြဲဖက္အသံုးၿပဳသြားမွာ ၿဖစ္ပါတယ္။

ဘာ Add-ins မသံုးဘူး ဆိုရင္ Revit နဲ ့Excel ႀကားမွာ Information ေတြကို အၿပန္အလွန္ ခ်ိတ္ဆက္ဖို ့၊ ဖလွယ္ဖို ့ ဆိုတာ မၿဖစ္ႏိုင္တဲ့ ကိစၥတခုပါပဲ။ တနည္းအားၿဖင့္ေတာ့ Revit Software ရဲ့ Limit လို ့ဆိုရမွာပါပဲ။ တခါ Add-ins ေတြ သံုးႀကၿပန္ေတာ့ လည္း အဲ့ဒီ Add-ins ေတြမွာ Limit ေတြထပ္ရွိေနၿပန္ပါေသးတယ္။ ဥပမာ Revit ရဲ့ Family Parameter အားလံုးကို Excel ဆီ ပို ့လို ့မရတာ၊ Excel ဆီကို Export လုပ္တိုင္း Excel File အသစ္တည္ေဆာက္ရတာ...စသၿဖင့္ေသာ အဆင္မေၿပမွုေတြ၊ အပိုလုပ္ရတဲ့ ႀကားခံ Process ေတြပါပဲ။ ေနာက္ဆံုးတခ်က္ကေတာ့ Add-ins ဟာ Free မဟုတ္ႀကတာပါပဲ။

ဒါဆို Dynamo ကေရာ ဘာေတြ လုပ္ေပးႏိုင္ပါသလဲ။
Revit Project ထဲမွာရွိတဲ့ Element ေတြရဲ့ Parameter အမ်ိဳးအစားနဲ ့ သူတို ့ရဲ့ Value ေတြကို Excel ဆီပို ့ ႏိုင္သလို Excel ဆီက Information ေတြကိုလည္း အၿပန္အလွန္ အေနနဲ ့Import ၿပန္လုပ္ႏိုင္ပါတယ္။ ဒါ့အၿပင္ တိက်တဲ့စည္းကမ္းခ်က္ေတြ သတ္မွတ္ၿပီး  Revit နဲ ့Excel အႀကား Information ေတြကို အၿပန္အလွန္ ခ်ိတ္ဆက္ႏိုင္၊ ဖလွယ္ႏိုင္ပါေသးတယ္။

လက္ေတြ ့အေနနဲ ့ Data Exchange Process ေလးတခုေလာက္ လုပ္ႀကည့္ႀကရေအာင္။ ရိုးရွင္းတဲ့ အိမ္တလံုးထဲက Room ေတြရဲ့ Information ေတြကို Revit နဲ ့Excel အႀကား အၿပန္အလွန္ ခ်ိတ္ဆက္ႀကည့္၊ ဖလွယ္ႀကည့္ႀကမယ္ ဆိုပါဆို ့။


ဒီ Room Schedule မွာ ပထမ Column (၃) ခုက Information ေတြဟာ Revit က တိုက္ရိုက္ Extract လုပ္ရမွာၿဖစ္ၿပီး က်န္တဲ့ Column ေတြအတြက္ Information ေတြကိုေတာ့ Excel မွာ ၿဖည့္စြက္ဖို ့ ၿပင္ဆင္ေပးထားတာပါ။

ပထမဆံုး ဒီ Room Schedule ကို Excel ဆီ Export လုပ္ႏိုင္မယ့္ Dynamo Code တခုေရးပါ့မယ္။
ဒီ Code မွာ အပိုင္း (၃) ပိုင္း ပါ၀င္ပါ့မယ္။
၁။ Revit Project ထဲက Room Information ေတြကို Extract လုပ္ၿခင္း
၂။ Extract လုပ္ထားတဲ့ Room Information ေတြကို Excel ဆီ Export လုပ္ၿခင္း
၃။ User-friendly ၿဖစ္ေစဖို ့Code ကို ထပ္ေဆာင္းမြမ္းမံရၿခင္း ... ရယ္ဆိုၿပီးေတာ့ ရွိပါမယ္။

Revit Project ထဲက Room Information ေတြကို Extract လုပ္ၿခင္း။

> Categories ထဲကေန  Room ကိုေရြးပါတယ္။
> Room ထဲကမွ Element အားလံုးကို ေရြးထုတ္ပါတယ္။
> Room Element ေတြရဲ့ Number, Name နဲ ့ Area ဆိုတဲ့ Room Information ေတြကို Extract လုပ္ပါတယ္။
> Parameter Type မတူတဲ့ Room Information ေတြကို List လုပ္ပါတယ္။
> လက္ရွိအတိုင္း  Excel ဆီ ပို ့မယ္ဆိုရင္ List တခုသည္ Excel ရဲ့ Row တခုၿဖစ္ေနပါလိမ့္မယ္။

> List တခုတည္းမွာ Room တခုရဲ့ Type မတူတဲ့ Parameter ေတြပါ၀င္ေနေစခ်င္ရင္ေတာ့ ရွိေနတဲ့ List ကို Transpose  လုပ္ရပါမယ္။

> ဒီေနရာမွာ Room ေတြရဲ့ List ကို Number အားၿဖင့္ စီခ်င္တယ္ ဆိုပါဆို ့။
> Room Element အားလံုးကို ေရြးထုတ္တဲ့ အခ်ိန္တည္းက ကိုယ္စီခ်င္တဲ့ Number ဆိုတဲ့ Parameter ရဲ့ Value နဲ ့စီခဲ့ဖို ့လိုပါလိမ့္မယ္။ ဒီေနရာမွာ SwingNodes Package ရဲ့ List.SortByParameterValue ကို အသံုးၿပဳဖို ့ သင့္ေတာ္ပါတယ္။
အခုဆိုရင္ Extract လုပ္ထားတဲ့ Room အလိုက္ Information ေတြဟာ Excel ဆီကို Export လုပ္ဖို ့ အဆင္သင့္နီးပါးေလာက္ ၿဖစ္ေနၿပီလို ့ ဆိုႏိုင္ပါတယ္။ တခုပဲ ဆံုးၿဖတ္ဖို ့ရွိတာက Excel File အသစ္ဖန္တီးမွာလား။ ရွိႏွင့္ၿပီးသား ဒါမွမဟုတ္ Format ၿပင္ထားၿပီးသား Excel File ထဲကို Information ေတြ သြင္းမွာလား ... ဆိုတာပါပဲ။

Excel File အသစ္ဖန္တီးမယ္ ဆိုရင္ေတာ့ Information ေတြအတြက္ လိုအပ္တဲ့ Title ေတြကို ထည့္ေပးလိုက္ဖို ့လိုအပ္ပါလိမ့္မယ္။ အဲ့ဒီ Title ေတြအတြက္ List.AddItemToFront ကို အသံုးၿပဳပါမယ္။ (တကယ္လို ့ ရွိႏွင့္ၿပီးသား ဒါမွမဟုတ္ Format ၿပင္ထားၿပီးသား Excel File ထဲကို Information ေတြ သြင္းမွာ ဆိုရင္ေတာ့ ဒီအဆင့္ဟာ မလိုအပ္ပါဘူး။)

အခုဆိုရင္ေတာ့ ပထမဆံုး Row မွာ Title ေတြကို ေတြ ့ရမွာၿဖစ္ၿပီး ေအာက္က Row ေတြမွာေတာ့ Room Information ေတြကို Room Number အလိုက္ အစီအစဥ္တက် ၿဖစ္ေနတာကို ၿမင္ေတြ ့ႀကရမွာပါ။

Extract လုပ္ထားတဲ့ Room Information ေတြကို Excel ဆီ Export လုပ္ၿခင္း။

ဒီေနရာမွာလည္း အေၿခအေန (၂)မ်ိဳးအတြက္ ၿပင္ဆင္ရပါမယ္။  Excel File အသစ္ဖန္တီးဖို ့အတြက္ရယ္၊ တကယ္လို ့ ရွိႏွင့္ၿပီးသား ဒါမွမဟုတ္ Format ၿပင္ထားၿပီးသား Excel File ထဲကို Information ေတြသြင္းဖို ့ ရယ္ ... ဆိုၿပီးေတာ့ ၿဖစ္ေနပါ့မယ္။

Excel File အသစ္ဖန္တီးဖို ့အတြက္ရယ္ ဆိုရင္ေတာ့...

> FilePath ေပးတဲ့ အခါမွာ ကိုယ္အသစ္ဖန္တီးခ်င္တဲ့ Excel File ရဲ့ Name ကို .xls ဒါမွမဟုတ္ .xlsx ဆိုတဲ့ Excel File ရဲ့ Extension ကိုပါ တြဲထည့္ၿပီး ေပးဖို ့ လိုအပ္ပါမယ္။ (ဥပမာ RoomData.xls ဒါမွမဟုတ္ RoomData.xlsx).
> SheetName ကိုလည္း သင့္ေတာ္တဲ့ Name တခုေပးႏိုင္ပါတယ္။
> startRow ကို Code Block သံုးၿပီး 0 လို ့ေပးပါမယ္။
(ဆိုလိုတာကေတာ့ Excel ရဲ့ ပထမဆံုး  Row က စၿပီး Information ေတြသြင္းမယ္ ဆိုတဲ့ သေဘာပါ။)
> startCol ကို Code Block သံုးၿပီး 0 လို ့ေပးပါမယ္။ 
(ဆိုလိုတာကေတာ့ Excel ရဲ့ ပထမဆံုး  Column က စၿပီး Information ေတြသြင္းမယ္ ဆိုတဲ့ သေဘာပါ။)
> Data ဆိုတဲ့ Input မွာ Extract လုပ္ထားတဲ့ Room Information ေတြအတြက္ ၿဖစ္ပါတယ္။
> overWrite ကေတာ့ ရွိႏွင့္ၿပီးသား Excel File ဆိုရင္ File တခုလံုးကို Overwrite လုပ္ပစ္မလား ဆိုတဲ့ True/ False ေရြးၿခယ္မွုပါ။ File အသစ္ဖန္တီးတဲ့ Process အတြက္ကေတာ့ ဘာၿဖစ္ၿဖစ္ ကိစၥ မရွိလွပါဘူး။



တကယ္လို ့ ရွိႏွင့္ၿပီးသား ဒါမွမဟုတ္ Format ၿပင္ထားၿပီးသား Excel File ထဲကို Information ေတြသြင္းဖို ့ ရယ္ ... ဆိုၿပီးေတာ့ 


> FilePath ေပးတဲ့ ရွိႏွင့္ၿပီးသား Excel File ကို ေရြးခ်ယ္လိုက္ရပါမယ္။
> SheetName ေနရာမွာလည္း ရွိႏွင့္ၿပီးသား Excel File ရဲ့ Sheet Name အတိုင္း String အၿဖစ္ Input လုပ္ေပးရပါမယ္။ 
(Case Sensitive ၿဖစ္တဲ့ အတြက္ ကိုယ္ Information ေတြသြင္းမယ့္ Sheet Name အတိုင္း ၏ သည္ မေရြး ကိုက္ညီေနရပါမယ္။)
> startRow ကို ကိန္းဂဏန္း အၿဖစ္ေရးသြင္းရာမွလည္း ရွိႏွင့္ၿပီးသား Excel File ရဲ့  Format အတိုင္း အံ၀င္မယ့္ Row Number ကို ေရးသြင္းရပါမယ္။
(Dynamo သေဘာအရ အေရအတြက္ေတြကို 0 က စေရတြက္တာေႀကာင့္ အခု Row Number 4 ကေန Information ေတြစၿပီး သြင္းမယ္ ဆိုရင္ 3 လို ့ကိန္းဂဏန္း (Number) အေနနဲ ့ ရိုက္ထည့္ေပးရပါမယ္။
> startCol ကိုလည္း startRow အတိုင္း ဂရုတစိုက္ ေဆာင္ရြက္ဖို ့လိုအပ္ပါမယ္။
(Column Number B ကေန Information ေတြစၿပီး သြင္းမယ္ ဆိုရင္ 1 လို ့ကိန္းဂဏန္း (Number) အေနနဲ ့ ရိုက္ထည့္ေပးရပါမယ္။
> Data ကေတာ့ ပထမ Process အတိုင္း ေဆာင္ရြက္ရံုပါပဲ။
> overWrite အေနနဲ ့က False ေပးရပါလိမ့္မယ္။ ဒါမွ ရွိႏွင့္ၿပီးသား Excel File ထဲက Revit ဆီက Data Extraction လုပ္ထားတဲ့ Data ေတြမဟုတ္တဲ့  တၿခားေသာ Data ေတြကို Overwrite အလုပ္မခံရေအာင္လို ့ ပါ။

ခုဆိုရင္ေတာ့ Revit က  Information ေတြကို Excel ဆီ Exchange လုပ္နည္း Workflow (၂) ခုကို ေဆြးေႏြးခဲ့ၿပီး ၿဖစ္ပါတယ္။
ေနာက္ဆံုး အေနနဲ ့ End-user ေတြအတြက္ User-friendly ၿဖစ္ေအာင္ Dynamo Code ေတြကို မြမ္းမံၿဖည့္စြက္ပံုေလး ဆက္လက္ တင္ၿပေဆြးေႏြး သြားမွာ ၿဖစ္ပါတယ္။

User-friendly ၿဖစ္ေစဖို ့Code ကို ထပ္ေဆာင္းမြမ္းမံရၿခင္း။
ဒီအဆင့္မွာေတာ့ Dynamo Code ေရးသူအေနနဲ ့ မိမိအတြက္ထက္ Dynamo ဆိုတာကို လံုး၀မထိေတြ ့ ဖူးေသးတဲ့ End-user ေတြအတြက္ကို အဓိကထား စဥ္းစားၿပီး  Code ေတြကို ေရးဖို ့လိုအပ္လာပါမယ္။ ေနာက္ဆံုး တင္ၿပေဆြးေႏြးခဲ့တဲ့ Code (Revit To Excel) ကို အေၿခခံၿပီး ေဆြးေႏြးႀကည့္ႀကရေအာင္။

> ပထမဆံုး အေနနဲ ့Extract လုပ္ခ်င္တဲ့ Room ဆိုတဲ့ Category ကို ေရြးၿခယ္ဖို ့
> File Path ေပးၿပီး Excel File အသစ္ဖန္တီးဖို ့၊ ဒါမွမဟုတ္ ရွိၿပီးသား Excel File ကို File Path ေပးဖို ့
> အသစ္ဖန္တီးမယ့္ Excel File ရဲ့ Sheet Name ကို အမည္ေပးဖို ့၊ ဒါမွမဟုတ္ ရွိၿပီးသား Excel File ရဲ့ Sheet Name အတိုင္း String အၿဖစ္ Input လုပ္ေပးဖို ့
> Start Row နဲ ့ Start Column နံပါတ္ေတြကို သတ္မွတ္ဖို ့
... စတဲ့ User Input ေတြဟာ လက္ရွိ Code အတိုင္း ဆိုရင္ Dynamo ဆိုတာကို လံုး၀မထိေတြ ့ ဖူးေသးတဲ့ End-user ေတြအတြက္ တကယ့္အခက္အခဲ တခုပါပဲ။ End-user ေတြအေနနဲ ့ ဒီအခက္အခဲကို အလြယ္တကူ ေၿပလည္ေစဖို ့အတြက္ကေတာ့ Dynamo Code ေရးသူေတြ အေနနဲ ့Node အပိုေလးေတြ ထပ္မံၿဖည့္စြက္ေပးဖို ့ လိုအပ္လာပါေတာ့တယ္။ အဲ့ဒီအတြက္ Data-Shapes Package ဟာ မလြဲမေသြ လိုအပ္လာမွာ ၿဖစ္ပါတယ္။

၁။ Category ကို ေရြးၿခယ္ၿခင္း။ 
ဒီ Function အတြက္  Data-Shapes Package ရဲ့ Node အခ်ိဳ  ့ကို ေအာက္ေဖာ္ၿပပါ ပံုအတိုင္း အသံုးၿပဳထားပါတယ္။ ဒါ့အၿပင္ Custom Node တခုၿဖစ္တဲ့ TL.DB Category to Revit Category ကို Forum တခုမွ ရလာေသာ Python Scrip နဲ ့ ေပါင္းစပ္ၿပီး ဖန္တီးထားတာပါ။ အဲဒါမွပဲ DB Category ကေန Revit Category ၿဖစ္ေအာင္ ေၿပာင္းလဲႏိုင္သြားပါတယ္။

၂။ File Path ေပးၿခင္း။  
UI.FilePath Data ကို အသံုးၿပဳထားပါတယ္။ သူ ့မွာ Input (၃) ခုရွိၿပီး Input Name တခုကိုသာ သိသာေအာင္ ေဖာ္ၿပေပးဖို ့လိုအပ္ပါတယ္။

၃။ Sheet Name ကို အမည္ေပး ၿခင္း။
UI.TextBox Data ကို အသံုးၿပဳထားပါတယ္။ သူ ့မွာ Input (၂) ခုရွိၿပီး Input Name တခုကိုသာ သိသာေအာင္ ေဖာ္ၿပေပးဖို ့လိုအပ္ပါတယ္။

၄။ Start Row/ Start Column နံပါတ္ကို သတ္မွတ္ၿခင္း။
UI.TextBox Data ကို အသံုးၿပဳထားပါတယ္။ သူ ့မွာ Input (၂) ခုရွိၿပီး Input Name တခုကိုသာ သိသာေအာင္ ေဖာ္ၿပေပးဖို ့လိုအပ္ပါတယ္။ 
တကယ္လိုအပ္ေနတဲ့ Input Type က Number ၿဖစ္ေနေပမယ့္လည္း Available ၿဖစ္တဲ့ TextBox Data Node ကိုပဲ အသံုးၿပဳထားပါတယ္။ Number ထည့္သြင္းရမယ့္ Input ေရွ  ့ေရာက္ေတာ့မွပဲ String.ToNumber နဲ ့ ထည့္သြင္းခဲ့တဲ့ String ကို Number အၿဖစ္ ေၿပာင္းလဲၿပီး လိုအပ္တဲ့ Input နဲ ့ ခ်ိတ္ဆက္ေပးရပါတယ္။
Dynamo ကို မထိေတြ ့ဖူးေသးတဲ့ End-user အတြက္ Dynamo ရဲ့ 0 ကေန စၿပီး ေရတြက္တဲ့ List ရဲ့ သေဘာသဘာ၀ကို နားလည္မွာ မဟုတ္ပါဘူး။ ဒါေႀကာင့္ပဲ UI Dialog Box မွာ Start Row/ Start Column အတြက္ နံပါတ္ကို သတ္မွတ္ရတဲ့ အခါမွာ သူသိႏွင့္ၿပီးသား ကိန္းဂဏန္း ေရတြက္ပံုနဲ ့ ကိုက္ညီေနေစဖို ့ အတြက္ Formula (x-1) တခု ႀကားခံေပးထားလိုက္တာ ၿဖစ္ပါတယ္။
(ဥပမာ Excel ရဲ့ Row No. 4 ကေန Information ေတြ စ ထည့္ခ်င္ရင္ သူ ့အေနနဲ ့ သမရိုးက်အတိုင္း 4 ကို ရိုက္ထည့္ရံုပါပဲ။ Column No. C ကေန Information ေတြ စ ထည့္ခ်င္ရင္လည္း 3 ကို ရိုက္ထည့္ရံုပါပဲ) 



၅။ Dynamo Code ႏွင့္ ခ်ိတ္ဆက္ေပါင္းစည္းၿခင္း

အခုဆိုရင္ေတာ့ ဒီ Dynamo Code ဟာ End-user အတြက္ User-friendly ၿဖစ္တဲ့ Code တခုၿဖစ္သြားပါၿပီ။ ဒီ Dynamo Code ကို အသံုးၿပဳမယ္ဆိုရင္
၁။ Revit 2017.2 နဲ ့အထက္ ရွိရပါမယ္။ ဒါမွ Dynamo Player ကို အသံုးၿပဳႏိုင္မွာ ၿဖစ္ပါတယ္။
၂။ Dynamo 1.2.1 နဲ ့အထက္ ရွိရပါမယ္။
၃။ Data-Shapes Package  ရွိရပါမယ္။

 Dynamo Player အသံုးၿပဳပံုကိုေတာ့ ေအာက္က Video Link ေတြကေန ေလ့လာႏိုင္ပါတယ္။
1. Rename/ Renumbering and Cleaning of Parameter Value of Selected Category
 

2. Creating/ Adding Worksets Into Revit Project thru Excel

Friday, 1 September 2017

DYN06.02 : Data-Shapes Package ႏွင့္ မိတ္ဆက္ၿခင္း အပိုင္း(၁)



Data-Shapes Package ဆိုတာက Dynamo ထဲမွာ ထပ္ေဆာင္းၿပီး install လုပ္ရတဲ့ Package မ်ိဳးလို ့ အႀကမ္းဖ်င္း နားလည္ထားရင္ပဲ လံုေလာက္မယ္ထင္ပါတယ္။ Dynamo ကို ထဲထဲ၀င္၀င္ သံုးစြဲလာတာနဲ ့ အမွ် ဒီလို Additional Package ေတြရဲ့ အသံုး၀င္ပံု၊ အသံုးၿပဳပံုေတြကိုလည္း ရင္းႏွီးလာမွာ ၿဖစ္လို ့ပါပဲ။


Dynamo ကို Revit အတြက္ Automation Tool အၿဖစ္အသံုးၿပဳႀကတဲ့ အခါ ဒီလို Additional Package ေတြဟာ ကိုယ့္ရဲ့ လိုအပ္ခ်က္အေပၚမူတည္ၿပီး လိုအပ္ေနမွာပါပဲ။ တခါတခါလည္း Package တခုနဲ ့ တခုအႀကားၿဖစ္ေစ၊ Package တခုတည္းအတြင္းမွာၿဖစ္ေစ Conflict ၿဖစ္တာေတြလည္း ေတြ ့ ၿမင္ရတတ္ပါတယ္။ အဲ့ဒီအခါက်ရင္ေတာ့ လိုအပ္သလို Package ေတြကို uninstall လုပ္တာတို ့၊ Dynamo တခုလံုးကို uninstall လုပ္ၿပီး reinstall ၿပန္လုပ္ရတာေတြလည္း ရွိေကာင္းရွိႏိုင္ပါတယ္။


ဒီလို Package ေတြအမ်ားႀကီးထဲကမွ ဒီ Data-Shapes Package ကိုကြက္ၿပီး အက်ယ္တ၀င့္ ေဆြးေႏြးရၿခင္းရဲ့ အဓိက အေႀကာင္းအရင္းကေတာ့ သူ ့ရဲ့ UI (User Interface) Node ေတြေႀကာင့္ပဲ ၿဖစ္ပါတယ္။ End-user အတြက္ User-friendly ၿဖစ္ေစဖို ့အတြက္ Dynamo Code ေတြကို ဖန္တီးႀကတဲ့ အခါမွာ သူ ့ရဲ့ UI Node ေတြဟာ အဓိက အခန္းက႑ကေန ပါ၀င္ေနလို ့ပါပဲ။


Data-Shapes Package ရဲ့ UI နဲ ့ ပတ္သက္တဲ့ Node ေတြကေတာ့ ေအာက္ေဖာ္ၿပပါ ပံုအတိုင္းပဲ ၿဖစ္ပါတယ္။



အထက္ေဖာ္ၿပပါ Node ေတြထဲကမွ ပထမဆံုးေသာ Node ၿဖစ္တဲ့ UI.MultipleInputForm ဆိုတဲ့ Node အေႀကာင္းကို အရင္ဆံုး ေဆြးေႏြးတင္ၿပခ်င္ပါတယ္။
 Dynamo ရဲ့ Working Space ထဲကို အဲဒီ UI.MultipleInputForm ဆိုတဲ့ Node ေလးခ်ၿပီး သူ ့ရဲ့အေပၚ Casa ေလး တင္လိုက္မိရင္ပဲ အထက္ေဖာ္ၿပပါ ပံုအတိုင္း အသံုးၿပဳပံု Hints ေတြကို ၿမင္ေတြႏိုင္ပါတယ္။

ဒီ Node ဟာဆိုရင္ Imput (9) မ်ိဳးကို လက္ခံႏိုင္ပါတယ္။
၁။ "String" လို ့ေခၚတဲ့ Text လို key-in လုပ္ရတဲ့ Info ေတြ
၂။ "Boolean" လို ့ေခၚတဲ့ True/ False Option ေတြ
၃။ "File Path" ေရြးလို ့ရႏိုင္တဲ့ Function ေတြ
၄။ "Directory Path" ေရြးလို ့ရႏိုင္တဲ့ Function ေတြ
၅။ Revit ရဲ့ Model Element ေတြကို Select လုပ္လို ့ရတဲ့ Function ေတြ
၆။ Revit ရဲ့ Element Face ေတြကို Select လုပ္လို ့ရတဲ့ Function ေတြ
၇။ Revit ရဲ့ Element Edge ေတြကို Select လုပ္လို ့ရတဲ့ Function ေတြ

ေအာက္မွာက်န္ေနတဲ့ ၂ ခုကေတာ့ ေနာက္ထပ္  Node ေတြၿဖစ္တဲ့ UI.DropDown Data UI.ListView Data တို ့နဲ ့ တြဲဖက္ၿပီး ေရြးခ်င္တဲ့ Info ေတြကို DropDown List ကေသာ္လည္းေကာင္း၊ ListView ကေသာ္လည္းေကာင္း ေရြးခ်ယ္လို ့ရတဲ့ Function ေတြပဲ ၿဖစ္ပါတယ္။

ေအာက္က Video မွာ "String"နဲ ့ "Revit element selection" အသံုးကို တင္ၿပေဆြးေႏြးထားပါတယ္။


လာမယ့္ ပို ့စ္က်ရင္ေတာ့ "File Path"  နဲ ့ တၿခား အသံုးေတြကို ဆက္လက္တင္ၿပေပးသြားမွာၿဖစ္ပါတယ္။
တကယ္လို ့သာ Revit 2018.1 သံုးမယ္ ဆိုရင္ေတာ့ "File Path" တို ့ "Boolean" တို ့ေတြဟာ Dynamo Player ရဲ့ Built-in Function ေတြအေနနဲ ့ ပါ၀င္လာတာမို ့ UI အေနနဲ ့သီးသန္ ့ဖန္တီးေပးဖို ့ မလိုအပ္ေတာ့ပါဘူး။ ဒါေပမယ့္ တၿခား Input ေတြအတြက္ေတာ့ UI Node ေတြဟာ လိုအပ္ေနအံုးမယ္ ဆိုတာကိုလည္း သိထားေစခ်င္ပါတယ္။


Saturday, 8 July 2017

DYN06.01 : Dynamo Player ႏွင့္ မိတ္ဆက္ၿခင္း

Dynamo Player ရယ္လို ့ ေၿပာလိုက္ရင္ သာမန္ Revit User ေတြအတြက္ေတာ့ နည္းနည္း ထူးဆန္းေနႀကမွာပါပဲ။ က်ေနာ္တို ့လို Dynamo ေၿခေဆာ့လက္ေဆာ့ ရွိသူေတြအတြက္ေတာ့ သိထားသင့္ တတ္ထားသင့္တဲ့ Tool တခုလို ့ ဆိုရမွာပါ။


ပထမဆံုးအေနနဲ ့ Dynamo ဆိုတာ Visual Programming Script/ Tool ရယ္လို ့သိထားႀကၿပီးၿပီ လို ့ေမွ်ာ္လင့္ပါတယ္။
ဆိုေတာ့ကာ ... သာမန္အားၿဖင့္ ေရးၿပီးသား Dynamo Code ေတြကို အသံုးၿပဳဖို ့ ဆိုတာ End User အေနနဲ ့ အဲ့ဒီ Dynamo Code ေတြကို ဖြင့္ရမယ္။ ၿပီးရင္ လိုအပ္တဲ့ Input ေတြကို ၿဖည့္ရမယ္။ ေနာက္ဆံုးအေနနဲ ့ Run Button ကို ႏွိပ္ရမယ္။
ဆိုေတာ့ကာ ... End User ေတြဟာ Dynamo ရဲ့ အေၿခခံသေဘာတရားေတြ၊ လုပ္ေဆာင္ခ်က္ေတြကို နားလည္ေနဖို ့ လိုလာၿပန္တယ္။ ဒါ့အၿပင္ End User ေတြေႀကာင့္ ေရးၿပီးသား Dynamo Code ေတြလည္း မေတာ္တဆ ဆိုသလို ပ်က္စီးသြားတတ္တာေတြလည္း ၿဖစ္ႏိုင္ေနေသးၿပန္တယ္။ End User တိုင္းကို Dynamo မတတ္မေနရ... လို ့လုပ္ရေအာင္က်ၿပန္ေတာ့လည္း ပံုမွန္ Authoring Tool ေတြလို စိတ္၀င္စားဖို ့ ကလည္း မၿဖစ္ႏိုင္ၿပန္ဘူး။
ဒါေႀကာင့္ပဲ ေရးၿပီးသား Dynamo Code ေတြကို အားလံုးအတြက္လည္း အသံုးတည့္ေအာင္၊ ၿပီးေတာ့ User-friendly လည္း ၿဖစ္မယ့္ Tool တခုခုကို က်ေနာ္တို ့ ေမွ်ာ္လင့္ခဲ့ႀကတယ္။

အရင္ဆံုး Dyno Browser ဆိုတဲ့ Tool တခု ေပၚလာတာ ေတြ ့ရပါတယ္။ Dynamo ကို ဖြင့္စရာမလိုပဲ Dyno Browser ထဲမွာ ရွိေနတဲ့ Dynamo Code ေတြကို Double-click ႏွိပ္ၿပီး Run လိုက္ရံုပါပဲ။ Input ေတြနဲ ့ တြဲၿပီး သံုးရတဲ့ Dynamo Code ေတြ အတြက္က်ေတာ့ ထပ္ဆင့္ၿပင္ဆင္မွုေတြ လုပ္ေပးရပါတယ္။

ဒီလိုနဲ ့ Autodesk Revit 2017 ထြက္လာၿပီး သိပ္မႀကာခင္မွာပဲ Revit 2017.2 ထပ္ထြက္လာၿပီး သူနဲ ့အတူ Dynamo Player ဆိုတဲ့ Tool တခုပါ တြဲပါလာတာပါေတာ့တယ္။

Dynamo Player ဆိုတာ ဘာလဲ

Dynamo Code ေတြကို Dynamo(Visual Programming) Knowledge ရွိစရာ မလိုပဲ End User တိုင္း အလြယ္တကူ အသံုးၿပဳႏိုင္ေအာင္ စီစဥ္ဖန္းတီးေပးထားတဲ့ User-friendly Tool တခုလို ့ ဆိုႏိုင္ပါတယ္။
Dynamo Player ခ်ည္းသက္သက္ ဆိုရင္ေတာ့ Simple Code ေတြကိုသာ Run ဖို ့အဆင္ေၿပႏိုင္ၿပီး User Input ေတြ တြဲပါေနတဲ့ Code ေတြကို End User ေတြ လြယ္လြယ္ကူကူ အသံုးၿပဳႏိုင္ဖို ့ ဆိုရင္ေတာ့ Code ေရးသူေတြအေနနဲ ့ User Interface (UI) ေတြကို ဖန္တီးေပးႏိုင္တဲ့ Node Package ေတြကို အသံုးၿပဳဖို ့လိုအပ္လာပါလိမ့္မယ္။ ဒါမွလည္း End User ေတြအတြက္ User-friendly ၿဖစ္မယ့္ Code ေတြကို ဖန္တီးႏိုင္မွာ ၿဖစ္ပါတယ္။

UI ေတြကို ဖန္တီးေပးႏိုင္တဲ့ Node Package ေတြကေတာ့ ...
- Data-Shapes
- Rhythm
... စတဲ့ Package ေတြပဲ ၿဖစ္ပါတယ္။ က်ေနာ္မသိတဲ့ တၿခား Package ေတြလည္း ရွိေကာင္း ရွိႏိုင္ပါလိမ့္မယ္။

လာမယ့္ Post က်ရင္ေတာ့ Data-Shapes နဲ ့ Rhythm Package ေတြထဲက Node ေတြရဲ့ အသံုးၿပဳပံုကို တင္ၿပေဆြးေႏြးသြားဖို ့ရည္ရြယ္ထားပါတယ္။

Monday, 26 June 2017

DYN05.03 : Dynamo Code မ်ားႏွင့္ ကခုန္ၿခင္း - အပိုင္း(၃)

သူ...
သူဟာ
က်ေနာ္တို ့ဘ၀ထဲကို အလင္းတန္းေတြ သယ္ေဆာင္လာတယ္ပဲ ေၿပာရမလား။
က်ေနာ္တို ့ဦးေရဖ်ားထက္ အလံၿဖဴေတြ လာလာစိုက္ေနတယ္ပဲ ေၿပာရမလား။
ဘယ္လိုပဲေၿပာေၿပာ အကန္ ့အသတ္ေတြ၊ အတားအဆီးေတြကိုေတာ့ သူ ့ရဲ့ ပံ့ပိုးမွုေတြနဲ ့ တဆင့္ခ်င္း တလွမ္းခ်င္းေတာ့ ေက်ာ္ၿဖတ္ႏိုင္ခဲ့တာပဲေလ။

ႏွလံုးသားကို ညႊိဳ ့ယူ ဖမ္းစားတတ္သူေတြကေတာ့ သူ ့အကူအညီနဲ ့ပန္းပြင့္ေတြ ဖန္ဆင္းတတ္ႀကတယ္။ နတ္စီတဲ့ အိပ္မက္လွလွေတြ ဖန္တီးတတ္ႀကတယ္။ :P

သူဟာ က်ေနာ္တို ့ဘ၀ေတြအတြက္ေတာ့ တန္ခိုးရွင္တေယာက္လိုပါပဲ။
-------------------------------------------------------------------------------------

မိုးေတြတဖြဲဖြဲက်ေနတဲ့ ႀကားက အပူခ်ိန္ေတြၿမင့္မားေနစဲ စက္ရုပ္ၿမိဳ့ေတာ္ရဲ့ အလုပ္နားရက္တခုမွာေပါ့။ အိမ္ခ်င္းက တဘေလာ့သာၿခားေပမယ့္ တလတခါေတာင္မွာ မေတြ ့ၿဖစ္ႀကတဲ့ သူငယ္ခ်င္း အိမ္အလည္လာရင္း...
စကားေတြ ေဖာင္ဖြဲ ့ရင္းက ... သူ ့... အေႀကာင္းေတြဆီ ေရာက္သြားၿပီး ဒီဇာတ္လမ္းေလး စတင္ခဲ့တယ္...ဆိုပါေတာ့....။

ဒန္  ဒန္ ့ ဒန္
-----------------------------------------------------------------------------------
ဟိဟိ... ဘာမွဟုတ္ဘူး သက္လား... Dynamo Code တခုအေႀကာင္း ေၿပာမလို ့ အစပ်ိဳးတာ... :P

သူငယ္ခ်င္းက သူ ့အလုပ္ထဲက တခ်ိဳ  ့ Repetition ၿဖစ္ေနတဲ့ ကိစၥေတြ၊ Manually လုပ္ေနရတဲ့ တခ်ိဳ ့ Process ေတြအေႀကာင္း ေၿပာႀကရင္းက Sheet Number ေတြကို အလြယ္တကူ Rename/ Renumber  လုပ္ဖို ့ နည္းလမ္းရွာရင္းက ဒီ ရိုးရွင္းတဲ့ Dynamo Code ေလးကို ရွာေဖြေတြ ့ရွိခဲ့ႀကတာပါ။

 Revit မွာက Sheet Number ကို ထပ္လို ့မရတာက Software Limit တခုၿဖစ္ေနတာရယ္ေႀကာင့္ သက္ဆိုင္ရာ Authority ေတြအတြက္ ၿပင္ဆင္တဲ့ အခါ ဒီ Sheet ကိုပဲ Duplicate လုပ္ၿပီး Sheet Number ရဲ့ ေနာက္ဖက္မွာ Authority Name ကို Initial အေနနဲ ့ BCA, URA, LTA,... စသၿဖင့္ ၿဖည့္စြက္ေပးရေလ့ ရွိသတဲ့။

အတိုခ်ံဳးေၿပာရရင္ေတာ့ Sheet Number ကို XXX/XX/XXX(BCA) လို ့ေပးထားတဲ့ Sheet ေတြကိုပဲ  URA  ကို Issue လုပ္ခ်င္လာတဲ့အခါ Sheet Number တခုခ်င္းစီကို သြားၿပီး Rename လုပ္ေနရတာကို လြယ္ကူၿမန္ဆန္တဲ့ နည္းလမ္းရွာရင္းက ဒီ Dynamo Code ေလး ေရးၿဖစ္ခဲ့တယ္ ဆိုပါေတာ့။










ဒီ Code ရဲ့ ရည္ရြယ္ခ်က္ကေတာ့ ဖြင့္ထားတဲ့ Revit ဖိုင္ရဲ့ Sheet ေတြရဲ့ Sheet Number ေတြမွာ ပါ၀င္ေနတဲ့ Authority ရဲ့ Initial ေတြကို ကိုယ္ အစားထိုးခ်င္တဲ့ Authority ရဲ့ Initial ေတြနဲ ့ အစားထိုး Rename လုပ္ေပးတာပါပဲ။

Monday, 1 May 2017

DYN05.02 : Dynamo Code မ်ားႏွင့္ ကခုန္ၿခင္း - အပိုင္း(၂)

မဂၤလာပါ။

ၿပီးခဲ့တဲ့ Post မွာတုန္းက Revit ထဲမွာ ဖန္တီးထားတဲ့ Element ေတြရဲ့ Information ေတြကို Dynamo မွာ Extraction လုပ္ပံု၊ ၿပီးေတာ့ MS Excel ဆီ Data Exchange လုပ္ပံုေတြကို တင္ၿပခဲ့ၿပီး ၿဖစ္ပါတယ္။

ဒီ Post မွာေတာ့ Dynamo ကို အသံုးၿပဳၿပီး MS Excel ဆီက Information ေတြကို Revit ရဲ့ Element ေတြနဲ ့ ခ်ိတ္ဆက္ အလုပ္လုပ္ပံုကို တင္ၿပေဆြးေႏြးသြားမွာ ၿဖစ္ပါတယ္။

ပထမ Video မွာေတာ့  အရင္ဆံုး MS Excel ထဲမွာ ဖန္တီးထားတဲ့ Room တခုရဲ့ Information ေတြကို Dynamo မွာ Extract လုပ္ပံုအဆင့္ဆင့္ကို တင္ၿပေဆြးေႏြးထားပါတယ္။ ၿပီးေတာ့မွ Revit ထဲက Room ရဲ့ Parameter ေတြနဲ ့ ခ်ိတ္ဆက္ၿပီး Room Schedule ကို Update လုပ္ပံုကို တင္ၿပေဆြးေႏြးထားပါတယ္။ ဒီ Process ရဲ့ အားနဲခ်က္ကေတာ့ Revit ထဲက Element ေတြရဲ့ Parameter နဲ ့MS Excel ထဲမွာ ဖန္တီးထားတဲ့ Information ေတြအႀကားမွာ မွန္မွန္ကန္ကန္ ခ်ိတ္ဆက္ႏိုင္တဲ့ Link တခု လြတ္ေနတာပါပဲ။ MS Excel ထဲမွာ Information အမ်ိဳးအစားတခုအေပၚ အေၿခခံၿပီး Sorting လုပ္လိုက္တဲ့အခါမွာ Revit ရဲ့ Parameter ေတြဟာ ကေမာက္ကမေတြ ၿဖစ္သြားပါမွာ ၿဖစ္ပါတယ္။

ဒီ Process ကို သံုးမယ္ဆိုရင္ အရင္ဆံုး Information ကို Revit ကေနပဲ စၿပီး (Write to Excel) ထုတ္သင့္ပါတယ္။ အဲ့ဒီလို ထုတ္တဲ့ အခါမွာလည္း Element ID ကိုပါ ထည့္ေပးလိုက္ဖို ့ လိုအပ္ပါမယ္။ အဲဒီ Revit ကေန ထုတ္လိုက္တဲ့ Information ေတြကို MS Excel မွာ ဖြင့္ႀကည့္တဲ့ အခါမွာ Information ေတြ  Element ID ရဲ့ Value အလိုက္ စီေပးထားတာကို ၿမင္ေတြ ့ႀကရမွာပါ။ 

MS Excel ထဲမွာ လိုအပ္ခ်က္ေတြ Fill in လုပ္ၿပီး Revit ဆီ ၿပန္မပို ့ခင္ စစ္ေဆးရမွာက Element ID ေတြကို Smallest to Largest အတိုင္း Sorting ၿပန္လုပ္ေပးဖို ့ပါပဲ။ ၿပီးေတာ့ MS Excel ရဲ့ Row ေတြဟာ Information ေတြ တခုနဲ ့တခုအႀကားမွာ Empty Row ေတြရွိေနလို ့မရပါဘူး။



ဒါေႀကာင့္ပဲ ဒုတိယ  Video ကို ဖန္တီးလိုက္ရပါတယ္။

ဒီ Video မွာေတာ့ Bakery Package ထဲက Search One List Based on Second List and Get Values ဆိုတဲ့ Node ကို ထည့္သြင္း အသံုးၿပဳထားပါတယ္။
 ဒီ Node မွာ Input (၄) ခု ပါ၀င္ေနၿပီး ပထမ တခုၿဖစ္တဲ့ listOfValuesToFind ကေတာ့ Revit Element ေတြထဲက ကိုယ္ Handle လုပ္ခ်င္တဲ့ Parameter ေတြရဲ့ Value ေတြကို ခ်ိတ္ဆက္ဖို ့ပါ။

ဒုတိယတခုၿဖစ္တဲ့ listToSearchForValues ဆိုတာကေတာ့  ပထမ Input Value ေတြနဲ ့ တူညီတဲ့ Information ေတြကိုရွာဖို ့အတြက္ MS Excel ထဲက Revit Handle လုပ္မဲ့ Parameter ေတြနဲ ့အမ်ိဳးတူတဲ့ List ကို ခ်ိတ္ဆက္ဖို ့ပါ။

ေနာက္ဆံုးတခုၿဖစ္တဲ့ listToGetValuesFrom ဆိုတာကေတာ့ ပထမ Input Value ေတြနဲ ့ဒုတိယ Input Value ေတြ တူညီတယ္ ဆိုရင္ Follow up လုပ္ခိုင္းရမယ့္ MS Excel ထဲက Information List တခုကို ခ်ိတ္ဆက္ဖို ့ပါ။

တတိယတခု အတြက္ကေတာ့ String Input အေနနဲ ့ Place Null လို ့ ရိုက္ၿပီး ခ်ိတ္ဆက္ေပးရံုပါပဲ။ အေႀကာင္းကေတာ့ ပထမ Input Value ေတြနဲ ့ တူညီတဲ့ Information ေတြကိုရွာမေတြ ့တဲ့အခါ Error/ Warning မတက္ေအာင္ ကာထားတဲ့ သေဘာပါပဲ။ (ဥပမာ Empty Row ေတြလိုမ်ိဳးေတြေတြ ့တဲ့အခါမ်ိဳးေပါ့။)

ဒီ ဒုတိယ  Video ထဲက Code ကို အသံုးၿပဳမယ္ ဆိုရင္ေတာ့ Excel မွာ Table ေတြကို စိတ္တိုင္းက် လြတ္လပ္စြာ ေရးဆြဲႏိုင္ပါတယ္။ Exchange လုပ္ခ်င္တဲ့ အခါက်မွသာ Revit ရဲ့ Handle လုပ္ခ်င္တဲ့ Parameter ေတြအေပၚ အေၿခၿပဳၿပီး Excel ထဲက Information ေတြကို  Extract လုပ္ႏိုင္ပါေႀကာင္း....


ေအာက္က Link (၂)ခုကေနလည္း ေဒါင္းယူႏိုင္ႀကပါတယ္။
http://www.mediafire.com/file/ynee2vcxq1nd2bp/ExcelVsDynVsRevit001.wmv
http://www.mediafire.com/file/j6fxn611f3j181x/ExcelVsDynVsRevit002.wmv

Sunday, 9 April 2017

DYN05.01 : Dynamo Code မ်ားႏွင့္ ကခုန္ၿခင္း - အပိုင္း(၁)

မဂၤလာပါ ပရိတ္သတ္ႀကီးေရ...

ဒီ Post ကေနစတင္ၿပီး Dynamo Code ေတြကို Autodesk Revit 2016 နဲ ့တြဲဖက္ၿပီး အသံုးၿပဳပံုေတြကို က်ေနာ္နဲ ့အတူ ေလ့လာသြားႀကရမွာ ၿဖစ္ပါတယ္။ ဘာေႀကာင့္ Autodesk Revit 2016 ကို အသံုးၿပဳရသလဲ ဆိုေတာ့ Dynamo 1.0.0 နဲ ့ အထက္ ေတြဟာ Autodesk Revit 2016 မွာပဲ အဆင္ေၿပေၿပ Run ႏိုင္တာေႀကာင့္ပါပဲ။

ဒါ့အၿပင္ Dynamo ထဲမွာ ထပ္ဆင့္ ထည့္သြင္းအသံုးၿပဳႀကရတဲ့ Developer ေတြဖန္တီးေပးထားႀကတဲ့ အဆင့္ၿမင့္ လြယ္ကူတဲ့ Code Package ေတြဟာဆိုရင္လည္း Dynamo 1.0.0 နဲ ့ သူ ့ထက္ ၿမင့္တဲ့ version ေတြမွာသာ အလုပ္လုပ္ေလ့ရွိတဲ့ သေဘာေတြကလည္း  Autodesk Revit 2016 ေလာက္ကို အသံုးၿပဳဖို ့ တိုက္တြန္းေနၿပန္ပါတယ္။ အခုေလာေလာဆယ္ (Apr 2017 အထိ) Dynamo 1.2.1 ဟာ Update အၿဖစ္ဆံုး version ၿဖစ္ၿပီး အနိမ့္ဆံုး Autodesk Revit 2016 နဲ ့မွ အဆင္ေၿပမွာ ၿဖစ္ပါတယ္။

ဒီ Post ကေနစလို ့ Autodesk Revit 2016 နဲ ့အတူ Dynamo 1.2.1 ကို တြဲဖက္အသံုးၿပဳၿပီး တင္ၿပေဆြးေႏြးသြားဖို ့ စီစဥ္ထားပါတယ္။

Dynamo ရဲ့ Latest Version ေတြကို http://dynamobim.org/download/ ေအာက္ကေန တိုက္ရိုက္ ရယူႏိုင္ပါတယ္။

 Dynamo ရဲ့ User Interface နဲ ့အတူ Select Faces, Select Edges နဲ Select Model Elements အသံုးၿပဳပံုေတြကို RevitVsDynamo_001 မွာ ေဆြးေႏြးတင္ၿပထားပါတယ္။
http://www.mediafire.com/file/lq5w3ju8iikfubm/RevitVsDynamo_001.wmv


Category အလိုက္ Revit မွာ ဖန္တီးထားတဲ့ Element ေတြရဲ့ Information ေတြ Extract လုပ္ပံု၊ List  လုပ္ပံု ေတြကို RevitVsDynamo_002 မွာ ေဆြးေႏြးတင္ၿပထားပါတယ္။
http://www.mediafire.com/file/mvpwbtbywup1r42/RevitVsDynamo_002.wmv

 List  လုပ္ထားတဲ့ Information ေတြ MS Excel ဆီ Exchange လုပ္ပံု Sorting လုပ္ပံု ေတြကို RevitVsDynamo_003 မွာ ေဆြးေႏြးတင္ၿပထားပါတယ္။
http://www.mediafire.com/file/5ox71q61pxxhd7e/RevitVsDynamo_003.wmv

အထက္ပါ ေလ့က်င့္ခန္းေတြၿပဳလုပ္ဖို ့ အဓိကလိုအပ္ခ်က္ကေတာ့
  • Autodesk Revit 2016
  • Dynamo 1.2.1
  • Clockwork ( Additional Package) ... တို ့ပဲၿဖစ္ပါတယ္။
လာမယ့္  Post က်ရင္ေတာ့ Information ေတြကို Revit <=> Dynamo <=> MS Excel အႀကား အၿပန္အလွန္ Exchange လုပ္ပံုေတြကို တင္ၿပေဆြးေႏြးသြားဖို ့ စီစဥ္ထားပါတယ္။

Wednesday, 22 March 2017

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

မဂၤလာပါ။

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

List ဆိုတာ Information ေတြကို သက္ဆိုင္ရာအစုအဖြဲ ့အလိုက္ အစီအစဥ္က်နေအာင္ စီစဥ္ေပးတဲ့ Node လို ့ ဆိုႏိုင္ပါတယ္။ Dynamo မွာ List ဆိုတဲ့ Node ေတြကို Create အားၿဖင့္ေတာ့ (၃) ခုသာေတြ ့ရမွာၿဖစ္ၿပီး၊ Action အားၿဖင့္အေၿမာက္အၿမား ၿမင္ေတြ ့ရမွာၿဖစ္ပါတယ္။ Query အားၿဖင့္ေတာ့ (၁) ခုတည္းကိုသာ ၿမင္ေတြ ့ႏိုင္ပါတယ္။ Create အေနနဲ ့သံုးလို ့ရမယ့္ List ေတြကို ေရွ  ့က Post ေတြမွာလည္း အသံုးၿပဳၿပခဲ့ၿပီးပါၿပီ။
List.Create မွာ Input အေနနဲ ့ List အစုအဖြဲ ့ေတြကို တခုထက္အက ကိုယ္ႀကိဳက္သေလာက္ ဖန္တီးႏိုင္ပါတယ္။



အထက္ေဖာ္ၿပပါ ပံုကို ႀကည့္မယ္ ဆိုရင္ Construction Material စာရင္းတခုကို ေတြ ့ၿမင္ႏိုင္မွာၿဖစ္ပါတယ္။ အဲ့ဒီ အစုအဖြဲ ့တခုစီ ၿဖစ္ေနတဲ့ Information သူ ့အစုနဲ ့သူ စာရင္းၿပဳစုႏိုင္ဖို ့အတြက္ List.Create ကို အသံုးၿပဳႀကရပါမယ္။ List ေတြကို (0) ကေန စတင္ေရတြက္ရတာကိုလည္း သတိၿပဳမိဖို ့လိုအပ္ပါတယ္။

အခုဆိုရင္ေတာ့ ပထမအဆင့္ အေနနဲ ့ List ေတြကို သူ ့အစုနဲ ့သူ စာရင္းၿပဳစုၿပီးပါၿပီ။ သူ စာရင္းၿပဳစုပံုက Information ရဲ့ Source အလိုက္ ၿဖစ္ေနတာမို ့Information ေတြဟာ သူ ့List တခုစီနဲ ့သူ သီးသီးၿခားၿခားႀကီး ၿဖစ္ေနပါတယ္။ တကယ္တမ္းၿဖစ္ခ်င္တာက
  • 1, Cement, 10, bag
  • 2, Sand, 200, cuft
  • 3, Gravel, 400, cuft
  • 4, Rebar, 550, kg
  • 5, Formwork, 350, sqft
အဲဒီလို ၿဖစ္ဖို ့ရာ List ရဲ့ Action ေအာက္က List.Transpose ကို အသံုးၿပဳရပါမယ္။
လက္ရွိရထားတဲ့ List ကိုသာ Excel ကို Export လုပ္မယ္ ဆိုရင္ ေအာက္ေဖာ္ၿပပါပံုအတိုင္း ၿမင္ေတြ ့ ႀကရမွာပါ။
ဒီအေၿခအေနမွာ သူတို ့အတြက္ Header အေနနဲ ့ ထည့္ေပးဖို ့ လိုအပ္လာမယ္ ဆိုရင္ေတာ့ List ရဲ့ Action ေအာက္က List.AddItemToFront ကို အသံုးၿပဳရပါမယ္။
ဒါမွလည္း Excel မွာ ေအာက္ေဖာ္ၿပပါပံုအတိုင္း စနစ္တက် စာရင္းၿပဳစုႏိုင္မွာ ၿဖစ္ပါတယ္။
တကယ္လို ့ လက္ရွိ List ထဲကမွ Rebar နဲ ့ပတ္သက္တဲ့ Information ဖယ္ရွားပစ္ခ်င္တယ္ ဆိုရင္ေတာ့ List ရဲ့ Action ေအာက္က List.RemoveItemAtIndex ကို အသံုးၿပဳရပါမယ္။ သူ ့မွာ Input အေနနဲ ့ List, Indices ဆိုၿပီး ပါ၀င္ေနပါတယ္။ ကိုယ္ဖယ္ရွားခ်င္တဲ့  List ရဲ့ Index number ကို Indices နဲ ့ ခ်ိတ္ဆက္ေပးလိုက္ ရံုပါပဲ။
List ရဲ့ Action ေအာက္က တၿခားေသာ အသံုး၀င္တဲ့ Node ေတြကိုလည္း ကိုယ့္ဖာသာကိုယ္ ဆက္လက္ ေလ့လာႀကပါ...လို ့တိုက္တြန္းရင္း အေၿခခံ Geometry တည္ေဆာက္ၿခင္းဆိုတဲ့ ေဆြးေႏြးခန္းကို ဒီေနရာမွာ ခဏနားပါရေစ။
(ေရွ  ့ လာမယ့္ Post ေတြက်ေတာ့မွပဲ အလ်င္းသင့္ရင္ သင့္သလို ထူးၿခားတဲ့ List ရဲ့ Node ေတြ တင္ၿပေဆြးေႏြးသြားေပးပါ့မယ္။)

လာမယ့္  Post ေတြက စလို ့ Revit နဲ ့ တြဲဖက္အသံုးၿပဳမယ့္ Dynamo ရဲ့ Code ေတြအေႀကာင္းကို ဆက္လက္တင္ၿပ ေဆြးေႏြးသြားဖို ့ ရည္မွန္းထားပါတယ္။

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 ေတြ အလုပ္လုပ္ပံုေတြကို အက်ဥ္းခ်ံဳးၿပီး တင္ၿပေဆြးေႏြးသြားဖို ့ စီစဥ္ထားပါတယ္။

Saturday, 18 March 2017

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

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

ဒီ Post က စလို ့ 3D Geometry ဖန္တီးပံုေတြကို တင္ၿပေဆြးေႏြးသြားဖို ့ ရွိပါတယ္။ 3D Geometry ဖန္တီးပံု ဆိုေပမယ့္လည္း 3D တခု ၿဖစ္လာဖို ့ ဆိုတာ 2D Geometry နဲ ့ ေပါင္းစပ္ဖြဲ ့စည္းရတာမို ့ 2D Geometry အပိုင္းမွာ ေဆြးေႏြးၿပီးသား အပိုင္းေတြေရာ၊ မေဆြးေႏြးၿဖစ္ေသးတဲ့ အပိုင္းေတြကိုပါ အလ်င္းသင့္သလို တင္ၿပသြားဖို ့ စီစဥ္ထားပါတယ္။

(က်ေနာ္ကိုယ္တိုင္ကိုက ဒီ Programming ကို ေလ့လာေနသူတဦး အဆင့္သာ ရွိေသးတာေႀကာင္း တင္ၿပေဆြးေႏြးမွုေတြဟာ အေၿခခံမွာတင္ တ၀ဲလည္လည္လည္း ၿဖစ္ေကာင္းၿဖစ္ေနႏိုင္တာကို နားလည္ေပးႏိုင္လိမ့္မယ္လို ့ ေမွ်ာ္လင့္ပါတယ္။

လုပ္ငန္းခြင္မွာ အသံုး၀င္တဲ့ Code ေတြေရးသားပံုကိုလည္း အတတ္ႏိုင္ဆံုးနဲ ့ အၿမန္ဆံုးေဆြးေႏြး တင္ၿပခ်င္ပါတယ္။ ဒါေပမယ့္ Programming ရဲ့သေဘာအရ အေၿခခံမွ ပိုင္ႏိုင္မွု မရွိရင္ Code ေတြေရးသားႏိုင္သူ ၿဖစ္မလာပဲ Code ေတြ Copy/ Paste လုပ္သူသာ ၿဖစ္သြားႏိုင္တာမို ့အခုလို အေၿခခံ အပိုင္းေတြကို အခ်ိန္ေပးၿပီး တင္ၿပေနရၿခင္းပဲ ၿဖစ္ပါတယ္။

တဖက္ကႀကည့္ၿပန္ရင္လည္း အေၿခခံမွာတင္ တ၀ဲလည္လည္လည္း ၿဖစ္လြန္းေနၿပန္ရင္လည္း က်ေနာ္ေရာ အေပါင္းအသင္းတို ့ပါ အီလည္လည္ၿဖစ္ၿပီး ပ်င္းရိ စိတ္ပ်က္သြားမွာကိုေတာ့ စိုးရိမ္မိပါတယ္။ ဒီ 3D Geometry ဖန္တီးပံုကို အတတ္ႏိုင္ဆံုး အတိုခ်ံဳးၿပီး ထိထိေရာက္ရွိေအာင္ တင္ၿပ ေဆြးေႏြးသြားပါမယ္။

တကယ္လို ့ က်ေနာ့္တင္ၿပေဆြးေႏြးမွုမွာ မပါ၀င္လိုက္တဲ့ တခ်ိဳ ့ေသာ Node ေတြအေႀကာင္းကို သိခ်င္ရင္ Facebook ကေနၿဖစ္ေစ၊ Post တြေအာက္က Comment Box ကေနၿဖစ္ေစ ေမးၿမန္းႏိုင္ပါတယ္။
က်ေနာ္ မေၿဖႏိုင္တဲ့ ေမးခြန္းေတြ ဆိုရင္လည္း တတ္သိကၽြမ္းက်င္တဲ့ သူေတြဆီကို ေမးၿမန္းၿပီး ၿပန္လည္ေၿဖႀကားေပးပါ့မယ္။)

3D Geometry အတြက္ ပထမဆံုး အေနနဲ ့ Cuboid ေလးနဲ ့စလိုက္ႀကရေအာင္။
Library ကေန Geometry > Cuboid ကို သြားလိုက္တာနဲ ့ Create အတြက္ Node (၄)ခုရယ္၊ Query အတြက္ Node (၃)ခုရယ္ကို အရင္ဆံုး ေတြ ့ၿမင္ရမွာပါ။
အဲ့ဒီ Create အတြက္ Node (၄)ခုထဲကမွ ဒုတိယတခုၿဖစ္တဲ့ Cuboid.ByLengths (width, length, height) ဆိုတဲ့ Node နဲ ့ Cuboid တခု ဖန္တီးႀကရေအာင္။ သူ ့မွာ width, length, height ဆိုတဲ့ input (၃)ခု ပါ၀င္ေနပါမယ္။

ဘာ Value မွမေပးဘဲ အဲ့ဒီ Node နဲ ့တင္ Run လိုက္ရင္ေတာ့ width, length, height ရဲ့ Value ေတြဟာ 1 unit စီ ရွိေနၿပီး သူ ့ရဲ့ Centroid ဟာ (0,0,0) မွာ Default အေနနဲ ့ၿမင္ေတြ ့ႀကရမွာပါ။
ဒီေနရာမွာ ေမးစရာ ရွိလာတာက ဘယ္လိုအေၿခအေနမ်ိဳးမွာ က်န္တဲ့ Node ေတြကို သံုးရမလဲ ဆိုတာပါပဲ။
တတိယ Node ၿဖစ္တဲ့ Cuboid.ByLengths (origin, width, length, height) မွာ ဆိုရင္ေတာ့ origin ဆိုတဲ့ input (၁)ခု ပိုပါလာတာကို ေတြ ့ရမွာပါ။ width, length, height တို ့ရဲ့ တန္ဖိုး အၿပင္ အဲ့ဒီ Cuboid ရဲ့ Centroid (or) Origin တန္ဖိုးကိုပါ ေပးလို ့ရေနပါၿပီ။
 
ေနာက္ဆံုး Node ၿဖစ္တဲ့ Cuboid.ByLengths (cs, width, length, height) မွာ ဆိုရင္ေတာ့ Cuboid ရဲ့ Centroid အတြက္ Coordinate System ကိုပါ ေပးလို ့ရတဲ့ အေၿခအေနမ်ိဳး ၿဖစ္ေနပါၿပီ။

ဘယ္အခ်ိန္မွာ Origin တန္ဖိုး သတ္မွတ္ဖို ့လိုမယ္၊ ဘယ္အခ်ိန္မွာ Coordinate System သတ္မွတ္ဖို ့လိုမယ္ ဆိုတာကေတာ့ ကိုယ္ဖန္တီးခ်င္တဲ့ Code ရဲ့ လိုအပ္ခ်က္ အေပၚမွာပဲ မူတည္ေနမွာ ၿဖစ္ပါတယ္။ အသံုး၀င္တဲ့ Node ေတြ အေၿမာက္အၿမား ေပးထားတဲ့ ႀကားကေနမွ ကိုယ္ဖန္တီးခ်င္တဲ့ Code ရဲ့ လိုအပ္ခ်က္ေတြကို ၿဖည့္စြက္ႏိုင္ဖို ့ ဆိုတာကေတာ့ ရွာေဖြစမ္းသပ္ႏိုင္မွုေတြ၊ ေလ့လာစူးစမ္းလိုမွုေတြ အေပၚမွာ အမ်ားႀကီး မူတည္ေနပါတယ္။

လာမယ့္ Post မွာေတာ့ Solid Form ေတြ ဖန္တီးပံုကို ဆက္လက္ တင္ၿပေဆြးေႏြးသြားဖို ့ရွိပါတယ္။ Solid Form ဆိုေပမယ့္လည္း သူ ့ရဲ့ ၿဖစ္တည္မွုအတြက္ လိုအပ္ေနမယ့္ အေထာက္အပံ့ေတြ ၿဖစ္ႀကတဲ့ Create, Action, Query ဆိုတဲ့ Node အမ်ိဳးအစားေတြထဲက သင့္ေတာ္ရာ Node ေတြကို အသံုးၿပဳတင္ၿပေဆြးေႏြးသြားမွာမို ့ ေစာင့္ေမွ်ာ္အားေပးႀကပါအံုး...လို ့။

Saturday, 11 March 2017

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

မဂၤလာပါ။

ဒီ Post မွာေတာ့ Surface.ByPatch ဆိုတဲ့ Node အသံုးကို Code Block နဲ ့တြဲဖက္ၿပီး တင္ၿပေဆြးေႏြးသြားမွာ ၿဖစ္ပါတယ္။ ဒါမွလည္း Code Block ထဲမွာ Script ေရးသားပံုေတြကိုပါ ရင္းႏွီးသြား၊ အေလ့အက်င့္ ရသြားမွာ ၿဖစ္ပါတယ္။

Surface.ByPatch မွာ input အေနနဲ ့ closedCurve တခုနည္း ပါ၀င္တာကို ေတြ ့ၿမင္ရမွာပါ။
  • Surface.ByPatch တခု ဖန္တီးဖို ့ရာ closedCurve တခုလိုအပ္ပါမယ္။
  •  closedCurve အတြက္ Circle တခု ဖန္တီးဖို ့လိုအပ္ပါမယ္။ အဲ့ဒီအတြက္ Circle.ByCenterPointRadius ကို အသံုးၿပဳမွာ ၿဖစ္ပါတယ္။
  • Circle.ByCenterPointRadius ကို အသံုးၿပဳမယ္ ဆိုရင္ Center Point နဲ ့Radius ေတြလိုအပ္လာပါလိမ့္မယ္။
  • အဲ့ဒီအတြက္  Circle.ByCenterPointRadius (CenterPoint , Radius); ဆိုၿပီး Code Block ထဲမွာ စတင္ေရးသားရမွာ ၿဖစ္ပါတယ္။
  • Center Point အတြက္ Point.ByCoordinates နဲ ့ Radius အတြက္ Number ေတြ လိုအပ္လာပါမယ္။
  • အဲ့ဒီအတြက္ Code Block ထဲက CenterPoint ေနရာမွာ Point.ByCoordinates (0,0,0) နဲ ့အစား ထိုးေပးရပါမယ္။ Radius ေနရာမွာေတာ့ လိုခ်င္တဲ့ Radius ရဲ့ တန္ဖိုးကို အစား ထိုးေပးရမွာ ၿဖစ္ပါတယ္။
  • အားလံုးကို ေပါင္းစည္းလိုက္တဲ့အခါ ...  Circle.ByCenterPointRadius(Point.ByCoordinates(0,0,0),6); ဆိုတဲ့ closedCurve တခုကို ဖန္တီးတဲ့ Node တခု ဖန္တီးၿပီးသား ၿဖစ္ေနတာကို ေတြ ့ၿမင္ႀကရမွာပါ။
ဒီ Node ထဲမွာပဲ Curve.Patch ကိုထည့္သြင္းခ်င္ရင္ေတာ့ Script ကို ေအာက္ေဖာ္ၿပပါ ပံုအတိုင္း ၿဖည့္စြက္ ေရးသားေပးႏိုင္ပါတယ္။
(Surface.ByPatch အစား Curve.Patch ရ့ဲ Node ၿဖစ္တဲ့ .Patch() ကို ထည့္သြင္းအသံုးၿပဳရမွာ ၿဖစ္ပါတယ္။)
လာမယ့္ Post မွာေတာ့ Solid Geometry ေတြ ဖန္တီးပံုကို ဆက္လက္ တင္ၿပေဆြးေႏြးသြားဖို ့ စီစဥ္ထားပါတယ္။