mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-09-24 07:13:18 +08:00
Merge branch 'master' into fs_emboss
This commit is contained in:
commit
659096b2a8
@ -2930,19 +2930,19 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
|
|||||||
+ float_to_string_decimal_point(m_last_height) + "\n";
|
+ float_to_string_decimal_point(m_last_height) + "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string comment;
|
std::string cooling_marker_setspeed_comments;
|
||||||
if (m_enable_cooling_markers) {
|
if (m_enable_cooling_markers) {
|
||||||
if (path.role().is_bridge())
|
if (path.role().is_bridge())
|
||||||
gcode += ";_BRIDGE_FAN_START\n";
|
gcode += ";_BRIDGE_FAN_START\n";
|
||||||
else
|
else
|
||||||
comment = ";_EXTRUDE_SET_SPEED";
|
cooling_marker_setspeed_comments = ";_EXTRUDE_SET_SPEED";
|
||||||
if (path.role() == ExtrusionRole::ExternalPerimeter)
|
if (path.role() == ExtrusionRole::ExternalPerimeter)
|
||||||
comment += ";_EXTERNAL_PERIMETER";
|
cooling_marker_setspeed_comments += ";_EXTERNAL_PERIMETER";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!variable_speed) {
|
if (!variable_speed) {
|
||||||
// F is mm per minute.
|
// F is mm per minute.
|
||||||
gcode += m_writer.set_speed(F, "", comment);
|
gcode += m_writer.set_speed(F, "", cooling_marker_setspeed_comments);
|
||||||
double path_length = 0.;
|
double path_length = 0.;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
if (m_config.gcode_comments) {
|
if (m_config.gcode_comments) {
|
||||||
@ -2966,7 +2966,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
|
|||||||
marked_comment += description_bridge;
|
marked_comment += description_bridge;
|
||||||
}
|
}
|
||||||
double last_set_speed = new_points[0].speed * 60.0;
|
double last_set_speed = new_points[0].speed * 60.0;
|
||||||
gcode += m_writer.set_speed(last_set_speed, "", comment);
|
gcode += m_writer.set_speed(last_set_speed, "", cooling_marker_setspeed_comments);
|
||||||
Vec2d prev = this->point_to_gcode_quantized(new_points[0].p);
|
Vec2d prev = this->point_to_gcode_quantized(new_points[0].p);
|
||||||
for (size_t i = 1; i < new_points.size(); i++) {
|
for (size_t i = 1; i < new_points.size(); i++) {
|
||||||
const ProcessedPoint& processed_point = new_points[i];
|
const ProcessedPoint& processed_point = new_points[i];
|
||||||
@ -2976,7 +2976,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
|
|||||||
prev = p;
|
prev = p;
|
||||||
double new_speed = processed_point.speed * 60.0;
|
double new_speed = processed_point.speed * 60.0;
|
||||||
if (last_set_speed != new_speed) {
|
if (last_set_speed != new_speed) {
|
||||||
gcode += m_writer.set_speed(new_speed, "", comment);
|
gcode += m_writer.set_speed(new_speed, "", cooling_marker_setspeed_comments);
|
||||||
last_set_speed = new_speed;
|
last_set_speed = new_speed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -472,7 +472,7 @@ const std::vector<std::pair<GCodeProcessor::EProducer, std::string>> GCodeProces
|
|||||||
{ EProducer::Slic3r, "generated by Slic3r" },
|
{ EProducer::Slic3r, "generated by Slic3r" },
|
||||||
{ EProducer::SuperSlicer, "generated by SuperSlicer" },
|
{ EProducer::SuperSlicer, "generated by SuperSlicer" },
|
||||||
{ EProducer::Cura, "Cura_SteamEngine" },
|
{ EProducer::Cura, "Cura_SteamEngine" },
|
||||||
{ EProducer::Simplify3D, "G-Code generated by Simplify3D(R)" },
|
{ EProducer::Simplify3D, "generated by Simplify3D(R)" },
|
||||||
{ EProducer::CraftWare, "CraftWare" },
|
{ EProducer::CraftWare, "CraftWare" },
|
||||||
{ EProducer::ideaMaker, "ideaMaker" },
|
{ EProducer::ideaMaker, "ideaMaker" },
|
||||||
{ EProducer::KissSlicer, "KISSlicer" },
|
{ EProducer::KissSlicer, "KISSlicer" },
|
||||||
@ -2025,10 +2025,10 @@ bool GCodeProcessor::process_simplify3d_tags(const std::string_view comment)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ; layer
|
// ; layer | ;layer
|
||||||
tag = "layer";
|
tag = "layer";
|
||||||
pos = cmt.find(tag);
|
pos = cmt.find(tag);
|
||||||
if (pos == 0) {
|
if (pos == 0 || pos == 1) {
|
||||||
// skip lines "; layer end"
|
// skip lines "; layer end"
|
||||||
const std::string_view data = cmt.substr(pos + tag.length());
|
const std::string_view data = cmt.substr(pos + tag.length());
|
||||||
size_t end_start = data.find("end");
|
size_t end_start = data.find("end");
|
||||||
@ -2402,7 +2402,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
|||||||
if (m_forced_height > 0.0f)
|
if (m_forced_height > 0.0f)
|
||||||
m_height = m_forced_height;
|
m_height = m_forced_height;
|
||||||
else if (m_layer_id == 0)
|
else if (m_layer_id == 0)
|
||||||
m_height = (m_end_position[Z] <= double(m_first_layer_height)) ? m_end_position[Z] : m_first_layer_height;
|
m_height = std::min((float)m_end_position[Z], m_first_layer_height + m_z_offset);
|
||||||
else if (line.comment() != INTERNAL_G2G3_TAG){
|
else if (line.comment() != INTERNAL_G2G3_TAG){
|
||||||
if (m_end_position[Z] > m_extruded_last_z + EPSILON && delta_pos[Z] == 0.0)
|
if (m_end_position[Z] > m_extruded_last_z + EPSILON && delta_pos[Z] == 0.0)
|
||||||
m_height = m_end_position[Z] - m_extruded_last_z;
|
m_height = m_end_position[Z] - m_extruded_last_z;
|
||||||
|
@ -2250,9 +2250,9 @@ void GCodeViewer::load_shells(const Print& print)
|
|||||||
const PrintConfig& config = print.config();
|
const PrintConfig& config = print.config();
|
||||||
const size_t extruders_count = config.nozzle_diameter.size();
|
const size_t extruders_count = config.nozzle_diameter.size();
|
||||||
if (extruders_count > 1 && config.wipe_tower && !config.complete_objects) {
|
if (extruders_count > 1 && config.wipe_tower && !config.complete_objects) {
|
||||||
const float depth = print.wipe_tower_data(extruders_count).depth;
|
const WipeTowerData& wipe_tower_data = print.wipe_tower_data(extruders_count);
|
||||||
const float brim_width = print.wipe_tower_data(extruders_count).brim_width;
|
const float depth = wipe_tower_data.depth;
|
||||||
|
const float brim_width = wipe_tower_data.brim_width;
|
||||||
m_shells.volumes.load_wipe_tower_preview(config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle,
|
m_shells.volumes.load_wipe_tower_preview(config.wipe_tower_x, config.wipe_tower_y, config.wipe_tower_width, depth, max_z, config.wipe_tower_rotation_angle,
|
||||||
!print.is_step_done(psWipeTower), brim_width);
|
!print.is_step_done(psWipeTower), brim_width);
|
||||||
}
|
}
|
||||||
|
@ -1972,31 +1972,30 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
|
|||||||
// Should the wipe tower be visualized ?
|
// Should the wipe tower be visualized ?
|
||||||
unsigned int extruders_count = (unsigned int)dynamic_cast<const ConfigOptionFloats*>(m_config->option("nozzle_diameter"))->values.size();
|
unsigned int extruders_count = (unsigned int)dynamic_cast<const ConfigOptionFloats*>(m_config->option("nozzle_diameter"))->values.size();
|
||||||
|
|
||||||
bool wt = dynamic_cast<const ConfigOptionBool*>(m_config->option("wipe_tower"))->value;
|
const bool wt = dynamic_cast<const ConfigOptionBool*>(m_config->option("wipe_tower"))->value;
|
||||||
bool co = dynamic_cast<const ConfigOptionBool*>(m_config->option("complete_objects"))->value;
|
const bool co = dynamic_cast<const ConfigOptionBool*>(m_config->option("complete_objects"))->value;
|
||||||
|
|
||||||
if (extruders_count > 1 && wt && !co) {
|
if (extruders_count > 1 && wt && !co) {
|
||||||
// Height of a print (Show at least a slab)
|
// Height of a print (Show at least a slab)
|
||||||
double height = std::max(m_model->bounding_box().max(2), 10.0);
|
const double height = std::max(m_model->bounding_box().max.z(), 10.0);
|
||||||
|
|
||||||
float x = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_x"))->value;
|
const float x = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_x"))->value;
|
||||||
float y = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_y"))->value;
|
const float y = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_y"))->value;
|
||||||
float w = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_width"))->value;
|
const float w = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_width"))->value;
|
||||||
float a = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_rotation_angle"))->value;
|
const float a = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_rotation_angle"))->value;
|
||||||
|
const float bw = dynamic_cast<const ConfigOptionFloat*>(m_config->option("wipe_tower_brim_width"))->value;
|
||||||
|
|
||||||
const Print *print = m_process->fff_print();
|
const Print *print = m_process->fff_print();
|
||||||
|
const float depth = print->wipe_tower_data(extruders_count).depth;
|
||||||
float depth = print->wipe_tower_data(extruders_count).depth;
|
|
||||||
float brim_width = print->wipe_tower_data(extruders_count).brim_width;
|
|
||||||
|
|
||||||
#if ENABLE_OPENGL_ES
|
#if ENABLE_OPENGL_ES
|
||||||
int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(
|
int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(
|
||||||
x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower),
|
x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower),
|
||||||
brim_width, &m_wipe_tower_mesh);
|
bw, &m_wipe_tower_mesh);
|
||||||
#else
|
#else
|
||||||
int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(
|
int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(
|
||||||
x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower),
|
x, y, w, depth, (float)height, a, !print->is_step_done(psWipeTower),
|
||||||
brim_width);
|
bw);
|
||||||
#endif // ENABLE_OPENGL_ES
|
#endif // ENABLE_OPENGL_ES
|
||||||
if (volume_idx_wipe_tower_old != -1)
|
if (volume_idx_wipe_tower_old != -1)
|
||||||
map_glvolume_old_to_new[volume_idx_wipe_tower_old] = volume_idx_wipe_tower_new;
|
map_glvolume_old_to_new[volume_idx_wipe_tower_old] = volume_idx_wipe_tower_new;
|
||||||
|
@ -360,11 +360,12 @@ bool GLGizmoCut3D::on_mouse(const wxMouseEvent &mouse_event)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoCut3D::shift_cut_z(double delta)
|
void GLGizmoCut3D::shift_cut(double delta)
|
||||||
{
|
{
|
||||||
Vec3d new_cut_center = m_plane_center;
|
Vec3d starting_vec = m_rotation_m * Vec3d::UnitZ();
|
||||||
new_cut_center[Z] += delta;
|
if (starting_vec.norm() != 0.0)
|
||||||
set_center(new_cut_center);
|
starting_vec.normalize();
|
||||||
|
set_center(m_plane_center + starting_vec * delta, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoCut3D::rotate_vec3d_around_plane_center(Vec3d&vec)
|
void GLGizmoCut3D::rotate_vec3d_around_plane_center(Vec3d&vec)
|
||||||
@ -1175,9 +1176,10 @@ void GLGizmoCut3D::dragging_grabber_xy(const GLGizmoBase::UpdateData &data)
|
|||||||
rotation[m_hover_id] = theta;
|
rotation[m_hover_id] = theta;
|
||||||
|
|
||||||
const Transform3d rotation_tmp = m_start_dragging_m * rotation_transform(rotation);
|
const Transform3d rotation_tmp = m_start_dragging_m * rotation_transform(rotation);
|
||||||
if (m_rotation_m.rotation() != rotation_tmp.rotation())
|
const bool update_tbb = m_rotation_m.rotation() != rotation_tmp.rotation();
|
||||||
m_transformed_bounding_box = transformed_bounding_box(m_plane_center);
|
|
||||||
m_rotation_m = rotation_tmp;
|
m_rotation_m = rotation_tmp;
|
||||||
|
if (update_tbb)
|
||||||
|
m_transformed_bounding_box = transformed_bounding_box(m_plane_center);
|
||||||
|
|
||||||
m_angle = theta;
|
m_angle = theta;
|
||||||
while (m_angle > two_pi)
|
while (m_angle > two_pi)
|
||||||
@ -1647,6 +1649,8 @@ void GLGizmoCut3D::set_connectors_editing(bool connectors_editing)
|
|||||||
void GLGizmoCut3D::flip_cut_plane()
|
void GLGizmoCut3D::flip_cut_plane()
|
||||||
{
|
{
|
||||||
m_rotation_m = m_rotation_m * rotation_transform(PI * Vec3d::UnitX());
|
m_rotation_m = m_rotation_m * rotation_transform(PI * Vec3d::UnitX());
|
||||||
|
m_transformed_bounding_box = transformed_bounding_box(m_plane_center);
|
||||||
|
|
||||||
Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Flip cut plane"), UndoRedo::SnapshotType::GizmoAction);
|
Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Flip cut plane"), UndoRedo::SnapshotType::GizmoAction);
|
||||||
m_start_dragging_m = m_rotation_m;
|
m_start_dragging_m = m_rotation_m;
|
||||||
|
|
||||||
@ -2303,6 +2307,8 @@ bool GLGizmoCut3D::process_cut_line(SLAGizmoEventType action, const Vec2d& mouse
|
|||||||
m.matrix().block(0, 0, 3, 3) = q.setFromTwoVectors(Vec3d::UnitZ(), cross_dir).toRotationMatrix();
|
m.matrix().block(0, 0, 3, 3) = q.setFromTwoVectors(Vec3d::UnitZ(), cross_dir).toRotationMatrix();
|
||||||
|
|
||||||
m_rotation_m = m;
|
m_rotation_m = m;
|
||||||
|
// update transformed bb
|
||||||
|
m_transformed_bounding_box = transformed_bounding_box(m_plane_center);
|
||||||
m_angle_arc.reset();
|
m_angle_arc.reset();
|
||||||
|
|
||||||
set_center(m_plane_center + cross_dir * (cross_dir.dot(pt - m_plane_center)), true);
|
set_center(m_plane_center + cross_dir * (cross_dir.dot(pt - m_plane_center)), true);
|
||||||
|
@ -187,7 +187,7 @@ public:
|
|||||||
/// <returns>Return True when use the information otherwise False.</returns>
|
/// <returns>Return True when use the information otherwise False.</returns>
|
||||||
bool on_mouse(const wxMouseEvent &mouse_event) override;
|
bool on_mouse(const wxMouseEvent &mouse_event) override;
|
||||||
|
|
||||||
void shift_cut_z(double delta);
|
void shift_cut(double delta);
|
||||||
void rotate_vec3d_around_plane_center(Vec3d&vec);
|
void rotate_vec3d_around_plane_center(Vec3d&vec);
|
||||||
void put_connectors_on_cut_plane(const Vec3d& cp_normal, double cp_offset);
|
void put_connectors_on_cut_plane(const Vec3d& cp_normal, double cp_offset);
|
||||||
void update_clipper();
|
void update_clipper();
|
||||||
|
@ -623,7 +623,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt)
|
|||||||
else if (m_current == Cut) {
|
else if (m_current == Cut) {
|
||||||
auto do_move = [this, &processed](double delta_z) {
|
auto do_move = [this, &processed](double delta_z) {
|
||||||
GLGizmoCut3D* cut = dynamic_cast<GLGizmoCut3D*>(get_current());
|
GLGizmoCut3D* cut = dynamic_cast<GLGizmoCut3D*>(get_current());
|
||||||
cut->shift_cut_z(delta_z);
|
cut->shift_cut(delta_z);
|
||||||
processed = true;
|
processed = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user