Simulation of extrusion in a plane, useful for finding out under / over-extruions.
This commit is contained in:
parent
9716ee8eca
commit
ed83ff37f8
1045
xs/src/libslic3r/ExtrusionSimulator.cpp
Normal file
1045
xs/src/libslic3r/ExtrusionSimulator.cpp
Normal file
File diff suppressed because it is too large
Load Diff
60
xs/src/libslic3r/ExtrusionSimulator.hpp
Normal file
60
xs/src/libslic3r/ExtrusionSimulator.hpp
Normal file
@ -0,0 +1,60 @@
|
||||
#ifndef slic3r_ExtrusionSimulator_hpp_
|
||||
#define slic3r_ExtrusionSimulator_hpp_
|
||||
|
||||
#include "libslic3r.h"
|
||||
#include "Config.hpp"
|
||||
#include "ExtrusionEntity.hpp"
|
||||
#include "BoundingBox.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
enum ExtrusionSimulationType
|
||||
{
|
||||
ExtrusionSimulationSimple,
|
||||
ExtrusionSimulationDontSpread,
|
||||
ExtrisopmSimulationSpreadNotOverfilled,
|
||||
ExtrusionSimulationSpreadFull,
|
||||
ExtrusionSimulationSpreadExcess,
|
||||
};
|
||||
|
||||
// An opaque class, to keep the boost stuff away from the header.
|
||||
class ExtrusionSimulatorImpl;
|
||||
|
||||
class ExtrusionSimulator
|
||||
{
|
||||
public:
|
||||
ExtrusionSimulator();
|
||||
~ExtrusionSimulator();
|
||||
|
||||
// Size of the image, that will be returned by image_ptr().
|
||||
// The image may be bigger than the viewport as many graphics drivers
|
||||
// expect the size of a texture to be rounded to a power of two.
|
||||
void set_image_size(const Point &image_size);
|
||||
// Which part of the image shall be rendered to?
|
||||
void set_viewport(const BoundingBox &viewport);
|
||||
// Shift and scale of the rendered extrusion paths into the viewport.
|
||||
void set_bounding_box(const BoundingBox &bbox);
|
||||
|
||||
// Reset the extrusion accumulator to zero for all buckets.
|
||||
void reset_accumulator();
|
||||
// Paint a thick path into an extrusion buffer.
|
||||
// A simple implementation is provided now, splatting a rectangular extrusion for each linear segment.
|
||||
// In the future, spreading and suqashing of a material will be simulated.
|
||||
void extrude_to_accumulator(const ExtrusionPath &path, const Point &shift, ExtrusionSimulationType simulationType);
|
||||
// Evaluate the content of the accumulator and paint it into the viewport.
|
||||
// After this call the image_ptr() call will return a valid image.
|
||||
void evaluate_accumulator(ExtrusionSimulationType simulationType);
|
||||
// An RGBA image of image_size, to be loaded into a GPU texture.
|
||||
const void* image_ptr() const;
|
||||
|
||||
private:
|
||||
Point image_size;
|
||||
BoundingBox viewport;
|
||||
BoundingBox bbox;
|
||||
|
||||
ExtrusionSimulatorImpl *pimpl;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* slic3r_ExtrusionSimulator_hpp_ */
|
50
xs/xsp/ExtrusionSimulator.xsp
Normal file
50
xs/xsp/ExtrusionSimulator.xsp
Normal file
@ -0,0 +1,50 @@
|
||||
%module{Slic3r::XS};
|
||||
|
||||
%{
|
||||
#include <xsinit.h>
|
||||
#include "libslic3r/ExtrusionSimulator.hpp"
|
||||
%}
|
||||
|
||||
%name{Slic3r::ExtrusionSimulator} class ExtrusionSimulator {
|
||||
~ExtrusionSimulator();
|
||||
%name{_new} ExtrusionSimulator();
|
||||
|
||||
Clone<ExtrusionSimulator> clone()
|
||||
%code{% RETVAL = THIS; %};
|
||||
|
||||
void set_image_size(Point *image_size)
|
||||
%code{% THIS->set_image_size(*image_size); %};
|
||||
void set_viewport(BoundingBox *viewport)
|
||||
%code{% THIS->set_viewport(*viewport); %};
|
||||
void set_bounding_box(BoundingBox *bbox)
|
||||
%code{% THIS->set_bounding_box(*bbox); %};
|
||||
|
||||
void reset_accumulator();
|
||||
void extrude_to_accumulator(ExtrusionPath *path, Point *shift, ExtrusionSimulationType simulationType)
|
||||
%code{% THIS->extrude_to_accumulator(*path, *shift, simulationType); %};
|
||||
void evaluate_accumulator(ExtrusionSimulationType simulationType);
|
||||
void* image_ptr()
|
||||
%code{% RETVAL = const_cast<void*>(const_cast<Slic3r::ExtrusionSimulator*>(THIS)->image_ptr()); %};
|
||||
|
||||
%{
|
||||
|
||||
%}
|
||||
};
|
||||
|
||||
%package{Slic3r::ExtrusionSimulator};
|
||||
%{
|
||||
|
||||
IV
|
||||
_constant()
|
||||
ALIAS:
|
||||
EXTRSIM_SIMPLE = ExtrusionSimulationSimple
|
||||
EXTRSIM_DONT_SPREAD = ExtrusionSimulationDontSpread
|
||||
EXTRSIM_SPREAD_NFULL = ExtrisopmSimulationSpreadNotOverfilled
|
||||
EXTRSIM_SPREAD_FULL = ExtrusionSimulationSpreadFull
|
||||
EXTRSIM_SPREAD_EXCESS = ExtrusionSimulationSpreadExcess
|
||||
PROTOTYPE:
|
||||
CODE:
|
||||
RETVAL = ix;
|
||||
OUTPUT: RETVAL
|
||||
|
||||
%}
|
Loading…
Reference in New Issue
Block a user