mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-22 00:01:09 -06:00
Ported the G-code generator from Perl to C++.
Removed GCode.pm Removed the Perl bindigns for AvoidCrossingPerimeters, OozePrevention, SpiralVase, Wipe Changed the std::set of extruder IDs to vector of IDs. Removed some MSVC compiler warnings, removed obnoxious compiler warnings when compiling the Perl bindings.
This commit is contained in:
parent
72ae3585e4
commit
e90279c513
52 changed files with 1362 additions and 1632 deletions
|
@ -29,9 +29,6 @@
|
|||
%code{% RETVAL = THIS->has_overhang_point(*point); %};
|
||||
ExtrusionRole role() const;
|
||||
ExtrusionLoopRole loop_role() const;
|
||||
bool is_perimeter();
|
||||
bool is_infill();
|
||||
bool is_solid_infill();
|
||||
Polygons polygons_covered_by_width();
|
||||
Polygons polygons_covered_by_spacing();
|
||||
%{
|
||||
|
|
|
@ -16,9 +16,6 @@
|
|||
void append(ExtrusionPath* path)
|
||||
%code{% THIS->paths.push_back(*path); %};
|
||||
double length();
|
||||
bool is_perimeter();
|
||||
bool is_infill();
|
||||
bool is_solid_infill();
|
||||
Polygons polygons_covered_by_width();
|
||||
Polygons polygons_covered_by_spacing();
|
||||
Clone<Polyline> polyline()
|
||||
|
|
|
@ -23,10 +23,8 @@
|
|||
void simplify(double tolerance);
|
||||
double length();
|
||||
ExtrusionRole role() const;
|
||||
bool is_perimeter();
|
||||
bool is_infill();
|
||||
bool is_solid_infill();
|
||||
bool is_bridge();
|
||||
bool is_bridge()
|
||||
%code{% RETVAL = is_bridge(THIS->role()); %};
|
||||
Polygons polygons_covered_by_width();
|
||||
Polygons polygons_covered_by_spacing();
|
||||
%{
|
||||
|
|
212
xs/xsp/GCode.xsp
212
xs/xsp/GCode.xsp
|
@ -4,176 +4,45 @@
|
|||
#include <xsinit.h>
|
||||
#include "libslic3r/GCode.hpp"
|
||||
#include "libslic3r/GCode/CoolingBuffer.hpp"
|
||||
#include "libslic3r/GCode/SpiralVase.hpp"
|
||||
%}
|
||||
|
||||
%name{Slic3r::GCode::AvoidCrossingPerimeters} class AvoidCrossingPerimeters {
|
||||
AvoidCrossingPerimeters();
|
||||
~AvoidCrossingPerimeters();
|
||||
|
||||
void init_external_mp(ExPolygons islands);
|
||||
void init_layer_mp(ExPolygons islands);
|
||||
Clone<Polyline> travel_to(GCode* gcode, Point* point)
|
||||
%code{% RETVAL = THIS->travel_to(*gcode, *point); %};
|
||||
|
||||
bool use_external_mp()
|
||||
%code{% RETVAL = THIS->use_external_mp; %};
|
||||
void set_use_external_mp(bool value)
|
||||
%code{% THIS->use_external_mp = value; %};
|
||||
|
||||
bool use_external_mp_once()
|
||||
%code{% RETVAL = THIS->use_external_mp_once; %};
|
||||
void set_use_external_mp_once(bool value)
|
||||
%code{% THIS->use_external_mp_once = value; %};
|
||||
|
||||
bool disable_once()
|
||||
%code{% RETVAL = THIS->disable_once; %};
|
||||
void set_disable_once(bool value)
|
||||
%code{% THIS->disable_once = value; %};
|
||||
};
|
||||
|
||||
%name{Slic3r::GCode::OozePrevention} class OozePrevention {
|
||||
OozePrevention();
|
||||
~OozePrevention();
|
||||
|
||||
bool enable()
|
||||
%code{% RETVAL = THIS->enable; %};
|
||||
void set_enable(bool value)
|
||||
%code{% THIS->enable = value; %};
|
||||
|
||||
Points standby_points()
|
||||
%code{% RETVAL = THIS->standby_points; %};
|
||||
void set_standby_points(Points points)
|
||||
%code{% THIS->standby_points = points; %};
|
||||
|
||||
std::string pre_toolchange(GCode* gcodegen)
|
||||
%code{% RETVAL = THIS->pre_toolchange(*gcodegen); %};
|
||||
std::string post_toolchange(GCode* gcodegen)
|
||||
%code{% RETVAL = THIS->post_toolchange(*gcodegen); %};
|
||||
};
|
||||
|
||||
%name{Slic3r::GCode::Wipe} class Wipe {
|
||||
Wipe();
|
||||
~Wipe();
|
||||
|
||||
bool has_path();
|
||||
void reset_path();
|
||||
std::string wipe(GCode* gcodegen, bool toolchange = false)
|
||||
%code{% RETVAL = THIS->wipe(*gcodegen, toolchange); %};
|
||||
|
||||
bool enable()
|
||||
%code{% RETVAL = THIS->enable; %};
|
||||
void set_enable(bool value)
|
||||
%code{% THIS->enable = value; %};
|
||||
|
||||
Ref<Polyline> path()
|
||||
%code{% RETVAL = &(THIS->path); %};
|
||||
void set_path(Polyline* value)
|
||||
%code{% THIS->path = *value; %};
|
||||
};
|
||||
|
||||
%name{Slic3r::GCode::CoolingBuffer} class CoolingBuffer {
|
||||
CoolingBuffer(GCode* gcode)
|
||||
%code{% RETVAL = new CoolingBuffer(*gcode); %};
|
||||
~CoolingBuffer();
|
||||
Ref<GCode> gcodegen();
|
||||
|
||||
std::string append(std::string gcode, std::string obj_id, size_t layer_id, float print_z);
|
||||
std::string append(std::string gcode, size_t object_id, size_t layer_id, bool support_layer);
|
||||
std::string flush();
|
||||
};
|
||||
|
||||
%name{Slic3r::GCode::SpiralVase} class SpiralVase {
|
||||
SpiralVase(StaticPrintConfig* config)
|
||||
%code{% RETVAL = new SpiralVase(*dynamic_cast<PrintConfig*>(config)); %};
|
||||
~SpiralVase();
|
||||
|
||||
bool enable()
|
||||
%code{% RETVAL = THIS->enable; %};
|
||||
void set_enable(bool enable)
|
||||
%code{% THIS->enable = enable; %};
|
||||
std::string process_layer(std::string gcode);
|
||||
};
|
||||
|
||||
%name{Slic3r::GCode} class GCode {
|
||||
GCode();
|
||||
~GCode();
|
||||
|
||||
Ref<Pointf> origin()
|
||||
%code{% RETVAL = &(THIS->origin); %};
|
||||
|
||||
Ref<StaticPrintConfig> config()
|
||||
%code{% RETVAL = &(THIS->config); %};
|
||||
|
||||
Ref<GCodeWriter> writer()
|
||||
%code{% RETVAL = &(THIS->writer); %};
|
||||
|
||||
Ref<PlaceholderParser> placeholder_parser()
|
||||
%code{% RETVAL = THIS->placeholder_parser; %};
|
||||
void set_placeholder_parser(PlaceholderParser* ptr)
|
||||
%code{% THIS->placeholder_parser = ptr; %};
|
||||
|
||||
Ref<OozePrevention> ooze_prevention()
|
||||
%code{% RETVAL = &(THIS->ooze_prevention); %};
|
||||
|
||||
Ref<Wipe> wipe()
|
||||
%code{% RETVAL = &(THIS->wipe); %};
|
||||
|
||||
Ref<AvoidCrossingPerimeters> avoid_crossing_perimeters()
|
||||
%code{% RETVAL = &(THIS->avoid_crossing_perimeters); %};
|
||||
|
||||
bool enable_loop_clipping()
|
||||
%code{% RETVAL = THIS->enable_loop_clipping; %};
|
||||
void set_enable_loop_clipping(bool value)
|
||||
%code{% THIS->enable_loop_clipping = value; %};
|
||||
|
||||
bool enable_cooling_markers()
|
||||
%code{% RETVAL = THIS->enable_cooling_markers; %};
|
||||
void set_enable_cooling_markers(bool value)
|
||||
%code{% THIS->enable_cooling_markers = value; %};
|
||||
|
||||
bool enable_extrusion_role_markers()
|
||||
%code{% RETVAL = THIS->enable_extrusion_role_markers; %};
|
||||
void set_enable_extrusion_role_markers(bool value)
|
||||
%code{% THIS->enable_extrusion_role_markers = value; %};
|
||||
std::string do_export(Print *print, const char *path)
|
||||
%code{%
|
||||
FILE *file = fopen(path, "wb");
|
||||
if (file == nullptr) {
|
||||
RETVAL = std::string("Failed to open ") + path + " for writing.";
|
||||
} else {
|
||||
THIS->do_export(file, *print);
|
||||
fclose(file);
|
||||
RETVAL = std::string();
|
||||
}
|
||||
%};
|
||||
|
||||
int layer_count()
|
||||
%code{% RETVAL = THIS->layer_count; %};
|
||||
void set_layer_count(int value)
|
||||
%code{% THIS->layer_count = value; %};
|
||||
|
||||
int layer_index()
|
||||
%code{% RETVAL = THIS->layer_index; %};
|
||||
void set_layer_index(int value)
|
||||
%code{% THIS->layer_index = value; %};
|
||||
|
||||
bool has_layer()
|
||||
%code{% RETVAL = THIS->layer != NULL; %};
|
||||
Ref<Layer> layer()
|
||||
%code{% RETVAL = THIS->layer; %};
|
||||
void set_layer(Layer* ptr)
|
||||
%code{% THIS->layer = ptr; %};
|
||||
|
||||
bool first_layer()
|
||||
%code{% RETVAL = THIS->first_layer; %};
|
||||
void set_first_layer(bool value)
|
||||
%code{% THIS->first_layer = value; %};
|
||||
|
||||
float elapsed_time()
|
||||
%code{% RETVAL = THIS->elapsed_time; %};
|
||||
void set_elapsed_time(float value)
|
||||
%code{% THIS->elapsed_time = value; %};
|
||||
|
||||
bool last_pos_defined();
|
||||
Ref<Pointf> origin()
|
||||
%code{% RETVAL = &(THIS->origin()); %};
|
||||
void set_origin(Pointf* pointf)
|
||||
%code{% THIS->set_origin(*pointf); %};
|
||||
Ref<Point> last_pos()
|
||||
%code{% RETVAL = &(THIS->last_pos()); %};
|
||||
void set_last_pos(Point* pos)
|
||||
%code{% THIS->set_last_pos(*pos); %};
|
||||
|
||||
double volumetric_speed()
|
||||
%code{% RETVAL = THIS->volumetric_speed; %};
|
||||
void set_volumetric_speed(double value)
|
||||
%code{% THIS->volumetric_speed = value; %};
|
||||
|
||||
|
||||
unsigned int layer_count() const;
|
||||
void set_layer_count(unsigned int value);
|
||||
float elapsed_time() const;
|
||||
void set_elapsed_time(float value);
|
||||
|
||||
void apply_print_config(StaticPrintConfig* print_config)
|
||||
%code{%
|
||||
if (const PrintConfig* config = dynamic_cast<PrintConfig*>(print_config)) {
|
||||
|
@ -182,40 +51,7 @@
|
|||
CONFESS("A PrintConfig object was not supplied to apply_print_config()");
|
||||
}
|
||||
%};
|
||||
void set_extruders(std::vector<unsigned int> extruder_ids);
|
||||
void set_origin(Pointf* pointf)
|
||||
%code{% THIS->set_origin(*pointf); %};
|
||||
std::string preamble();
|
||||
std::string change_layer(Layer* layer)
|
||||
%code{% RETVAL = THIS->change_layer(*layer); %};
|
||||
%name{extrude_loop} std::string extrude(ExtrusionLoop* loop, std::string description = "", double speed = -1)
|
||||
%code{% RETVAL = THIS->extrude(*loop, description, speed); %};
|
||||
%name{extrude_multipath} std::string extrude(ExtrusionMultiPath* multipath, std::string description = "", double speed = -1)
|
||||
%code{% RETVAL = THIS->extrude(*multipath, description, speed); %};
|
||||
%name{extrude_path} std::string extrude(ExtrusionPath* path, std::string description = "", double speed = -1)
|
||||
%code{% RETVAL = THIS->extrude(*path, description, speed); %};
|
||||
std::string extrude_support(ExtrusionEntityCollection *support_fills, unsigned int extruder_id);
|
||||
std::string travel_to(Point* point, ExtrusionRole role, std::string comment)
|
||||
%code{% RETVAL = THIS->travel_to(*point, role, comment); %};
|
||||
bool needs_retraction(Polyline* travel, ExtrusionRole role = erNone)
|
||||
%code{% RETVAL = THIS->needs_retraction(*travel, role); %};
|
||||
std::string retract(bool toolchange = false);
|
||||
std::string unretract();
|
||||
std::string set_extruder(unsigned int extruder_id);
|
||||
Clone<Pointf> point_to_gcode(Point* point)
|
||||
%code{% RETVAL = THIS->point_to_gcode(*point); %};
|
||||
|
||||
%{
|
||||
std::string
|
||||
GCode::extrude(entity, description, speed)
|
||||
SV* entity
|
||||
std::string description;
|
||||
double speed;
|
||||
CODE:
|
||||
ExtrusionEntity* e = (ExtrusionEntity *)SvIV((SV*)SvRV( entity ));
|
||||
RETVAL = THIS->extrude(*e, description, speed);
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
%}
|
||||
|
||||
Ref<StaticPrintConfig> config()
|
||||
%code{% RETVAL = const_cast<StaticPrintConfig*>(dynamic_cast<const StaticPrintConfig*>(&THIS->config())); %};
|
||||
};
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
%module{Slic3r::XS};
|
||||
|
||||
%{
|
||||
#include <xsinit.h>
|
||||
#include "libslic3r/GCode/PressureEqualizer.hpp"
|
||||
%}
|
||||
|
||||
%name{Slic3r::GCode::PressureEqualizer} class GCodePressureEqualizer {
|
||||
GCodePressureEqualizer(StaticPrintConfig* config)
|
||||
%code%{ RETVAL = new GCodePressureEqualizer(dynamic_cast<GCodeConfig*>(config)); %};
|
||||
~GCodePressureEqualizer();
|
||||
|
||||
void reset();
|
||||
|
||||
// Process a next batch of G-code lines. Flush the internal buffers if asked for.
|
||||
// const char* process(const char *szGCode, bool flush);
|
||||
// std::string process(const char *szGCode, bool flush)
|
||||
// %code{% const char *out = THIS->process(szGCode, flush); RETVAL = (out == NULL) ? "" : std::string(out); %};
|
||||
|
||||
%{
|
||||
|
||||
SV*
|
||||
GCodePressureEqualizer::process(const char *szGCode, bool flush)
|
||||
CODE:
|
||||
const char *out = THIS->process(szGCode, flush);
|
||||
RETVAL = newSVpv(out, THIS->get_output_buffer_length());
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
%}
|
||||
|
||||
};
|
|
@ -54,9 +54,8 @@ GCodeWriter::extruders()
|
|||
AV* av = newAV();
|
||||
av_fill(av, THIS->extruders.size()-1);
|
||||
int i = 0;
|
||||
for (std::map<unsigned int,Extruder>::iterator it = THIS->extruders.begin(); it != THIS->extruders.end(); ++it) {
|
||||
av_store(av, i++, perl_to_SV_ref(it->second));
|
||||
}
|
||||
for (const Extruder &extruder : THIS->extruders)
|
||||
av_store(av, i++, perl_to_SV_ref(const_cast<Extruder&>(extruder)));
|
||||
RETVAL = newRV_noinc((SV*)av);
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
|
|
@ -195,30 +195,6 @@ _constant()
|
|||
void set_step_started(PrintStep step)
|
||||
%code%{ THIS->state.set_started(step); %};
|
||||
|
||||
std::vector<int> object_extruders()
|
||||
%code%{
|
||||
std::set<size_t> extruders = THIS->object_extruders();
|
||||
RETVAL.reserve(extruders.size());
|
||||
for (std::set<size_t>::const_iterator e = extruders.begin(); e != extruders.end(); ++e) {
|
||||
RETVAL.push_back(*e);
|
||||
}
|
||||
%};
|
||||
std::vector<int> support_material_extruders()
|
||||
%code%{
|
||||
std::set<size_t> extruders = THIS->support_material_extruders();
|
||||
RETVAL.reserve(extruders.size());
|
||||
for (std::set<size_t>::const_iterator e = extruders.begin(); e != extruders.end(); ++e) {
|
||||
RETVAL.push_back(*e);
|
||||
}
|
||||
%};
|
||||
std::vector<int> extruders()
|
||||
%code%{
|
||||
std::set<size_t> extruders = THIS->extruders();
|
||||
RETVAL.reserve(extruders.size());
|
||||
for (std::set<size_t>::const_iterator e = extruders.begin(); e != extruders.end(); ++e) {
|
||||
RETVAL.push_back(*e);
|
||||
}
|
||||
%};
|
||||
void clear_filament_stats()
|
||||
%code%{
|
||||
THIS->filament_stats.clear();
|
||||
|
|
|
@ -185,26 +185,10 @@ PlaceholderParser* O_OBJECT_SLIC3R
|
|||
Ref<PlaceholderParser> O_OBJECT_SLIC3R_T
|
||||
Clone<PlaceholderParser> O_OBJECT_SLIC3R_T
|
||||
|
||||
AvoidCrossingPerimeters* O_OBJECT_SLIC3R
|
||||
Ref<AvoidCrossingPerimeters> O_OBJECT_SLIC3R_T
|
||||
Clone<AvoidCrossingPerimeters> O_OBJECT_SLIC3R_T
|
||||
|
||||
Wipe* O_OBJECT_SLIC3R
|
||||
Ref<Wipe> O_OBJECT_SLIC3R_T
|
||||
Clone<Wipe> O_OBJECT_SLIC3R_T
|
||||
|
||||
OozePrevention* O_OBJECT_SLIC3R
|
||||
Ref<OozePrevention> O_OBJECT_SLIC3R_T
|
||||
Clone<OozePrevention> O_OBJECT_SLIC3R_T
|
||||
|
||||
CoolingBuffer* O_OBJECT_SLIC3R
|
||||
Ref<CoolingBuffer> O_OBJECT_SLIC3R_T
|
||||
Clone<CoolingBuffer> O_OBJECT_SLIC3R_T
|
||||
|
||||
SpiralVase* O_OBJECT_SLIC3R
|
||||
Ref<SpiralVase> O_OBJECT_SLIC3R_T
|
||||
Clone<SpiralVase> O_OBJECT_SLIC3R_T
|
||||
|
||||
GCode* O_OBJECT_SLIC3R
|
||||
Ref<GCode> O_OBJECT_SLIC3R_T
|
||||
Clone<GCode> O_OBJECT_SLIC3R_T
|
||||
|
@ -221,10 +205,6 @@ GCodeWriter* O_OBJECT_SLIC3R
|
|||
Ref<GCodeWriter> O_OBJECT_SLIC3R_T
|
||||
Clone<GCodeWriter> O_OBJECT_SLIC3R_T
|
||||
|
||||
GCodePressureEqualizer* O_OBJECT_SLIC3R
|
||||
Ref<GCodePressureEqualizer> O_OBJECT_SLIC3R_T
|
||||
Clone<GCodePressureEqualizer> O_OBJECT_SLIC3R_T
|
||||
|
||||
BridgeDetector* O_OBJECT_SLIC3R
|
||||
Ref<BridgeDetector> O_OBJECT_SLIC3R_T
|
||||
Clone<BridgeDetector> O_OBJECT_SLIC3R_T
|
||||
|
|
|
@ -105,9 +105,6 @@
|
|||
%typemap{GCodeSender*};
|
||||
%typemap{Ref<GCodeSender>}{simple};
|
||||
%typemap{Clone<GCodeSender>}{simple};
|
||||
%typemap{GCodePressureEqualizer*};
|
||||
%typemap{Ref<GCodePressureEqualizer>}{simple};
|
||||
%typemap{Clone<GCodePressureEqualizer>}{simple};
|
||||
%typemap{BridgeDetector*};
|
||||
%typemap{Ref<BridgeDetector>}{simple};
|
||||
%typemap{Clone<BridgeDetector>}{simple};
|
||||
|
@ -152,18 +149,6 @@
|
|||
%typemap{Ref<PlaceholderParser>}{simple};
|
||||
%typemap{Clone<PlaceholderParser>}{simple};
|
||||
|
||||
%typemap{AvoidCrossingPerimeters*};
|
||||
%typemap{Ref<AvoidCrossingPerimeters>}{simple};
|
||||
%typemap{Clone<AvoidCrossingPerimeters>}{simple};
|
||||
|
||||
%typemap{Wipe*};
|
||||
%typemap{Ref<Wipe>}{simple};
|
||||
%typemap{Clone<Wipe>}{simple};
|
||||
|
||||
%typemap{OozePrevention*};
|
||||
%typemap{Ref<OozePrevention>}{simple};
|
||||
%typemap{Clone<OozePrevention>}{simple};
|
||||
|
||||
%typemap{CoolingBuffer*};
|
||||
%typemap{Ref<CoolingBuffer>}{simple};
|
||||
%typemap{Clone<CoolingBuffer>}{simple};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue