New Slic3r::TriangleMesh::XS->ToPerl() method

This commit is contained in:
Alessandro Ranellucci 2013-06-24 20:11:56 +02:00
parent ecdc2f077b
commit d30b4f0310
4 changed files with 49 additions and 1 deletions

View File

@ -70,3 +70,40 @@ TriangleMesh::WriteOBJFile(char* output_file) {
stl_generate_shared_vertices(&stl);
stl_write_obj(&stl, output_file);
}
AV*
TriangleMesh::ToPerl() {
int i;
stl_generate_shared_vertices(&stl);
// vertices
AV* vertices = newAV();
av_extend(vertices, stl.stats.shared_vertices);
for (i = 0; i < stl.stats.shared_vertices; i++) {
AV* vertex = newAV();
av_store(vertices, i, newRV_noinc((SV*)vertex));
av_extend(vertex, 2);
av_store(vertex, 0, newSVnv(stl.v_shared[i].x));
av_store(vertex, 1, newSVnv(stl.v_shared[i].y));
av_store(vertex, 2, newSVnv(stl.v_shared[i].z));
}
// facets
AV* facets = newAV();
av_extend(facets, stl.stats.number_of_facets);
for (i = 0; i < stl.stats.number_of_facets; i++) {
AV* facet = newAV();
av_store(facets, i, newRV_noinc((SV*)facet));
av_extend(facet, 2);
av_store(facet, 0, newSVnv(stl.v_indices[i].vertex[0]));
av_store(facet, 1, newSVnv(stl.v_indices[i].vertex[1]));
av_store(facet, 2, newSVnv(stl.v_indices[i].vertex[2]));
}
AV* result = newAV();
av_extend(result, 1);
av_store(result, 0, newRV_noinc((SV*)vertices));
av_store(result, 1, newRV_noinc((SV*)facets));
return result;
}

View File

@ -1,5 +1,12 @@
#include <admesh/stl.h>
extern "C" {
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
}
class TriangleMesh
{
public:
@ -8,6 +15,7 @@ class TriangleMesh
void ReadSTLFile(char* input_file);
void Repair();
void WriteOBJFile(char* output_file);
AV* ToPerl();
private:
stl_file stl;
};

View File

@ -10,6 +10,7 @@
void ReadSTLFile(char* input_file);
void Repair();
void WriteOBJFile(char* output_file);
AV* ToPerl();
};
%package{Slic3r::TriangleMesh::XS};

View File

@ -1,2 +1,4 @@
%typemap{std::string};
%typemap{std::vector<unsigned int>*};
%typemap{std::vector<unsigned int>*};
%typemap{SV*};
%typemap{AV*};