Saturday, May 19, 2012

QuickSketchup Ruby : การหาชื่อวัสดุของผิวที่เลือก

โดย ประยุทธ พันธุลาภ

บทความก่อนหน้า หาพื้นที่จากผิวที่เลือกเป็นตารางเมตร


จากตัวอย่างที่แล้ว เราแปลงพื้นที่ของ face เป็น ตารางเมตร ด้วยค่าคงที่ 1.m ของ Sketchup Ruby ไปแล้ว

สิ่งที่เราอยากรู้ต่อไป คือ ชื่อวัสดุของ face


ดาวน์โหลดไฟล์ตัวอย่าง

1.ไฟล์ Sketchup
ไฟล์ area2.skp
Save ไว้ในโฟลเดอร์ C:\myruby

2.ไฟล์ Ruby
ไฟล์ area2th.rb
Save ไว้ในโฟลเดอร์ C:\myruby


โปรแกรมเริ่มใต้เส้น #ตัวอักษรสีเขียว คือ คอมเมนท์


##กำหนดให้ตัวแปร model เป็น Sketchup active model
model = Sketchup.active_model

##กำหนดให้ตัวแปร selection เป็น object ทั้งหมดที่ถูกเลือกบนหน้าจอ
##ถ้าไม่มีวัตถุถูกเลือก selection จะมีค่าเป็น nil
selection = model.selection

##กำหนดให้ตัวแปร entity เป็น วัตถุชิ้นแรกที่ถูกเลือกใน selection
## selection[0] = วัตถุชิ้นแรก selection[1] = วัตถุชิ้นที่สอง
entity = selection[0]

##ตรวจสอบว่า entity เป็นผิว (Face) หรือไม่
if entity.class == Sketchup::Face ##ถ้าentity เป็นผิว ( Face) ทำงานจนกว่าจะพบคำว่า end
##พิมพ์ข้อความด้านล่าง
puts "Face area in sq.inch is"
##พิมพ์ค่าพื้นที่ของ entity จะมีหน่วยเป็น ตารางนิ้ว
puts entity.area
##พิมพ์คำว่า Value of 1.m is เป็นค่าแปลงหน่วยจาก เมตรเป็นนิ้ว ของ Sketchup Ruby
puts "Value of 1.m is"
##พิมพ์ค่า 1.m
puts 1.m
##แปลงค่าพื้นที่ของ entity เก็บไว้ในตัวแปรชื่อ area_m จะมีหน่วยเป็น ตารางเมตร
area_m = entity.area / (1.m * 1.m)
##พิมพ์ค่าพื้นที่ของ entity จะมีหน่วยเป็น ตารางเมตร
puts "Face area in sq.m. is"
puts area_m
##ตรวจสอบว่า entity มีค่า material หรือไม่
if entity.material
##กรณีที่ entity มีค่า material
puts "************************"
##พิมพ์ค่าของ entity.material
puts "entity.material is "
puts entity.material
puts "************************"
##พิมพ์ค่าของ entity.material.name
puts entity.material.name
puts "************************"
##พิมพ์ค่าของ entity.material.display_name
puts "entity.material.display_name is"
puts entity.material.display_name
else
##กรณีไม่มีวัสดุ
puts "entity has no material it's value is"
puts entity.material
end ##if entity.material not nil

end ##จบคำสั่ง if entity.class == Sketchup::Face



ทดสอบกับโปรแกรม Sketchup

1. สร้างสี่เหลี่ยม ขนาด 1x2 ตร.ม. แล้วเทวัสดุ Stone_Flagstone_Ashlar หรือ เปิดไฟล์ area2.skp ที่ดาวน์โหลดมาจากด้านบน

2. คลิกที่ผิว


คลิกที่ภาพเพื่อขยาย



3. เปิด Ruby Console พิมพ์

load 'c:\\myruby\\area2th.rb'

แล้วกดปุ่ม Enter บนคีย์บอร์ด

ดูผลลัพธ์ใน Ruby Console

กรณีที่ face มีวัสดุ


คลิกที่ภาพเพื่อขยาย

ถ้าท่านสร้างผิวขึ้นมาใหม่ โดยที่ไม่เทวัสดุ เลือกผิวใหม่แล้ว Run

กรณีที่ face ไม่มีวัสดุ


คลิกที่ภาพเพื่อขยาย







สรุป


face จะมีคุณสมบัติเกี่ยวกับวัสดุ อยู่ 3 ประเภท คือ

1.ค่า entity.material เป็นค่าที่ Sketchup Ruby ใช้เก็บข้อมูล แต่เราอ่านไม่ออก เช่น #<Sketchup::Material:0x83cccc0>

2.ค่า entity.material.name เป็นค่าที่ Sketchup Ruby ใช้เก็บข้อมูลชื่อของวัสดุ เช่น [Stone_Flagstone_Ashlar]

3.ค่า entity.material.display_name เป็นค่าที่ Sketchup Ruby แสดงชื่อของวัสดุใน paint Bucket เช่น

คลิกที่ภาพเพื่อขยาย



ต่อไป

การหาพื้นที่หลายผิวมารวมกัน
Keyword: อบรม Sketchup