Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/xs
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2018-09-25 16:33:51 +0300
committerbubnikv <bubnikv@gmail.com>2018-09-25 16:33:51 +0300
commit6260e43f6161ec6d478810b32e69f6bfa2421e69 (patch)
treedf29d8484406b845d09e149001c73f1978da99b9 /xs
parent8945763221089899dfdc397e07cb2fba9c117297 (diff)
parent51cf964b517c3f82c670e5015d7d4bb9d786432a (diff)
Merge remote-tracking branch 'origin/dev2' into dev_native
Diffstat (limited to 'xs')
-rw-r--r--xs/src/callback.cpp20
-rw-r--r--xs/src/callback.hpp1
-rw-r--r--xs/xsp/GUI_3DScene.xsp14
-rw-r--r--xs/xsp/Model.xsp54
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;
};