เป็น engine ใหม่ที่ผมกำลังพัฒนา โดยใช้แนวคิด Domain-Specific Language จากการปรึกษา AI เลยได้ยินคำว่า DSL เมื่อเริ่มทดสอบผมได้เห็นว่า DSL เป็นการขยาย Ruby ออกมา โดยฐานเดิมยังเป็น Ruby ดังนั้นจะสะดวกว่าสคริปต์อันเดิมที่ผมใช้ engine แบบ interpreter
____ ผมได้เริ่มทำการโอนคำสั่งใน สไตล์ RebarScript มาใช้งาน ดังนั้น หน้าตาคำสั่งจะคล้ายๆเดิม แต่ว่าประกาศตัวแปรได้เลย มี if มี for วนรอบให้เลย เข้าถึง inputbox และ htmldialog ได้เลย ทำให้นำมาประยุกต์ใช้ได้โดยง่าย
____ ดังนั้น ตั้งแต่ ตั้งปี 2568(คศ.2025) ก็จะทำการพัฒนาย้ายคำสั่ง เมื่อสำเร็จเต็มที่แล้วก็จะประกาศรุ่นออกมาอีกที
rebar (name , dia , shape_code, params , color )
เป็นคำสั่งสร้างเหล็กเสริม โดยมี พารามิเตอร์ดังนี้
name เป็นชื่อของเหล็กเสริม กำหนดเป็น string
dia เป็นขนาดของเหล็กเสริม กำหนดเป็น Length เช่น 12.mm
shape_code เป็นรหัสรูปทรงของเหล็กเสริม กำหนดตาม BS กำหนดเป็น string เช่น '21'
params เป็นค่าพารามิเตอร์กำหนดในรูปแบบ HASH กำหนดชื่อตามความยาวของ shape code เช่น {'A'=>100.mm , 'B'=>1.m, 'C'=>200.mm} และกำหนดตัวแปรอื่นเพิ่มเติม เช่น factor_Db และ factor_Lh
color เป็นสี่ที่กำหนดให้กับโมเดลเหล็กเสริม ถ้าเป็น 'default' จะใช้สีตามค่าที่ต้้งเอาไว้
ตัวอย่างการใช้คำสั่ง rebar
rb_TM1 = rebar 'TM1', 9.mm, '00' , {'A'=>1500.mm, 'end_hook'=>[true,true], 'factor_Db'=>4, 'factor_Lh'=>6.0} , 'default'
rb_TM1 = rebar 'TM1', 12.mm, '11' , {'A'=>200.mm, 'B'=>1500.mm, 'factor_Db'=>5} , 'default'
rebar 'Rebar99' , 16.mm , '99' , {'points' =>[[0,0,-150.mm], [0,0,0], [1000.mm,0,0], [1300.mm,0,-300.mm], [2000.mm,0,-300.mm]] }, 'maroon'
stir = rebar 'stir', 6.mm, '51' , {'A'=>150.mm, 'B'=>350.mm, 'C'=>'135' , 'factor_Db'=>4, 'factor_Lh'=>6.0} , 'default'
Trick เพื่อทำการล้าง component ของ Rebar ที่เราสร้างแล้วลบทิ้งไป