2014-04-29 23:04:49 +00:00
|
|
|
coordf_t T_NV
|
|
|
|
|
2014-11-22 21:20:28 +00:00
|
|
|
std::string T_STD_STRING
|
|
|
|
t_config_option_key T_STD_STRING
|
|
|
|
t_model_material_id T_STD_STRING
|
|
|
|
|
|
|
|
std::vector<std::string> T_STD_VECTOR_STD_STRING
|
|
|
|
|
|
|
|
std::vector<int> T_STD_VECTOR_INT
|
2013-11-23 20:39:05 +00:00
|
|
|
std::vector<Points::size_type> T_STD_VECTOR_INT
|
2014-11-22 21:20:28 +00:00
|
|
|
std::vector<size_t> T_STD_VECTOR_INT
|
|
|
|
|
|
|
|
std::vector<unsigned int> T_STD_VECTOR_UINT
|
|
|
|
|
|
|
|
std::vector<double> T_STD_VECTOR_DOUBLE
|
2014-04-29 23:04:49 +00:00
|
|
|
|
2014-04-27 17:18:53 +00:00
|
|
|
DynamicPrintConfig* O_OBJECT_SLIC3R
|
2014-04-29 23:04:49 +00:00
|
|
|
Ref<DynamicPrintConfig> O_OBJECT_SLIC3R_T
|
2017-10-17 17:19:41 +00:00
|
|
|
Clone<DynamicPrintConfig> O_OBJECT_SLIC3R_T
|
2014-05-06 08:07:18 +00:00
|
|
|
|
2015-12-16 11:33:19 +00:00
|
|
|
StaticPrintConfig* O_OBJECT_SLIC3R
|
|
|
|
Ref<StaticPrintConfig> O_OBJECT_SLIC3R_T
|
|
|
|
|
2014-10-18 15:41:21 +00:00
|
|
|
GCodeConfig* O_OBJECT_SLIC3R
|
|
|
|
Ref<GCodeConfig> O_OBJECT_SLIC3R_T
|
|
|
|
|
2014-04-27 17:18:53 +00:00
|
|
|
PrintConfig* O_OBJECT_SLIC3R
|
2014-05-06 08:07:18 +00:00
|
|
|
Ref<PrintConfig> O_OBJECT_SLIC3R_T
|
|
|
|
|
2014-04-27 17:18:53 +00:00
|
|
|
FullPrintConfig* O_OBJECT_SLIC3R
|
2014-05-06 08:07:18 +00:00
|
|
|
Ref<FullPrintConfig> O_OBJECT_SLIC3R_T
|
|
|
|
|
2014-04-27 17:18:53 +00:00
|
|
|
TriangleMesh* O_OBJECT_SLIC3R
|
|
|
|
Ref<TriangleMesh> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<TriangleMesh> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
Point* O_OBJECT_SLIC3R
|
|
|
|
Ref<Point> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Point> O_OBJECT_SLIC3R_T
|
|
|
|
|
2014-05-06 08:07:18 +00:00
|
|
|
Point3* O_OBJECT_SLIC3R
|
|
|
|
Ref<Point3> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Point3> O_OBJECT_SLIC3R_T
|
|
|
|
|
2018-08-21 19:05:24 +00:00
|
|
|
Vec2d* O_OBJECT_SLIC3R
|
|
|
|
Ref<Vec2d> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Vec2d> O_OBJECT_SLIC3R_T
|
2014-04-27 21:49:05 +00:00
|
|
|
|
2018-08-21 15:43:05 +00:00
|
|
|
Vec3d* O_OBJECT_SLIC3R
|
|
|
|
Ref<Vec3d> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Vec3d> O_OBJECT_SLIC3R_T
|
2014-04-27 17:18:53 +00:00
|
|
|
|
|
|
|
Line* O_OBJECT_SLIC3R
|
|
|
|
Ref<Line> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Line> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
Polyline* O_OBJECT_SLIC3R
|
|
|
|
Ref<Polyline> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Polyline> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
Polygon* O_OBJECT_SLIC3R
|
|
|
|
Ref<Polygon> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Polygon> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
ExPolygon* O_OBJECT_SLIC3R
|
|
|
|
Ref<ExPolygon> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<ExPolygon> O_OBJECT_SLIC3R_T
|
|
|
|
|
2014-04-29 23:04:49 +00:00
|
|
|
Model* O_OBJECT_SLIC3R
|
|
|
|
Ref<Model> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Model> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
ModelMaterial* O_OBJECT_SLIC3R
|
|
|
|
Ref<ModelMaterial> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<ModelMaterial> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
ModelObject* O_OBJECT_SLIC3R
|
|
|
|
Ref<ModelObject> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<ModelObject> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
ModelVolume* O_OBJECT_SLIC3R
|
|
|
|
Ref<ModelVolume> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<ModelVolume> O_OBJECT_SLIC3R_T
|
|
|
|
|
|
|
|
ModelInstance* O_OBJECT_SLIC3R
|
|
|
|
Ref<ModelInstance> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<ModelInstance> O_OBJECT_SLIC3R_T
|
|
|
|
|
2014-05-06 08:07:18 +00:00
|
|
|
Print* O_OBJECT_SLIC3R
|
|
|
|
Ref<Print> O_OBJECT_SLIC3R_T
|
|
|
|
Clone<Print> O_OBJECT_SLIC3R_T
|
|
|
|
|
2015-04-16 19:22:04 +00:00
|
|
|
Axis T_UV
|
2014-05-12 19:49:17 +00:00
|
|
|
ExtrusionLoopRole T_UV
|
2013-07-15 10:14:22 +00:00
|
|
|
ExtrusionRole T_UV
|
|
|
|
SurfaceType T_UV
|
2013-07-15 21:12:13 +00:00
|
|
|
|
2013-09-09 20:27:58 +00:00
|
|
|
# we return these types whenever we want the items to be cloned
|
2013-08-26 22:52:20 +00:00
|
|
|
Points T_ARRAYREF
|
2014-01-07 11:48:09 +00:00
|
|
|
Pointfs T_ARRAYREF
|
2013-07-16 18:09:53 +00:00
|
|
|
Lines T_ARRAYREF
|
|
|
|
Polygons T_ARRAYREF
|
2013-11-21 13:15:38 +00:00
|
|
|
Polylines T_ARRAYREF
|
2013-07-16 18:09:53 +00:00
|
|
|
ExPolygons T_ARRAYREF
|
2013-07-15 21:12:13 +00:00
|
|
|
|
2013-09-09 20:27:58 +00:00
|
|
|
# we return these types whenever we want the items to be returned
|
|
|
|
# by reference and marked ::Ref because they're contained in another
|
|
|
|
# Perl object
|
2014-05-06 08:07:18 +00:00
|
|
|
Polygons* T_ARRAYREF_PTR
|
|
|
|
ModelObjectPtrs* T_PTR_ARRAYREF_PTR
|
|
|
|
ModelVolumePtrs* T_PTR_ARRAYREF_PTR
|
|
|
|
ModelInstancePtrs* T_PTR_ARRAYREF_PTR
|
2013-09-02 18:22:20 +00:00
|
|
|
|
2013-09-09 20:27:58 +00:00
|
|
|
# we return these types whenever we want the items to be returned
|
|
|
|
# by reference and not marked ::Ref because they're newly allocated
|
|
|
|
# and not referenced by any Perl object
|
|
|
|
|
2014-04-29 23:04:49 +00:00
|
|
|
|
2013-07-15 21:12:13 +00:00
|
|
|
INPUT
|
|
|
|
|
2014-11-22 21:20:28 +00:00
|
|
|
T_STD_STRING
|
|
|
|
{
|
|
|
|
size_t len;
|
2016-10-24 12:08:22 +00:00
|
|
|
// const char * c = SvPV($arg, len);
|
|
|
|
// Always convert strings to UTF-8 before passing them to XS
|
|
|
|
const char * c = SvPVutf8($arg, len);
|
2014-11-22 21:20:28 +00:00
|
|
|
$var = std::string(c, len);
|
|
|
|
}
|
|
|
|
|
|
|
|
T_STD_VECTOR_STD_STRING
|
|
|
|
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
|
|
|
AV* av = (AV*)SvRV($arg);
|
|
|
|
const unsigned int alen = av_len(av)+1;
|
|
|
|
$var = std::vector<std::string>(alen);
|
|
|
|
STRLEN len;
|
|
|
|
char* tmp;
|
|
|
|
SV** elem;
|
|
|
|
for (unsigned int i = 0; i < alen; i++) {
|
|
|
|
elem = av_fetch(av, i, 0);
|
|
|
|
if (elem != NULL) {
|
|
|
|
tmp = SvPV(*elem, len);
|
|
|
|
${var}[i] = std::string(tmp, len);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
${var}[i] = std::string(\"\");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
|
|
|
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
|
|
|
\"$var\");
|
|
|
|
|
|
|
|
T_STD_VECTOR_INT
|
|
|
|
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
|
|
|
AV* av = (AV*)SvRV($arg);
|
|
|
|
const unsigned int len = av_len(av)+1;
|
|
|
|
$var = std::vector<int>(len);
|
|
|
|
SV** elem;
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
elem = av_fetch(av, i, 0);
|
|
|
|
if (elem != NULL)
|
|
|
|
${var}[i] = SvIV(*elem);
|
|
|
|
else
|
|
|
|
${var}[i] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
|
|
|
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
|
|
|
\"$var\");
|
|
|
|
|
|
|
|
T_STD_VECTOR_UINT
|
|
|
|
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
|
|
|
AV* av = (AV*)SvRV($arg);
|
|
|
|
const unsigned int len = av_len(av)+1;
|
|
|
|
$var = std::vector<unsigned int>(len);
|
|
|
|
SV** elem;
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
elem = av_fetch(av, i, 0);
|
|
|
|
if (elem != NULL)
|
|
|
|
${var}[i] = SvUV(*elem);
|
|
|
|
else
|
|
|
|
${var}[i] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
|
|
|
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
|
|
|
\"$var\");
|
|
|
|
|
|
|
|
T_STD_VECTOR_DOUBLE
|
|
|
|
if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) {
|
|
|
|
AV* av = (AV*)SvRV($arg);
|
|
|
|
const unsigned int len = av_len(av)+1;
|
|
|
|
$var = std::vector<double>(len);
|
|
|
|
SV** elem;
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
elem = av_fetch(av, i, 0);
|
|
|
|
if (elem != NULL)
|
|
|
|
${var}[i] = SvNV(*elem);
|
|
|
|
else
|
|
|
|
${var}[i] = 0.;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
|
|
|
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
|
|
|
\"$var\");
|
|
|
|
|
2014-04-27 17:18:53 +00:00
|
|
|
O_OBJECT_SLIC3R
|
|
|
|
if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) ) {
|
2015-12-02 18:57:03 +00:00
|
|
|
if ( sv_isa($arg, Slic3r::perl_class_name($var) ) || sv_isa($arg, Slic3r::perl_class_name_ref($var) )) {
|
2014-04-27 17:18:53 +00:00
|
|
|
$var = ($type)SvIV((SV*)SvRV( $arg ));
|
|
|
|
} else {
|
2015-12-02 18:57:03 +00:00
|
|
|
croak(\"$var is not of type %s (got %s)\", Slic3r::perl_class_name($var), HvNAME(SvSTASH(SvRV($arg))));
|
2014-04-27 17:18:53 +00:00
|
|
|
XSRETURN_UNDEF;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
|
|
|
|
XSRETURN_UNDEF;
|
|
|
|
}
|
|
|
|
|
2013-07-16 18:09:53 +00:00
|
|
|
T_ARRAYREF
|
|
|
|
if (SvROK($arg) && SvTYPE(SvRV($arg)) == SVt_PVAV) {
|
|
|
|
AV* av = (AV*)SvRV($arg);
|
|
|
|
const unsigned int len = av_len(av)+1;
|
2015-01-24 22:35:29 +00:00
|
|
|
$var.resize(len);
|
2013-07-16 18:09:53 +00:00
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
SV** elem = av_fetch(av, i, 0);
|
2015-12-07 23:39:54 +00:00
|
|
|
from_SV_check(*elem, &$var\[i]);
|
2013-07-16 18:09:53 +00:00
|
|
|
}
|
|
|
|
} else
|
|
|
|
Perl_croak(aTHX_ \"%s: %s is not an array reference\",
|
|
|
|
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
|
|
|
|
\"$var\");
|
|
|
|
|
2013-07-15 21:12:13 +00:00
|
|
|
OUTPUT
|
2014-11-22 21:20:28 +00:00
|
|
|
|
|
|
|
T_STD_STRING
|
|
|
|
$arg = newSVpvn_utf8( $var.c_str(), $var.length(), true );
|
|
|
|
|
|
|
|
T_STD_VECTOR_STD_STRING
|
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
2015-01-24 22:35:29 +00:00
|
|
|
sv_2mortal($arg);
|
2014-11-22 21:20:28 +00:00
|
|
|
const unsigned int len = $var.size();
|
|
|
|
if (len)
|
|
|
|
av_extend(av, len-1);
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
const std::string& str = ${var}[i];
|
|
|
|
STRLEN len = str.length();
|
|
|
|
av_store(av, i, newSVpvn_utf8(str.c_str(), len, true));
|
|
|
|
}
|
|
|
|
|
|
|
|
T_STD_VECTOR_INT
|
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
2015-01-24 22:35:29 +00:00
|
|
|
sv_2mortal($arg);
|
2014-11-22 21:20:28 +00:00
|
|
|
const unsigned int len = $var.size();
|
|
|
|
if (len)
|
|
|
|
av_extend(av, len-1);
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
av_store(av, i, newSViv(${var}[i]));
|
|
|
|
}
|
|
|
|
|
|
|
|
T_STD_VECTOR_UINT
|
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
2015-01-24 22:35:29 +00:00
|
|
|
sv_2mortal($arg);
|
2014-11-22 21:20:28 +00:00
|
|
|
const unsigned int len = $var.size();
|
|
|
|
if (len)
|
|
|
|
av_extend(av, len-1);
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
av_store(av, i, newSVuv(${var}[i]));
|
|
|
|
}
|
|
|
|
|
|
|
|
T_STD_VECTOR_DOUBLE
|
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
2015-01-24 22:35:29 +00:00
|
|
|
sv_2mortal($arg);
|
2014-11-22 21:20:28 +00:00
|
|
|
const unsigned int len = $var.size();
|
|
|
|
if (len)
|
|
|
|
av_extend(av, len-1);
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
|
|
av_store(av, i, newSVnv(${var}[i]));
|
|
|
|
}
|
|
|
|
|
2014-04-27 17:18:53 +00:00
|
|
|
# return object from pointer
|
|
|
|
O_OBJECT_SLIC3R
|
2014-05-10 22:52:08 +00:00
|
|
|
if ($var == NULL)
|
|
|
|
XSRETURN_UNDEF;
|
2015-12-02 18:57:03 +00:00
|
|
|
sv_setref_pv( $arg, Slic3r::perl_class_name($var), (void*)$var );
|
2014-04-27 17:18:53 +00:00
|
|
|
|
|
|
|
# return value handled by template class
|
|
|
|
O_OBJECT_SLIC3R_T
|
2014-05-10 22:52:08 +00:00
|
|
|
if ($var == NULL)
|
|
|
|
XSRETURN_UNDEF;
|
2014-04-27 17:18:53 +00:00
|
|
|
sv_setref_pv( $arg, $type\::CLASS(), (void*)$var );
|
|
|
|
|
2013-07-15 21:12:13 +00:00
|
|
|
|
2013-07-16 18:09:53 +00:00
|
|
|
T_ARRAYREF
|
2013-07-15 21:23:35 +00:00
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
2013-09-03 17:26:58 +00:00
|
|
|
sv_2mortal($arg);
|
2014-06-25 12:57:06 +00:00
|
|
|
const unsigned int len = $var.size();
|
|
|
|
if (len > 0) av_extend(av, len-1);
|
2013-08-08 00:10:34 +00:00
|
|
|
int i = 0;
|
2013-09-03 17:26:58 +00:00
|
|
|
for (${type}::const_iterator it = $var.begin(); it != $var.end(); ++it) {
|
2014-05-08 12:52:48 +00:00
|
|
|
av_store(av, i++, perl_to_SV_clone_ref(*it));
|
2013-08-08 00:10:34 +00:00
|
|
|
}
|
2013-09-02 18:22:20 +00:00
|
|
|
|
2013-09-09 19:43:28 +00:00
|
|
|
T_ARRAYREF_PTR
|
2013-09-02 18:22:20 +00:00
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
2013-09-03 17:26:58 +00:00
|
|
|
sv_2mortal($arg);
|
2014-06-25 12:57:06 +00:00
|
|
|
const unsigned int len = $var->size();
|
|
|
|
if (len > 0) av_extend(av, len-1);
|
2013-09-02 18:22:20 +00:00
|
|
|
int i = 0;
|
2013-09-09 19:43:28 +00:00
|
|
|
for (${ my $t = $type; $t =~ s/\*$//; \$t }::iterator it = $var->begin(); it != $var->end(); ++it) {
|
2014-05-08 12:52:48 +00:00
|
|
|
av_store(av, i++, perl_to_SV_ref(*it));
|
2013-09-09 20:27:58 +00:00
|
|
|
}
|
|
|
|
|
2014-04-29 23:04:49 +00:00
|
|
|
T_PTR_ARRAYREF_PTR
|
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
|
|
|
sv_2mortal($arg);
|
2014-06-25 12:57:06 +00:00
|
|
|
const unsigned int len = $var->size();
|
|
|
|
if (len > 0) av_extend(av, len-1);
|
2014-04-29 23:04:49 +00:00
|
|
|
int i = 0;
|
|
|
|
for (${ my $t = $type; $t =~ s/\*$//; \$t }::iterator it = $var->begin(); it != $var->end(); ++it) {
|
2014-05-08 12:52:48 +00:00
|
|
|
av_store(av, i++, perl_to_SV_ref(**it));
|
2014-04-29 23:04:49 +00:00
|
|
|
}
|
|
|
|
|
2013-09-09 20:27:58 +00:00
|
|
|
T_PTR_ARRAYREF
|
|
|
|
AV* av = newAV();
|
|
|
|
$arg = newRV_noinc((SV*)av);
|
|
|
|
sv_2mortal($arg);
|
2014-06-25 12:57:06 +00:00
|
|
|
const unsigned int len = $var.size();
|
|
|
|
if (len > 0) av_extend(av, len-1);
|
2013-09-09 20:27:58 +00:00
|
|
|
int i = 0;
|
|
|
|
for (${type}::iterator it = $var.begin(); it != $var.end(); ++it) {
|
2015-12-07 23:39:54 +00:00
|
|
|
av_store(av, i++, to_SV(*it));
|
2013-09-02 18:22:20 +00:00
|
|
|
}
|
2014-04-29 23:04:49 +00:00
|
|
|
|