diff options
author | bubnikv <bubnikv@gmail.com> | 2018-09-25 16:33:51 +0300 |
---|---|---|
committer | bubnikv <bubnikv@gmail.com> | 2018-09-25 16:33:51 +0300 |
commit | 6260e43f6161ec6d478810b32e69f6bfa2421e69 (patch) | |
tree | df29d8484406b845d09e149001c73f1978da99b9 /xs | |
parent | 8945763221089899dfdc397e07cb2fba9c117297 (diff) | |
parent | 51cf964b517c3f82c670e5015d7d4bb9d786432a (diff) |
Merge remote-tracking branch 'origin/dev2' into dev_native
Diffstat (limited to 'xs')
-rw-r--r-- | xs/src/callback.cpp | 20 | ||||
-rw-r--r-- | xs/src/callback.hpp | 1 | ||||
-rw-r--r-- | xs/xsp/GUI_3DScene.xsp | 14 | ||||
-rw-r--r-- | xs/xsp/Model.xsp | 54 |
4 files changed, 65 insertions, 24 deletions
diff --git a/xs/src/callback.cpp b/xs/src/callback.cpp index 05b4f9e50..3d2a8e903 100644 --- a/xs/src/callback.cpp +++ b/xs/src/callback.cpp @@ -149,6 +149,26 @@ void PerlCallback::call(double a, double b, double c, double d) const LEAVE; } +void PerlCallback::call(double a, double b, double c, double d, double e, double f) const +{ + if (!m_callback) + return; + dSP; + ENTER; + SAVETMPS; + PUSHMARK(SP); + XPUSHs(sv_2mortal(newSVnv(a))); + XPUSHs(sv_2mortal(newSVnv(b))); + XPUSHs(sv_2mortal(newSVnv(c))); + XPUSHs(sv_2mortal(newSVnv(d))); + XPUSHs(sv_2mortal(newSVnv(e))); + XPUSHs(sv_2mortal(newSVnv(f))); + PUTBACK; + perl_call_sv(SvRV((SV*)m_callback), G_DISCARD); + FREETMPS; + LEAVE; +} + void PerlCallback::call(bool b) const { call(b ? 1 : 0); diff --git a/xs/src/callback.hpp b/xs/src/callback.hpp index 9530829f8..ee7a5eadf 100644 --- a/xs/src/callback.hpp +++ b/xs/src/callback.hpp @@ -22,6 +22,7 @@ public: void call(double a, double b) const; void call(double a, double b, double c) const; void call(double a, double b, double c, double d) const; + void call(double a, double b, double c, double d, double e, double f) const; void call(bool b) const; private: void *m_callback; diff --git a/xs/xsp/GUI_3DScene.xsp b/xs/xsp/GUI_3DScene.xsp index 0a3d11ed6..dc252d8bd 100644 --- a/xs/xsp/GUI_3DScene.xsp +++ b/xs/xsp/GUI_3DScene.xsp @@ -645,6 +645,13 @@ register_on_gizmo_scale_uniformly_callback(canvas, callback) _3DScene::register_on_gizmo_scale_uniformly_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback); void +register_on_gizmo_scale_3D_callback(canvas, callback) + SV *canvas; + SV *callback; + CODE: + _3DScene::register_on_gizmo_scale_3D_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback); + +void register_on_gizmo_rotate_callback(canvas, callback) SV *canvas; SV *callback; @@ -680,6 +687,13 @@ register_on_update_geometry_info_callback(canvas, callback) _3DScene::register_on_update_geometry_info_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback); void +register_on_update_geometry_3D_info_callback(canvas, callback) + SV *canvas; + SV *callback; + CODE: + _3DScene::register_on_update_geometry_3D_info_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback); + +void register_action_add_callback(canvas, callback) SV *canvas; SV *callback; diff --git a/xs/xsp/Model.xsp b/xs/xsp/Model.xsp index 8764b9e43..62ccf2b06 100644 --- a/xs/xsp/Model.xsp +++ b/xs/xsp/Model.xsp @@ -295,47 +295,53 @@ ModelMaterial::attributes() Ref<ModelObject> object() %code%{ RETVAL = THIS->get_object(); %}; -#if ENABLE_MODELINSTANCE_3D_ROTATION - double rotation() - %code%{ RETVAL = THIS->get_rotation(Z); %}; -#else - double rotation() - %code%{ RETVAL = THIS->rotation; %}; -#endif // ENABLE_MODELINSTANCE_3D_ROTATION - double scaling_factor() - %code%{ RETVAL = THIS->scaling_factor; %}; -#if ENABLE_MODELINSTANCE_3D_OFFSET +#if ENABLE_MODELINSTANCE_3D_FULL_TRANSFORM + Vec3d* rotation() + %code%{ RETVAL = new Vec3d(THIS->get_rotation(X), THIS->get_rotation(Y), THIS->get_rotation(Z)); %}; + + Vec3d* scaling_factor() + %code%{ RETVAL = new Vec3d(THIS->get_scaling_factor(X), THIS->get_scaling_factor(Y), THIS->get_scaling_factor(Z)); %}; + Vec2d* offset() %code%{ RETVAL = new Vec2d(THIS->get_offset(X), THIS->get_offset(Y)); %}; -#else - Ref<Vec2d> offset() - %code%{ RETVAL = &THIS->offset; %}; -#endif // ENABLE_MODELINSTANCE_3D_OFFSET - -#if ENABLE_MODELINSTANCE_3D_ROTATION + void set_rotation(double val) %code%{ THIS->set_rotation(Z, val); THIS->get_object()->invalidate_bounding_box(); %}; void set_rotations(Vec3d *rotation) %code%{ THIS->set_rotation(*rotation); THIS->get_object()->invalidate_bounding_box(); %}; -#else - void set_rotation(double val) - %code%{ THIS->rotation = val; THIS->get_object()->invalidate_bounding_box(); %}; -#endif // ENABLE_MODELINSTANCE_3D_ROTATION void set_scaling_factor(double val) - %code%{ THIS->scaling_factor = val; THIS->get_object()->invalidate_bounding_box(); %}; -#if ENABLE_MODELINSTANCE_3D_OFFSET + %code%{ THIS->set_scaling_factor(X, val); THIS->set_scaling_factor(Y, val); THIS->set_scaling_factor(Z, val); THIS->get_object()->invalidate_bounding_box(); %}; + + void set_scaling_factors(Vec3d *scale) + %code%{ THIS->set_scaling_factor(*scale); THIS->get_object()->invalidate_bounding_box(); %}; + void set_offset(Vec2d *offset) %code%{ THIS->set_offset(X, (*offset)(0)); THIS->set_offset(Y, (*offset)(1)); %}; #else + double rotation() + %code%{ RETVAL = THIS->rotation; %}; + + double scaling_factor() + %code%{ RETVAL = THIS->scaling_factor; %}; + + Ref<Vec2d> offset() + %code%{ RETVAL = &THIS->offset; %}; + + void set_rotation(double val) + %code%{ THIS->rotation = val; THIS->get_object()->invalidate_bounding_box(); %}; + + void set_scaling_factor(double val) + %code%{ THIS->scaling_factor = val; THIS->get_object()->invalidate_bounding_box(); %}; + void set_offset(Vec2d *offset) %code%{ THIS->offset = *offset; %}; -#endif // ENABLE_MODELINSTANCE_3D_OFFSET - +#endif // ENABLE_MODELINSTANCE_3D_FULL_TRANSFORM + void transform_mesh(TriangleMesh* mesh, bool dont_translate = false) const; void transform_polygon(Polygon* polygon) const; }; |