วันอาทิตย์ที่ 20 พฤษภาคม พ.ศ. 2555

ขึ้นรูปสี่เหลี่ยมใน Sketchup ด้วย Ruby C

เขียนโปรแกรมบน C/C++ กับ Ruby Sketchup ได้ แล้ว ที่นี้ ก็มาเขียน Object ใน Sketchup กัน จะได้
เริ่มทำ Application บน Sketchup ได้

การ Interface กับ Sketchup ด้วย Ruby โดยปรกติจะผ่าน Class Sketchup ข้อดีของโปรแกรม Ruby คือ 
การคำนวนคำสั่ง ไม่จำเป็นต้อง สร้าง Interface ใหม่ใช้ String ในการติดต่อได้เลย โดยจะทำงาน เหมือน
Command Line ของ Ruby

คำสั่ง rb_eval_string_protect จะเป็นคำสั่งในการติดต่อกับ Ruby ใน Sketchup

bool EvaluateRubyExpression(LPCTSTR expr, VALUE* pResult)
{
    if( pResult ) *pResult = Qnil;
    int state = 0;
    VALUE val = rb_eval_string_protect(CT2A(expr), &state);
    if( 0 == state && pResult )
    {
        *pResult = val;
    }

    return (state == 0);
}

ทีนี้ลองเขียน สีเหลี่ยม ขนาด 100x100 ที่ตำแหน่ง x=0,y=0 ดู

void doRectan()
{
VALUE self,name;

   // make a face
    VALUE p1 = EvaluateRubyExpression(_T("p1 = Geom::Point3d.new(0,0,0)"));
    VALUE p2 = EvaluateRubyExpression(_T("p2 = Geom::Point3d.new(100,0,0)"));
    VALUE p3 = EvaluateRubyExpression(_T("p3 = Geom::Point3d.new(100,100,0)"));
    VALUE p4 = EvaluateRubyExpression(_T("p4 = Geom::Point3d.new(0,100,0)"));

   EvaluateRubyExpression(_T("Sketchup.active_model.entities.add_face(p1,p2,p3,p4)"));
}

ตัวแปร p1 ให้เป็น Value จะเป็นจุด และ คำสั่ง Sketchup.active_mode.entities.add_face(..)
เป็นการสร้าง Face สี่เหลี่ยมจากจุด ใน แบบที่กำลังทำงานอยู่
เพิ่มใน คำสั่งใน init_<โปรแกรม>

rb_define_module_function(g_TI_ExtTest, "rectan", (VALUE *) doRectan,0);

ดูผล

ตอนนี้ก็สามารถให้ภาษา C สร้าง Object ใน Sketchup ได้แล้ว



ไม่มีความคิดเห็น:

แสดงความคิดเห็น