私の Ruby C 拡張機能Geom::Vector3d
から、Google SketchUp Ruby API から新しいインスタンスを作成したいと思いました: https://developers.google.com/sketchup/docs/ourdoc/vector3d
私の最初のコードはこれでした:
static inline VALUE
vector_to_sketchup( Point3d vector )
{
VALUE skp_vector, args[3];
args[0] = rb_float_new( vector.x );
args[1] = rb_float_new( vector.y );
args[2] = rb_float_new( vector.z );
skp_vector = rb_class_new_instance( 3, args, cVector3d );
}
ただし、これによりエラーが発生しました。
Error: #<ArgumentError: wrong type - expected Sketchup::Vector3d>
代わりに、ルビーnew
メソッドを呼び出す必要がありました。
static inline VALUE
vector_to_sketchup( Point3d vector )
{
VALUE skp_vector;
skp_vector = rb_funcall( cVector3d, sNew, 3,
rb_float_new( vector.x ),
rb_float_new( vector.y ),
rb_float_new( vector.z )
);
return skp_vector;
}
Geom::Point3dとSketchup::Colorで同じ問題に遭遇しました。
rb_class_new_instance
は、Ruby C で新しいインスタンスを作成するための推奨される方法ですよね? なぜ私が電話する必要があるのか 誰にも分かりましたnew
か?クラスが SketchUp でどのように定義されたかについて、奇妙な点はありますか?