Saturday, June 9, 2012

QuickSketchup Ruby : การหา BOQ จากผิวและชื่อวัสดุ

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

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


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

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

2.ไฟล์ Ruby
ไฟล์ faceboq.rb

Save ไว้ในโฟลเดอร์ C:\myruby


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

require 'sketchup'

#กำหนดตัวแปร entities เป็นวัตถุที่เลือกจาก selection
entities = Sketchup.active_model.selection
#กำหนดตัวแปร sumarea เป็นค่า Hash
#ดูเพิ่มเติมเกี่ยวกับ Ruby Hash ที่ http://ruby.about.com/od/rubyfeatures/a/hashes.htm
sumarea = Hash.new(0)
#กำหนดตัวแปร sfactor เป็นค่าแปลงหน่วยของพื้นที่จากตารางนิ้วเป็นตารางเมตร
sfactor = (1.m * 1.m)

#เริ่มต้นวน loop
entities.each{ |face|
#ถ้าตัวแปร face ไม่ใช่ Sketchup::Face ข้ามไปวัตถุชิ้นถัดไป
next unless (face.class == Sketchup::Face) #ถ้าตัวแปร face เป็น Sketchup::Face ทำบรรทัดข้างล่าง
#ถ้าตัวแปร face เป็น Sketchup::Face และมี Material เทอยู่ด้านหน้า
if face.material
#บวกค่าพื้นที่เพิ่ม สำหรับชื่อวัสดุด้านหน้า
sumarea[face.material.display_name] += (face.area / sfactor)
end
#ถ้าตัวแปร face เป็น Sketchup::Face และมี Material เทอยู่ด้านหลัง
if face.back_material
#บวกค่าพื้นที่เพิ่ม สำหรับชื่อวัสดุด้านหลัง
sumarea[face.back_material.display_name] += (face.area / sfactor)
end
} #สิ้นสุดการวน loop

#แสดงผลของตัวแปร sumarea
puts "*****BOQ Start*****"

#เริ่มต้นวน loop
#กำหนดตัวแปร name คือชื่อ display_name ของ material
#ส่วนตัวแปร area เป็นค่าพื้นที่ของ face มีหน่วยเป็นตารางเมตร
sumarea.each do|name,area|
#กำหนดตัวแปร marea มีค่าเป็นพื้นที่ให้มีค่าทศนิยม 2 ตำแหน่งจากค่าของตัวแปร area
marea = (area*100).round / 100.0
puts "#{name}, #{marea}, sq.m."
end #สิ้นสุดการวน loop

puts "*****BOQ End*****"





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

1.เปิดไฟล์ house1.skp ที่ดาวน์โหลดมาจากด้านบน

2.เลือกผิว (Face) ที่ต้องการถอดปริมาณวัสดุ

คลิกที่รูปเพื่อขยาย


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

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

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

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


คลิกที่รูปเพื่อขยาย




สรุป



ต่อไป
การส่ง BOQ ไปยัง Excel ด้วยไฟล์ CSV


Keyword:ภาษา Ruby Sketchup plugin, อบรม Sketchup