เป็นภาษาสคริปต์ที่ผมทำการออกแบบไวยากรณ์เพื่อให้ chakkree_tools ใช้ในการสร้างเหล็กเสริมให้กับ SketchUp จะเป็นตัวช่วยในการทำงานเพื่อให้ Power User สามารถกำหนดเหล็กเสริมเพิ่มเติมไปเองตามที่ต้องการ เหมาะสำหรับโครงสร้างที่มีการเสริมเหล็กที่มีความซับซ้อน ไม่เป็นรูปแบบทั่วไป(Typical) ในการสร้างส่วนนี้เพิ่มต้องใช้เวลาพัฒนารหัสคำสั่งค่อนข้างมาก แต่คิดว่าคุ้มค่าในระยะยาว การทำงานเฟสนี้จึงทำให้การออกรุ่นมีความล่าช้าออกไป และอาจจะการปรับปรุงไวยากรณ์ที่บ่อยมาก เนื่องจากอยู่ในช่วงการออกแบบไวยากรณ์ของภาษาสคริปต์
ความยืดหยุ่นของการสร้างเหล็กเสริม ต้องแลกมาด้วยสองแนวทาง
แรงงานของผู้พัฒนาในการทำ UI และเขียนรหัสโปรแกรมภายใน มันคือต้นทุนที่จะเพิ่มขึ้น
แรงงานของผู้ใช้ที่จะต้องเรียนรู้การใช้งานคำสั่ง อาจจะลำบากนิด แต่อยากปรับสะดวกและเร็ว ก็คิดว่าควรจะใช้งานในแนวทางนี้ไปก่อนจะได้ใช้งานเร็ว
บางที มันก็เลยเหมือนกัน ข้าวราดกระเพรา "ถ้าไม่ชอบถั่วฝักยาวก็เขี่ยออก" ___ แม่ค้าขายอาหารตามสั่งได้กล่าวไว้
บทความ "การพัฒนาส่วนเสริมโปรแกรม SketchUp: RebarScript สำหรับการสร้างเหล็กเสริมคอนกรีต" ไฟล์บทความpdf-> SAUNIC_2021_paper_123_Page_783-790.pdf - Google Drive
มีความต้องการส่วนตัวของผู้พัฒนา คือ ไม่ต้องการแค่ Rebar เป็นชิ้นๆ แล้ว ตอนนี้ต้องการทั้งชิ้นส่วนบ้านเลย คาดว่าจะหาทางออกแบบโครงสร้างภาษาเพิ่มเติม ให้สร้าง ชิ้นส่วนพร้อมเหล็กเสริม Footing, Column, Beam, Slab อะไรประมาณนี้ --- 29 พย 2564
SET สำหรับ กำหนดค่าให้ตัวแปรที่ประกาศไปแล้ว โดยมากจะดึงจาก parent เช่น width , lenght เป็นต้น
VAR สำหรับ จองตัวแปร เพื่อเก็บค่าสำหรับการคำนวณ
REBAR สำหรับสร้างเหล็กเสริม ตอนนี้มี 9 แบบ คือ ShapeCode 21 และ 51 จะทยอยเพิ่มไปเรื่อยตามงานที่ให้โปรแกรมลองงานสร้างชิ้นส่วน คสล.ของงานบ้านธรรมดา ดูก่อน
TRAN สำหรับ ย้ายเหล็กเสริมเป็นระยะ [dx,dy,dz]
TranAll สำหรับ ย้ายเหล็กเสริมทั้งหมดไปเป็นระยะ [dx,dy,dz]
ROT สำหรับ การหมุนเหล็กเสริม point[x,y,z] , axis_rot [i,j,k] , angle
RotAll สำหรับ การหมุนเหล็กเสริมทั้งหมด point[x,y,z] , axis_rot [i,j,z] , angle
COPY สำหรับสำเนาเหล็กเสริมแล้วางตามจำนวนและระยะที่กำหนด
# เป็นเครื่องหมาย Remark อะไรที่อยู่ตั้งแต่เครื่องหมาย # เป็นต้นไป ตัดทิ้งไม่ตีความ เอาไว้จด หรือ ยกเลิกคำสั่ง
Layer เป็นคำสั่งที่ใช้ในการเปลี่ยนเลเยอร์ที่จะทำการสร้างเหล็กเสริม ถ้าไม่มีก็จะสร้างให้ใหม่เลย
BOX สร้าง กล่องลูกบาศก์
CYLINDER สร้างทรงกระบอก
PILE สร้างเสาเข็ม Rect, Hex, I
CheckCreator "dict_name" , "creator_name" เอาไว้ตรวจผู้สร้าง ถ้าไม่ตรงจะ break
set_rotation_same_selected ทำการปรับแก้การหมุนของ 3D ที่สร้างโดยอ้างจาก Selection
inputbox สำหรับแสดงค่า inputbox แต่ออกแบบให้ sync กับตัวแปรด้วย
set_attribute
get_attribute
get_size จะอ่านข้อมูลจากการ get_bound ของวัตถุที่เราเลือก(ทีละชิ้น) นำไปเก็บในตัวแปร xMid, yMid, zMid สำหรับจุด center และ length, width, heigth สำหรับขนาดตามขอบเขต
DumpVar จะแสดงตัวแปรทั้งหมดที่เก็บไว้ในหน่วยความจำ โดยแสดงค่าทาง Ruby Console เอาไว้ตรวจสอบชื่อตัวแปรและค่าของตัวแปร
EraseAll เมื่อทำการรันสคริปต์ คำสั่งนี้เป็นการสั่งให้ลบชื้นส่วนที่เป็น Rebar ออกจาก Group ที่เราเลือกเอาไว้
factor_Db คือ ตัวคูณของรัศมีการดัดโค้งของเหล็กเสริม โดยจะตั้งค่า default ไว้เท่ากับ 4.0
factor_Lh คือ ตัวคูณของส่วนยื่นของของอมาตรฐาน โดยจะตั้งค่า default ไว้เท่ากับ 12.0
nArc คือ จำนวนชิ้นของส่วนโค้ง โดยจะตั้งค่า default ไว้เท่ากับ 6
nCircle คือ จำนวนชิินของส่วนของวงกลมหน้าตัดเหล็กเสริม โดยจะตั้งค่า default ไว้เท่ากับ 12
delCoreLine คือ การตั้งค่าว่าจะลบเส้นแกนกระดูกสำหรับการทำ FollowMe ของเหล็กเสริม โดยจะตั้งค่า default ไว้เท่ากับ true คือลบเส้นแกนกลาง
mainGroup คือ การตั้งค่าว่าจะสร้าง Group ครอบหรือไม่
คำสั่งจะจบในบรรทัด ขึ้นบรรทัดใหม่ไม่ได้ จะตีความทีละบรรทัด บางคำสั่งอาจจะยาวนิดนึง
คำสั่ง เป็นตัวใหญ่หรือตัวเล็กไม่มีผล จะถูก upcase หมดตอนตรวจคำสั่ง เช่น Rebar กับ REBAR หรือ rebar จะตีความเหมือนกัน
ตัวแปรตัวใหญ่ตัวเล็กมีผลต่อการค้นหา เช่น Width กับ width คนละตัวกัน
ตอนประกาศตัวแปร VAR w1 = 100.mm ไม่ต้องมี '$' นำหน้า แต่ตอนใช้งานตัวแปรต้องมี $ นำหน้า เช่น VAR sp1 = $w1/2
# สร้างเหล็กเสริม chakkree RebarScript
var dia1 = 12.mm
var dia2 = 12.mm
var dia3 = 9.mm
var n1 = 5
var n2 = 5
var w1 = $length - 2*$covering
var h1 = $height - 2*$covering - $dia1
var w2 = $width - 2*$covering - $dia2
var h2 = $h1
var spacing1 = ($w2 - 3*$dia2*2) / ($n1-1)
var spacing2 = ($w1 - 3*$dia1*2) / ($n2-1)
# เหล็กทิศ X
rebar '1', $dia1 , 2_1 , [$h1 , $w1 , $h1] , Red
#tran '1' , [0 , -$w2/2+3*$dia2 , -$height+$covering ]
tran '1' , [0 , -$w2/2+3*$dia2 , -$height+$covering ]
copy '1' , $n1-1 , [ 0 , $spacing1 , 0]
# เหล็กทิศ Y
rebar '2', $dia2 , 2_1 , [$h2 , $w2 , $h2] , green
rot '2' , [0,0,0] , [0,0,1] , 90
tran '2' , [ -$w1/2+3*$dia1 , 0 , -$height+$covering+$dia1 ]
copy '2' , $n2-1 , [ $spacing2 , 0 , 0]
# เหล็กปลอก
rebar 'stir', $dia3 , 5_1 , [ $w2-2*$dia2 , $w1-2*$dia2 , 135] , gold
rot 'stir' , [0,0,0] , [0,-1,0] , 90
tran 'stir' , [ 0 , 0 , -$covering-50.mm ]
# คอนกรีต
Box 'Concrete', [450.mm,450.mm,450.mm],['concrete','Bisque',0.3]
Cylinder 'pile1' , [300.mm, -10.m] , ['concrete','Bisque',0.3]
Triangular 'concrete' , [220.mm, 3.0 , 1.5 , 400.mm] , ['concrete','Bisque',0.5]
# v0.2.15+
get_size # จะได้ตัวแปร xMid, yMid, zMid , length, width , height จากวัตถุที่เลือก
Make_Component 'Hex_Pile'
rot 'LastCopy' , [0,0,0] , [0,-1,0] , 90
# ก้อนวัตถุ
Profile 'concrete' , [ \
[0, -623.mm ,0] , [540.mm, -311.mm, 0] , [540.mm,311.mm,0], \
[0, 623.mm ,0] , [-540.mm,311.mm,0] , [-540.mm,-311.mm,0] ] , \
300.mm , ['concrete','Bisque',0.3] # v0.2.15+
# เสาเข็ม v0.2.15+
Pile 'Rect_Pile' , RECT , 180.mm , 6.m , ['concrete_pile','Gainsboro',0.5]
Pile 'Hex_Pile' , HEX, 150.mm , 6.m , ['concrete_pile','Gainsboro',0.5]
Pile 'I_Pile' , I , 18x18 , 6.m , ['concrete_pile','Gainsboro',0.5]