Ported TriangleMesh->size
This commit is contained in:
parent
9d50616c7d
commit
9402898c58
@ -42,6 +42,8 @@ void TriangleMesh::ReadFromPerl(SV* vertices, SV* facets)
|
|||||||
|
|
||||||
stl.facet_start[i] = facet;
|
stl.facet_start[i] = facet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stl_get_size(&(this->stl));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -181,3 +181,4 @@ static void stl_facet_stats(stl_file *stl, stl_facet facet, int first);
|
|||||||
static void stl_reallocate(stl_file *stl);
|
static void stl_reallocate(stl_file *stl);
|
||||||
static int stl_get_little_int(FILE *fp);
|
static int stl_get_little_int(FILE *fp);
|
||||||
static float stl_get_little_float(FILE *fp);
|
static float stl_get_little_float(FILE *fp);
|
||||||
|
extern void stl_get_size(stl_file *stl);
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include "stl.h"
|
#include "stl.h"
|
||||||
|
|
||||||
static void stl_rotate(float *x, float *y, float angle);
|
static void stl_rotate(float *x, float *y, float angle);
|
||||||
static void stl_get_size(stl_file *stl);
|
|
||||||
static float get_area(stl_facet *facet);
|
static float get_area(stl_facet *facet);
|
||||||
static float get_volume(stl_file *stl);
|
static float get_volume(stl_file *stl);
|
||||||
|
|
||||||
@ -116,6 +115,11 @@ stl_scale(stl_file *stl, float factor)
|
|||||||
stl->stats.max.y *= factor;
|
stl->stats.max.y *= factor;
|
||||||
stl->stats.max.z *= factor;
|
stl->stats.max.z *= factor;
|
||||||
|
|
||||||
|
// scale size
|
||||||
|
stl->stats.size.x *= factor;
|
||||||
|
stl->stats.size.y *= factor;
|
||||||
|
stl->stats.size.z *= factor;
|
||||||
|
|
||||||
// scale volume
|
// scale volume
|
||||||
if (stl->stats.volume > 0.0) {
|
if (stl->stats.volume > 0.0) {
|
||||||
stl->stats.volume *= (factor * factor * factor);
|
stl->stats.volume *= (factor * factor * factor);
|
||||||
@ -219,7 +223,7 @@ stl_rotate(float *x, float *y, float angle)
|
|||||||
*y = r * sin(theta + radian_angle);
|
*y = r * sin(theta + radian_angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
extern void
|
||||||
stl_get_size(stl_file *stl)
|
stl_get_size(stl_file *stl)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -250,6 +254,14 @@ stl_get_size(stl_file *stl)
|
|||||||
stl->facet_start[i].vertex[j].z);
|
stl->facet_start[i].vertex[j].z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stl->stats.size.x = stl->stats.max.x - stl->stats.min.x;
|
||||||
|
stl->stats.size.y = stl->stats.max.y - stl->stats.min.y;
|
||||||
|
stl->stats.size.z = stl->stats.max.z - stl->stats.min.z;
|
||||||
|
stl->stats.bounding_diameter = sqrt(
|
||||||
|
stl->stats.size.x * stl->stats.size.x +
|
||||||
|
stl->stats.size.y * stl->stats.size.y +
|
||||||
|
stl->stats.size.z * stl->stats.size.z
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -4,7 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
use Slic3r::XS;
|
use Slic3r::XS;
|
||||||
use Test::More tests => 8;
|
use Test::More tests => 9;
|
||||||
|
|
||||||
is Slic3r::TriangleMesh::XS::hello_world(), 'Hello world!',
|
is Slic3r::TriangleMesh::XS::hello_world(), 'Hello world!',
|
||||||
'hello world';
|
'hello world';
|
||||||
@ -37,6 +37,8 @@ my $cube = {
|
|||||||
|
|
||||||
$m->align_to_origin;
|
$m->align_to_origin;
|
||||||
is_deeply $m->vertices->[2], [0,0,0], 'align_to_origin';
|
is_deeply $m->vertices->[2], [0,0,0], 'align_to_origin';
|
||||||
|
|
||||||
|
is_deeply $m->size, [40,40,40], 'size';
|
||||||
}
|
}
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
@ -79,6 +79,18 @@ TriangleMesh::facets()
|
|||||||
OUTPUT:
|
OUTPUT:
|
||||||
RETVAL
|
RETVAL
|
||||||
|
|
||||||
|
SV*
|
||||||
|
TriangleMesh::size()
|
||||||
|
CODE:
|
||||||
|
AV* size = newAV();
|
||||||
|
av_extend(size, 2);
|
||||||
|
av_store(size, 0, newSVnv(THIS->stl.stats.size.x));
|
||||||
|
av_store(size, 1, newSVnv(THIS->stl.stats.size.y));
|
||||||
|
av_store(size, 2, newSVnv(THIS->stl.stats.size.z));
|
||||||
|
RETVAL = newRV_noinc((SV*)size);
|
||||||
|
OUTPUT:
|
||||||
|
RETVAL
|
||||||
|
|
||||||
%}
|
%}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user