mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 09:47:58 -06:00
Disabled asserts in the release build (-DNDEBUG).
Added a safe variant of offset(const Slic3r::ExPolygon...), which offsets each loop separately. New functions "remove_sticks" to remove zero area parts of polygons. New functions "remove_small" and "remove_degenerate" for polygon clean up. Extended the C++ supports, those are not finalized yet though.
This commit is contained in:
parent
53907a9cfe
commit
f788f50b5a
16 changed files with 641 additions and 144 deletions
|
@ -12,8 +12,11 @@ class PrintObjectConfig;
|
|||
// how much we extend support around the actual contact area
|
||||
#define SUPPORT_MATERIAL_MARGIN 1.5
|
||||
|
||||
// This class manages raft and supports for a single PrintObject.
|
||||
// Instantiated by Slic3r::Print::Object->_support_material()
|
||||
class PrintSupportMaterial
|
||||
// This class is instantiated before the slicing starts as Object.pm will query
|
||||
// the parameters of the raft to determine the 1st layer height and thickness.
|
||||
class PrintObjectSupportMaterial
|
||||
{
|
||||
public:
|
||||
enum SupporLayerType {
|
||||
|
@ -113,44 +116,41 @@ public:
|
|||
typedef std::deque<MyLayer> MyLayerStorage;
|
||||
|
||||
public:
|
||||
PrintSupportMaterial(
|
||||
const PrintConfig *print_config,
|
||||
const PrintObjectConfig *object_config,
|
||||
const Flow &flow,
|
||||
const Flow &first_layer_flow,
|
||||
const Flow &interface_flow,
|
||||
bool soluble_interface) :
|
||||
m_print_config(print_config),
|
||||
m_object_config(object_config),
|
||||
m_flow(flow),
|
||||
m_first_layer_flow(first_layer_flow),
|
||||
m_interface_flow(interface_flow),
|
||||
m_soluble_interface(soluble_interface),
|
||||
m_support_layer_height_max(0.),
|
||||
m_support_interface_layer_height_max(0.)
|
||||
{}
|
||||
PrintObjectSupportMaterial(const PrintObject *object);
|
||||
|
||||
PrintSupportMaterial(
|
||||
PrintConfig *print_config,
|
||||
PrintObjectConfig *object_config,
|
||||
Flow *flow,
|
||||
Flow *first_layer_flow,
|
||||
Flow *interface_flow,
|
||||
bool soluble_interface) :
|
||||
m_print_config(print_config),
|
||||
m_object_config(object_config),
|
||||
m_flow(*flow),
|
||||
m_first_layer_flow(*first_layer_flow),
|
||||
m_interface_flow(*interface_flow),
|
||||
m_soluble_interface(soluble_interface),
|
||||
m_support_layer_height_max(0.),
|
||||
m_support_interface_layer_height_max(0.)
|
||||
{}
|
||||
// Height of the 1st layer is user configured as it is important for the print
|
||||
// to stick to he print bed.
|
||||
coordf_t first_layer_height() const { return m_object_config->first_layer_height.value; }
|
||||
|
||||
// Is raft enabled?
|
||||
bool has_raft() const { return m_has_raft; }
|
||||
// Has any support?
|
||||
bool has_support() const { return m_object_config->support_material.value; }
|
||||
|
||||
// How many raft layers are there below the 1st object layer?
|
||||
// The 1st object layer_id will be offsetted by this number.
|
||||
size_t num_raft_layers() const { return m_object_config->raft_layers.value; }
|
||||
// num_raft_layers() == num_raft_base_layers() + num_raft_interface_layers() + num_raft_contact_layers().
|
||||
size_t num_raft_base_layers() const { return m_num_base_raft_layers; }
|
||||
size_t num_raft_interface_layers() const { return m_num_interface_raft_layers; }
|
||||
size_t num_raft_contact_layers() const { return m_num_contact_raft_layers; }
|
||||
|
||||
coordf_t raft_height() const { return m_raft_height; }
|
||||
coordf_t raft_base_height() const { return m_raft_base_height; }
|
||||
coordf_t raft_interface_height() const { return m_raft_interface_height; }
|
||||
coordf_t raft_contact_height() const { return m_raft_contact_height; }
|
||||
bool raft_bridging() const { return m_raft_contact_layer_bridging; }
|
||||
|
||||
// 1st layer of the object will be printed depeding on the raft settings.
|
||||
coordf_t first_object_layer_print_z() const { return m_object_1st_layer_print_z; }
|
||||
coordf_t first_object_layer_height() const { return m_object_1st_layer_height; }
|
||||
coordf_t first_object_layer_gap() const { return m_object_1st_layer_gap; }
|
||||
bool first_object_layer_bridging() const { return m_object_1st_layer_bridging; }
|
||||
|
||||
// Generate support material for the object.
|
||||
// New support layers will be added to the object,
|
||||
// with extrusion paths and islands filled in for each support layer.
|
||||
void generate(PrintObject &object);
|
||||
void generate(PrintObject &object);
|
||||
|
||||
private:
|
||||
// Generate top contact layers supporting overhangs.
|
||||
|
@ -180,6 +180,11 @@ private:
|
|||
const MyLayersPtr &top_contacts,
|
||||
MyLayersPtr &intermediate_layers) const;
|
||||
|
||||
Polygons generate_raft_base(
|
||||
const PrintObject &object,
|
||||
const MyLayersPtr &bottom_contacts,
|
||||
MyLayersPtr &intermediate_layers) const;
|
||||
|
||||
MyLayersPtr generate_interface_layers(
|
||||
const PrintObject &object,
|
||||
const MyLayersPtr &bottom_contacts,
|
||||
|
@ -195,21 +200,59 @@ private:
|
|||
// Produce the actual G-code.
|
||||
void generate_toolpaths(
|
||||
const PrintObject &object,
|
||||
const Polygons &raft,
|
||||
const MyLayersPtr &bottom_contacts,
|
||||
const MyLayersPtr &top_contacts,
|
||||
const MyLayersPtr &intermediate_layers,
|
||||
const MyLayersPtr &interface_layers) const;
|
||||
|
||||
const PrintObject *m_object;
|
||||
const PrintConfig *m_print_config;
|
||||
const PrintObjectConfig *m_object_config;
|
||||
Flow m_flow;
|
||||
|
||||
Flow m_first_layer_flow;
|
||||
Flow m_interface_flow;
|
||||
Flow m_support_material_flow;
|
||||
Flow m_support_material_interface_flow;
|
||||
bool m_soluble_interface;
|
||||
|
||||
Flow m_support_material_raft_base_flow;
|
||||
Flow m_support_material_raft_interface_flow;
|
||||
Flow m_support_material_raft_contact_flow;
|
||||
|
||||
bool m_has_raft;
|
||||
size_t m_num_base_raft_layers;
|
||||
size_t m_num_interface_raft_layers;
|
||||
size_t m_num_contact_raft_layers;
|
||||
// If set, the raft contact layer is laid with round strings, which are easily detachable
|
||||
// from both the below and above layes.
|
||||
// Otherwise a normal flow is used and the strings are squashed against the layer below,
|
||||
// creating a firm bond with the layer below and making the interface top surface flat.
|
||||
coordf_t m_raft_height;
|
||||
coordf_t m_raft_base_height;
|
||||
coordf_t m_raft_interface_height;
|
||||
coordf_t m_raft_contact_height;
|
||||
bool m_raft_contact_layer_bridging;
|
||||
|
||||
coordf_t m_object_1st_layer_print_z;
|
||||
coordf_t m_object_1st_layer_height;
|
||||
coordf_t m_object_1st_layer_gap;
|
||||
bool m_object_1st_layer_bridging;
|
||||
|
||||
coordf_t m_object_layer_height_max;
|
||||
coordf_t m_support_layer_height_min;
|
||||
coordf_t m_support_layer_height_max;
|
||||
coordf_t m_support_interface_layer_height_max;
|
||||
|
||||
coordf_t m_gap_extra_above;
|
||||
coordf_t m_gap_extra_below;
|
||||
coordf_t m_gap_xy;
|
||||
|
||||
// If enabled, the support layers will be synchronized with object layers.
|
||||
// This does not prevent the support layers to be combined.
|
||||
bool m_synchronize_support_layers_with_object;
|
||||
// If disabled and m_synchronize_support_layers_with_object,
|
||||
// the support layers will be synchronized with the object layers exactly, no layer will be combined.
|
||||
bool m_combine_support_layers;
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue