mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-27 02:41:17 +00:00
Localizations refactor (#14254)
This commit is contained in:
@@ -10,7 +10,7 @@ namespace Slic3r::Arachne::LinearAlg2D
|
||||
{
|
||||
|
||||
/*!
|
||||
* Returns the determinant of the 2D matrix defined by the the vectors ab and ap as rows.
|
||||
* Returns the determinant of the 2D matrix defined by the vectors ab and ap as rows.
|
||||
*
|
||||
* The returned value is zero for \p p lying (approximately) on the line going through \p a and \p b
|
||||
* The value is positive for values lying to the left and negative for values lying to the right when looking from \p a to \p b.
|
||||
|
||||
@@ -520,7 +520,7 @@ ClipperLib::Paths expolygon_offset(const Slic3r::ExPolygon &expolygon, const flo
|
||||
|
||||
// This is a safe variant of the polygons offset, tailored for multiple ExPolygons.
|
||||
// It is required, that the input expolygons do not overlap and that the holes of each ExPolygon don't intersect with their respective outer contours.
|
||||
// Each ExPolygon is offsetted separately. For outer offset, the the offsetted ExPolygons shall be united outside of this function.
|
||||
// Each ExPolygon is offsetted separately. For outer offset, the offsetted ExPolygons shall be united outside of this function.
|
||||
template<typename ExPolygonVector>
|
||||
static std::pair<ClipperLib::Paths, size_t> expolygons_offset_raw(const ExPolygonVector &expolygons, const float delta, ClipperLib::JoinType joinType, double miterLimit)
|
||||
{
|
||||
|
||||
@@ -1025,7 +1025,7 @@ void mark_boundary_segments_touching_infill(
|
||||
#endif // INFILL_DEBUG_OUTPUT
|
||||
|
||||
EdgeGrid::Grid grid;
|
||||
// Make sure that the the grid is big enough for queries against the thick segment.
|
||||
// Make sure that the grid is big enough for queries against the thick segment.
|
||||
grid.set_bbox(boundary_bbox.inflated(distance_colliding * 1.43));
|
||||
// Inflate the bounding box by a thick line width.
|
||||
grid.create(boundary, coord_t(std::max(clip_distance, distance_colliding) + scale_(10.)));
|
||||
|
||||
@@ -2318,7 +2318,7 @@ static std::vector<MonotonicRegionLink> chain_monotonic_regions(
|
||||
constexpr float const pheromone_evaporation = 0.1f;
|
||||
// Evaporation rate to diversify paths taken by individual ants.
|
||||
constexpr float const pheromone_diversification = 0.1f;
|
||||
// Probability at which to take the next best path. Otherwise take the the path based on the cost distribution.
|
||||
// Probability at which to take the next best path. Otherwise take the path based on the cost distribution.
|
||||
constexpr float const probability_take_best = 0.9f;
|
||||
// Exponents of the cost function.
|
||||
constexpr float const pheromone_alpha = 1.f; // pheromone exponent
|
||||
|
||||
@@ -61,7 +61,7 @@ static inline FlowRole opt_key_to_flow_role(const std::string &opt_key)
|
||||
|
||||
static inline void throw_on_missing_variable(const std::string &opt_key, const char *dependent_opt_key)
|
||||
{
|
||||
throw FlowErrorMissingVariable((boost::format(L("Failed to calculate line width of %1%. Cannot get value of \"%2%\" ")) % opt_key % dependent_opt_key).str());
|
||||
throw FlowErrorMissingVariable((boost::format(L("Failed to calculate line width of %1%. Cannot get value of \u201c%2%\u201d ")) % opt_key % dependent_opt_key).str());
|
||||
}
|
||||
|
||||
// Used to provide hints to the user on default extrusion width values, and to provide reasonable values to the PlaceholderParser.
|
||||
|
||||
@@ -1816,10 +1816,10 @@ std::vector<GCode::LayerToPrint> GCode::collect_layers_to_print(const PrintObjec
|
||||
std::string warning;
|
||||
size_t i = 0;
|
||||
for (i = 0; i < std::min(warning_ranges.size(), size_t(5)); ++i)
|
||||
warning += Slic3r::format(_(L("Object can't be printed for empty layer between %1% and %2%.")),
|
||||
warning += Slic3r::format(_(L("The object has empty layers between %1% and %2% and can\u2019t be printed.")),
|
||||
warning_ranges[i].first, warning_ranges[i].second) + "\n";
|
||||
warning += Slic3r::format(_(L("Object: %1%")), object.model_object()->name) + "\n"
|
||||
+ _(L("Maybe parts of the object at these height are too thin, or the object has faulty mesh"));
|
||||
+ _(L("Parts of the object at these heights may be too thin or the object may have a faulty mesh."));
|
||||
|
||||
const_cast<Print*>(object.print())->active_step_add_warning(
|
||||
PrintStateBase::WarningLevel::CRITICAL, warning, PrintStateBase::SlicingEmptyGcodeLayers);
|
||||
@@ -2752,7 +2752,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
||||
}
|
||||
if (initial_extruder_id == static_cast<unsigned int>(-1))
|
||||
// No object to print was found, cancel the G-code export.
|
||||
throw Slic3r::SlicingError(_(L("No object can be printed. Maybe too small")));
|
||||
throw Slic3r::SlicingError(_(L("No object can be printed. It may be too small.")));
|
||||
// We don't allow switching of extruders per layer by Model::custom_gcode_per_print_z in sequential mode.
|
||||
// Use the extruder IDs collected from Regions.
|
||||
this->set_extruders(print.extruders());
|
||||
@@ -2768,7 +2768,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
||||
max_additional_fan = temp_max_additional_fan;
|
||||
if (tool_ordering.all_extruders().empty())
|
||||
// No object to print was found, cancel the G-code export.
|
||||
throw Slic3r::SlicingError(_(L("No object can be printed. Maybe too small")));
|
||||
throw Slic3r::SlicingError(_(L("No object can be printed. It may be too small.")));
|
||||
has_wipe_tower = print.has_wipe_tower() && tool_ordering.has_wipe_tower();
|
||||
// Orca: support all extruder priming
|
||||
initial_extruder_id = (wipe_tower_type == WipeTowerType::Type2 && has_wipe_tower && !print.config().single_extruder_multi_material_priming) ?
|
||||
@@ -5289,7 +5289,7 @@ LayerResult GCode::process_layer(
|
||||
}
|
||||
}
|
||||
|
||||
// We are almost ready to print. However, we must go through all the objects twice to print the the overridden extrusions first (infill/perimeter wiping feature):
|
||||
// We are almost ready to print. However, we must go through all the objects twice to print the overridden extrusions first (infill/perimeter wiping feature):
|
||||
std::vector<ObjectByExtruder::Island::Region> by_region_per_copy_cache;
|
||||
for (int print_wipe_extrusions = is_anything_overridden; print_wipe_extrusions>=0; --print_wipe_extrusions) {
|
||||
if (is_anything_overridden && print_wipe_extrusions == 0)
|
||||
|
||||
@@ -462,10 +462,10 @@ std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq, st
|
||||
break;
|
||||
}
|
||||
case gcfMarlinLegacy: {
|
||||
throw std::runtime_error(_u8L("Input shaping is not supported by Marlin < 2.1.2.\nCheck your firmware version and update your G-code flavor to ´Marlin 2´"));
|
||||
throw std::runtime_error(_u8L("Input shaping is not supported by Marlin < 2.1.2.\nCheck your firmware version and update your G-code flavor to ´Marlin 2´."));
|
||||
}
|
||||
default:
|
||||
throw std::runtime_error(_u8L("Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2"));
|
||||
throw std::runtime_error(_u8L("Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2."));
|
||||
}
|
||||
if (!gcode.str().empty()) {
|
||||
if (GCodeWriter::full_gcode_comment) {
|
||||
|
||||
@@ -1236,7 +1236,7 @@ std::vector<Vec2d> edge_offset_contour_intersections(
|
||||
// 2) offset_distance == dmin_new -> one duplicate point is found.
|
||||
// If 2) is ignored, then two tangentially touching offset curves are created.
|
||||
// If not ignored, then the two offset curves merge at this double point.
|
||||
// We should merge the contours while pushing the the two copies of the tangent point away a bit.
|
||||
// We should merge the contours while pushing the two copies of the tangent point away a bit.
|
||||
dmin = dmin_new;
|
||||
num_intersections = (offset_distance > dmin) + 1;
|
||||
}
|
||||
|
||||
+8
-14
@@ -225,7 +225,7 @@ _finished:
|
||||
}
|
||||
|
||||
if (model.objects.empty())
|
||||
throw Slic3r::RuntimeError(_L("The supplied file couldn't be read because it's empty"));
|
||||
throw Slic3r::RuntimeError(_L("The supplied file couldn\'t be read because it\'s empty."));
|
||||
|
||||
for (ModelObject *o : model.objects)
|
||||
o->input_file = input_file;
|
||||
@@ -337,7 +337,7 @@ Model Model::read_from_file(const std::string&
|
||||
}
|
||||
#endif
|
||||
else
|
||||
throw Slic3r::RuntimeError(_L("Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension."));
|
||||
throw Slic3r::RuntimeError(_L("Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension."));
|
||||
|
||||
if (is_cb_cancel) {
|
||||
Model empty_model;
|
||||
@@ -352,7 +352,7 @@ Model Model::read_from_file(const std::string&
|
||||
}
|
||||
|
||||
if (model.objects.empty())
|
||||
throw Slic3r::RuntimeError(_L("The supplied file couldn't be read because it's empty"));
|
||||
throw Slic3r::RuntimeError(_L("The supplied file couldn\'t be read because it\'s empty."));
|
||||
|
||||
for (ModelObject *o : model.objects)
|
||||
o->input_file = input_file;
|
||||
@@ -399,7 +399,7 @@ Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig
|
||||
else if (boost::algorithm::iends_with(input_file, ".zip.amf"))
|
||||
result = load_amf(input_file.c_str(), config, config_substitutions, &model, &is_bbl_3mf);
|
||||
else
|
||||
throw Slic3r::RuntimeError(_L("Unknown file format. Input file must have .3mf or .zip.amf extension."));
|
||||
throw Slic3r::RuntimeError(_L("Unknown file format: input file must have .3mf or .zip.amf extension."));
|
||||
|
||||
if (out_file_type != En3mfType::From_Prusa) {
|
||||
if (is_orca_3mf)
|
||||
@@ -696,8 +696,7 @@ unsigned int Model::update_print_volume_state(const BuildVolume &build_volume)
|
||||
num_printable += model_object->update_instances_print_volume_state(build_volume);
|
||||
//BBS: add logs for build_volume
|
||||
const BoundingBoxf3& print_volume = build_volume.bounding_volume();
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", print_volume {%1%, %2%, %3%} to {%4%, %5%, %6%}, got %7% printable istances")\
|
||||
%print_volume.min.x() %print_volume.min.y() %print_volume.min.z()%print_volume.max.x() %print_volume.max.y() %print_volume.max.z() %num_printable;
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", print_volume {%1%, %2%, %3%} to {%4%, %5%, %6%}, got %7% printable istances") %print_volume.min.x() %print_volume.min.y() %print_volume.min.z()%print_volume.max.x() %print_volume.max.y() %print_volume.max.z() %num_printable;
|
||||
return num_printable;
|
||||
}
|
||||
|
||||
@@ -2127,10 +2126,7 @@ void ModelObject::split(ModelObjectPtrs* new_objects, const bool remap_paint)
|
||||
|
||||
if (is_multi_volume_object) {
|
||||
// BBS: volume geometry not changed, so we can keep the paint facets
|
||||
#define COPY_FACETS(f) \
|
||||
if (new_vol->f.timestamp() == volume->f.timestamp()) \
|
||||
new_vol->f.reset(); /* BBS: let next assign take effect */ \
|
||||
new_vol->f.assign(volume->f)
|
||||
#define COPY_FACETS(f) if (new_vol->f.timestamp() == volume->f.timestamp()) new_vol->f.reset(); /* BBS: let next assign take effect */ new_vol->f.assign(volume->f)
|
||||
|
||||
COPY_FACETS(supported_facets);
|
||||
COPY_FACETS(seam_facets);
|
||||
@@ -2372,8 +2368,7 @@ unsigned int ModelObject::update_instances_print_volume_state(const BuildVolume
|
||||
unsigned int num_printable = 0;
|
||||
//BBS: add logs for build_volume
|
||||
//const BoundingBoxf3& print_volume = build_volume.bounding_volume();
|
||||
//BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", print_volume {%1%, %2%, %3%} to {%4%, %5%, %6%}")\
|
||||
// %print_volume.min.x() %print_volume.min.y() %print_volume.min.z()%print_volume.max.x() %print_volume.max.y() %print_volume.max.z();
|
||||
//BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", print_volume {%1%, %2%, %3%} to {%4%, %5%, %6%}") // %print_volume.min.x() %print_volume.min.y() %print_volume.min.z()%print_volume.max.x() %print_volume.max.y() %print_volume.max.z();
|
||||
for (ModelInstance* model_instance : this->instances) {
|
||||
if (model_instance->update_print_volume_state(build_volume) == ModelInstancePVS_Inside) {
|
||||
//BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", object %1%'s instance inside print volum")%this->name;
|
||||
@@ -3434,8 +3429,7 @@ ModelInstanceEPrintVolumeState ModelInstance::calc_print_volume_state(const Buil
|
||||
BoundingBoxf3 bb = vol->get_convex_hull().bounding_box();
|
||||
Vec3d size = bb.size();
|
||||
if ((size.x() == 0.f) || (size.y() == 0.f) || (size.z() == 0.f)) {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", object %1%'s vol %2% is empty, skip it, box: {%3%, %4%, %5%} to {%6%, %7%, %8%}")%this->object->name %vol->name\
|
||||
%bb.min.x() %bb.min.y() %bb.min.z()%bb.max.x() %bb.max.y() %bb.max.z();
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", object %1%'s vol %2% is empty, skip it, box: {%3%, %4%, %5%} to {%6%, %7%, %8%}")%this->object->name %vol->name %bb.min.x() %bb.min.y() %bb.min.z()%bb.max.x() %bb.max.y() %bb.max.z();
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ static bool clip_narrow_corner(
|
||||
bool blocked = forward == Blocked || backward == Blocked;
|
||||
assert(polygon.size() < 3 ||
|
||||
// Remaining triangle is CCW oriented. Both sides must be "blocked", but the other side may have not been
|
||||
// updated after the the p02 / p22 became united into a single point.
|
||||
// updated after the p02 / p22 became united into a single point.
|
||||
blocked ||
|
||||
// Remaining triangle is concave, however both of its arms are long.
|
||||
(forward == Far && backward == Far));
|
||||
|
||||
+14
-14
@@ -670,13 +670,13 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print
|
||||
//juedge the exclude area
|
||||
if (!intersection(exclude_polys, convex_hull_no_offset).empty()) {
|
||||
if (single_object_exception.string.empty()) {
|
||||
single_object_exception.string = (boost::format(L("%1% is too close to exclusion area, there may be collisions when printing.")) %instance.model_instance->get_object()->name).str();
|
||||
single_object_exception.string = (boost::format(L("%1% is too close to exclusion area. There may be collisions when printing.")) %instance.model_instance->get_object()->name).str();
|
||||
// single_object_exception.object = instance.model_instance->get_object();
|
||||
//ORCA: Pass ModelInstance instead of ModelObject
|
||||
single_object_exception.object = instance.model_instance;
|
||||
}
|
||||
else {
|
||||
single_object_exception.string += "\n"+(boost::format(L("%1% is too close to exclusion area, there may be collisions when printing.")) %instance.model_instance->get_object()->name).str();
|
||||
single_object_exception.string += "\n"+(boost::format(L("%1% is too close to exclusion area. There may be collisions when printing.")) %instance.model_instance->get_object()->name).str();
|
||||
single_object_exception.object = nullptr;
|
||||
}
|
||||
//if (polygons) {
|
||||
@@ -1039,7 +1039,7 @@ static StringObjectException layered_print_cleareance_valid(const Print &print,
|
||||
/*if (warning) {
|
||||
warning->string += L("Prime Tower is too close to exclusion area, there may be collisions when printing.\n");
|
||||
}*/
|
||||
return {L("Prime Tower") + L(" is too close to exclusion area, and collisions will be caused.\n")};
|
||||
return {L("Prime Tower") + L(" is too close to an exclusion area, and collisions will be caused.\n")};
|
||||
}
|
||||
if (print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, convex_hulls_temp).empty()) {
|
||||
return {L("Prime Tower") + L(" is too close to clumping detection area, and collisions will be caused.\n")};
|
||||
@@ -1349,7 +1349,7 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
if (std::any_of(all_regions.begin() + 1, all_regions.end(), [ra = all_regions.front()](const auto rb) {
|
||||
return !Layer::is_perimeter_compatible(ra, rb);
|
||||
})) {
|
||||
return {L("The spiral vase mode does not work when an object contains more than one materials."), nullptr, "spiral_mode"};
|
||||
return {L("Spiral (vase) mode does not work when an object contains more than one material."), nullptr, "spiral_mode"};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1445,14 +1445,14 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
return { L("The prime tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors.")};
|
||||
|
||||
if ((m_config.print_sequence == PrintSequence::ByObject) && extruders.size() > 1)
|
||||
return { L("The prime tower is not supported in \"By object\" print."), nullptr, "enable_prime_tower" };
|
||||
return { L("A prime tower is not supported in \u201cBy object\u201d print."), nullptr, "enable_prime_tower" };
|
||||
|
||||
// BBS: When prime tower is on, object layer and support layer must be aligned. So support gap should be multiple of object layer height.
|
||||
for (size_t i = 0; i < m_objects.size(); i++) {
|
||||
const PrintObject* object = m_objects[i];
|
||||
const SlicingParameters& slicing_params = object->slicing_parameters();
|
||||
if (object->config().adaptive_layer_height) {
|
||||
return { L("The prime tower is not supported when adaptive layer height is on. It requires that all objects have the same layer height."), object, "adaptive_layer_height" };
|
||||
return { L("A prime tower is not supported when adaptive layer height is on. It requires that all objects have the same layer height."), object, "adaptive_layer_height" };
|
||||
}
|
||||
|
||||
if (!object->config().enable_support)
|
||||
@@ -1460,7 +1460,7 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
|
||||
double gap_layers = slicing_params.gap_object_support / slicing_params.layer_height;
|
||||
if (gap_layers - (int)gap_layers > EPSILON) {
|
||||
return {L("The prime tower requires \"support gap\" to be multiple of layer height."), object};
|
||||
return {L("A prime tower requires any \u201csupport gap\u201d to be a multiple of layer height."), object};
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1473,9 +1473,9 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
const SlicingParameters &slicing_params = object->slicing_parameters();
|
||||
if (std::abs(slicing_params.first_print_layer_height - slicing_params0.first_print_layer_height) > EPSILON ||
|
||||
std::abs(slicing_params.layer_height - slicing_params0.layer_height ) > EPSILON)
|
||||
return {L("The prime tower requires that all objects have the same layer heights."), object, "initial_layer_print_height"};
|
||||
return {L("A prime tower requires that all objects have the same layer height."), object, "initial_layer_print_height"};
|
||||
if (slicing_params.raft_layers() != slicing_params0.raft_layers())
|
||||
return {L("The prime tower requires that all objects are printed over the same number of raft layers."), object, "raft_layers"};
|
||||
return {L("A prime tower requires that all objects are printed over the same number of raft layers."), object, "raft_layers"};
|
||||
// BBS: support gap can be multiple of object layer height, remove _L()
|
||||
#if 0
|
||||
if (slicing_params0.gap_object_support != slicing_params.gap_object_support ||
|
||||
@@ -1483,7 +1483,7 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
return {L("The prime tower is only supported for multiple objects if they are printed with the same support_top_z_distance."), object};
|
||||
#endif
|
||||
if (!equal_layering(slicing_params, slicing_params0))
|
||||
return { L("The prime tower requires that all objects are sliced with the same layer heights."), object };
|
||||
return { L("A prime tower requires that all objects are sliced with the same layer height."), object };
|
||||
if (has_custom_layering) {
|
||||
auto &lh = layer_height_profile(i);
|
||||
auto &lh_tallest = layer_height_profile(tallest_object_idx);
|
||||
@@ -1549,10 +1549,10 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
if (extrusion_width_min == 0) {
|
||||
// Default "auto-generated" extrusion width is always valid.
|
||||
} else if (extrusion_width_min <= layer_height) {
|
||||
err_msg = L("Too small line width");
|
||||
err_msg = L("Line width too small");
|
||||
return false;
|
||||
} else if (extrusion_width_max > max_nozzle_diameter * MAX_LINE_WIDTH_MULTIPLIER) {
|
||||
err_msg = L("Too large line width");
|
||||
err_msg = L("Line width too large");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -1574,7 +1574,7 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
// BBS
|
||||
#if 0
|
||||
if (this->has_wipe_tower() && object->config().independent_support_layer_height) {
|
||||
return {L("The prime tower requires that support has the same layer height with object."), object, "support_filament"};
|
||||
return {L("A prime tower requires that support has the same layer height as the object."), object, "support_filament"};
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1675,7 +1675,7 @@ StringObjectException Print::validate(std::vector<StringObjectException> *warnin
|
||||
return { err_msg, object, "bridge_line_width" };
|
||||
}
|
||||
if (!allow_thin_bridge_width && bridge_width <= layer_height) {
|
||||
err_msg = L("Too small line width");
|
||||
err_msg = L("Line width too small");
|
||||
return { err_msg, object, "bridge_line_width" };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ std::string PrintBase::output_filename(const std::string &format, const std::str
|
||||
filename.replace_extension(default_ext);
|
||||
return filename.string();
|
||||
} catch (std::runtime_error &err) {
|
||||
throw Slic3r::PlaceholderParserError(L("Failed processing of the filename_format template.") + "\n" + err.what());
|
||||
throw Slic3r::PlaceholderParserError(L("Processing of the filename_format template failed.") + "\n" + err.what());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+161
-261
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@
|
||||
#include <libslic3r/MeshBoolean.hpp>
|
||||
#include <libslic3r/TriangleMeshSlicer.hpp>
|
||||
|
||||
// Need the cylinder method for the the drainholes in hollowing step
|
||||
// Need the cylinder method for the drainholes in hollowing step
|
||||
#include <libslic3r/SLA/SupportTreeBuilder.hpp>
|
||||
|
||||
#include <libslic3r/SLA/Concurrency.hpp>
|
||||
|
||||
@@ -1197,7 +1197,7 @@ void sample_overhang_area(
|
||||
point_count += poly.size();
|
||||
const size_t min_support_points = std::max(coord_t(1), std::min(coord_t(3), coord_t(total_length(overhang_area) / connect_length)));
|
||||
if (point_count <= min_support_points) {
|
||||
// add the outer wall (of the overhang) to ensure it is correct supported instead. Try placing the support points in a way that they fully support the outer wall, instead of just the with half of the the support line width.
|
||||
// add the outer wall (of the overhang) to ensure it is correct supported instead. Try placing the support points in a way that they fully support the outer wall, instead of just the with half of the support line width.
|
||||
// I assume that even small overhangs are over one line width wide, so lets try to place the support points in a way that the full support area generated from them
|
||||
// will support the overhang (if this is not done it may only be half). This WILL NOT be the case when supporting an angle of about < 60 degrees so there is a fallback,
|
||||
// as some support is better than none.
|
||||
@@ -1378,7 +1378,7 @@ static void generate_initial_areas(
|
||||
}
|
||||
#if 0
|
||||
// If the xy distance overrides the z distance, some support needs to be inserted further down.
|
||||
//=> Analyze which support points do not fit on this layer and check if they will fit a few layers down (while adding them an infinite amount of layers down would technically be closer the the setting description, it would not produce reasonable results. )
|
||||
//=> Analyze which support points do not fit on this layer and check if they will fit a few layers down (while adding them an infinite amount of layers down would technically be closer the setting description, it would not produce reasonable results. )
|
||||
if (! min_xy_dist) {
|
||||
LineInformations overhang_lines;
|
||||
{
|
||||
|
||||
@@ -92,7 +92,7 @@ std::string MZ_Archive::get_errorstr(mz_zip_error mz_err)
|
||||
case MZ_ZIP_TOO_MANY_FILES:
|
||||
return L("too many files");
|
||||
case MZ_ZIP_FILE_TOO_LARGE:
|
||||
return L("file too large");
|
||||
return L("File too large");
|
||||
case MZ_ZIP_UNSUPPORTED_METHOD:
|
||||
return L("unsupported method");
|
||||
case MZ_ZIP_UNSUPPORTED_ENCRYPTION:
|
||||
@@ -106,7 +106,7 @@ std::string MZ_Archive::get_errorstr(mz_zip_error mz_err)
|
||||
case MZ_ZIP_INVALID_HEADER_OR_CORRUPTED:
|
||||
return L("invalid header or corrupted");
|
||||
case MZ_ZIP_UNSUPPORTED_MULTIDISK:
|
||||
return L("unsupported multidisk");
|
||||
return L("Saving to RAID is not supported.");
|
||||
case MZ_ZIP_DECOMPRESSION_FAILED:
|
||||
return L("decompression failed");
|
||||
case MZ_ZIP_COMPRESSION_FAILED:
|
||||
@@ -138,13 +138,13 @@ std::string MZ_Archive::get_errorstr(mz_zip_error mz_err)
|
||||
case MZ_ZIP_INVALID_FILENAME:
|
||||
return L("invalid filename");
|
||||
case MZ_ZIP_BUF_TOO_SMALL:
|
||||
return L("buffer too small");
|
||||
return L("Buffer too small");
|
||||
case MZ_ZIP_INTERNAL_ERROR:
|
||||
return L("internal error");
|
||||
case MZ_ZIP_FILE_NOT_FOUND:
|
||||
return L("file not found");
|
||||
case MZ_ZIP_ARCHIVE_TOO_LARGE:
|
||||
return L("archive too large");
|
||||
return L("Archive too large");
|
||||
case MZ_ZIP_VALIDATION_FAILED:
|
||||
return L("validation failed");
|
||||
case MZ_ZIP_WRITE_CALLBACK_FAILED:
|
||||
|
||||
@@ -69,7 +69,7 @@ void AMSSetting::create()
|
||||
|
||||
// tip line1
|
||||
m_tip_Insert_material_line1 = new Label(m_panel_Insert_material,
|
||||
_L("The AMS will automatically read the filament information when inserting a new Bambu Lab filament. This takes about 20 seconds.")
|
||||
_L("The AMS will automatically read the filament information when inserting a new Bambu Lab filament spool. This takes about 20 seconds.")
|
||||
);
|
||||
m_tip_Insert_material_line1->SetFont(::Label::Body_13);
|
||||
m_tip_Insert_material_line1->SetForegroundColour(AMS_SETTING_GREY700);
|
||||
@@ -112,7 +112,7 @@ void AMSSetting::create()
|
||||
m_checkbox_starting_auto_read->Bind(wxEVT_TOGGLEBUTTON, &AMSSetting::on_starting_read, this);
|
||||
m_sizer_starting->Add(m_checkbox_starting_auto_read, 0, wxALIGN_CENTER_VERTICAL);
|
||||
m_sizer_starting->Add(0, 0, 0, wxLEFT, 12);
|
||||
m_title_starting_auto_read = new wxStaticText(m_panel_body, wxID_ANY, _L("Power on update"), wxDefaultPosition,wxDefaultSize, 0);
|
||||
m_title_starting_auto_read = new wxStaticText(m_panel_body, wxID_ANY, _L("Update on startup"), wxDefaultPosition,wxDefaultSize, 0);
|
||||
m_title_starting_auto_read->SetFont(::Label::Head_13);
|
||||
m_title_starting_auto_read->SetForegroundColour(AMS_SETTING_GREY800);
|
||||
m_title_starting_auto_read->Wrap(AMS_SETTING_BODY_WIDTH);
|
||||
@@ -125,7 +125,7 @@ void AMSSetting::create()
|
||||
m_sizer_starting_tip_inline = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
m_tip_starting_line1 = new Label(m_panel_body,
|
||||
_L("The AMS will automatically read the information of inserted filament on start-up. It will take about 1 minute. The reading process will roll the filament spools.")
|
||||
_L("The AMS will automatically read the information of inserted filament on start-up. It will take about 1 minute. The reading process will rotate the filament spools.")
|
||||
);
|
||||
m_tip_starting_line1->SetFont(::Label::Body_13);
|
||||
m_tip_starting_line1->SetForegroundColour(AMS_SETTING_GREY700);
|
||||
|
||||
@@ -44,7 +44,7 @@ void AboutDialogLogo::onRepaint(wxEvent &event)
|
||||
CopyrightsDialog::CopyrightsDialog()
|
||||
: DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, from_u8((boost::format("%1% - %2%")
|
||||
% (wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME)
|
||||
% _utf8(L("Portions copyright"))).str()),
|
||||
% _utf8(L("License Info"))).str()),
|
||||
wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
||||
{
|
||||
this->SetFont(wxGetApp().normal_font());
|
||||
@@ -337,7 +337,7 @@ AboutDialog::AboutDialog()
|
||||
m_html->Bind(wxEVT_HTML_LINK_CLICKED, &AboutDialog::onLinkClicked, this);
|
||||
}
|
||||
//Add "Portions copyright" button
|
||||
Button* button_portions = new Button(this,_L("Portions copyright"));
|
||||
Button* button_portions = new Button(this,_L("License Info"));
|
||||
button_portions->SetStyle(ButtonStyle::Regular, ButtonType::Window);
|
||||
|
||||
wxBoxSizer *copyright_button_ver = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
@@ -1686,7 +1686,7 @@ AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent)
|
||||
m_title_enable_ams->Wrap(-1);
|
||||
sizer_enable_ams->Add(m_title_enable_ams, 0, 0, 0);
|
||||
|
||||
m_tip_enable_ams = new wxStaticText(m_panel_enable_ams, wxID_ANY, _L("Print with filaments in the AMS"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_tip_enable_ams = new wxStaticText(m_panel_enable_ams, wxID_ANY, _L("Print with filament in the AMS"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_tip_enable_ams->SetMinSize(wxSize(FromDIP(200), FromDIP(50)));
|
||||
m_tip_enable_ams->Wrap(FromDIP(200));
|
||||
m_tip_enable_ams->SetForegroundColour(*wxBLACK);
|
||||
@@ -1722,7 +1722,7 @@ AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent)
|
||||
m_title_disable_ams->Wrap(-1);
|
||||
sizer_disable_ams->Add(m_title_disable_ams, 0, 0, 0);
|
||||
|
||||
m_tip_disable_ams = new wxStaticText(m_panel_disable_ams, wxID_ANY, _L("Print with the filament mounted on the back of chassis"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_tip_disable_ams = new wxStaticText(m_panel_disable_ams, wxID_ANY, _L("Print with filament on external spool"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_tip_disable_ams->SetMinSize(wxSize(FromDIP(200), FromDIP(50)));
|
||||
m_tip_disable_ams->Wrap(FromDIP(200));
|
||||
m_tip_disable_ams->SetForegroundColour(*wxBLACK);
|
||||
@@ -1783,9 +1783,7 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent)
|
||||
humidity_level_list = new AmsHumidityLevelList(this);
|
||||
curr_humidity_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("hum_level1_light", this, 132), wxDefaultPosition, wxSize(FromDIP(132), FromDIP(132)), 0);
|
||||
|
||||
m_staticText_note = new Label(this, _L("Please change the desiccant when it is too wet. "
|
||||
"The indicator may not represent accurately in following cases: when the lid is open or the desiccant pack is changed. "
|
||||
"It take hours to absorb the moisture, and low temperatures also slow down the process."));
|
||||
m_staticText_note = new Label(this, _L("Please change the desiccant when it is too wet. The indicator may not represent accurately in following cases: when the lid is open or the desiccant pack is changed. It takes a few hours to absorb the moisture, and low temperatures also slow down the process."));
|
||||
m_staticText_note->SetMinSize(wxSize(FromDIP(680), -1));
|
||||
m_staticText_note->SetMaxSize(wxSize(FromDIP(680), -1));
|
||||
m_staticText_note->Wrap(FromDIP(680));
|
||||
@@ -2021,7 +2019,7 @@ AmsIntroducePopup::AmsIntroducePopup(wxWindow* parent)
|
||||
m_staticText_top->Wrap(-1);
|
||||
bSizer4->Add(m_staticText_top, 0, wxALL, 5);
|
||||
|
||||
m_staticText_bottom = new Label(this, _L("Print using materials mounted on the back of the case"));
|
||||
m_staticText_bottom = new Label(this, _L("Print using filament on external spool."));
|
||||
m_staticText_bottom->Wrap(-1);
|
||||
m_staticText_bottom->SetFont(::Label::Body_13);
|
||||
m_staticText_bottom->SetForegroundColour(wxColour("#6B6B6B"));
|
||||
@@ -2057,13 +2055,13 @@ void AmsIntroducePopup::set_mode(bool enable_ams)
|
||||
{
|
||||
if (enable_ams) {
|
||||
m_staticText_top->SetLabelText(_L("Enable AMS"));
|
||||
m_staticText_bottom->SetLabelText(_L("Print with filaments in AMS"));
|
||||
m_staticText_bottom->SetLabelText(_L("Print with filament in AMS"));
|
||||
m_img_enable_ams->Show();
|
||||
m_img_disable_ams->Hide();
|
||||
}
|
||||
else {
|
||||
m_staticText_top->SetLabelText(_L("Do not Enable AMS"));
|
||||
m_staticText_bottom->SetLabelText(_L("Print with filaments mounted on the back of the chassis"));
|
||||
m_staticText_bottom->SetLabelText(_L("Print with filament on external spool"));
|
||||
m_staticText_bottom->SetMinSize(wxSize(FromDIP(180), -1));
|
||||
m_staticText_bottom->Wrap(FromDIP(180));
|
||||
m_img_enable_ams->Hide();
|
||||
@@ -2437,7 +2435,7 @@ void AmsReplaceMaterialDialog::update_to_nozzle(int nozzle_id)
|
||||
}
|
||||
else if (!m_obj->GetFilaSystem()->IsAutoRefillEnabled())
|
||||
{
|
||||
label_txt->SetLabelText(_L("AMS filament backup is not enabled, please enable it in the AMS settings."));
|
||||
label_txt->SetLabelText(_L("AMS filament backup is not enabled; please enable it in the AMS settings."));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -380,17 +380,17 @@ void AuFile::on_input_enter(wxCommandEvent &evt)
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.empty()) {
|
||||
info_line = _L("The name is not allowed to be empty.");
|
||||
info_line = _L("The name field is not allowed to be empty.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_first_of(' ') == 0) {
|
||||
info_line = _L("The name is not allowed to start with space character.");
|
||||
info_line = _L("The name is not allowed to start with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_last_of(' ') == new_file_name.length() - 1) {
|
||||
info_line = _L("The name is not allowed to end with space character.");
|
||||
info_line = _L("The name is not allowed to end with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
|
||||
@@ -77,12 +77,11 @@ std::pair<std::string, std::vector<size_t>> SlicingProcessCompletedEvent::format
|
||||
try {
|
||||
this->rethrow_exception();
|
||||
} catch (const std::bad_alloc &ex) {
|
||||
wxString errmsg = GUI::from_u8(boost::format(_utf8(L("A error occurred. Maybe memory of system is not enough or it's a bug "
|
||||
"of the program"))).str());
|
||||
wxString errmsg = GUI::from_u8(boost::format(_utf8(L("An error occurred. The system may have run out of memory, or a bug may have occurred."))).str());
|
||||
error = std::string(errmsg.ToUTF8()) + "\n" + std::string(ex.what());
|
||||
} catch (const HardCrash &ex) {
|
||||
error = GUI::format(_u8L("A fatal error occurred: \"%1%\""), ex.what()) + "\n" +
|
||||
_u8L("Please save project and restart the program.");
|
||||
_u8L("Please save your project and restart the application.");
|
||||
} catch (PlaceholderParserError &ex) {
|
||||
error = ex.what();
|
||||
monospace = 1;
|
||||
@@ -200,7 +199,7 @@ void BackgroundSlicingProcess::process_fff()
|
||||
//BBS: add the logic to process from an existed gcode file
|
||||
if (m_print->finished()) {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: skip slicing, to process previous gcode file")%__LINE__;
|
||||
m_fff_print->set_status(80, _utf8(L("Processing G-code from Previous file...")));
|
||||
m_fff_print->set_status(80, _utf8(L("Processing G-Code from previous file\u2026")));
|
||||
wxCommandEvent evt(m_event_slicing_completed_id);
|
||||
// Post the Slicing Finished message for the G-code viewer to update.
|
||||
// Passing the timestamp
|
||||
@@ -869,7 +868,7 @@ void BackgroundSlicingProcess::export_gcode()
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw Slic3r::ExportError(_utf8(L("Unknown error when exporting G-code.")));
|
||||
throw Slic3r::ExportError(_utf8(L("Unknown error with G-code export")));
|
||||
}
|
||||
switch (copy_ret_val) {
|
||||
case CopyFileResult::SUCCESS: break; // no error
|
||||
@@ -920,7 +919,7 @@ void BackgroundSlicingProcess::prepare_upload()
|
||||
m_print->set_status(95, _utf8(L("Running post-processing scripts")));
|
||||
std::string error_message;
|
||||
if (copy_file(m_temp_output_path, source_path.string(), error_message) != SUCCESS)
|
||||
throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed")));
|
||||
throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed.")));
|
||||
m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
|
||||
// Orca: skip post-processing scripts for BBL printers as we have run them already in finalize_gcode()
|
||||
// todo: do we need to copy the file?
|
||||
|
||||
@@ -566,7 +566,7 @@ void BedShapePanel::load_stl()
|
||||
model = Model::read_from_file(file_name);
|
||||
}
|
||||
catch (std::exception &) {
|
||||
show_error(this, _L("Error! Invalid model"));
|
||||
show_error(this, _L("Error: invalid model"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -578,7 +578,7 @@ void BedShapePanel::load_stl()
|
||||
return;
|
||||
}
|
||||
if (expolygons.size() > 1) {
|
||||
show_error(this, _L("The selected file contains several disjoint areas. This is not supported."));
|
||||
show_error(this, _L("The selected file contains several disjointed areas. This is not supported."));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,10 +35,10 @@ wxString get_fail_reason(int code)
|
||||
return _L("Failed to publish login request");
|
||||
|
||||
else if (code == BAMBU_NETWORK_ERR_BIND_GET_PRINTER_TICKET_TIMEOUT)
|
||||
return _L("Get ticket from device timeout");
|
||||
return _L("Timeout getting ticket from device");
|
||||
|
||||
else if (code == BAMBU_NETWORK_ERR_BIND_GET_CLOUD_TICKET_TIMEOUT)
|
||||
return _L("Get ticket from server timeout");
|
||||
return _L("Timeout getting ticket from server");
|
||||
|
||||
else if (code == BAMBU_NETWORK_ERR_BIND_POST_TICKET_TO_CLOUD_FAILED)
|
||||
return _L("Failed to post ticket to server");
|
||||
|
||||
@@ -304,7 +304,7 @@ void HistoryWindow::reqeust_history_result(MachineObject* obj)
|
||||
cali_info.use_nozzle_volume_type = false;
|
||||
cali_info.use_extruder_id = false;
|
||||
CalibUtils::emit_get_PA_calib_infos(cali_info);
|
||||
m_tips->SetLabel(_L("Refreshing the historical Flow Dynamics Calibration records"));
|
||||
m_tips->SetLabel(_L("Refreshing the previous Flow Dynamics Calibration records"));
|
||||
BOOST_LOG_TRIVIAL(info) << "request calib history";
|
||||
}
|
||||
}
|
||||
@@ -476,7 +476,7 @@ int HistoryWindow::get_extruder_id()
|
||||
void HistoryWindow::on_click_new_button(wxCommandEvent& event)
|
||||
{
|
||||
if (curr_obj && curr_obj->get_printer_series() == PrinterSeries::SERIES_P1P && m_calib_results_history.size() >= 16) {
|
||||
MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold %d history results per nozzle."), 16), wxEmptyString, wxICON_WARNING | wxOK);
|
||||
MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold %d historical results per nozzle."), 16), wxEmptyString, wxICON_WARNING | wxOK);
|
||||
msg_dlg.ShowModal();
|
||||
return;
|
||||
}
|
||||
@@ -913,8 +913,7 @@ void NewCalibrationHistoryDialog::on_ok(wxCommandEvent &event)
|
||||
|
||||
if (iter != m_history_results.end()) {
|
||||
|
||||
wxString duplicate_name_info = wxString::Format(_L("There is already a historical calibration result with the same name: %s. Only one of the results with the same name "
|
||||
"is saved. Are you sure you want to override the historical result?"), m_new_result.name);
|
||||
wxString duplicate_name_info = wxString::Format(_L("There is already a previous calibration result with the same name: %s. Only one result with a name is saved. Are you sure you want to overwrite the previous result\?"), m_new_result.name);
|
||||
|
||||
duplicate_name_info = wxString::Format(_L("Within the same extruder, the name(%s) must be unique when the filament type, nozzle diameter, and nozzle flow are the same.\n"
|
||||
"Are you sure you want to override the historical result?"), m_new_result.name);
|
||||
|
||||
@@ -805,10 +805,7 @@ void PressureAdvanceWizard::on_cali_start()
|
||||
curr_obj->manual_pa_cali_method = pa_cali_method;
|
||||
|
||||
if (curr_obj->get_printer_series() != PrinterSeries::SERIES_X1 && curr_obj->pa_calib_tab.size() >= MAX_PA_HISTORY_RESULTS_NUMS) {
|
||||
MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold 16 history results per nozzle. "
|
||||
"You can delete the existing historical results and then start calibration. "
|
||||
"Or you can continue the calibration, but you cannot create new calibration historical results.\n"
|
||||
"Do you still want to continue the calibration?"), MAX_PA_HISTORY_RESULTS_NUMS), wxEmptyString, wxICON_WARNING | wxYES | wxCANCEL);
|
||||
MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold 16 historical results per nozzle. You can delete the existing historical results and then start calibration. Or you can continue the calibration, but you cannot create new calibration historical results.\nDo you still want to continue the calibration\?"), MAX_PA_HISTORY_RESULTS_NUMS), wxEmptyString, wxICON_WARNING | wxYES | wxCANCEL);
|
||||
if (msg_dlg.ShowModal() != wxID_YES) {
|
||||
return;
|
||||
}
|
||||
@@ -930,8 +927,7 @@ bool PressureAdvanceWizard::can_save_cali_result(const std::vector<PACalibResult
|
||||
|
||||
if (!same_pa_names.empty()) {
|
||||
same_pa_names.erase(same_pa_names.size() - 2);
|
||||
wxString duplicate_name_info = wxString::Format(_L("There is already a historical calibration result with the same name: %s. Only one of the results with the same name "
|
||||
"is saved. Are you sure you want to override the historical result?"), same_pa_names);
|
||||
wxString duplicate_name_info = wxString::Format(_L("There is already a previous calibration result with the same name: %s. Only one result with a name is saved. Are you sure you want to overwrite the previous result\?"), same_pa_names);
|
||||
|
||||
if (curr_obj->is_multi_extruders())
|
||||
duplicate_name_info = wxString::Format(_L("Within the same extruder, the name(%s) must be unique when the filament type, nozzle diameter, and nozzle flow are the same.\n"
|
||||
@@ -943,7 +939,7 @@ bool PressureAdvanceWizard::can_save_cali_result(const std::vector<PACalibResult
|
||||
}
|
||||
|
||||
if (curr_obj->get_printer_series() != PrinterSeries::SERIES_X1 && curr_obj->pa_calib_tab.size() >= MAX_PA_HISTORY_RESULTS_NUMS) {
|
||||
MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold %d history results per nozzle. This result will not be saved."), MAX_PA_HISTORY_RESULTS_NUMS),
|
||||
MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold %d historical results per nozzle. This result will not be saved."), MAX_PA_HISTORY_RESULTS_NUMS),
|
||||
wxEmptyString, wxICON_WARNING | wxOK);
|
||||
msg_dlg.ShowModal();
|
||||
return false;
|
||||
|
||||
@@ -326,7 +326,7 @@ void CalibrationCaliPage::update_subtask(MachineObject* obj)
|
||||
prepare_text = wxString::Format(_L("Cloud Slicing..."));
|
||||
}
|
||||
else {
|
||||
prepare_text = wxString::Format(_L("In Cloud Slicing Queue, there are %s tasks ahead."), std::to_string(obj->queue_number));
|
||||
prepare_text = wxString::Format(_L("In Cloud Slicing Queue, there are %s tasks ahead of you."), std::to_string(obj->queue_number));
|
||||
show_percent = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -601,7 +601,7 @@ PAPageHelpPanel::PAPageHelpPanel(wxWindow* parent, bool ground_panel, wxWindowID
|
||||
wxBoxSizer* top_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
top_sizer->AddSpacer(FromDIP(10));
|
||||
|
||||
auto help_text_title = new Label(this, _L("How to use calibration result?"));
|
||||
auto help_text_title = new Label(this, _L("How can I use calibration results\?"));
|
||||
help_text_title->SetFont(Label::Head_14);
|
||||
top_sizer->Add(help_text_title, 0, wxLEFT | wxRIGHT, left_align_padding);
|
||||
|
||||
|
||||
@@ -1882,12 +1882,12 @@ void CalibrationPresetPage::show_status(CaliPresetPageStatus status)
|
||||
Enable_Send_Button(false);
|
||||
}
|
||||
else if (status == CaliPresetPageStatus::CaliPresetStatusNeedForceUpgrading) {
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware is required to get updated.");
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware must be updated.");
|
||||
update_print_status_msg(msg_text, true);
|
||||
Enable_Send_Button(false);
|
||||
}
|
||||
else if (status == CaliPresetPageStatus::CaliPresetStatusNeedConsistencyUpgrading) {
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware is required to get updated.");
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware must be updated.");
|
||||
update_print_status_msg(msg_text, true);
|
||||
Enable_Send_Button(false);
|
||||
}
|
||||
|
||||
@@ -116,10 +116,7 @@ void CalibrationPAStartPage::create_page(wxWindow* parent)
|
||||
|
||||
create_about(parent,
|
||||
_L("About this calibration"),
|
||||
_L("Please find the details of Flow Dynamics Calibration from our wiki.\
|
||||
\n\nUsually the calibration is unnecessary. When you start a single color/material print, with the \"flow dynamics calibration\" option checked in the print start menu, the printer will follow the old way, calibrate the filament before the print; When you start a multi color/material print, the printer will use the default compensation parameter for the filament during every filament switch which will have a good result in most cases.\
|
||||
\n\nPlease note that there are a few cases that can make the calibration results unreliable, such as insufficient adhesion on the build plate. Improving adhesion can be achieved by washing the build plate or applying glue. For more information on this topic, please refer to our Wiki.\
|
||||
\n\nThe calibration results have about 10 percent jitter in our test, which may cause the result not exactly the same in each calibration. We are still investigating the root cause to do improvements with new updates."));
|
||||
_L("Please find the details of Flow Dynamics Calibration from our wiki.\n\nUsually the calibration is unnecessary. When you start a single color/material print, with the \"flow dynamics calibration\" option checked in the print start menu, the printer will follow the old way, calibrate the filament before the print; When you start a multi color/material print, the printer will use the default compensation parameter for the filament during every filament switch which will have a good result in most cases.\n\nPlease note that there are a few cases that can make the calibration results unreliable, such as insufficient adhesion on the build plate. Improving adhesion can be achieved by washing the build plate or applying glue. For more information on this topic, please refer to our Wiki.\n\nThe calibration results have about 10 percent jitter in our test, which may cause the result not exactly the same in each calibration. We are still investigating the root cause to do improvements with new updates."));
|
||||
m_top_sizer->Add(m_about_title);
|
||||
m_top_sizer->Add(m_about_content);
|
||||
m_top_sizer->AddSpacer(PRESET_GAP);
|
||||
@@ -255,9 +252,7 @@ void CalibrationFlowRateStartPage::create_page(wxWindow* parent)
|
||||
auto_cali_title->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1});
|
||||
|
||||
auto auto_cali_content = new Label(this,
|
||||
_L("Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, directly measuring the calibration patterns. However, please be advised that the efficacy and accuracy of this method may be compromised with specific types of materials. Particularly, filaments that are transparent or semi-transparent, sparkling-particled, or have a high-reflective finish may not be suitable for this calibration and can produce less-than-desirable results.\
|
||||
\n\nThe calibration results may vary between each calibration or filament. We are still improving the accuracy and compatibility of this calibration through firmware updates over time.\
|
||||
\n\nCaution: Flow Rate Calibration is an advanced process, to be attempted only by those who fully understand its purpose and implications. Incorrect usage can lead to sub-par prints or printer damage. Please make sure to carefully read and understand the process before doing it."));
|
||||
_L("Auto Flow Rate Calibration utilizes Bambu Lab\'s Micro-Lidar technology, directly measuring the calibration patterns. However, please be advised that the efficacy and accuracy of this method may be compromised with specific types of materials. Particularly, filaments that are transparent or semi-transparent, have sparkles, or have a highly-reflective finish may not be suitable for this calibration and can produce less-than-desirable results.\n\nThe calibration results may vary between each calibration or filament. We are still improving the accuracy and compatibility of this calibration through firmware updates over time.\n\nCaution: Flow Rate Calibration is an advanced process, to be attempted only by those who fully understand its purpose and implications. Incorrect usage can lead to sub-par prints or printer damage. Please make sure to carefully read and understand the process before doing it."));
|
||||
auto_cali_content->SetFont(Label::Body_14);
|
||||
auto_cali_content->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH);
|
||||
auto_cali_content->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1});
|
||||
|
||||
@@ -109,8 +109,7 @@ void ConfigManipulation::check_nozzle_temperature_range(DynamicPrintConfig *conf
|
||||
|
||||
if (config->has("nozzle_temperature")) {
|
||||
if (config->opt_int("nozzle_temperature", 0) < temperature_range_low || config->opt_int("nozzle_temperature", 0) > temperature_range_high) {
|
||||
wxString msg_text = _(L("Nozzle may be blocked when the temperature is out of recommended range.\n"
|
||||
"Please make sure whether to use the temperature to print.\n\n"));
|
||||
wxString msg_text = _(L("The nozzle may become clogged when the temperature is out of the recommended range.\nPlease make sure whether to use this temperature to print.\n\n"));
|
||||
msg_text += wxString::Format(_L("The recommended nozzle temperature for this filament type is [%d, %d] degrees Celsius."), temperature_range_low, temperature_range_high);
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK);
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -132,8 +131,7 @@ void ConfigManipulation::check_nozzle_temperature_initial_layer_range(DynamicPri
|
||||
if (config->opt_int("nozzle_temperature_initial_layer", 0) < temperature_range_low ||
|
||||
config->opt_int("nozzle_temperature_initial_layer", 0) > temperature_range_high)
|
||||
{
|
||||
wxString msg_text = _(L("Nozzle may be blocked when the temperature is out of recommended range.\n"
|
||||
"Please make sure whether to use the temperature to print.\n\n"));
|
||||
wxString msg_text = _(L("The nozzle may become clogged when the temperature is out of the recommended range.\nPlease make sure whether to use this temperature to print.\n\n"));
|
||||
msg_text += wxString::Format(_L("The recommended nozzle temperature for this filament type is [%d, %d] degrees Celsius."), temperature_range_low, temperature_range_high);
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK);
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -152,7 +150,7 @@ void ConfigManipulation::check_filament_max_volumetric_speed(DynamicPrintConfig
|
||||
float max_volumetric_speed = config->has("filament_max_volumetric_speed") ? config->opt_float("filament_max_volumetric_speed", (float) 0.5) : 0.5;
|
||||
// BBS: limite the min max_volumetric_speed
|
||||
if (max_volumetric_speed < 0.5) {
|
||||
const wxString msg_text = _(L("Too small max volumetric speed.\nReset to 0.5."));
|
||||
const wxString msg_text = _(L("Too small max volumetric speed.\nValue was reset to 0.5"));
|
||||
MessageDialog dialog(nullptr, msg_text, "", wxICON_WARNING | wxOK);
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -172,8 +170,7 @@ void ConfigManipulation::check_chamber_temperature(DynamicPrintConfig* config)
|
||||
int chamber_min_temp, chamber_max_temp;
|
||||
if (MaterialType::get_chamber_temperature_range(filament_type, chamber_min_temp, chamber_max_temp)) {
|
||||
if (chamber_max_temp < config->option<ConfigOptionInts>("chamber_temperature")->get_at(0)) {
|
||||
wxString msg_text = wxString::Format(_L("Current chamber temperature is higher than the material's safe temperature, this may result in material softening and clogging. "
|
||||
"The maximum safe temperature for the material is %d"), chamber_max_temp);
|
||||
wxString msg_text = wxString::Format(_L("Current chamber temperature is higher than the material\'s safe temperature; this may result in material softening and nozzle clogs. The maximum safe temperature for the material is %d"), chamber_max_temp);
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK);
|
||||
is_msg_dlg_already_exist = true;
|
||||
dialog.ShowModal();
|
||||
@@ -200,7 +197,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
||||
auto gpreset = GUI::wxGetApp().preset_bundle->printers.get_edited_preset();
|
||||
if (layer_height < EPSILON)
|
||||
{
|
||||
const wxString msg_text = _(L("Too small layer height.\nReset to 0.2."));
|
||||
const wxString msg_text = _(L("Layer height too small\nIt has been reset to 0.2"));
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK);
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -227,7 +224,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
||||
//BBS: ironing_spacing shouldn't be too small or equal to zero
|
||||
if (config->opt_float("ironing_spacing") < 0.05)
|
||||
{
|
||||
const wxString msg_text = _(L("Too small ironing spacing.\nReset to 0.1."));
|
||||
const wxString msg_text = _(L("Ironing spacing too small\nIt has been reset to 0.1"));
|
||||
MessageDialog dialog(nullptr, msg_text, "", wxICON_WARNING | wxOK);
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -238,7 +235,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
||||
}
|
||||
if (config->opt_float("support_ironing_spacing") < 0.05)
|
||||
{
|
||||
const wxString msg_text = _(L("Too small ironing spacing.\nReset to 0.1."));
|
||||
const wxString msg_text = _(L("Ironing spacing too small\nIt has been reset to 0.1"));
|
||||
MessageDialog dialog(nullptr, msg_text, "", wxICON_WARNING | wxOK);
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -262,10 +259,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
||||
|
||||
if (abs(config->option<ConfigOptionFloat>("xy_hole_compensation")->value) > 2)
|
||||
{
|
||||
const wxString msg_text = _(L("This setting is only used for model size tunning with small value in some cases.\n"
|
||||
"For example, when model size has small error and hard to be assembled.\n"
|
||||
"For large size tuning, please use model scale function.\n\n"
|
||||
"The value will be reset to 0."));
|
||||
const wxString msg_text = _(L("This setting is only used for tuning model size by small amounts.\nFor example, when the model size has small errors or when tolerances are incorrect. For large adjustments, please use the model scale function.\n\nThe value will be reset to 0."));
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK);
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -277,10 +271,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
||||
|
||||
if (abs(config->option<ConfigOptionFloat>("xy_contour_compensation")->value) > 2)
|
||||
{
|
||||
const wxString msg_text = _(L("This setting is only used for model size tunning with small value in some cases.\n"
|
||||
"For example, when model size has small error and hard to be assembled.\n"
|
||||
"For large size tuning, please use model scale function.\n\n"
|
||||
"The value will be reset to 0."));
|
||||
const wxString msg_text = _(L("This setting is only used for tuning model size by small amounts.\nFor example, when the model size has small errors or when tolerances are incorrect. For large adjustments, please use the model scale function.\n\nThe value will be reset to 0."));
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK);
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -292,10 +283,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
||||
|
||||
if (config->option<ConfigOptionFloat>("elefant_foot_compensation")->value > 1)
|
||||
{
|
||||
const wxString msg_text = _(L("Too large elephant foot compensation is unreasonable.\n"
|
||||
"If really have serious elephant foot effect, please check other settings.\n"
|
||||
"For example, whether bed temperature is too high.\n\n"
|
||||
"The value will be reset to 0."));
|
||||
const wxString msg_text = _(L("The elephant foot compensation value is too large.\nIf there are significant elephant foot issues, please check other settings.\nThe bed temperature may be too high, for example.\n\nThe value will be reset to 0."));
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK);
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
is_msg_dlg_already_exist = true;
|
||||
@@ -1074,9 +1062,7 @@ int ConfigManipulation::show_spiral_mode_settings_dialog(bool is_object_config)
|
||||
msg_text += _(L(" But machines with I3 structure will not generate timelapse videos."));
|
||||
}
|
||||
if (!is_object_config)
|
||||
msg_text += "\n\n" + _(L("Change these settings automatically?\n"
|
||||
"Yes - Change these settings and enable spiral mode automatically\n"
|
||||
"No - Give up using spiral mode this time"));
|
||||
msg_text += "\n\n" + _(L("Change these settings automatically\?\nYes - Change these settings and enable spiral/vase mode automatically\nNo - Cancel enabling spiral mode"));
|
||||
|
||||
MessageDialog dialog(wxGetApp().plater(), msg_text, "",
|
||||
wxICON_WARNING | (!is_object_config ? wxYES | wxNO : wxOK));
|
||||
|
||||
@@ -159,7 +159,7 @@ void ConnectPrinterDialog::on_button_confirm(wxCommandEvent &event)
|
||||
wxString code = m_textCtrl_code->GetTextCtrl()->GetValue();
|
||||
for (char c : code) {
|
||||
if (!(('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))) {
|
||||
show_error(this, _L("Invalid input."));
|
||||
show_error(this, _L("Invalid input"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1049,7 +1049,7 @@ wxWindow *CreateFilamentPresetDialog::create_dialog_buttons()
|
||||
|
||||
if (!m_can_not_find_vendor_checkbox->GetValue()) {
|
||||
if (_L("Select Vendor") == vendor_str) {
|
||||
MessageDialog dlg(this, _L("Vendor is not selected, please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("Vendor is not selected; please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
@@ -1058,7 +1058,7 @@ wxWindow *CreateFilamentPresetDialog::create_dialog_buttons()
|
||||
}
|
||||
} else {
|
||||
if (m_filament_custom_vendor_input->GetTextCtrl()->GetValue().empty()) {
|
||||
MessageDialog dlg(this, _L("Custom vendor is missing, please input custom vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("Custom vendor missing; please input custom vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
@@ -1087,7 +1087,7 @@ wxWindow *CreateFilamentPresetDialog::create_dialog_buttons()
|
||||
wxString serial_str = m_filament_serial_input->GetTextCtrl()->GetValue();
|
||||
std::string serial_name;
|
||||
if (serial_str.empty()) {
|
||||
MessageDialog dlg(this, _L("Filament serial is not entered, please enter serial."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("Filament serial missing; please input serial."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
@@ -1098,7 +1098,7 @@ wxWindow *CreateFilamentPresetDialog::create_dialog_buttons()
|
||||
serial_name = remove_special_key(serial_name);
|
||||
|
||||
if (vendor_name.empty() || serial_name.empty()) {
|
||||
MessageDialog dlg(this, _L("There may be escape characters in the vendor or serial input of filament. Please delete and re-enter."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("There may be disallowed characters in the vendor or serial input of the filament. Please delete and re-enter."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
@@ -1112,7 +1112,7 @@ wxWindow *CreateFilamentPresetDialog::create_dialog_buttons()
|
||||
return;
|
||||
}
|
||||
if (m_can_not_find_vendor_checkbox->GetValue() && str_is_all_digit(vendor_name)) {
|
||||
MessageDialog dlg(this, _L("The vendor cannot be a number. Please re-enter."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("The vendor cannot be a number; please re-enter."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
@@ -1129,8 +1129,7 @@ wxWindow *CreateFilamentPresetDialog::create_dialog_buttons()
|
||||
PresetBundle *preset_bundle = wxGetApp().preset_bundle;
|
||||
if (preset_bundle->filaments.is_alias_exist(filament_preset_name)) {
|
||||
MessageDialog dlg(this,
|
||||
wxString::Format(_L("The Filament name %s you created already exists.\n"
|
||||
"If you continue, the preset created will be displayed with its full name. Do you want to continue?"),
|
||||
wxString::Format(_L("The Filament name %s you created already exists.\nIf you continue, the preset created will be displayed with its full name. Do you want to continue\?"),
|
||||
from_u8(filament_preset_name)),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
if (wxID_YES != dlg.ShowModal()) { return; }
|
||||
@@ -1593,8 +1592,7 @@ CreatePrinterPresetDialog::CreatePrinterPresetDialog(wxWindow *parent)
|
||||
m_page1 = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||
m_page1->SetBackgroundColour(*wxWHITE);
|
||||
m_page1->SetScrollRate(5, 5);
|
||||
m_page2 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);\
|
||||
m_page2->SetBackgroundColour(*wxWHITE);
|
||||
m_page2 = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_page2->SetBackgroundColour(*wxWHITE);
|
||||
|
||||
create_printer_page1(m_page1);
|
||||
create_printer_page2(m_page2);
|
||||
@@ -1756,7 +1754,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent)
|
||||
m_select_model->SetLabelColor(*wxBLACK);
|
||||
}
|
||||
} else {
|
||||
MessageDialog dlg(this, _L("The model was not found, please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
MessageDialog dlg(this, _L("The model was not found; please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
}
|
||||
|
||||
@@ -2190,7 +2188,7 @@ bool CreatePrinterPresetDialog::load_system_and_user_presets_with_curr_model(Pre
|
||||
}
|
||||
if (m_printer_preset_vendor_selected.id.empty() || m_printer_preset_model_selected.id.empty()) {
|
||||
BOOST_LOG_TRIVIAL(info) << "selected id was not found";
|
||||
MessageDialog dlg(this, _L("Preset path was not found, please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
MessageDialog dlg(this, _L("Preset path was not found; please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
}
|
||||
@@ -2211,7 +2209,7 @@ bool CreatePrinterPresetDialog::load_system_and_user_presets_with_curr_model(Pre
|
||||
|
||||
if (preset_path.empty()) {
|
||||
BOOST_LOG_TRIVIAL(info) << "Preset path was not found";
|
||||
MessageDialog dlg(this, _L("Preset path was not found, please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("Preset path was not found; please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
@@ -2248,7 +2246,7 @@ bool CreatePrinterPresetDialog::load_system_and_user_presets_with_curr_model(Pre
|
||||
varient = model_varient.substr(index_at + 3, index_nozzle - index_at - 4);
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "get nozzle failed";
|
||||
MessageDialog dlg(this, _L("The nozzle diameter was not found, please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
MessageDialog dlg(this, _L("The nozzle diameter was not found; please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
}
|
||||
@@ -2259,7 +2257,7 @@ bool CreatePrinterPresetDialog::load_system_and_user_presets_with_curr_model(Pre
|
||||
if (temp_printer_preset) {
|
||||
m_printer_preset = new Preset(*temp_printer_preset);
|
||||
} else {
|
||||
MessageDialog dlg(this, _L("The printer preset was not found, please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
MessageDialog dlg(this, _L("The printer preset was not found; please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
}
|
||||
@@ -2275,7 +2273,7 @@ bool CreatePrinterPresetDialog::load_system_and_user_presets_with_curr_model(Pre
|
||||
}
|
||||
if (preset_path.empty()) {
|
||||
BOOST_LOG_TRIVIAL(info) << "Preset path was not found";
|
||||
MessageDialog dlg(this, _L("Preset path was not found, please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("Preset path was not found; please reselect vendor."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
@@ -2762,7 +2760,7 @@ wxWindow *CreatePrinterPresetDialog::create_page2_dialog_buttons(wxWindow *paren
|
||||
}
|
||||
|
||||
if (!save_printable_area_config(m_printer_preset)) {
|
||||
MessageDialog dlg(this, _L("You have entered an illegal input in the printable area section on the first page. Please check before creating it."),
|
||||
MessageDialog dlg(this, _L("You have entered a disallowed character in the printable area section on the first page. Please use only numbers."),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
show_page1();
|
||||
@@ -2783,9 +2781,7 @@ wxWindow *CreatePrinterPresetDialog::create_page2_dialog_buttons(wxWindow *paren
|
||||
// Confirm if the printer preset has a duplicate name
|
||||
if (!rewritten && preset_bundle->printers.find_preset(printer_preset_name)) {
|
||||
MessageDialog dlg(this,
|
||||
_L("The printer preset you created already has a preset with the same name. Do you want to overwrite it?\n\tYes: Overwrite the printer preset with the "
|
||||
"same name, and filament and process presets with the same preset name will be recreated \nand filament and process presets without the same preset name will be reserve.\n\tCancel: Do not create a preset, return to the "
|
||||
"creation interface."),
|
||||
_L("The printer preset you created already has a preset with the same name. Do you want to overwrite it\?\n\tYes: Overwrite the printer preset with the same name, and filament and process presets with the same preset name will be recreated \nand filament and process presets without the same preset name will be reserved.\n\tCancel: Do not create a preset; return to the creation interface."),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxCANCEL | wxYES_DEFAULT | wxCENTRE);
|
||||
int res = dlg.ShowModal();
|
||||
if (res == wxID_YES) {
|
||||
@@ -3044,7 +3040,7 @@ void CreatePrinterPresetDialog::on_select_printer_model(wxCommandEvent &e)
|
||||
return;
|
||||
}
|
||||
|
||||
MessageDialog dlg(this, _L("Vendor was not found, please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
MessageDialog dlg(this, _L("Vendor was not found; please reselect."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
}
|
||||
@@ -3317,7 +3313,7 @@ bool CreatePrinterPresetDialog::validate_input_valid()
|
||||
std::string vendor_name = get_printer_vendor();
|
||||
std::string model_name = get_printer_model();
|
||||
if ((vendor_name.empty() || model_name.empty())) {
|
||||
MessageDialog dlg(this, _L("You have not selected the vendor and model or entered the custom vendor and model."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("You have not selected the vendor and model or input the custom vendor and model."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
@@ -3348,7 +3344,7 @@ bool CreatePrinterPresetDialog::validate_input_valid()
|
||||
} else if (curr_selected_printer_type == m_create_type.create_nozzle) {
|
||||
wxString printer_name = m_select_printer->GetStringSelection();
|
||||
if (printer_name.empty()) {
|
||||
MessageDialog dlg(this, _L("You have not yet selected the printer to replace the nozzle, please choose."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
MessageDialog dlg(this, _L("You have not yet selected the printer to replace the nozzle for; please choose a printer."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
@@ -3482,8 +3478,7 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con
|
||||
break;
|
||||
case FILAMENT:
|
||||
success_text = new wxStaticText(this, wxID_ANY, _L("Filament Created"));
|
||||
wxString prompt_text = _L("Please go to filament setting to edit your presets if you need.\nPlease note that nozzle temperature, hot bed temperature, and maximum "
|
||||
"volumetric speed has a significant impact on printing quality. Please set them carefully.");
|
||||
wxString prompt_text = _L("Please go to filament settings to edit your presets if you need to.\nPlease note that nozzle temperature, hot bed temperature, and maximum volumetric speed each have a significant impact on printing quality. Please set them carefully.");
|
||||
wxString sync_text = sync_user_preset_need_enabled ? _L("\n\nOrca has detected that your user presets synchronization function is not enabled, "
|
||||
"which may result in unsuccessful Filament settings on the Device page.\n"
|
||||
"Click \"Sync user presets\" to enable the synchronization function.") : "";
|
||||
@@ -3691,8 +3686,7 @@ std::string ExportConfigsDialog::initial_file_name(const wxString &path, const s
|
||||
std::string export_path = into_u8(path);
|
||||
boost::filesystem::path printer_export_path = (boost::filesystem::path(export_path) / file_name).make_preferred();
|
||||
if (boost::filesystem::exists(printer_export_path)) {
|
||||
MessageDialog dlg(this, wxString::Format(_L("The '%s' folder already exists in the current directory. Do you want to clear it and rebuild it.\nIf not, a time suffix will be "
|
||||
"added, and you can modify the name after creation."), file_name), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
MessageDialog dlg(this, wxString::Format(_L("The \'%s\' folder already exists in the current directory. Do you want to clear it and rebuild it\?\nIf not, a time suffix will be added, and you can modify the name after creation."), file_name), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
int res = dlg.ShowModal();
|
||||
if (wxID_YES == res) {
|
||||
try {
|
||||
@@ -3864,7 +3858,7 @@ void ExportConfigsDialog::select_curr_radiobox(std::vector<std::pair<RadioBox *,
|
||||
wxString printer_name = wxString::FromUTF8(preset_name);
|
||||
m_preset_sizer->Add(create_checkbox(m_presets_window, preset.second, printer_name, m_preset), 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(5));
|
||||
}
|
||||
m_serial_text->SetLabel(_L("Only display printer names with changes to printer, filament, and process presets."));
|
||||
m_serial_text->SetLabel(_L("Only display printers with changes to printer, filament, and process presets are displayed."));
|
||||
}else if (export_type == m_exprot_type.filament_bundle) {
|
||||
for (std::pair<std::string, std::vector<std::pair<std::string, Preset*>>> filament_name_to_preset : m_filament_name_to_presets) {
|
||||
if (filament_name_to_preset.second.empty()) continue;
|
||||
@@ -4302,7 +4296,7 @@ wxBoxSizer *ExportConfigsDialog::create_select_printer(wxWindow *parent)
|
||||
wxBoxSizer *horizontal_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
wxBoxSizer * optionSizer = new wxBoxSizer(wxVERTICAL);
|
||||
m_serial_text = new wxStaticText(parent, wxID_ANY, _L("Please select a type you want to export"), wxDefaultPosition, wxDefaultSize);
|
||||
m_serial_text = new wxStaticText(parent, wxID_ANY, _L("Please select a preset type you want to export"), wxDefaultPosition, wxDefaultSize);
|
||||
optionSizer->Add(m_serial_text, 0, wxEXPAND | wxALL, 0);
|
||||
optionSizer->SetMinSize(OPTION_SIZE);
|
||||
horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10));
|
||||
|
||||
@@ -202,7 +202,7 @@ void DailyTipsDataRenderer::render_text(const ImVec2& start_pos, const ImVec2& s
|
||||
|
||||
// wiki
|
||||
if (!m_data.wiki_url.empty()) {
|
||||
std::string tips_line = _u8L("For more information, please check out Wiki");
|
||||
std::string tips_line = _u8L("For more information, please check out our Wiki");
|
||||
std::string wiki_part_text = _u8L("Wiki");
|
||||
std::string first_part_text = tips_line.substr(0, tips_line.find(wiki_part_text));
|
||||
ImVec2 wiki_part_size = ImGui::CalcTextSize(wiki_part_text.c_str());
|
||||
|
||||
@@ -645,7 +645,7 @@ DesktopIntegrationDialog::DesktopIntegrationDialog(wxWindow *parent)
|
||||
|
||||
|
||||
wxBoxSizer *btn_szr = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxButton *btn_perform = new wxButton(this, wxID_ANY, _L("Perform"));
|
||||
wxButton *btn_perform = new wxButton(this, wxID_ANY, _L("Apply"));
|
||||
btn_szr->Add(btn_perform, 0, wxALL, 10);
|
||||
|
||||
btn_perform->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { DesktopIntegrationDialog::perform_desktop_integration(); EndModal(wxID_ANY); });
|
||||
|
||||
@@ -165,7 +165,7 @@ void DeviceErrorDialog::init_button_list()
|
||||
init_button(FILAMENT_EXTRUDED, _L("Filament Extruded, Continue"));
|
||||
init_button(RETRY_FILAMENT_EXTRUDED, _L("Not Extruded Yet, Retry"));
|
||||
init_button(CONTINUE, _L("Finished, Continue"));
|
||||
init_button(LOAD_VIRTUAL_TRAY, _L("Load Filament"));
|
||||
init_button(LOAD_VIRTUAL_TRAY, _L("Load"));
|
||||
init_button(OK_BUTTON, _L("OK"));
|
||||
init_button(FILAMENT_LOAD_RESUME, _L("Filament Loaded, Resume"));
|
||||
init_button(JUMP_TO_LIVEVIEW, _L("View Liveview"));
|
||||
|
||||
@@ -38,7 +38,7 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title)
|
||||
wxString install_failed_url = wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-get-network-plugin");
|
||||
|
||||
wxString download_failed_msg = _L("Failed to download the plug-in. Please check your firewall settings and VPN software and retry.");
|
||||
wxString install_failed_msg = _L("Failed to install the plug-in. The plug-in file may be in use. Please restart OrcaSlicer and try again. Also check whether it is blocked or deleted by anti-virus software.");
|
||||
wxString install_failed_msg = _L("Failed to install the plug-in. The plug-in file may be in use. Please restart OrcaSlicer and try again. Also check whether it is blocked or has been deleted by anti-virus software.");
|
||||
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
@@ -86,7 +86,7 @@ void ExtrusionCalibration::create()
|
||||
select_sizer->Add(m_comboBox_filament, 0, wxEXPAND);
|
||||
select_sizer->Add(0, EXTRUSION_CALIBRATION_WIDGET_GAP, 0, 0);
|
||||
|
||||
auto bed_type_sel_text = new wxStaticText(m_step_1_panel, wxID_ANY, _L("Bed Type"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
auto bed_type_sel_text = new wxStaticText(m_step_1_panel, wxID_ANY, _L("Plate Type"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
select_sizer->Add(bed_type_sel_text, 0, wxALIGN_LEFT);
|
||||
select_sizer->AddSpacer(FromDIP(4));
|
||||
|
||||
@@ -170,7 +170,7 @@ void ExtrusionCalibration::create()
|
||||
m_error_text->SetForegroundColour(wxColour(208, 27, 27));
|
||||
m_error_text->Hide();
|
||||
|
||||
m_button_cali = new Button(m_step_1_panel, _L("Start calibration"));
|
||||
m_button_cali = new Button(m_step_1_panel, _L("Start"));
|
||||
m_button_cali->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
|
||||
m_button_cali->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_cali, this);
|
||||
|
||||
@@ -239,7 +239,7 @@ void ExtrusionCalibration::create()
|
||||
m_button_save_result->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
|
||||
m_button_save_result->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_save, this);
|
||||
|
||||
m_button_last_step = new Button(m_step_2_panel, _L("Last Step")); // Back for english
|
||||
m_button_last_step = new Button(m_step_2_panel, _L("Back")); // Back for english
|
||||
m_button_last_step->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
|
||||
m_button_last_step->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_last, this);
|
||||
|
||||
@@ -712,12 +712,12 @@ void ExtrusionCalibration::post_select_event() {
|
||||
void ExtrusionCalibration::set_step(int step_index)
|
||||
{
|
||||
if (step_index == 2) {
|
||||
wxString title_text = wxString::Format("%s - %s 2/2", _L("Dynamic flow Calibration"), _L("Step"));
|
||||
wxString title_text = wxString::Format("%s - %s 2/2", _L("Dynamic flow calibration"), _L("Step"));
|
||||
SetTitle(title_text);
|
||||
m_step_1_panel->Hide();
|
||||
m_step_2_panel->Show();
|
||||
} else {
|
||||
wxString title_text = wxString::Format("%s - %s 1/2", _L("Dynamic flow Calibration"), _L("Step"));
|
||||
wxString title_text = wxString::Format("%s - %s 1/2", _L("Dynamic flow calibration"), _L("Step"));
|
||||
SetTitle(title_text);
|
||||
m_step_1_panel->Show();
|
||||
m_step_2_panel->Hide();
|
||||
|
||||
@@ -367,7 +367,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
||||
}
|
||||
|
||||
wxString label = m_opt.full_label.empty() ? _(m_opt.label) : _(m_opt.full_label);
|
||||
show_error(m_parent, from_u8((boost::format(_utf8(L("%s can't be a percentage"))) % into_u8(label)).str()));
|
||||
show_error(m_parent, from_u8((boost::format(_utf8(L("%s can\u2019t be a percentage"))) % into_u8(label)).str()));
|
||||
set_value(double_to_string(m_opt.min), true);
|
||||
m_value = double(m_opt.min);
|
||||
break;
|
||||
|
||||
@@ -2795,7 +2795,7 @@ void GCodeViewer::render_all_plates_stats(const std::vector<const GCodeProcessor
|
||||
ImGui::Dummy(ImVec2(0.0f, ImGui::GetFontSize() * 0.1));
|
||||
ImGui::Dummy({ window_padding, window_padding });
|
||||
ImGui::SameLine();
|
||||
imgui.title(_u8L("Total Estimation"));
|
||||
imgui.title(_u8L("Total estimation"));
|
||||
|
||||
ImGui::Dummy({ window_padding, window_padding });
|
||||
ImGui::SameLine();
|
||||
@@ -3681,8 +3681,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
append_headers({{_u8L("Line Type"), offsets[0]}, {_u8L("Time"), offsets[1]}, {"%", offsets[2]}, {_u8L("Usage"), offsets[3]}, {_u8L("Display"), offsets[5]}});
|
||||
break;
|
||||
}
|
||||
case libvgcode::EViewType::Height: { imgui.title(_u8L("Layer Height (mm)")); break; }
|
||||
case libvgcode::EViewType::Width: { imgui.title(_u8L("Line Width (mm)")); break; }
|
||||
case libvgcode::EViewType::Height: { imgui.title(_u8L("Layer height (mm)")); break; }
|
||||
case libvgcode::EViewType::Width: { imgui.title(_u8L("Line width (mm)")); break; }
|
||||
case libvgcode::EViewType::Speed:
|
||||
{
|
||||
imgui.title(_u8L("Speed (mm/s)"));
|
||||
@@ -3703,7 +3703,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
imgui.title(_u8L("Jerk (mm/s)"));
|
||||
break;
|
||||
}
|
||||
case libvgcode::EViewType::FanSpeed: { imgui.title(_u8L("Fan Speed (%)")); break; }
|
||||
case libvgcode::EViewType::FanSpeed: { imgui.title(_u8L("Fan speed (%)")); break; }
|
||||
case libvgcode::EViewType::Temperature: { imgui.title(_u8L("Temperature (°C)")); break; }
|
||||
// ORCA: Add Pressure Advance visualization support
|
||||
case libvgcode::EViewType::PressureAdvance:{ imgui.title(_u8L("Pressure Advance")); break; }
|
||||
@@ -3851,7 +3851,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
}
|
||||
else if (type == libvgcode::EOptionType::ToolChanges) {
|
||||
const auto option_values = option_stats(type);
|
||||
append_option_item_with_type(type, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::ToolChanges)), _u8L("Filament Changes"), visible,
|
||||
append_option_item_with_type(type, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::ToolChanges)), _u8L("Filament changes"), visible,
|
||||
option_values[0], option_values[1], option_values[2], option_values[3]);
|
||||
}
|
||||
else if (type == libvgcode::EOptionType::Wipes) {
|
||||
@@ -4548,7 +4548,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
|
||||
// total estimated printing time section
|
||||
ImGui::Spacing();
|
||||
std::string time_title = m_viewer.get_view_type() == libvgcode::EViewType::FeatureType ? _u8L("Total Estimation") : _u8L("Time Estimation");
|
||||
std::string time_title = m_viewer.get_view_type() == libvgcode::EViewType::FeatureType ? _u8L("Total estimation") : _u8L("Time Estimation");
|
||||
auto can_show_mode_button = [this](libvgcode::ETimeMode mode) {
|
||||
std::vector<std::string> time_strs;
|
||||
for (size_t i = 0; i < m_print_statistics.modes.size(); ++i) {
|
||||
|
||||
@@ -2435,7 +2435,7 @@ void GLCanvas3D::mirror_selection(Axis axis)
|
||||
transformation_type.set_relative();
|
||||
m_selection.setup_cache();
|
||||
m_selection.mirror(axis, transformation_type);
|
||||
do_mirror(L("Mirror Object"));
|
||||
do_mirror(L("Mirror object"));
|
||||
// BBS
|
||||
//wxGetApp().obj_manipul()->set_dirty();
|
||||
}
|
||||
@@ -3664,7 +3664,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
|
||||
thiz = this;
|
||||
translationProcessor = TranslationProcessor(
|
||||
[this]() {
|
||||
do_move(L("Tool Move"));
|
||||
do_move(L("Tool move"));
|
||||
m_gizmos.update_data();
|
||||
|
||||
// BBS
|
||||
@@ -4654,7 +4654,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
m_layers_editing.accept_changes(*this);
|
||||
}
|
||||
else if (m_mouse.drag.move_volume_idx != -1 && m_mouse.dragging) {
|
||||
do_move(L("Move Object"));
|
||||
do_move(L("Move object"));
|
||||
// BBS
|
||||
//wxGetApp().obj_manipul()->set_dirty();
|
||||
// Let the plater know that the dragging finished, so a delayed refresh
|
||||
@@ -5799,7 +5799,7 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa
|
||||
imgui->set_next_window_pos(x, y, ImGuiCond_Always, 1.0f, 0.0f);
|
||||
#endif
|
||||
|
||||
imgui->begin(_L("Auto Orientation options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
|
||||
imgui->begin(_L("Auto orientation options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
|
||||
|
||||
OrientSettings settings = get_orient_settings();
|
||||
OrientSettings& settings_out = get_orient_settings();
|
||||
@@ -9525,7 +9525,7 @@ void GLCanvas3D::_render_assemble_control()
|
||||
ImVec2 window_padding = ImGui::GetStyle().WindowPadding;
|
||||
|
||||
imgui->set_next_window_pos(canvas_w / 2, canvas_h - 10.0f * get_scale(), ImGuiCond_Always, 0.5f, 1.0f);
|
||||
imgui->begin(_L("Assemble Control"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar);
|
||||
imgui->begin(_L("Assembly Control"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar);
|
||||
|
||||
ImGui::AlignTextToFramePadding();
|
||||
float tooltip_button_width;
|
||||
@@ -10111,7 +10111,7 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state)
|
||||
}
|
||||
case EWarning::ObjectOutside: text = _u8L("An object is laid over the plate boundaries."); break;
|
||||
case EWarning::ToolHeightOutside: text = _u8L("A G-code path goes beyond the max print height."); error = ErrorType::SLICING_ERROR; break;
|
||||
case EWarning::ToolpathOutside: text = _u8L("A G-code path goes beyond the plate boundaries."); error = ErrorType::SLICING_ERROR; break;
|
||||
case EWarning::ToolpathOutside: text = _u8L("A G-code path goes beyond plate boundaries."); error = ErrorType::SLICING_ERROR; break;
|
||||
case EWarning::TPUPrintableError: {
|
||||
text = _u8L("Not support printing 2 or more TPU filaments.");
|
||||
error = ErrorType::SLICING_ERROR;
|
||||
|
||||
@@ -403,7 +403,7 @@ void show_substitutions_info(const PresetsConfigSubstitutions& presets_config_su
|
||||
add_config_substitutions(substitution.substitutions, changes);
|
||||
}
|
||||
|
||||
InfoDialog msg(nullptr, _L("Configuration package was loaded, but some values were not recognized."), substitution_message(changes), true);
|
||||
InfoDialog msg(nullptr, _L("The configuration package was loaded, but some values were not recognized."), substitution_message(changes), true);
|
||||
msg.ShowModal();
|
||||
}
|
||||
|
||||
@@ -413,7 +413,7 @@ void show_substitutions_info(const ConfigSubstitutions& config_substitutions, co
|
||||
add_config_substitutions(config_substitutions, changes);
|
||||
|
||||
InfoDialog msg(nullptr,
|
||||
format_wxstr(_L("Configuration file \"%1%\" was loaded, but some values were not recognized."), from_u8(filename)),
|
||||
format_wxstr(_L("The configuration file \u201c%1%\u201d was loaded, but some values were not recognized."), from_u8(filename)),
|
||||
substitution_message(changes), true);
|
||||
msg.ShowModal();
|
||||
}
|
||||
|
||||
@@ -4493,7 +4493,7 @@ void GUI_App::request_user_logout(const std::string& provider/* = ORCA_CLOUD_PRO
|
||||
/* delete old user settings */
|
||||
bool transfer_preset_changes = false;
|
||||
wxString header = _L("Some presets are modified.") + "\n" +
|
||||
_L("You can keep the modified presets to the new project, discard or save changes as new presets.");
|
||||
_L("You can keep the modified presets for the new project, discard, or save changes as new presets.");
|
||||
wxGetApp().check_and_keep_current_preset_changes(_L("User logged out"), header, ActionButtons::KEEP | ActionButtons::SAVE, &transfer_preset_changes);
|
||||
|
||||
remove_user_presets();
|
||||
|
||||
@@ -114,11 +114,11 @@ std::map<std::string, std::vector<SimpleSettingData>> SettingsFactory::PART_CATE
|
||||
{"zaa_min_z", "", 4}}},
|
||||
{L("Strength"),
|
||||
{{"wall_loops", "", 1},
|
||||
{"top_shell_layers", L("Top Solid Layers"), 1},
|
||||
{"top_shell_thickness", L("Top Minimum Shell Thickness"), 1},
|
||||
{"top_shell_layers", L("Top solid layers"), 1},
|
||||
{"top_shell_thickness", L("Top minimum shell thickness"), 1},
|
||||
{"top_surface_density", L("Top Surface Density"), 1},
|
||||
{"bottom_shell_layers", L("Bottom Solid Layers"), 1},
|
||||
{"bottom_shell_thickness", L("Bottom Minimum Shell Thickness"), 1},
|
||||
{"bottom_shell_layers", L("Bottom solid layers"), 1},
|
||||
{"bottom_shell_thickness", L("Bottom minimum shell thickness"), 1},
|
||||
{"bottom_surface_density", L("Bottom Surface Density"), 1},
|
||||
{"sparse_infill_density", "", 1},
|
||||
{"fill_multiline", "", 1},
|
||||
@@ -304,11 +304,11 @@ std::map<std::string, std::string> SettingsFactory::CATEGORY_ICON =
|
||||
{ L("Shell") , "blank_14" },
|
||||
{ L("Infill") , "blank_14" },
|
||||
{ L("Ironing") , "blank_14" },
|
||||
{ L("Fuzzy Skin") , "menu_fuzzy_skin" },
|
||||
{ L("Fuzzy skin") , "menu_fuzzy_skin" },
|
||||
{ L("Support") , "support" },
|
||||
{ L("Speed") , "blank_14" },
|
||||
{ L("Extruders") , "blank_14" },
|
||||
{ L("Extrusion Width") , "blank_14" },
|
||||
{ L("Extrusion width") , "blank_14" },
|
||||
{ L("Wipe options") , "blank_14" },
|
||||
{ L("Bed adhesion") , "blank_14" },
|
||||
// { L("Speed > Acceleration") , "time" },
|
||||
@@ -331,11 +331,11 @@ wxBitmap SettingsFactory::get_category_bitmap(const std::string& category_name,
|
||||
// Note: id accords to type of the sub-object (adding volume), so sequence of the menu items is important
|
||||
static const constexpr std::array<std::pair<const char *, const char *>, 5> ADD_VOLUME_MENU_ITEMS = {{
|
||||
// menu_item Name menu_item bitmap name
|
||||
{L("Add part"), "menu_add_part" }, // ~ModelVolumeType::MODEL_PART
|
||||
{L("Add negative part"), "menu_add_negative" }, // ~ModelVolumeType::NEGATIVE_VOLUME
|
||||
{L("Add modifier"), "menu_add_modifier"}, // ~ModelVolumeType::PARAMETER_MODIFIER
|
||||
{L("Add support blocker"), "menu_support_blocker"}, // ~ModelVolumeType::SUPPORT_BLOCKER
|
||||
{L("Add support enforcer"), "menu_support_enforcer"}, // ~ModelVolumeType::SUPPORT_ENFORCER
|
||||
{L("Add Part"), "menu_add_part" }, // ~ModelVolumeType::MODEL_PART
|
||||
{L("Add Negative Part"), "menu_add_negative" }, // ~ModelVolumeType::NEGATIVE_VOLUME
|
||||
{L("Add Modifier"), "menu_add_modifier"}, // ~ModelVolumeType::PARAMETER_MODIFIER
|
||||
{L("Add Support Blocker"), "menu_support_blocker"}, // ~ModelVolumeType::SUPPORT_BLOCKER
|
||||
{L("Add Support Enforcer"), "menu_support_enforcer"}, // ~ModelVolumeType::SUPPORT_ENFORCER
|
||||
}};
|
||||
|
||||
// Note: id accords to type of the sub-object (adding volume), so sequence of the menu items is important
|
||||
@@ -726,7 +726,7 @@ void MenuFactory::append_menu_items_add_volume(wxMenu* menu)
|
||||
|
||||
wxMenuItem* MenuFactory::append_menu_item_layers_editing(wxMenu* menu)
|
||||
{
|
||||
return append_menu_item(menu, wxID_ANY, _L("Height range Modifier"), "",
|
||||
return append_menu_item(menu, wxID_ANY, _L("Height Range Modifier"), "",
|
||||
[](wxCommandEvent&) { obj_list()->layers_editing(); wxGetApp().params_panel()->switch_to_object(); }, "height_range_modifier", menu,
|
||||
[]() { return obj_list()->is_instance_or_object_selected(); }, m_parent);
|
||||
}
|
||||
@@ -735,7 +735,7 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_)
|
||||
{
|
||||
MenuWithSeparators* menu = dynamic_cast<MenuWithSeparators*>(menu_);
|
||||
|
||||
const wxString menu_name = _L("Add settings");
|
||||
const wxString menu_name = _L("Add Settings");
|
||||
// Delete old items from settings popupmenu
|
||||
auto settings_id = menu->FindItem(menu_name);
|
||||
if (settings_id != wxNOT_FOUND)
|
||||
@@ -801,7 +801,7 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_)
|
||||
|
||||
wxMenuItem* MenuFactory::append_menu_item_change_type(wxMenu* menu)
|
||||
{
|
||||
const wxString menu_name = _L("Change type");
|
||||
const wxString menu_name = _L("Change Type");
|
||||
|
||||
// Delete old menu item if exists
|
||||
const int item_id = menu->FindItem(menu_name);
|
||||
@@ -870,7 +870,7 @@ wxMenuItem* MenuFactory::append_menu_item_change_type(wxMenu* menu)
|
||||
|
||||
wxMenuItem* MenuFactory::append_menu_item_instance_to_object(wxMenu* menu)
|
||||
{
|
||||
wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Set as an individual object"), "",
|
||||
wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Set as An Individual Object"), "",
|
||||
[](wxCommandEvent&) { obj_list()->split_instances(); }, "", menu);
|
||||
|
||||
/* New behavior logic:
|
||||
@@ -882,7 +882,7 @@ wxMenuItem* MenuFactory::append_menu_item_instance_to_object(wxMenu* menu)
|
||||
{
|
||||
const Selection& selection = plater()->canvas3D()->get_selection();
|
||||
evt.SetText(selection.is_single_full_object() ?
|
||||
_L("Set as individual objects") : _L("Set as an individual object"));
|
||||
_L("Set as Individual Objects") : _L("Set as An Individual Object"));
|
||||
|
||||
evt.Enable(plater()->can_set_instance_to_object());
|
||||
}, menu_item->GetId());
|
||||
@@ -929,7 +929,7 @@ wxMenuItem* MenuFactory::append_menu_item_printable(wxMenu* menu)
|
||||
wxMenuItem* MenuFactory::append_menu_item_auto_drop(wxMenu* menu)
|
||||
{
|
||||
wxString menu_text = _L("Auto Drop");
|
||||
wxString menu_tooltip = _L("Automatically drops the selected object to the build plate");
|
||||
wxString menu_tooltip = _L("Automatically drops the selected object to the build plate.");
|
||||
wxMenuItem* menu_item_auto_drop = append_menu_check_item(
|
||||
menu, wxID_ANY, menu_text, menu_tooltip,
|
||||
[](wxCommandEvent&) { obj_list()->toggle_auto_drop(); }, menu);
|
||||
@@ -953,7 +953,7 @@ void MenuFactory::append_menu_item_rename(wxMenu* menu)
|
||||
|
||||
wxMenuItem* MenuFactory::append_menu_item_fix_through_cgal(wxMenu* menu)
|
||||
{
|
||||
wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Fix model"), "",
|
||||
wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Fix Model"), "",
|
||||
[](wxCommandEvent&) { obj_list()->fix_through_cgal(); }, "", menu,
|
||||
[]() {return plater()->can_fix_through_cgal(); }, plater());
|
||||
|
||||
@@ -1222,10 +1222,10 @@ void MenuFactory::append_menu_items_convert_unit(wxMenu* menu)
|
||||
};
|
||||
|
||||
std::vector<std::pair<ConversionType, wxString>> items = {
|
||||
{ConversionType::CONV_FROM_INCH , _L("Convert from inches") },
|
||||
{ConversionType::CONV_TO_INCH , _L("Restore to inches") },
|
||||
{ConversionType::CONV_FROM_METER, _L("Convert from meters") },
|
||||
{ConversionType::CONV_TO_METER , _L("Restore to meters") } };
|
||||
{ConversionType::CONV_FROM_INCH , _L("Convert from Inches") },
|
||||
{ConversionType::CONV_TO_INCH , _L("Restore to Inch") },
|
||||
{ConversionType::CONV_FROM_METER, _L("Convert from Meters") },
|
||||
{ConversionType::CONV_TO_METER , _L("Restore to Meter") } };
|
||||
|
||||
for (auto item : items) {
|
||||
int menu_id = menu->FindItem(item.second);
|
||||
@@ -1272,11 +1272,11 @@ void MenuFactory::append_menu_items_mirror(wxMenu* menu)
|
||||
if (!mirror_menu)
|
||||
return;
|
||||
|
||||
append_menu_item(mirror_menu, wxID_ANY, _L("Along X axis"), _L("Mirror along the X axis"),
|
||||
append_menu_item(mirror_menu, wxID_ANY, _L("Along X Axis"), _L("Mirror along the X Axis"),
|
||||
[](wxCommandEvent&) { plater()->mirror(X); }, "menu_mirror_x", menu);
|
||||
append_menu_item(mirror_menu, wxID_ANY, _L("Along Y axis"), _L("Mirror along the Y axis"),
|
||||
append_menu_item(mirror_menu, wxID_ANY, _L("Along Y Axis"), _L("Mirror along the Y Axis"),
|
||||
[](wxCommandEvent&) { plater()->mirror(Y); }, "menu_mirror_y", menu);
|
||||
append_menu_item(mirror_menu, wxID_ANY, _L("Along Z axis"), _L("Mirror along the Z axis"),
|
||||
append_menu_item(mirror_menu, wxID_ANY, _L("Along Z Axis"), _L("Mirror along the Z Axis"),
|
||||
[](wxCommandEvent&) { plater()->mirror(Z); }, "menu_mirror_z", menu);
|
||||
|
||||
append_submenu(menu, mirror_menu, wxID_ANY, _L("Mirror"), _L("Mirror object"), "",
|
||||
@@ -1436,10 +1436,10 @@ void MenuFactory::create_object_menu()
|
||||
if (!split_menu)
|
||||
return;
|
||||
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Objects"), _L("Split the selected object into multiple objects"),
|
||||
[](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", &m_object_menu,
|
||||
[]() { return plater()->can_split(true); }, m_parent);
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Parts"), _L("Split the selected object into multiple parts"),
|
||||
[](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", &m_object_menu,
|
||||
[]() { return plater()->can_split(false); }, m_parent);
|
||||
|
||||
@@ -1479,10 +1479,10 @@ void MenuFactory::create_extra_object_menu()
|
||||
wxMenu* split_menu = new wxMenu();
|
||||
if (!split_menu)
|
||||
return;
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Objects"), _L("Split the selected object into multiple objects"),
|
||||
[](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", &m_object_menu,
|
||||
[]() { return plater()->can_split(true); }, m_parent);
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Parts"), _L("Split the selected object into multiple parts"),
|
||||
[](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", &m_object_menu,
|
||||
[]() { return plater()->can_split(false); }, m_parent);
|
||||
|
||||
@@ -1617,10 +1617,10 @@ void MenuFactory::create_bbl_part_menu()
|
||||
if (!split_menu)
|
||||
return;
|
||||
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Objects"), _L("Split the selected object into multiple objects"),
|
||||
[](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", menu,
|
||||
[]() { return plater()->can_split(true); }, m_parent);
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Parts"), _L("Split the selected object into multiple parts"),
|
||||
[](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", menu,
|
||||
[]() { return plater()->can_split(false); }, m_parent);
|
||||
|
||||
@@ -1964,10 +1964,10 @@ wxMenu* MenuFactory::multi_selection_menu()
|
||||
append_menu_item_change_filament(menu);
|
||||
wxMenu* split_menu = new wxMenu();
|
||||
if (split_menu) {
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Objects"), _L("Split the selected object into multiple objects"),
|
||||
[](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", menu,
|
||||
[]() { return plater()->can_split(true); }, m_parent);
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"),
|
||||
append_menu_item(split_menu, wxID_ANY, _L("To Parts"), _L("Split the selected object into multiple parts"),
|
||||
[](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", menu,
|
||||
[]() { return plater()->can_split(false); }, m_parent);
|
||||
|
||||
@@ -2315,7 +2315,7 @@ void MenuFactory::append_menu_item_set_auto_drop(wxMenu* menu)
|
||||
const bool current_auto_drop = selection.get_auto_drop();
|
||||
|
||||
wxString menu_text = _L("Auto Drop");
|
||||
wxString menu_tooltip = _L("Automatically snaps the selected object to the build plate");
|
||||
wxString menu_tooltip = _L("Automatically snaps the selected object to the build plate.");
|
||||
wxMenuItem* menu_item_set_auto_drop = append_menu_check_item(
|
||||
menu, wxID_ANY, menu_text, menu_tooltip,
|
||||
[this, current_auto_drop](wxCommandEvent&) {
|
||||
|
||||
@@ -70,7 +70,7 @@ int GUI_Run(GUI_InitParams ¶ms)
|
||||
wxMessageBox(boost::nowide::widen(ex.what()), _L("Orca Slicer GUI initialization failed"), wxICON_STOP);
|
||||
} catch (const std::exception &ex) {
|
||||
BOOST_LOG_TRIVIAL(error) << ex.what() << std::endl;
|
||||
wxMessageBox(format_wxstr(_L("Fatal error, exception caught: %1%"), ex.what()), _L("Orca Slicer GUI initialization failed"), wxICON_STOP);
|
||||
wxMessageBox(format_wxstr(_L("Fatal error, exception: %1%"), ex.what()), _L("Orca Slicer GUI initialization failed"), wxICON_STOP);
|
||||
}
|
||||
// error
|
||||
return 1;
|
||||
|
||||
@@ -669,16 +669,16 @@ void ObjectList::set_tooltip_for_item(const wxPoint& pt)
|
||||
if (col->GetModelColumn() == (unsigned int)colEditing) {
|
||||
if (node->IsActionEnabled())
|
||||
#ifdef __WXOSX__
|
||||
tooltip = _(L("Right button click the icon to drop the object settings"));
|
||||
tooltip = _(L("Right click the icon to drop the object settings"));
|
||||
#else
|
||||
tooltip = _(L("Click the icon to reset all settings of the object"));
|
||||
#endif //__WXMSW__
|
||||
}
|
||||
else if (col->GetModelColumn() == (unsigned int)colPrint)
|
||||
#ifdef __WXOSX__
|
||||
tooltip = _(L("Right button click the icon to drop the object printable property"));
|
||||
tooltip = _(L("Right click the icon to drop the object printable property"));
|
||||
#else
|
||||
tooltip = _(L("Click the icon to toggle printable property of the object"));
|
||||
tooltip = _(L("Click the icon to toggle printable properties of the object"));
|
||||
#endif //__WXMSW__
|
||||
// BBS
|
||||
else if (col->GetModelColumn() == (unsigned int)colSupportPaint) {
|
||||
@@ -688,7 +688,7 @@ void ObjectList::set_tooltip_for_item(const wxPoint& pt)
|
||||
}
|
||||
else if (col->GetModelColumn() == (unsigned int)colColorPaint) {
|
||||
if (node->HasColorPainting())
|
||||
tooltip = _(L("Click the icon to edit color painting of the object"));
|
||||
tooltip = _(L("Click the icon to edit color painting for the object"));
|
||||
}
|
||||
else if (col->GetModelColumn() == (unsigned int)colSinking) {
|
||||
if (node->HasSinking())
|
||||
@@ -2782,10 +2782,7 @@ bool ObjectList::del_from_cut_object(bool is_cut_connector, bool is_model_part/*
|
||||
const wxString msg_end = is_cut_connector ? ("\n" + _L("To save cut correspondence you can delete all connectors from all related objects.")) : "";
|
||||
|
||||
InfoDialog dialog(wxGetApp().plater(), title,
|
||||
(_L("This action will break a cut correspondence.\n"
|
||||
"After that model consistency can't be guaranteed.\n"
|
||||
"\n"
|
||||
"To manipulate with solid parts or negative volumes you have to invalidate cut information first.") + msg_end ),
|
||||
(_L("This action will break a cut correspondence.\nAfter that, model consistency can\'t be guaranteed.\n\nTo manipulate with solid parts or negative volumes you have to invalidate cut information first.") + msg_end ),
|
||||
false, buttons_style | wxCANCEL_DEFAULT | wxICON_WARNING);
|
||||
|
||||
dialog.SetButtonLabel(wxID_YES, _L("Invalidate cut info"));
|
||||
@@ -3718,16 +3715,16 @@ void ObjectList::part_selection_changed()
|
||||
else {
|
||||
if (type & itSettings) {
|
||||
if (parent_type & itObject) {
|
||||
og_name = _L("Object Settings to modify");
|
||||
og_name = _L("Object Settings to Modify");
|
||||
m_config = &(*m_objects)[obj_idx]->config;
|
||||
}
|
||||
else if (parent_type & itVolume) {
|
||||
og_name = _L("Part Settings to modify");
|
||||
og_name = _L("Part Settings to Modify");
|
||||
volume_id = m_objects_model->GetVolumeIdByItem(parent);
|
||||
m_config = &(*m_objects)[obj_idx]->volumes[volume_id]->config;
|
||||
}
|
||||
else if (parent_type & itLayer) {
|
||||
og_name = _L("Layer range Settings to modify");
|
||||
og_name = _L("Layer Range Settings to Modify");
|
||||
m_config = &get_item_config(parent);
|
||||
}
|
||||
update_and_show_settings = true;
|
||||
@@ -5506,7 +5503,7 @@ void ObjectList::change_part_type()
|
||||
}
|
||||
|
||||
if (model_part_cnt == 1) {
|
||||
Slic3r::GUI::show_error(nullptr, _(L("The type of the last solid object part is not to be changed.")));
|
||||
Slic3r::GUI::show_error(nullptr, _(L("The type of the last solid object part cannot be changed.")));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -5619,7 +5616,7 @@ void ObjectList::change_part_type()
|
||||
}
|
||||
|
||||
if (would_remove_all_for_any) {
|
||||
Slic3r::GUI::show_error(nullptr, _(L("The type of the last solid object part is not to be changed.")));
|
||||
Slic3r::GUI::show_error(nullptr, _(L("The type of the last solid object part cannot be changed.")));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -5796,7 +5793,7 @@ void ObjectList::set_volume_type(ModelVolumeType new_type)
|
||||
for (const auto& sel : selected_part_cnt) {
|
||||
auto it = total_part_cnt.find(sel.first);
|
||||
if (it != total_part_cnt.end() && it->second > 0 && sel.second == it->second) {
|
||||
Slic3r::GUI::show_error(nullptr, _(L("The type of the last solid object part is not to be changed.")));
|
||||
Slic3r::GUI::show_error(nullptr, _(L("The type of the last solid object part cannot be changed.")));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -6200,13 +6197,13 @@ void ObjectList::fix_through_cgal()
|
||||
wxString msg;
|
||||
wxString bullet_suf = "\n - ";
|
||||
if (!succes_models.empty()) {
|
||||
msg = _L_PLURAL("Following model object has been repaired", "Following model objects have been repaired", succes_models.size()) + ":";
|
||||
msg = _L_PLURAL("The following model object has been repaired", "The following model objects have been repaired", succes_models.size()) + ":";
|
||||
for (auto& model : succes_models)
|
||||
msg += bullet_suf + from_u8(model);
|
||||
msg += "\n\n";
|
||||
}
|
||||
if (!failed_models.empty()) {
|
||||
msg += _L_PLURAL("Failed to repair following model object", "Failed to repair following model objects", failed_models.size()) + ":\n";
|
||||
msg += _L_PLURAL("Failed to repair the following model object", "Failed to repair the following model objects", failed_models.size()) + ":\n";
|
||||
for (auto& model : failed_models)
|
||||
msg += bullet_suf + from_u8(model.first) + ": " + _(model.second);
|
||||
}
|
||||
|
||||
@@ -667,7 +667,7 @@ void GLGizmoAdvancedCut::perform_cut(const Selection& selection)
|
||||
if (its_num_open_edges(new_objects[i]->volumes[j]->mesh().its) > 0) {
|
||||
if (!is_showed_dialog) {
|
||||
is_showed_dialog = true;
|
||||
MessageDialog dlg(nullptr, _L("Non-manifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxNO);
|
||||
MessageDialog dlg(nullptr, _L("Non-manifold edges be caused by cut tool: do you want to fix now\?"), "", wxYES | wxNO);
|
||||
int ret = dlg.ShowModal();
|
||||
if (ret == wxID_YES) {
|
||||
user_fix_model = true;
|
||||
|
||||
@@ -3582,7 +3582,7 @@ void GLGizmoCut3D::perform_cut(const Selection& selection)
|
||||
if (its_num_open_edges(new_objects[i]->volumes[j]->mesh().its) > 0) {
|
||||
if (!is_showed_dialog) {
|
||||
is_showed_dialog = true;
|
||||
MessageDialog dlg(nullptr, _L("Non-manifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL);
|
||||
MessageDialog dlg(nullptr, _L("Non-manifold edges be caused by cut tool: do you want to fix now\?"), "", wxYES | wxCANCEL);
|
||||
int ret = dlg.ShowModal();
|
||||
if (ret == wxID_YES) {
|
||||
user_fix_model = true;
|
||||
|
||||
@@ -80,10 +80,10 @@ bool GLGizmoFdmSupports::on_init()
|
||||
// BBS
|
||||
m_shortcut_key = WXK_CONTROL_L;
|
||||
|
||||
m_desc["perform"] = _L("Perform");
|
||||
m_desc["perform"] = _L("Apply");
|
||||
m_desc["on_overhangs_only"] = _L("On highlighted overhangs only");
|
||||
m_desc["remove_all"] = _L("Erase all");
|
||||
m_desc["highlight_by_angle"] = _L("Highlight overhang areas");
|
||||
m_desc["highlight_by_angle"] = _L("Highlight overhangs");
|
||||
m_desc["tool_type"] = _L("Tool type");
|
||||
m_desc["gap_fill"] = _L("Gap fill");
|
||||
m_desc["reset_direction"] = _L("Reset direction");
|
||||
@@ -850,7 +850,7 @@ void GLGizmoFdmSupports::run_thread()
|
||||
if (!m_print_instance.print_object->support_layers().size())
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ",no support layer found, update status to 100%\n";
|
||||
print->set_status(100, L("Support Generated"));
|
||||
print->set_status(100, L("Support generated"));
|
||||
goto _finished;
|
||||
}
|
||||
GLModel::Geometry init_data;
|
||||
@@ -864,7 +864,7 @@ void GLGizmoFdmSupports::run_thread()
|
||||
}
|
||||
m_support_volume->model.init_from(std::move(init_data));
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished extrusionentity_to_verts, update status to 100%";
|
||||
print->set_status(100, L("Support Generated"));
|
||||
print->set_status(100, L("Support generated"));
|
||||
|
||||
record_timestamp();
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ CommonGizmosDataID GLGizmoFlatten::on_get_requirements() const
|
||||
|
||||
std::string GLGizmoFlatten::on_get_name() const
|
||||
{
|
||||
return _u8L("Lay on face");
|
||||
return _u8L("Lay on Face");
|
||||
}
|
||||
|
||||
bool GLGizmoFlatten::on_is_activable() const
|
||||
|
||||
@@ -102,7 +102,7 @@ bool GLGizmoMmuSegmentation::on_init()
|
||||
m_desc["shortcut_key"] = _L("Choose filament");
|
||||
m_desc["edge_detection"] = _L("Edge detection");
|
||||
m_desc["gap_area"] = _L("Gap area");
|
||||
m_desc["perform"] = _L("Perform");
|
||||
m_desc["perform"] = _L("Apply");
|
||||
m_desc["remove_all"] = _L("Erase all");
|
||||
m_desc["circle"] = _L("Circle");
|
||||
m_desc["sphere"] = _L("Sphere");
|
||||
|
||||
@@ -28,7 +28,7 @@ protected:
|
||||
|
||||
wxString handle_snapshot_action_name(bool shift_down, Button button_down) const override;
|
||||
|
||||
std::string get_gizmo_entering_text() const override { return _u8L("Entering Seam painting"); }
|
||||
std::string get_gizmo_entering_text() const override { return _u8L("Entering seam painting"); }
|
||||
std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Seam painting"); }
|
||||
std::string get_action_snapshot_name() const override { return _u8L("Paint-on seam editing"); }
|
||||
static const constexpr float CursorRadiusMin = 0.05f; // cannot be zero
|
||||
|
||||
@@ -367,7 +367,7 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||
apply_simplify();
|
||||
}
|
||||
else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && is_worker_running) {
|
||||
ImGui::SetTooltip("%s", _u8L("Can't apply when processing preview.").c_str());
|
||||
ImGui::SetTooltip("%s", _u8L("Unable to apply when processing preview").c_str());
|
||||
}
|
||||
m_imgui->pop_confirm_button_style();
|
||||
m_imgui->disabled_end(); // state !settings
|
||||
|
||||
@@ -272,7 +272,7 @@ bool GLGizmoText::on_init()
|
||||
m_desc["thickness"] = _L("Thickness");
|
||||
m_desc["text_gap"] = _L("Text Gap");
|
||||
m_desc["angle"] = _L("Angle");
|
||||
m_desc["embeded_depth"] = _L("Embedded\ndepth");
|
||||
m_desc["embeded_depth"] = _L("Embedded depth");
|
||||
m_desc["input_text"] = _L("Input text");
|
||||
|
||||
m_desc["surface"] = _L("Surface");
|
||||
|
||||
@@ -138,7 +138,7 @@ void GizmoObjectManipulation::update_settings_value(const Selection &selection)
|
||||
|
||||
m_new_enabled = true;
|
||||
// BBS: change "Instance Operations" to "Object Operations"
|
||||
m_new_title_string = L("Object Operations");
|
||||
m_new_title_string = L("Object operations");
|
||||
}
|
||||
else if (selection.is_single_full_object() && obj_list->is_selected(itObject)) {
|
||||
const BoundingBoxf3& box = selection.get_bounding_box();
|
||||
@@ -147,7 +147,7 @@ void GizmoObjectManipulation::update_settings_value(const Selection &selection)
|
||||
m_new_size = selection.get_bounding_box_in_current_reference_system().first.size();
|
||||
m_new_scale_label_string = L("Scale");
|
||||
m_new_enabled = true;
|
||||
m_new_title_string = L("Object Operations");
|
||||
m_new_title_string = L("Object operations");
|
||||
} else if (selection.is_single_volume_or_modifier()) {
|
||||
const GLVolume *volume = selection.get_first_volume();
|
||||
auto rotation = volume->get_volume_transformation().get_rotation_by_quaternion();
|
||||
@@ -173,7 +173,7 @@ void GizmoObjectManipulation::update_settings_value(const Selection &selection)
|
||||
m_new_size = selection.get_bounding_box_in_current_reference_system().first.size();
|
||||
}
|
||||
m_new_enabled = true;
|
||||
m_new_title_string = L("Volume Operations");
|
||||
m_new_title_string = L("Volume operations");
|
||||
} else if (obj_list->is_connectors_item_selected() || obj_list->multiple_selection() || obj_list->is_selected(itInstanceRoot)) {
|
||||
reset_settings_value();
|
||||
m_new_move_label_string = L("Translate");
|
||||
@@ -181,7 +181,7 @@ void GizmoObjectManipulation::update_settings_value(const Selection &selection)
|
||||
m_unscale_size = selection.get_bounding_box_in_current_reference_system().first.size();
|
||||
m_new_size = selection.get_bounding_box_in_current_reference_system().first.size();
|
||||
m_new_enabled = true;
|
||||
m_new_title_string = L("Group Operations");
|
||||
m_new_title_string = L("Group operations");
|
||||
} else if (selection.is_wipe_tower()) {
|
||||
const BoundingBoxf3 &box = selection.get_bounding_box();
|
||||
m_new_position = box.center();
|
||||
@@ -361,7 +361,7 @@ void GizmoObjectManipulation::change_rotation_value(int axis, double value)
|
||||
|
||||
selection.setup_cache();
|
||||
selection.rotate((M_PI / 180.0) * (transformation_type.absolute() ? rotation : rotation - m_cache.rotation), transformation_type);
|
||||
wxGetApp().plater()->take_snapshot(_u8L("Set Orientation"), UndoRedo::SnapshotType::GizmoAction);
|
||||
wxGetApp().plater()->take_snapshot(_u8L("Set orientation"), UndoRedo::SnapshotType::GizmoAction);
|
||||
m_glcanvas.do_rotate("");
|
||||
|
||||
m_cache.rotation = rotation;
|
||||
@@ -469,7 +469,7 @@ void GizmoObjectManipulation::do_scale(int axis, const Vec3d &scale) const
|
||||
|
||||
selection.setup_cache();
|
||||
selection.scale(scaling_factor, transformation_type);
|
||||
m_glcanvas.do_scale(L("Set Scale"));
|
||||
m_glcanvas.do_scale(L("Set scale"));
|
||||
}
|
||||
|
||||
|
||||
@@ -549,7 +549,7 @@ void GizmoObjectManipulation::reset_position_value()
|
||||
return;
|
||||
|
||||
// Copy position values from GLVolumes into Model (ModelInstance / ModelVolume), trigger background processing.
|
||||
wxGetApp().plater()->take_snapshot(_u8L("Reset Position"), UndoRedo::SnapshotType::GizmoAction);
|
||||
wxGetApp().plater()->take_snapshot(_u8L("Reset position"), UndoRedo::SnapshotType::GizmoAction);
|
||||
m_glcanvas.do_move("");
|
||||
|
||||
UpdateAndShow(true);
|
||||
@@ -590,7 +590,7 @@ void GizmoObjectManipulation::reset_rotation_value(bool reset_relative)
|
||||
selection.synchronize_unselected_instances(Selection::SyncRotationType::RESET);
|
||||
selection.synchronize_unselected_volumes();
|
||||
// Copy rotation values from GLVolumes into Model (ModelInstance / ModelVolume), trigger background processing.
|
||||
m_glcanvas.do_rotate(L("Reset Rotation"));
|
||||
m_glcanvas.do_rotate(L("Reset rotation"));
|
||||
|
||||
UpdateAndShow(true);
|
||||
}
|
||||
|
||||
@@ -1014,7 +1014,7 @@ void NotificationManager::HintNotification::render_preferences_button(ImGuiWrapp
|
||||
ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 });
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 8 * scale, 1 * scale });
|
||||
ImGui::BeginTooltip();
|
||||
imgui.text(_u8L("Open Preferences."));
|
||||
imgui.text(_u8L("Open Preferences"));
|
||||
ImGui::EndTooltip();
|
||||
ImGui::PopStyleColor(2);
|
||||
ImGui::PopStyleVar();
|
||||
@@ -1060,7 +1060,7 @@ void NotificationManager::HintNotification::render_right_arrow_button(ImGuiWrapp
|
||||
ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 });
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 8 * scale, 1 * scale });
|
||||
ImGui::BeginTooltip();
|
||||
imgui.text(_u8L("Open next tip."));
|
||||
imgui.text(_u8L("Open next tip"));
|
||||
ImGui::EndTooltip();
|
||||
ImGui::PopStyleColor(2);
|
||||
ImGui::PopStyleVar();
|
||||
@@ -1113,7 +1113,7 @@ void NotificationManager::HintNotification::render_documentation_button(ImGuiWra
|
||||
ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 });
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 8 * scale, 1 * scale });
|
||||
ImGui::BeginTooltip();
|
||||
imgui.text(_u8L("Open Documentation in web browser."));
|
||||
imgui.text(_u8L("Open documentation in web browser"));
|
||||
ImGui::EndTooltip();
|
||||
ImGui::PopStyleColor(2);
|
||||
ImGui::PopStyleVar();
|
||||
|
||||
@@ -1376,7 +1376,7 @@ void IMSlider::do_go_to_layer(size_t layer_number) {
|
||||
void IMSlider::render_go_to_layer_dialog()
|
||||
{
|
||||
if (m_show_go_to_layer_dialog)
|
||||
ImGui::OpenPopup((_u8L("Jump to Layer")).c_str());
|
||||
ImGui::OpenPopup((_u8L("Jump to layer")).c_str());
|
||||
|
||||
ImGuiWrapper& imgui = *wxGetApp().imgui();
|
||||
ImVec2 center = ImGui::GetMainViewport()->GetCenter();
|
||||
@@ -1396,9 +1396,9 @@ void IMSlider::render_go_to_layer_dialog()
|
||||
| ImGuiWindowFlags_NoResize
|
||||
| ImGuiWindowFlags_NoScrollbar
|
||||
| ImGuiWindowFlags_NoScrollWithMouse;
|
||||
if (ImGui::BeginPopupModal((_u8L("Jump to Layer")).c_str(), NULL, windows_flag))
|
||||
if (ImGui::BeginPopupModal((_u8L("Jump to layer")).c_str(), NULL, windows_flag))
|
||||
{
|
||||
imgui.text(_u8L("Please enter the layer number") + " (" + std::to_string(m_min_value + 1) + " - " + std::to_string(m_max_value + 1) + "):");
|
||||
imgui.text(_u8L("Please enter the layer number.") + " (" + std::to_string(m_min_value + 1) + " - " + std::to_string(m_max_value + 1) + "):");
|
||||
if (ImGui::IsMouseClicked(0)) {
|
||||
set_focus = false;
|
||||
}
|
||||
@@ -1510,7 +1510,7 @@ void IMSlider::render_add_menu()
|
||||
if (hovered) { show_tooltip(_u8L("Insert template custom G-code at the beginning of this layer.")); }
|
||||
}
|
||||
|
||||
if (menu_item_with_icon(_u8L("Jump to Layer").c_str(), "")) {
|
||||
if (menu_item_with_icon(_u8L("Jump to layer").c_str(), "")) {
|
||||
m_show_go_to_layer_dialog = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -592,7 +592,7 @@ void ArrangeJob::process(Ctl &ctl)
|
||||
// finalize just here.
|
||||
ctl.update_status(100,
|
||||
ctl.was_canceled() ? _u8L("Arranging canceled.") :
|
||||
we_have_unpackable_items ? _u8L("Arranging is done but there are unpacked items. Reduce spacing and try again.") : _u8L("Arranging done."));
|
||||
we_have_unpackable_items ? _u8L("Arranging complete, but some items were not able to be arranged. Reduce spacing and try again.") : _u8L("Arranging done."));
|
||||
}
|
||||
|
||||
ArrangeJob::ArrangeJob() : m_plater{wxGetApp().plater()} { }
|
||||
|
||||
@@ -18,21 +18,21 @@
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
static auto check_gcode_failed_str = _u8L("Abnormal print file data. Please slice again.");
|
||||
static auto check_gcode_failed_str = _u8L("Abnormal print file data: please slice again.");
|
||||
static auto printjob_cancel_str = _u8L("Task canceled.");
|
||||
static auto timeout_to_upload_str = _u8L("Upload task timed out. Please check the network status and try again.");
|
||||
static auto failed_in_cloud_service_str = _u8L("Cloud service connection failed. Please try again.");
|
||||
static auto file_is_not_exists_str = _u8L("Print file not found. Please slice again.");
|
||||
static auto file_is_not_exists_str = _u8L("Print file not found; please slice again.");
|
||||
static auto file_over_size_str = _u8L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again.");
|
||||
static auto print_canceled_str = _u8L("Task canceled.");
|
||||
static auto send_print_failed_str = _u8L("Failed to send the print job. Please try again.");
|
||||
static auto upload_ftp_failed_str = _u8L("Failed to upload file to ftp. Please try again.");
|
||||
|
||||
static auto desc_network_error = _u8L("Check the current status of the bambu server by clicking on the link above.");
|
||||
static auto desc_network_error = _u8L("Check the current status of the Bambu Lab server by clicking on the link above.");
|
||||
static auto desc_file_too_large = _u8L("The size of the print file is too large. Please adjust the file size and try again.");
|
||||
static auto desc_fail_not_exist = _u8L("Print file not found, please slice it again and send it for printing.");
|
||||
static auto desc_fail_not_exist = _u8L("Print file not found; please slice it again and send it for printing.");
|
||||
|
||||
static auto desc_upload_ftp_failed = _u8L("Failed to upload print file to FTP. Please check the network status and try again.");
|
||||
static auto desc_upload_ftp_failed = _u8L("Failed to upload print file via FTP. Please check the network status and try again.");
|
||||
|
||||
static auto sending_over_lan_str = _u8L("Sending print job over LAN");
|
||||
static auto sending_over_cloud_str = _u8L("Sending print job through cloud service");
|
||||
|
||||
@@ -65,8 +65,7 @@ void SLAImportJob::process(Ctl &ctl)
|
||||
break;
|
||||
}
|
||||
} catch (MissingProfileError &) {
|
||||
p->err = _L("The SLA archive doesn't contain any presets. "
|
||||
"Please activate some SLA printer preset first before importing that SLA archive.").ToStdString();
|
||||
p->err = _L("The SLA archive doesn\'t contain any presets. Please activate some SLA printer presets first before importing that SLA archive.").ToStdString();
|
||||
} catch (std::exception &ex) {
|
||||
p->err = ex.what();
|
||||
}
|
||||
@@ -127,7 +126,7 @@ void SLAImportJob::finalize(bool canceled, std::exception_ptr &eptr)
|
||||
if (object->volumes.size() > 1)
|
||||
{
|
||||
Slic3r::GUI::show_info(nullptr,
|
||||
_(L("You cannot load SLA project with a multi-part object on the bed")) + "\n\n" +
|
||||
_(L("You cannot load an SLA project with a multi-part object on the bed")) + "\n\n" +
|
||||
_(L("Please check your object list before preset changing.")),
|
||||
_(L("Attention!")) );
|
||||
return;
|
||||
|
||||
@@ -10,20 +10,20 @@
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
static auto check_gcode_failed_str = _u8L("Abnormal print file data. Please slice again.");
|
||||
static auto check_gcode_failed_str = _u8L("Abnormal print file data: please slice again.");
|
||||
static auto printjob_cancel_str = _u8L("Task canceled.");
|
||||
static auto timeout_to_upload_str = _u8L("Upload task timed out. Please check the network status and try again.");
|
||||
static auto failed_in_cloud_service_str = _u8L("Cloud service connection failed. Please try again.");
|
||||
static auto file_is_not_exists_str = _u8L("Print file not found. Please slice again.");
|
||||
static auto file_is_not_exists_str = _u8L("Print file not found; please slice again.");
|
||||
static auto file_over_size_str = _u8L("The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again.");
|
||||
static auto print_canceled_str = _u8L("Task canceled.");
|
||||
static auto send_print_failed_str = _u8L("Failed to send the print job. Please try again.");
|
||||
static auto upload_ftp_failed_str = _u8L("Failed to upload file to ftp. Please try again.");
|
||||
|
||||
static auto desc_network_error = _u8L("Check the current status of the bambu server by clicking on the link above.");
|
||||
static auto desc_network_error = _u8L("Check the current status of the Bambu Lab server by clicking on the link above.");
|
||||
static auto desc_file_too_large = _u8L("The size of the print file is too large. Please adjust the file size and try again.");
|
||||
static auto desc_fail_not_exist = _u8L("Print file not found, please slice it again and send it for printing.");
|
||||
static auto desc_upload_ftp_failed = _u8L("Failed to upload print file to FTP. Please check the network status and try again.");
|
||||
static auto desc_fail_not_exist = _u8L("Print file not found; please slice it again and send it for printing.");
|
||||
static auto desc_upload_ftp_failed = _u8L("Failed to upload print file via FTP. Please check the network status and try again.");
|
||||
|
||||
static auto sending_over_lan_str = _u8L("Sending print job over LAN");
|
||||
static auto sending_over_cloud_str = _u8L("Sending print job through cloud service");
|
||||
|
||||
@@ -199,9 +199,9 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
{ ctrl + L("Tab"), L("Switch table page")},
|
||||
//DEL
|
||||
#ifdef __APPLE__
|
||||
{"fn+⌫", L("Delete selected")},
|
||||
{"fn+⌫", L("Delete Selected")},
|
||||
#else
|
||||
{L("Del"), L("Delete selected")},
|
||||
{L("Del"), L("Delete Selected")},
|
||||
#endif
|
||||
// Help
|
||||
{ "?", L("Show keyboard shortcuts list") }
|
||||
@@ -231,12 +231,12 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
{alt + L("Left mouse button"), L("Select a part")},
|
||||
{ctrl + L("Left mouse button"), L("Select multiple objects")},
|
||||
{shift + L("Left mouse button"), L("Select objects by rectangle")},
|
||||
{L("Arrow Up"), L("Move selection 10 mm in positive Y direction")},
|
||||
{L("Arrow Down"), L("Move selection 10 mm in negative Y direction")},
|
||||
{L("Arrow Left"), L("Move selection 10 mm in negative X direction")},
|
||||
{L("Arrow Right"), L("Move selection 10 mm in positive X direction")},
|
||||
{shift + L("Any arrow"), L("Movement step set to 1 mm")},
|
||||
{L("Esc"), L("Deselect all")},
|
||||
{L("Arrow Up"), L("Move selection 10mm in positive Y direction")},
|
||||
{L("Arrow Down"), L("Move selection 10mm in negative Y direction")},
|
||||
{L("Arrow Left"), L("Move selection 10mm in negative X direction")},
|
||||
{L("Arrow Right"), L("Move selection 10mm in positive X direction")},
|
||||
{shift + L("Any arrow"), L("Movement step set to 1mm")},
|
||||
{L("Esc"), L("Deselect All")},
|
||||
{"1-9", L("Keyboard 1-9: set filament for object/part")},
|
||||
{ctrl + "0", L("Camera view - Default")},
|
||||
{ctrl + "1", L("Camera view - Top")},
|
||||
@@ -247,7 +247,7 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
{ctrl + "6", L("Camera Angle - Right side")},
|
||||
|
||||
{ctrl + "A", L("Select all objects")},
|
||||
{ctrl + "D", L("Delete all")},
|
||||
{ctrl + "D", L("Delete All")},
|
||||
{ctrl + "Z", L("Undo")},
|
||||
{ctrl + "Y", L("Redo")},
|
||||
{ "M", L("Gizmo move") },
|
||||
@@ -272,7 +272,7 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
m_full_shortcuts.push_back({ { _L("Plater"), "" }, plater_shortcuts });
|
||||
|
||||
Shortcuts gizmos_shortcuts = {
|
||||
{L("Esc"), L("Deselect all")},
|
||||
{L("Esc"), L("Deselect All")},
|
||||
{shift, L("Move: press to snap by 1mm")},
|
||||
{ctrl + L("Mouse wheel"), L("Support/Color Painting: adjust pen radius")},
|
||||
{alt + L("Mouse wheel"), L("Support/Color Painting: adjust section position")},
|
||||
@@ -282,12 +282,12 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
Shortcuts object_list_shortcuts = {
|
||||
{"1-9", L("Set extruder number for the objects and parts") },
|
||||
{L("Del"), L("Delete objects, parts, modifiers")},
|
||||
{L("Esc"), L("Deselect all")},
|
||||
{L("Esc"), L("Deselect All")},
|
||||
{ctrl + "C", L("Copy to clipboard")},
|
||||
{ctrl + "V", L("Paste from clipboard")},
|
||||
{ctrl + "X", L("Cut")},
|
||||
{ctrl + "A", L("Select all objects")},
|
||||
{ctrl + "K", L("Clone selected")},
|
||||
{ctrl + "K", L("Clone Selected")},
|
||||
{ctrl + "Z", L("Undo")},
|
||||
{ctrl + "Y", L("Redo")},
|
||||
{L("Space"), L("Select the object/part and press space to change the name")},
|
||||
|
||||
@@ -588,7 +588,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_
|
||||
auto check = [](bool yes_or_no) {
|
||||
if (yes_or_no)
|
||||
return true;
|
||||
return wxGetApp().check_and_save_current_preset_changes(_L("Application is closing"), _L("Closing Application while some presets are modified."));
|
||||
return wxGetApp().check_and_save_current_preset_changes(_L("Closing application"), _L("Closing Application while some presets are modified."));
|
||||
};
|
||||
|
||||
// BBS: close save project
|
||||
@@ -2870,16 +2870,16 @@ void MainFrame::init_menubar_as_editor()
|
||||
_L("Paste clipboard"), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); },
|
||||
"menu_paste", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this);
|
||||
// BBS Delete selected
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete selected") + "\t" + _L("Del"),
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete Selected") + "\t" + _L("Del"),
|
||||
_L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); },
|
||||
"menu_remove", nullptr, [this](){return can_delete(); }, this);
|
||||
//BBS: delete all
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\t" + ctrl + "D",
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete All") + "\t" + ctrl + "D",
|
||||
_L("Deletes all objects"),[this](wxCommandEvent&) { m_plater->delete_all_objects_from_model(); },
|
||||
"menu_remove", nullptr, [this](){return can_delete_all(); }, this);
|
||||
editMenu->AppendSeparator();
|
||||
// BBS Clone Selected
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Clone selected") /*+ "\t" + ctrl + "M"*/,
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Clone Selected") /*+ "\t" + ctrl + "M"*/,
|
||||
_L("Clone copies of selections"),[this](wxCommandEvent&) {
|
||||
m_plater->clone_selection();
|
||||
},
|
||||
@@ -2955,14 +2955,14 @@ void MainFrame::init_menubar_as_editor()
|
||||
"", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this);
|
||||
#if 0
|
||||
// BBS Delete selected
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete selected") + "\t" + _L("Backspace"),
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete Selected") + "\t" + _L("Backspace"),
|
||||
_L("Deletes the current selection"),[this](wxCommandEvent&) {
|
||||
m_plater->remove_selected();
|
||||
},
|
||||
"", nullptr, [this](){return can_delete(); }, this);
|
||||
#endif
|
||||
//BBS: delete all
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\t" + ctrl + "D",
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Delete All") + "\t" + ctrl + "D",
|
||||
_L("Deletes all objects"),[this, handle_key_event](wxCommandEvent&) {
|
||||
wxKeyEvent e;
|
||||
e.SetEventType(wxEVT_KEY_DOWN);
|
||||
@@ -2975,7 +2975,7 @@ void MainFrame::init_menubar_as_editor()
|
||||
"", nullptr, [this](){return can_delete_all(); }, this);
|
||||
editMenu->AppendSeparator();
|
||||
// BBS Clone Selected
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Clone selected") + "\t" + ctrl + "K",
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Clone Selected") + "\t" + ctrl + "K",
|
||||
_L("Clone copies of selections"),[this, handle_key_event](wxCommandEvent&) {
|
||||
wxKeyEvent e;
|
||||
e.SetEventType(wxEVT_KEY_DOWN);
|
||||
@@ -2998,7 +2998,7 @@ void MainFrame::init_menubar_as_editor()
|
||||
#endif
|
||||
|
||||
// BBS Select All
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Select all") + sep + ctrl_t + "A",
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Select All") + sep + ctrl_t + "A",
|
||||
_L("Selects all objects"), [this, handle_key_event](wxCommandEvent&) {
|
||||
wxKeyEvent e;
|
||||
e.SetEventType(wxEVT_KEY_DOWN);
|
||||
@@ -3010,7 +3010,7 @@ void MainFrame::init_menubar_as_editor()
|
||||
m_plater->select_all(); },
|
||||
"", nullptr, [this](){return can_select(); }, this);
|
||||
// BBS Deslect All
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Deselect all") + sep + _L("Esc"),
|
||||
append_menu_item(editMenu, wxID_ANY, _L("Deselect All") + sep + _L("Esc"),
|
||||
_L("Deselects all objects"), [this, handle_key_event](wxCommandEvent&) {
|
||||
wxKeyEvent e;
|
||||
e.SetEventType(wxEVT_KEY_DOWN);
|
||||
@@ -3674,8 +3674,8 @@ struct ConfigsOverwriteConfirmDialog : MessageDialog
|
||||
{
|
||||
ConfigsOverwriteConfirmDialog(wxWindow *parent, wxString name, bool exported)
|
||||
: MessageDialog(parent,
|
||||
wxString::Format(exported ? _L("A file exists with the same name: %s, do you want to overwrite it?") :
|
||||
_L("A config exists with the same name: %s, do you want to overwrite it?"),
|
||||
wxString::Format(exported ? _L("A file exists with the same name: %s. Do you want to overwrite it\?") :
|
||||
_L("A config exists with the same name: %s. Do you want to overwrite it\?"),
|
||||
name),
|
||||
exported ? _L("Overwrite file") : _L("Overwrite config"),
|
||||
wxYES_NO | wxNO_DEFAULT)
|
||||
@@ -3711,7 +3711,7 @@ void MainFrame::export_config()
|
||||
m_last_config = from_u8(files.back());
|
||||
MessageDialog dlg(this, wxString::Format(_L_PLURAL("There is %d config exported. (Only non-system configs)",
|
||||
"There are %d configs exported. (Only non-system configs)", files.size()), files.size()),
|
||||
_L("Export result"), wxOK);
|
||||
_L("Export Result"), wxOK);
|
||||
dlg.ShowModal();
|
||||
} catch (const std::exception &ex) {
|
||||
show_error(this, ex.what());
|
||||
@@ -4262,8 +4262,8 @@ void MainFrame::technology_changed()
|
||||
{
|
||||
// update menu titles
|
||||
PrinterTechnology pt = plater()->printer_technology();
|
||||
if (int id = m_menubar->FindMenu(pt == ptFFF ? _omitL("Material Settings") : _L("Filament Settings")); id != wxNOT_FOUND)
|
||||
m_menubar->SetMenuLabel(id, pt == ptSLA ? _omitL("Material Settings") : _L("Filament Settings"));
|
||||
if (int id = m_menubar->FindMenu(pt == ptFFF ? _omitL("Material Settings") : _L("Filament settings")); id != wxNOT_FOUND)
|
||||
m_menubar->SetMenuLabel(id, pt == ptSLA ? _omitL("Material Settings") : _L("Filament settings"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -477,7 +477,7 @@ void MediaFilePanel::fetchUrl(boost::weak_ptr<PrinterFileSystem> wfs)
|
||||
return;
|
||||
}
|
||||
if (!m_remote_proto && m_local_proto) { // not support tutk
|
||||
m_image_grid->SetStatus(m_bmp_failed, _L("Please enter the IP of printer to connect."));
|
||||
m_image_grid->SetStatus(m_bmp_failed, _L("Please enter the IP of the printer to connect."));
|
||||
fs->SetUrl("0");
|
||||
fs.reset();
|
||||
if (wxGetApp().show_modal_ip_address_enter_dialog(false, _L("LAN Connection Failed (Failed to view sdcard)"))) {
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
static std::map<int, std::string> error_messages = {
|
||||
{1, L("The device cannot handle more conversations. Please retry later.")},
|
||||
{2, L("Player is malfunctioning. Please reinstall the system player.")},
|
||||
{100, L("The player is not loaded, please click \"play\" button to retry.")},
|
||||
{101, L("The player is not loaded, please click \"play\" button to retry.")},
|
||||
{102, L("The player is not loaded, please click \"play\" button to retry.")},
|
||||
{103, L("The player is not loaded, please click \"play\" button to retry.")},
|
||||
{100, L("The player is not loaded; please click the \"play\" button to retry.")},
|
||||
{101, L("The player is not loaded; please click the \"play\" button to retry.")},
|
||||
{102, L("The player is not loaded; please click the \"play\" button to retry.")},
|
||||
{103, L("The player is not loaded; please click the \"play\" button to retry.")},
|
||||
{104, L("The player is not loaded because the GStreamer GTK video sink is missing or failed to initialize.")}
|
||||
};
|
||||
|
||||
@@ -330,7 +330,7 @@ void MediaPlayCtrl::Play()
|
||||
if (!m_remote_proto) { // not support tutk
|
||||
m_failed_code = -1;
|
||||
m_url = "bambu:///local/";
|
||||
Stop(_L("Please enter the IP of printer to connect."));
|
||||
Stop(_L("Please enter the IP of the printer to connect."));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1012,7 +1012,7 @@ private:
|
||||
// non-static so its not loaded too early. If static, the translations wont load correctly.
|
||||
const std::vector<NotificationData> basic_notifications = {
|
||||
NotificationData{NotificationType::Mouse3dDisconnected, NotificationLevel::RegularNotificationLevel, 10, _u8L("3D Mouse disconnected.")},
|
||||
NotificationData{NotificationType::PresetUpdateAvailable, NotificationLevel::ImportantNotificationLevel, BBL_NOTICE_MAX_INTERVAL, _u8L("Configuration can update now."), _u8L("Detail."),
|
||||
NotificationData{NotificationType::PresetUpdateAvailable, NotificationLevel::ImportantNotificationLevel, BBL_NOTICE_MAX_INTERVAL, _u8L("A new configuration is available. Update now\?"), _u8L("More"),
|
||||
[](wxEvtHandler* evnthndlr) {
|
||||
if (evnthndlr != nullptr)
|
||||
wxPostEvent(evnthndlr, PresetUpdateAvailableClickedEvent(EVT_PRESET_UPDATE_AVAILABLE_CLICKED));
|
||||
@@ -1057,8 +1057,8 @@ private:
|
||||
|
||||
NotificationData{NotificationType::UndoDesktopIntegrationFail, NotificationLevel::WarningNotificationLevel, 10,
|
||||
_u8L("Undo integration failed.") },
|
||||
NotificationData{NotificationType::ExportOngoing, NotificationLevel::RegularNotificationLevel, 0, _u8L("Exporting.")},
|
||||
NotificationData{NotificationType::NewAppAvailable, NotificationLevel::ImportantNotificationLevel, 20, _u8L("Software has New version."), _u8L("Goto download page."),
|
||||
NotificationData{NotificationType::ExportOngoing, NotificationLevel::RegularNotificationLevel, 0, _u8L("Exporting")},
|
||||
NotificationData{NotificationType::NewAppAvailable, NotificationLevel::ImportantNotificationLevel, 20, _u8L("An update is available!"), _u8L("Go to download page"),
|
||||
[](wxEvtHandler *evnthndlr) {
|
||||
//BBS set feishu release page by default
|
||||
wxGetApp().open_browser_with_warning_dialog("https://www.thingiverse.com/"); return true;
|
||||
|
||||
@@ -67,9 +67,9 @@ struct InfoItemAtributes {
|
||||
|
||||
const std::map<InfoItemType, InfoItemAtributes> INFO_ITEMS{
|
||||
// info_item Type info_item Name info_item BitmapName
|
||||
{ InfoItemType::CustomSupports, {L("Support painting"), "toolbar_support" }, },
|
||||
{ InfoItemType::CustomSupports, {L("Support Painting"), "toolbar_support" }, },
|
||||
//{ InfoItemType::CustomSeam, {L("Paint-on seam"), "seam_" }, },
|
||||
{ InfoItemType::MmSegmentation, {L("Color painting"), "mmu_segmentation"}, },
|
||||
{ InfoItemType::MmSegmentation, {L("Color Painting"), "mmu_segmentation"}, },
|
||||
//{ InfoItemType::Sinking, {L("Sinking"), "objlist_sinking"}, },
|
||||
{ InfoItemType::CutConnectors, {L("Cut connectors"), "cut_connectors" }, },
|
||||
{ InfoItemType::FuzzySkin, {L("Paint-on fuzzy skin"), "objlist_fuzzy_skin_paint" }, },
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace GUI {
|
||||
//------------------------------------------
|
||||
|
||||
PhysicalPrinterDialog::PhysicalPrinterDialog(wxWindow* parent) :
|
||||
DPIDialog(parent, wxID_ANY, _L("Physical Printer"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), -1), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
||||
DPIDialog(parent, wxID_ANY, _L("Printer"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), -1), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
||||
{
|
||||
SetFont(wxGetApp().normal_font());
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
@@ -606,22 +606,22 @@ void PhysicalPrinterDialog::update_preset_input() {
|
||||
info_line = from_u8((boost::format(_u8L("Preset \"%1%\" already exists.")) % m_preset_name).str());
|
||||
else
|
||||
info_line = from_u8((boost::format(_u8L("Preset \"%1%\" already exists and is incompatible with the current printer.")) % m_preset_name).str());
|
||||
info_line += "\n" + _L("Please note that saving will overwrite this preset.");
|
||||
info_line += "\n" + _L("Please note that saving will overwrite the current preset.");
|
||||
m_valid_type = Warning;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && m_preset_name.empty()) {
|
||||
info_line = _L("The name is not allowed to be empty.");
|
||||
info_line = _L("The name field is not allowed to be empty.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && m_preset_name.find_first_of(' ') == 0) {
|
||||
info_line = _L("The name is not allowed to start with space character.");
|
||||
info_line = _L("The name is not allowed to start with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && m_preset_name.find_last_of(' ') == m_preset_name.length() - 1) {
|
||||
info_line = _L("The name is not allowed to end with space character.");
|
||||
info_line = _L("The name is not allowed to end with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
|
||||
@@ -598,7 +598,7 @@ wxString PlateSettingsDialog::to_bed_type_name(BedType bed_type) {
|
||||
return _(bed_type_def->enum_labels[size_t(bed_type) - 1]);
|
||||
}
|
||||
}
|
||||
return _L("Same as Global Bed Type");
|
||||
return _L("Same as Global Plate Type");
|
||||
}
|
||||
|
||||
wxString PlateSettingsDialog::to_print_sequence_name(PrintSequence print_seq) {
|
||||
|
||||
+31
-37
@@ -5409,7 +5409,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
std::string last_backup = last;
|
||||
std::string originfile;
|
||||
if (Slic3r::has_restore_data(last_backup, originfile)) {
|
||||
auto result = MessageDialog(this->q, _L("Previous unsaved project detected, do you want to restore it?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Restore"), wxYES_NO | wxYES_DEFAULT | wxCENTRE).ShowModal();
|
||||
auto result = MessageDialog(this->q, _L("Previously unsaved items have been detected. Do you want to restore them\?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Restore"), wxYES_NO | wxYES_DEFAULT | wxCENTRE).ShowModal();
|
||||
if (result == wxID_YES) {
|
||||
this->q->load_project(from_path(last_backup), from_path(originfile));
|
||||
Slic3r::backup_soon();
|
||||
@@ -5609,9 +5609,9 @@ wxColour Plater::get_next_color_for_filament()
|
||||
wxString Plater::get_slice_warning_string(GCodeProcessorResult::SliceWarning& warning)
|
||||
{
|
||||
if (warning.msg == BED_TEMP_TOO_HIGH_THAN_FILAMENT) {
|
||||
return _L("The current hot bed temperature is relatively high. The nozzle may be clogged when printing this filament in a closed enclosure. Please open the front door and/or remove the upper glass.");
|
||||
return _L("The current heatbed temperature is relatively high. The nozzle may clog when printing this filament in a closed environment. Please open the front door and/or remove the upper glass.");
|
||||
} else if (warning.msg == NOZZLE_HRC_CHECKER) {
|
||||
return _L("The nozzle hardness required by the filament is higher than the default nozzle hardness of the printer. Please replace the hardened nozzle or filament, otherwise, the nozzle will be attrited or damaged.");
|
||||
return _L("The nozzle hardness required by the filament is higher than the default nozzle hardness of the printer. Please replace the hardened nozzle or filament, otherwise, the nozzle will be worn down or damaged.");
|
||||
} else if (warning.msg == NOT_SUPPORT_TRADITIONAL_TIMELAPSE) {
|
||||
return _L("Enabling traditional timelapse photography may cause surface imperfections. It is recommended to change to smooth mode.");
|
||||
} else if (warning.msg == NOT_GENERATE_TIMELAPSE) {
|
||||
@@ -6092,7 +6092,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
file_version.to_string_sf(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string_sf());
|
||||
text += "\n";
|
||||
wxString context = text;
|
||||
wxString append = _L("You'd better upgrade your software.\n");
|
||||
wxString append = _L("You should update your software.\n");
|
||||
context += "\n\n";
|
||||
context += append;
|
||||
log_and_show_3mf_info(context, newer_3mf_title);
|
||||
@@ -6161,7 +6161,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
file_version.to_string(), slic3r_version.to_string());
|
||||
text += "\n";
|
||||
wxString context = text;
|
||||
wxString append = _L("You'd better upgrade your software.\n");
|
||||
wxString append = _L("You should update your software.\n");
|
||||
context += "\n\n";
|
||||
context += append;
|
||||
log_and_show_3mf_info(context, bambu_project_title);
|
||||
@@ -6293,7 +6293,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
for (std::map<std::string, std::string>::iterator it=validity.begin(); it!=validity.end(); ++it)
|
||||
error_message += "-" + it->first + ": " + it->second + "\n";
|
||||
error_message += "\n";
|
||||
error_message += _u8L("Please correct them in the param tabs");
|
||||
error_message += _u8L("Please correct them in the Param tabs");
|
||||
notify_manager->bbl_show_3mf_warn_notification(error_message);
|
||||
}
|
||||
}
|
||||
@@ -6581,7 +6581,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
if (!isUtf8StepFile) {
|
||||
const auto no_warn = wxGetApp().app_config->get_bool("step_not_utf8_no_warn");
|
||||
if (!no_warn) {
|
||||
MessageDialog dlg(nullptr, _L("Name of components inside STEP file is not UTF8 format!") + "\n\n" + _L("The name may show garbage characters!"),
|
||||
MessageDialog dlg(nullptr, _L("Component name(s) inside step file not in UTF8 format!") + "\n\n" + _L("Because of unsupported text encoding, garbage characters may appear!"),
|
||||
wxString(SLIC3R_APP_FULL_NAME " - ") + _L("Attention!"), wxOK | wxICON_INFORMATION);
|
||||
dlg.show_dsa_button(_L("Remember my choice."));
|
||||
dlg.ShowModal();
|
||||
@@ -6694,7 +6694,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
else if (model.looks_like_saved_in_meters()) {
|
||||
// BBS do not handle look like in meters
|
||||
MessageDialog dlg(q,
|
||||
format_wxstr(_L("The object from file %s is too small, and maybe in meters or inches.\n Do you want to scale to millimeters?"),
|
||||
format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\n Do you want to scale to millimeters\?"),
|
||||
from_path(filename)),
|
||||
_L("Object too small"), wxICON_QUESTION | wxYES_NO);
|
||||
int answer = dlg.ShowModal();
|
||||
@@ -6702,7 +6702,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
} else if (model.looks_like_imperial_units()) {
|
||||
// BBS do not handle look like in meters
|
||||
MessageDialog dlg(q,
|
||||
format_wxstr(_L("The object from file %s is too small, and maybe in meters or inches.\n Do you want to scale to millimeters?"),
|
||||
format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\n Do you want to scale to millimeters\?"),
|
||||
from_path(filename)),
|
||||
_L("Object too small"), wxICON_QUESTION | wxYES_NO);
|
||||
int answer = dlg.ShowModal();
|
||||
@@ -6733,10 +6733,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
}
|
||||
|
||||
if (!is_project_file && model.looks_like_multipart_object()) {
|
||||
MessageDialog msg_dlg(q, _L(
|
||||
"This file contains several objects positioned at multiple heights.\n"
|
||||
"Instead of considering them as multiple objects, should \n"
|
||||
"the file be loaded as a single object having multiple parts?") + "\n",
|
||||
MessageDialog msg_dlg(q, _L("This file contains several objects positioned at multiple heights.\nInstead of considering them as multiple objects, should \nthe file be loaded as a single object with multiple parts\?") + "\n",
|
||||
_L("Multi-part object detected"), wxICON_WARNING | wxYES | wxNO);
|
||||
if (msg_dlg.ShowModal() == wxID_YES) {
|
||||
model.convert_multipart_object(filaments_cnt);
|
||||
@@ -6834,7 +6831,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
int single_object_answer = false;
|
||||
if (ask_multi) {
|
||||
RichMessageDialog dlg(q, _L("Load these files as a single object with multiple parts?\n"),
|
||||
_L("Object with multiple parts was detected"), wxICON_QUESTION | wxYES_NO);
|
||||
_L("An object with multiple parts was detected"), wxICON_QUESTION | wxYES_NO);
|
||||
|
||||
dlg.ShowCheckBox(_L("Auto-Drop"), true);
|
||||
single_object_answer = dlg.ShowModal();
|
||||
@@ -7295,7 +7292,7 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type)
|
||||
case FT_3MF:
|
||||
{
|
||||
output_file.replace_extension("3mf");
|
||||
dlg_title = _L("Save file as:");
|
||||
dlg_title = _L("Save file as");
|
||||
break;
|
||||
}
|
||||
case FT_OBJ:
|
||||
@@ -7327,7 +7324,7 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type)
|
||||
boost::system::error_code ec;
|
||||
if (boost::filesystem::exists(into_u8(out_path), ec)) {
|
||||
auto result = MessageBox(q->GetHandle(),
|
||||
wxString::Format(_L("The file %s already exists\nDo you want to replace it?"), out_path),
|
||||
wxString::Format(_L("The file %s already exists.\nDo you want to replace it\?"), out_path),
|
||||
_L("Confirm Save As"),
|
||||
MB_YESNO | MB_ICONWARNING);
|
||||
if (result != IDYES)
|
||||
@@ -7461,9 +7458,7 @@ bool Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immedia
|
||||
ModelObject *obj = model.objects[obj_idx];
|
||||
if (obj->is_cut()) {
|
||||
InfoDialog dialog(q, _L("Delete object which is a part of cut object"),
|
||||
_L("You try to delete an object which is a part of a cut object.\n"
|
||||
"This action will break a cut correspondence.\n"
|
||||
"After that model consistency can't be guaranteed."),
|
||||
_L("You are trying to delete an object which is a part of a cut object.\nThis action will break a cut correspondence.\nAfter that, model consistency can\'t be guaranteed."),
|
||||
false, wxYES | wxCANCEL | wxCANCEL_DEFAULT | wxICON_WARNING);
|
||||
dialog.SetButtonLabel(wxID_YES, _L("Delete"));
|
||||
if (dialog.ShowModal() == wxID_CANCEL)
|
||||
@@ -8387,7 +8382,7 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const
|
||||
}
|
||||
|
||||
if (new_model.objects.size() > 1 || new_model.objects.front()->volumes.size() > 1) {
|
||||
MessageDialog dlg(q, _L("Unable to replace with more than one volume"), _L("Error during replace"), wxOK | wxOK_DEFAULT | wxICON_WARNING);
|
||||
MessageDialog dlg(q, _L("Unable to replace with more than one volume"), _L("Error during replacement"), wxOK | wxOK_DEFAULT | wxICON_WARNING);
|
||||
dlg.ShowModal();
|
||||
return false;
|
||||
}
|
||||
@@ -8479,7 +8474,7 @@ void Plater::priv::replace_with_stl()
|
||||
|
||||
fs::path out_path = dialog.GetPath().ToUTF8().data();
|
||||
if (out_path.empty()) {
|
||||
MessageDialog dlg(q, _L("File for the replace wasn't selected"), _L("Error during replace"), wxOK | wxOK_DEFAULT | wxICON_WARNING);
|
||||
MessageDialog dlg(q, _L("File for the replacement wasn\'t selected"), _L("Error during replacement"), wxOK | wxOK_DEFAULT | wxICON_WARNING);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
}
|
||||
@@ -8563,7 +8558,7 @@ void Plater::priv::replace_all_with_stl()
|
||||
|
||||
fs::path out_path = dialog.GetPath().ToUTF8().data();
|
||||
if (out_path.empty()) {
|
||||
MessageDialog dlg(q, _L("Directory for the replace wasn't selected"), _L("Error during replace"), wxOK | wxOK_DEFAULT | wxICON_WARNING);
|
||||
MessageDialog dlg(q, _L("Directory for the replace wasn't selected"), _L("Error during replacement"), wxOK | wxOK_DEFAULT | wxICON_WARNING);
|
||||
dlg.ShowModal();
|
||||
return;
|
||||
}
|
||||
@@ -12032,8 +12027,8 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_
|
||||
auto check = [this,&transfer_preset_changes](bool yes_or_no) {
|
||||
m_new_project_and_check_state = true;
|
||||
wxString header = _L("Some presets are modified.") + "\n" +
|
||||
(yes_or_no ? _L("You can keep the modified presets to the new project or discard them") :
|
||||
_L("You can keep the modified presets to the new project, discard or save changes as new presets."));
|
||||
(yes_or_no ? _L("You can keep the modified presets for the new project or discard them") :
|
||||
_L("You can keep the modified presets for the new project, discard, or save changes as new presets."));
|
||||
int act_buttons = ActionButtons::KEEP | ActionButtons::REMEMBER_CHOISE;
|
||||
if (!yes_or_no)
|
||||
act_buttons |= ActionButtons::SAVE;
|
||||
@@ -12253,7 +12248,7 @@ int Plater::save_project(bool saveAs)
|
||||
save_strategy = save_strategy | SaveStrategy::FullPathSources;
|
||||
}
|
||||
if (export_3mf(into_path(filename), save_strategy) < 0) {
|
||||
MessageDialog(this, _L("Failed to save the project.\nPlease check whether the folder exists online or if other programs open the project file."),
|
||||
MessageDialog(this, _L("Failed to save the project.\nPlease check whether the folder exists online or if other programs have the project file open."),
|
||||
_L("Save project"), wxOK | wxICON_WARNING).ShowModal();
|
||||
return wxID_CANCEL;
|
||||
}
|
||||
@@ -12368,7 +12363,7 @@ void Plater::import_model_id(wxString download_info)
|
||||
|
||||
//check file suffix
|
||||
if (!extension.Contains(".3mf")) {
|
||||
msg = _L("Download failed, unknown file format.");
|
||||
msg = _L("Download failed; unknown file format.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -12443,7 +12438,7 @@ void Plater::import_model_id(wxString download_info)
|
||||
}
|
||||
|
||||
if (size_limit) {
|
||||
msg = _L("Download failed, File size exception.");
|
||||
msg = _L("Download failed; File size exception.");
|
||||
}
|
||||
else {
|
||||
msg = wxString::Format(_L("Project downloaded %d%%"), percent);
|
||||
@@ -13707,8 +13702,8 @@ void Plater::load_gcode(const wxString& filename)
|
||||
p->preview->get_canvas3d()->zoom_to_plate(0);
|
||||
|
||||
if (p->preview->get_canvas3d()->get_gcode_layers_zs().empty()) {
|
||||
MessageDialog(this, _L("The selected file") + ":\n" + filename + "\n" + _L("does not contain valid G-code."),
|
||||
wxString(GCODEVIEWER_APP_NAME) + " - " + _L("Error occurs while loading G-code file"), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal();
|
||||
MessageDialog(this, _L("The selected file") + ":\n" + filename + "\n" + _L("Does not contain valid G-code."),
|
||||
wxString(GCODEVIEWER_APP_NAME) + " - " + _L("An Error has occurred while loading the G-code file."), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal();
|
||||
set_project_filename(DEFAULT_PROJECT_NAME);
|
||||
} else {
|
||||
set_project_filename(filename);
|
||||
@@ -14178,7 +14173,7 @@ bool Plater::load_files(const wxArrayString& filenames)
|
||||
else if (normal_paths.empty()){
|
||||
//only gcode files
|
||||
if (gcode_paths.size() > 1) {
|
||||
show_info(this, _L("Only one G-code file can be opened at the same time."), _L("G-code loading"));
|
||||
show_info(this, _L("Only one G-code file can be opened at a time."), _L("G-code loading"));
|
||||
return false;
|
||||
}
|
||||
load_gcode(from_path(gcode_paths.front()));
|
||||
@@ -14186,7 +14181,7 @@ bool Plater::load_files(const wxArrayString& filenames)
|
||||
}
|
||||
|
||||
if (!gcode_paths.empty()) {
|
||||
show_info(this, _L("G-code files cannot be loaded with models together!"), _L("G-code loading"));
|
||||
show_info(this, _L("G-code files and models cannot be loaded together!"), _L("G-code loading"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -14238,7 +14233,7 @@ bool Plater::load_files(const wxArrayString& filenames)
|
||||
if (this->m_only_gcode || this->m_exported_file) {
|
||||
if ((loadfiles_type == LoadFilesType::SingleOther)
|
||||
|| (loadfiles_type == LoadFilesType::MultipleOther)) {
|
||||
show_info(this, _L("Cannot add models when in preview mode!"), _L("Add Models"));
|
||||
show_info(this, _L("Unable to add models in preview mode"), _L("Add Models"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -14558,7 +14553,7 @@ void Plater::reset(bool apply_presets_change) { p->reset(apply_presets_change);
|
||||
void Plater::reset_with_confirm()
|
||||
{
|
||||
if (p->model.objects.empty() || MessageDialog(static_cast<wxWindow *>(this), _L("All objects will be removed, continue?"),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Delete all"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE)
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Delete All"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE)
|
||||
.ShowModal() == wxID_YES) {
|
||||
reset();
|
||||
// BBS: jump to plater panel
|
||||
@@ -14575,7 +14570,7 @@ int GUI::Plater::close_with_confirm(std::function<bool(bool)> second_check)
|
||||
return wxID_NO;
|
||||
}
|
||||
|
||||
MessageDialog dlg(static_cast<wxWindow*>(this), _L("The current project has unsaved changes, save it before continue?"),
|
||||
MessageDialog dlg(static_cast<wxWindow*>(this), _L("The current project has unsaved changes. Would you like to save before continuing\?"),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.show_dsa_button(_L("Remember my choice."));
|
||||
auto choise = wxGetApp().app_config->get("save_project_choise");
|
||||
@@ -16637,7 +16632,7 @@ void Plater::config_change_notification(const DynamicPrintConfig &config, const
|
||||
if (seq_print && view3d_canvas && view3d_canvas->is_initialized() && view3d_canvas->is_rendering_enabled()) {
|
||||
NotificationManager* notify_manager = get_notification_manager();
|
||||
if (seq_print->value == PrintSequence::ByObject) {
|
||||
std::string info_text = _u8L("Print By Object: \nSuggest to use auto-arrange to avoid collisions when printing.");
|
||||
std::string info_text = _u8L("Print By Object: \nWe suggest using auto-arrange to avoid collisions when printing.");
|
||||
notify_manager->bbl_show_seqprintinfo_notification(info_text);
|
||||
}
|
||||
else
|
||||
@@ -18307,8 +18302,7 @@ void Plater::post_process_string_object_exception(StringObjectException &err)
|
||||
break;
|
||||
}
|
||||
}
|
||||
err.string = format(_L("Plate %d: %s is not suggested to be used to print filament %s (%s). "
|
||||
"If you still want to do this print job, please set this filament's bed temperature to non-zero."),
|
||||
err.string = format(_L("Plate %d: %s is not suggested for use printing filament %s (%s). If you still want to do this print job, please set this filament\'s bed temperature to a number that is not zero."),
|
||||
err.params[0], err.params[1], err.params[2], filament_name);
|
||||
err.string += "\n";
|
||||
}
|
||||
|
||||
@@ -84,8 +84,8 @@ wxString PrePrintChecker::get_pre_state_msg(PrintDialogStatus status)
|
||||
case PrintStatusLanModeNoSdcard: return _L("Storage needs to be inserted before printing via LAN.");
|
||||
case PrintStatusLanModeSDcardNotAvailable: return _L("Storage is in abnormal state or is in read-only mode.");
|
||||
case PrintStatusNoSdcard: return _L("Storage needs to be inserted before printing.");
|
||||
case PrintStatusNeedForceUpgrading: return _L("Cannot send the print job to a printer whose firmware is required to get updated.");
|
||||
case PrintStatusNeedConsistencyUpgrading: return _L("Cannot send the print job to a printer whose firmware is required to get updated.");
|
||||
case PrintStatusNeedForceUpgrading: return _L("Cannot send the print job to a printer whose firmware must be updated.");
|
||||
case PrintStatusNeedConsistencyUpgrading: return _L("Cannot send the print job to a printer whose firmware must be updated.");
|
||||
case PrintStatusBlankPlate: return _L("Cannot send a print job for an empty plate.");
|
||||
case PrintStatusTimelapseNoSdcard: return _L("Storage needs to be inserted to record timelapse.");
|
||||
case PrintStatusMixAmsAndVtSlotWarning: return _L("You have selected both external and AMS filaments for an extruder. You will need to manually switch the external filament during printing.");
|
||||
|
||||
@@ -295,7 +295,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS
|
||||
{
|
||||
//check if the project has changed
|
||||
if (wxGetApp().plater()->is_project_dirty()) {
|
||||
auto result = MessageDialog(static_cast<wxWindow*>(this), _L("The current project has unsaved changes, save it before continue?"),
|
||||
auto result = MessageDialog(static_cast<wxWindow*>(this), _L("The current project has unsaved changes. Would you like to save before continuing\?"),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE).ShowModal();
|
||||
|
||||
if (result == wxID_YES) {
|
||||
@@ -307,7 +307,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS
|
||||
// the dialog needs to be destroyed before the call to switch_language()
|
||||
// or sometimes the application crashes into wxDialogBase() destructor
|
||||
// so we put it into an inner scope
|
||||
MessageDialog msg_wingow(nullptr, _L("Switching the language requires application restart.\n") + "\n" + _L("Do you want to continue?"),
|
||||
MessageDialog msg_wingow(nullptr, _L("Switching languages requires the application to restart.\n") + "\n" + _L("Do you want to continue?"),
|
||||
L("Language selection"), wxICON_QUESTION | wxOK | wxCANCEL);
|
||||
if (msg_wingow.ShowModal() == wxID_CANCEL) {
|
||||
combobox->SetSelection(m_current_language_selected);
|
||||
@@ -401,7 +401,7 @@ wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxStr
|
||||
NetworkAgent* agent = wxGetApp().getAgent();
|
||||
AppConfig* config = GUI::wxGetApp().app_config;
|
||||
if (agent) {
|
||||
MessageDialog msg_wingow(this, _L("Changing the region will log out your account.\n") + "\n" + _L("Do you want to continue?"), _L("Region selection"),
|
||||
MessageDialog msg_wingow(this, _L("Changing the region will log you out of your account.\n") + "\n" + _L("Do you want to continue?"), _L("Region selection"),
|
||||
wxICON_QUESTION | wxOK | wxCANCEL);
|
||||
if (msg_wingow.ShowModal() == wxID_CANCEL) {
|
||||
combobox->SetSelection(current_region);
|
||||
@@ -1366,7 +1366,7 @@ void PreferencesDialog::create_items()
|
||||
g_sizer->Add(item_default_page);
|
||||
|
||||
#ifdef _WIN32
|
||||
auto item_darkmode = create_item_darkmode(_L("Enable dark mode"), "", "dark_color_mode");
|
||||
auto item_darkmode = create_item_darkmode(_L("Enable dark Mode"), "", "dark_color_mode");
|
||||
g_sizer->Add(item_darkmode);
|
||||
#endif
|
||||
|
||||
@@ -1421,7 +1421,7 @@ void PreferencesDialog::create_items()
|
||||
auto item_step_dialog = create_item_checkbox(_L("Show options when importing STEP file"), _L("If enabled, a parameter settings dialog will appear during STEP file import."), "enable_step_mesh_setting");
|
||||
g_sizer->Add(item_step_dialog);
|
||||
|
||||
auto item_backup = create_item_backup(_L("Auto backup"), _L("Backup your project periodically for restoring from the occasional crash."));
|
||||
auto item_backup = create_item_backup(_L("Auto backup"), _L("Backup your project periodically to help with restoring from an occasional crash."));
|
||||
g_sizer->Add(item_backup);
|
||||
|
||||
//// GENERAL > Preset
|
||||
@@ -1708,7 +1708,7 @@ void PreferencesDialog::create_items()
|
||||
if (m_sync_user_preset_checkbox) m_sync_user_preset_checkbox->Enable(false);
|
||||
}
|
||||
|
||||
auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), "", "sync_system_preset");
|
||||
auto item_system_sync = create_item_checkbox(_L("Update built-in presets automatically."), "", "sync_system_preset");
|
||||
g_sizer->Add(item_system_sync);
|
||||
|
||||
auto item_token_storage = create_item_checkbox(_L("Use encrypted file for token storage"),
|
||||
@@ -1874,16 +1874,16 @@ void PreferencesDialog::create_items()
|
||||
//// ASSOCIATE > Extensions
|
||||
g_sizer->Add(create_item_title(_L("Associate files to OrcaSlicer")), 1, wxEXPAND);
|
||||
|
||||
auto item_associate_3mf = create_item_checkbox(_L("Associate 3MF files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open 3MF files.") , "associate_3mf");
|
||||
auto item_associate_3mf = create_item_checkbox(_L("Associate 3MF files to OrcaSlicer"), _L("If enabled, this sets OrcaSlicer as the default application to open 3MF files.") , "associate_3mf");
|
||||
g_sizer->Add(item_associate_3mf);
|
||||
|
||||
auto item_associate_drc = create_item_checkbox(_L("Associate DRC files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open DRC files."), "associate_drc");
|
||||
g_sizer->Add(item_associate_drc);
|
||||
|
||||
auto item_associate_stl = create_item_checkbox(_L("Associate STL files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open STL files.") , "associate_stl");
|
||||
auto item_associate_stl = create_item_checkbox(_L("Associate STL files to OrcaSlicer"), _L("If enabled, this sets OrcaSlicer as the default application to open STL files.") , "associate_stl");
|
||||
g_sizer->Add(item_associate_stl);
|
||||
|
||||
auto item_associate_step = create_item_checkbox(_L("Associate STEP files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open STEP files."), "associate_step");
|
||||
auto item_associate_step = create_item_checkbox(_L("Associate STEP files to OrcaSlicer"), _L("If enabled, this sets OrcaSlicer as the default application to open STEP files."), "associate_step");
|
||||
g_sizer->Add(item_associate_step);
|
||||
|
||||
//// ASSOCIATE > WebLinks
|
||||
@@ -2012,7 +2012,7 @@ void PreferencesDialog::create_shortcuts_page()
|
||||
auto item_zoom_view = create_item_multiple_combobox(_L("Zoom view"), _L("Zoom view"), "rotate_view", keyboard_supported, mouse_supported);
|
||||
|
||||
auto title_other = create_item_title(_L("Other"));
|
||||
auto item_other = create_item_checkbox(_L("Mouse wheel reverses when zooming"), _L("Mouse wheel reverses when zooming"), "mouse_wheel");
|
||||
auto item_other = create_item_checkbox(_L("Reverse scroll direction while zooming"), _L("Reverse scroll direction while zooming"), "mouse_wheel");
|
||||
|
||||
sizer_page->Add(title_view_control, 0, wxTOP, 26);
|
||||
sizer_page->Add(item_rotate_view, 0, wxTOP, 8);
|
||||
@@ -2068,7 +2068,7 @@ wxBoxSizer* PreferencesDialog::create_debug_page()
|
||||
|
||||
debug_button->Bind(wxEVT_LEFT_DOWN, [this, radio_group](wxMouseEvent &e) {
|
||||
// success message box
|
||||
MessageDialog dialog(this, _L("Save debug settings"), _L("DEBUG settings have been saved successfully!"), wxNO_DEFAULT | wxYES_NO | wxICON_INFORMATION);
|
||||
MessageDialog dialog(this, _L("Save debug settings"), _L("Debug settings have been saved successfully!"), wxNO_DEFAULT | wxYES_NO | wxICON_INFORMATION);
|
||||
dialog.SetSize(400,-1);
|
||||
switch (dialog.ShowModal()) {
|
||||
case wxID_NO: {
|
||||
@@ -2129,7 +2129,7 @@ wxBoxSizer* PreferencesDialog::create_debug_page()
|
||||
agent->set_country_code(country_code);
|
||||
}
|
||||
ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Warning"), ConfirmBeforeSendDialog::VisibleButtons::ONLY_CONFIRM); // ORCA VisibleButtons instead ButtonStyle
|
||||
confirm_dlg.update_text(_L("Cloud environment switched, please login again!"));
|
||||
confirm_dlg.update_text(_L("Cloud environment switched; please login again!"));
|
||||
confirm_dlg.on_show();
|
||||
}
|
||||
|
||||
|
||||
@@ -511,7 +511,7 @@ bool PresetComboBox::add_ams_filaments(std::string selected, bool alias_name)
|
||||
bool is_bbl_vendor_preset = m_preset_bundle->is_bbl_vendor();
|
||||
if (is_bbl_vendor_preset && !m_preset_bundle->filament_ams_list.empty()) {
|
||||
bool dual_extruder = (m_preset_bundle->filament_ams_list.begin()->first & 0x10000) == 0;
|
||||
set_label_marker(Append(dual_extruder ? _L("Left filaments") : _L("AMS filaments"), wxNullBitmap, DD_ITEM_STYLE_SPLIT_ITEM));
|
||||
set_label_marker(Append(dual_extruder ? _L("Left filaments") : _L("AMS filament"), wxNullBitmap, DD_ITEM_STYLE_SPLIT_ITEM));
|
||||
m_first_ams_filament = GetCount();
|
||||
auto &filaments = m_collection->get_presets();
|
||||
|
||||
@@ -1458,7 +1458,7 @@ void PlaterPresetComboBox::update()
|
||||
assert(bmp);
|
||||
|
||||
if (m_type == Preset::TYPE_FILAMENT)
|
||||
set_label_marker(Append(separator(L("Add/Remove filaments")), *bmp), LABEL_ITEM_WIZARD_FILAMENTS);
|
||||
set_label_marker(Append(separator(L("Add/Remove filament")), *bmp), LABEL_ITEM_WIZARD_FILAMENTS);
|
||||
else if (m_type == Preset::TYPE_SLA_MATERIAL)
|
||||
set_label_marker(Append(separator(L("Add/Remove materials")), *bmp), LABEL_ITEM_WIZARD_MATERIALS);
|
||||
else {
|
||||
|
||||
@@ -363,7 +363,7 @@ void PrintOptionsDialog::update_options(MachineObject* obj_)
|
||||
if (obj_->is_support_build_plate_marker_detect) {
|
||||
if (obj_->m_plate_maker_detect_type == MachineObject::POS_CHECK && (text_plate_mark->GetLabel() != _L("Enable detection of build plate position"))) {
|
||||
text_plate_mark->SetLabel(_L("Enable detection of build plate position"));
|
||||
text_plate_mark_caption->SetLabel(_L("The localization tag of build plate is detected, and printing is paused if the tag is not in predefined range."));
|
||||
text_plate_mark_caption->SetLabel(_L("The localization tag of the build plate will be detected, and printing will be paused if the tag is not in predefined range."));
|
||||
text_plate_mark_caption->Wrap(FromDIP(400));
|
||||
} else if (obj_->m_plate_maker_detect_type == MachineObject::TYPE_POS_CHECK && (text_plate_mark->GetLabel() != _L("Build Plate Detection"))) {
|
||||
text_plate_mark->SetLabel(_L("Build Plate Detection"));
|
||||
@@ -813,9 +813,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent)
|
||||
line_sizer->Add(FromDIP(5), 0, 0, 0);
|
||||
|
||||
line_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxString caption_text = _L(
|
||||
"The localization tag of build plate is detected, and printing is paused if the tag is not in predefined range."
|
||||
);
|
||||
wxString caption_text = _L("The localization tag of the build plate will be detected, and printing will be paused if the tag is not in predefined range.");
|
||||
text_plate_mark_caption = new Label(parent, caption_text);
|
||||
text_plate_mark_caption->Wrap(FromDIP(400));
|
||||
text_plate_mark_caption->SetFont(Label::Body_12);
|
||||
@@ -855,7 +853,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent)
|
||||
// auto-recovery from step loss
|
||||
line_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_cb_auto_recovery = new CheckBox(parent);
|
||||
text_auto_recovery = new Label(parent, _L("Auto-recovery from step loss"));
|
||||
text_auto_recovery = new Label(parent, _L("Auto-recover from step loss"));
|
||||
text_auto_recovery->SetFont(Label::Body_14);
|
||||
line_sizer->Add(FromDIP(5), 0, 0, 0);
|
||||
line_sizer->Add(m_cb_auto_recovery, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5));
|
||||
@@ -907,7 +905,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent)
|
||||
//filament tangle detect
|
||||
line_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_cb_filament_tangle = new CheckBox(parent);
|
||||
text_filament_tangle = new Label(parent, _L("Filament Tangle Detect"));
|
||||
text_filament_tangle = new Label(parent, _L("Filament Tangle Detection"));
|
||||
text_filament_tangle->SetFont(Label::Body_14);
|
||||
line_sizer->Add(FromDIP(5), 0, 0, 0);
|
||||
line_sizer->Add(m_cb_filament_tangle, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5));
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
static wxString PUBLISH_STEP_STRING[STEP_COUNT] = {
|
||||
_L("Slice all plate to obtain time and filament estimation"),
|
||||
_L("Slice all plates to obtain time and filament estimation"),
|
||||
_L("Packing project data into 3MF file"),
|
||||
_L("Uploading 3MF"),
|
||||
_L("Jump to model publish web page")
|
||||
|
||||
@@ -137,7 +137,7 @@ UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/)
|
||||
m_text_up_info->SetForegroundColour(wxColour(0x26, 0x2E, 0x30));
|
||||
|
||||
|
||||
operation_tips = new ::Label(this, Label::Body_12, _L("Click OK to update the Network plug-in when Orca Slicer launches next time."), LB_AUTO_WRAP);
|
||||
operation_tips = new ::Label(this, Label::Body_12, _L("Click OK to update the Network plug-in the next time Orca Slicer launches."), LB_AUTO_WRAP);
|
||||
operation_tips->SetMinSize(wxSize(FromDIP(260), -1));
|
||||
operation_tips->SetMaxSize(wxSize(FromDIP(260), -1));
|
||||
|
||||
@@ -1059,7 +1059,7 @@ void PrintErrorDialog::init_button_list()
|
||||
init_button(FILAMENT_EXTRUDED, _L("Filament Extruded, Continue"));
|
||||
init_button(RETRY_FILAMENT_EXTRUDED, _L("Not Extruded Yet, Retry"));
|
||||
init_button(CONTINUE, _L("Finished, Continue"));
|
||||
init_button(LOAD_VIRTUAL_TRAY, _L("Load Filament"));
|
||||
init_button(LOAD_VIRTUAL_TRAY, _L("Load"));
|
||||
init_button(OK_BUTTON, _L("OK"));
|
||||
init_button(FILAMENT_LOAD_RESUME, _L("Filament Loaded, Resume"));
|
||||
init_button(JUMP_TO_LIVEVIEW, _L("View Liveview"));
|
||||
|
||||
@@ -172,22 +172,22 @@ void SavePresetDialog::Item::update()
|
||||
info_line = from_u8((boost::format(_u8L("Preset \"%1%\" already exists.")) % m_preset_name).str());
|
||||
else
|
||||
info_line = from_u8((boost::format(_u8L("Preset \"%1%\" already exists and is incompatible with the current printer.")) % m_preset_name).str());
|
||||
info_line += "\n" + _L("Please note that saving will overwrite this preset.");
|
||||
info_line += "\n" + _L("Please note that saving will overwrite the current preset.");
|
||||
m_valid_type = Warning;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && m_preset_name.empty()) {
|
||||
info_line = _L("The name is not allowed to be empty.");
|
||||
info_line = _L("The name field is not allowed to be empty.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && m_preset_name.find_first_of(' ') == 0) {
|
||||
info_line = _L("The name is not allowed to start with space character.");
|
||||
info_line = _L("The name is not allowed to start with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && m_preset_name.find_last_of(' ') == m_preset_name.length() - 1) {
|
||||
info_line = _L("The name is not allowed to end with space character.");
|
||||
info_line = _L("The name is not allowed to end with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
|
||||
@@ -1647,7 +1647,7 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector<wxSt
|
||||
for (auto warning : plate->get_slice_result()->warnings) {
|
||||
if (warning.msg == NOT_GENERATE_TIMELAPSE) {
|
||||
if (warning.error_code == "10014001") {
|
||||
msg_text = _L("When enable spiral vase mode, machines with I3 structure will not generate timelapse videos.");
|
||||
msg_text = _L("When spiral vase mode is enabled, machines with I3 structure will not generate timelapse videos.");
|
||||
}
|
||||
else if (warning.error_code == "10014002") {
|
||||
msg_text = _L("The current printer does not support timelapse in Traditional Mode when printing By-Object.");
|
||||
@@ -2062,7 +2062,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
|
||||
|
||||
if (has_unknown_filament) {
|
||||
has_slice_warnings = true;
|
||||
confirm_text.push_back(ConfirmBeforeSendInfo(_L("There are some unknown filaments in the AMS mappings. Please check whether they are the required filaments. If they are okay, press \"Confirm\" to start printing.")));
|
||||
confirm_text.push_back(ConfirmBeforeSendInfo(_L("There are some unknown filaments in the AMS mappings. Please check whether they are the required filaments. If they are okay, click \"Confirm\" to start printing.")));
|
||||
}
|
||||
|
||||
if (has_slice_warnings)
|
||||
@@ -2909,17 +2909,17 @@ void SelectMachineDialog::on_rename_enter()
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.empty()) {
|
||||
info_line = _L("The name is not allowed to be empty.");
|
||||
info_line = _L("The name field is not allowed to be empty.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_first_of(' ') == 0) {
|
||||
info_line = _L("The name is not allowed to start with space character.");
|
||||
info_line = _L("The name is not allowed to start with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_last_of(' ') == new_file_name.length() - 1) {
|
||||
info_line = _L("The name is not allowed to end with space character.");
|
||||
info_line = _L("The name is not allowed to end with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
@@ -3620,7 +3620,7 @@ bool SelectMachineDialog::has_timelapse_warning(wxString &msg_text)
|
||||
for (auto warning : plate->get_slice_result()->warnings) {
|
||||
if (warning.msg == NOT_GENERATE_TIMELAPSE) {
|
||||
if (warning.error_code == "10014001") {
|
||||
msg_text = _L("When enable spiral vase mode, machines with I3 structure will not generate timelapse videos.");
|
||||
msg_text = _L("When spiral vase mode is enabled, machines with I3 structure will not generate timelapse videos.");
|
||||
} else if (warning.error_code == "10014002") {
|
||||
msg_text = _L("The current printer does not support timelapse in Traditional Mode when printing By-Object.");
|
||||
}
|
||||
|
||||
@@ -598,7 +598,7 @@ void SelectMachinePopup::update_other_devices()
|
||||
wxBoxSizer* placeholder_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
// ORCA standardized HyperLink
|
||||
m_hyperlink = new HyperLink(m_placeholder_panel, _L("Can't find my devices?"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"));
|
||||
m_hyperlink = new HyperLink(m_placeholder_panel, _L("Can\'t find devices\?"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"));
|
||||
m_hyperlink->SetFont(::Label::Body_12);
|
||||
placeholder_sizer->Add(m_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
|
||||
|
||||
@@ -951,17 +951,17 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e)
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_dev_name.empty()) {
|
||||
info_line = _L("The name is not allowed to be empty.");
|
||||
info_line = _L("The name field is not allowed to be empty.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_dev_name.find_first_of(' ') == 0) {
|
||||
info_line = _L("The name is not allowed to start with space character.");
|
||||
info_line = _L("The name is not allowed to start with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_dev_name.find_last_of(' ') == new_dev_name.length() - 1) {
|
||||
info_line = _L("The name is not allowed to end with space character.");
|
||||
info_line = _L("The name is not allowed to end with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
|
||||
@@ -519,7 +519,7 @@ void Selection::center()
|
||||
Vec3d distance = Vec3d(tar_pos.x() - src_pos.x(), tar_pos.y() - src_pos.y(), 0);
|
||||
|
||||
this->move_to_center(distance);
|
||||
wxGetApp().plater()->get_view3D_canvas3D()->do_move(L("Move Object"));
|
||||
wxGetApp().plater()->get_view3D_canvas3D()->do_move(L("Move object"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -529,7 +529,7 @@ void Selection::drop()
|
||||
return; // shouldnt happen, but better check anyways, already checked in append_menu_item_drop()
|
||||
}
|
||||
|
||||
wxGetApp().plater()->take_snapshot(L("Move Object"));
|
||||
wxGetApp().plater()->take_snapshot(L("Move object"));
|
||||
|
||||
this->move_to_center(Vec3d(0, 0, -this->get_bounding_box().min.z()));
|
||||
|
||||
@@ -563,7 +563,7 @@ void Selection::center_plate(const int plate_idx) {
|
||||
Vec3d distance = Vec3d(tar_pos.x() - src_pos.x(), tar_pos.y() - src_pos.y(), 0);
|
||||
|
||||
this->move_to_center(distance);
|
||||
wxGetApp().plater()->get_view3D_canvas3D()->do_move(L("Move Object"));
|
||||
wxGetApp().plater()->get_view3D_canvas3D()->do_move(L("Move object"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@ public:
|
||||
|
||||
bool requires_uniform_scale() const;
|
||||
|
||||
// Returns the the object id if the selection is from a single object, otherwise is -1
|
||||
// Returns the object id if the selection is from a single object, otherwise is -1
|
||||
int get_object_idx() const;
|
||||
// Returns the instance id if the selection is from a single object and from a single instance, otherwise is -1
|
||||
int get_instance_idx() const;
|
||||
|
||||
@@ -1369,7 +1369,7 @@ wxPanel* SendMultiMachinePage::create_page()
|
||||
|
||||
// add printing options
|
||||
wxBoxSizer* title_print_option = create_item_title(_L("Printing Options"), main_page, "");
|
||||
wxBoxSizer* item_bed_level = create_item_checkbox(_L("Bed Leveling"), main_page, "", 50, "bed_leveling");
|
||||
wxBoxSizer* item_bed_level = create_item_checkbox(_L("Bed leveling"), main_page, "", 50, "bed_leveling");
|
||||
wxBoxSizer* item_timelapse = create_item_checkbox(_L("Timelapse"), main_page, "", 50, "timelapse");
|
||||
wxBoxSizer* item_flow_dy_ca = create_item_checkbox(_L("Flow Dynamic Calibration"), main_page, "", 50, "flow_cali");
|
||||
sizer->Add(title_print_option, 0, wxEXPAND, 0);
|
||||
@@ -1383,7 +1383,7 @@ wxPanel* SendMultiMachinePage::create_page()
|
||||
// add send option
|
||||
wxBoxSizer* title_send_option = create_item_title(_L("Send Options"), main_page, "");
|
||||
wxBoxSizer* max_printer_send = create_item_input(_L("Send to"), _L("printers at the same time. (It depends on how many devices can undergo heating at the same time.)"), main_page, "", "max_send");
|
||||
wxBoxSizer* delay_time = create_item_input(_L("Wait"), _L("minute each batch. (It depends on how long it takes to complete the heating.)"), main_page, "", "sending_interval");
|
||||
wxBoxSizer* delay_time = create_item_input(_L("Wait"), _L("minute each batch. (It depends on how long it takes to complete heating.)"), main_page, "", "sending_interval");
|
||||
sizer->Add(title_send_option, 0, wxEXPAND, 0);
|
||||
sizer->Add(max_printer_send, 0, wxLEFT, FromDIP(20));
|
||||
sizer->AddSpacer(FromDIP(3));
|
||||
@@ -1650,17 +1650,17 @@ void SendMultiMachinePage::on_rename_enter()
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.empty()) {
|
||||
info_line = _L("The name is not allowed to be empty.");
|
||||
info_line = _L("The name field is not allowed to be empty.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_first_of(' ') == 0) {
|
||||
info_line = _L("The name is not allowed to start with space character.");
|
||||
info_line = _L("The name is not allowed to start with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_last_of(' ') == new_file_name.length() - 1) {
|
||||
info_line = _L("The name is not allowed to end with space character.");
|
||||
info_line = _L("The name is not allowed to end with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
|
||||
@@ -176,17 +176,17 @@ void SendToPrinterDialog::on_rename_enter()
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.empty()) {
|
||||
info_line = _L("The name is not allowed to be empty.");
|
||||
info_line = _L("The name field is not allowed to be empty.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_first_of(' ') == 0) {
|
||||
info_line = _L("The name is not allowed to start with space character.");
|
||||
info_line = _L("The name is not allowed to start with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
if (m_valid_type == Valid && new_file_name.find_last_of(' ') == new_file_name.length() - 1) {
|
||||
info_line = _L("The name is not allowed to end with space character.");
|
||||
info_line = _L("The name is not allowed to end with a space.");
|
||||
m_valid_type = NoValid;
|
||||
}
|
||||
|
||||
@@ -1446,7 +1446,7 @@ void SendToPrinterDialog::show_status(PrintDialogStatus status, std::vector<wxSt
|
||||
Enable_Refresh_Button(true);
|
||||
}
|
||||
else if (status == PrintDialogStatus::PrintStatusInUpgrading) {
|
||||
wxString msg_text = _L("Cannot send the print task when the upgrade is in progress");
|
||||
wxString msg_text = _L("Cannot send print tasks when an update is in progress");
|
||||
update_print_status_msg(msg_text, true, true);
|
||||
Enable_Send_Button(false);
|
||||
Enable_Refresh_Button(true);
|
||||
@@ -1477,7 +1477,7 @@ void SendToPrinterDialog::show_status(PrintDialogStatus status, std::vector<wxSt
|
||||
Enable_Refresh_Button(true);
|
||||
}
|
||||
else if (status == PrintDialogStatus::PrintStatusNotOnTheSameLAN) {
|
||||
wxString msg_text = _L("The printer is required to be in the same LAN as Orca Slicer.");
|
||||
wxString msg_text = _L("The printer is required to be on the same LAN as Orca Slicer.");
|
||||
update_print_status_msg(msg_text, true, true);
|
||||
Enable_Send_Button(false);
|
||||
Enable_Refresh_Button(true);
|
||||
|
||||
@@ -131,7 +131,7 @@ void NotificationManager::SlicingProgressNotification::set_status_text(const std
|
||||
break;
|
||||
case Slic3r::GUI::NotificationManager::SlicingProgressNotification::SlicingProgressState::SP_COMPLETED:
|
||||
{
|
||||
NotificationData data{ NotificationType::SlicingProgress, NotificationLevel::ProgressBarNotificationLevel, 0, _u8L("Slice ok.") };
|
||||
NotificationData data{ NotificationType::SlicingProgress, NotificationLevel::ProgressBarNotificationLevel, 0, _u8L("Slice complete") };
|
||||
update(data);
|
||||
m_state = EState::Shown;
|
||||
}
|
||||
|
||||
@@ -516,7 +516,7 @@ void PrintingTaskPanel::create_panel(wxWindow* parent)
|
||||
m_panel_printing_title = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, PAGE_TITLE_HEIGHT), wxTAB_TRAVERSAL);
|
||||
m_panel_printing_title->SetBackgroundColour(STATUS_TITLE_BG);
|
||||
|
||||
m_staticText_printing = new wxStaticText(m_panel_printing_title, wxID_ANY ,_L("Printing Progress"));
|
||||
m_staticText_printing = new wxStaticText(m_panel_printing_title, wxID_ANY ,_L("Printing progress"));
|
||||
m_staticText_printing->Wrap(-1);
|
||||
//m_staticText_printing->SetFont(PAGE_TITLE_FONT);
|
||||
m_staticText_printing->SetForegroundColour(PAGE_TITLE_FONT_COL);
|
||||
@@ -878,7 +878,7 @@ void PrintingTaskPanel::create_panel(wxWindow* parent)
|
||||
m_request_failed_panel = new wxPanel(parent, wxID_ANY);
|
||||
m_request_failed_panel->SetBackgroundColour(*wxWHITE);
|
||||
wxBoxSizer *static_request_failed_panel_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_request_failed_info = new wxStaticText(m_request_failed_panel, wxID_ANY, _L("You have completed printing the mall model, \nbut the synchronization of rating information has failed."), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_request_failed_info = new wxStaticText(m_request_failed_panel, wxID_ANY, _L("You have completed printing the mall model, \nbut synchronizing rating information has failed."), wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_request_failed_info->Wrap(-1);
|
||||
m_request_failed_info->SetForegroundColour(*wxRED);
|
||||
m_request_failed_info->SetFont(::Label::Body_10);
|
||||
@@ -3459,8 +3459,8 @@ void StatusPanel::update_ams_control_state(std::string ams_id, std::string slot_
|
||||
}
|
||||
|
||||
if (ams_id.empty() || slot_id.empty()) {
|
||||
load_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments.");
|
||||
unload_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments.");
|
||||
load_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filament.");
|
||||
unload_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filament.");
|
||||
} else if (ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) {
|
||||
for (auto ext : obj->GetExtderSystem()->GetExtruders()) {
|
||||
if (ext.GetSlotNow().ams_id == ams_id && ext.GetSlotNow().slot_id == slot_id)
|
||||
@@ -3480,14 +3480,14 @@ void StatusPanel::update_ams_control_state(std::string ams_id, std::string slot_
|
||||
auto ams_item = obj->GetFilaSystem()->GetAmsById(ams_id);
|
||||
if (!ams_item)
|
||||
{
|
||||
load_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments.");
|
||||
load_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filament.");
|
||||
}
|
||||
else
|
||||
{
|
||||
auto tray_item = ams_item->GetTray(slot_id);
|
||||
if (!tray_item)
|
||||
{
|
||||
load_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments.");
|
||||
load_error_info = _L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filament.");
|
||||
}
|
||||
else if (!tray_item->is_exists)
|
||||
{
|
||||
@@ -3671,7 +3671,7 @@ void StatusPanel::update_subtask(MachineObject *obj)
|
||||
if (obj->queue_number <= 0) {
|
||||
prepare_text = wxString::Format(_L("Cloud Slicing..."));
|
||||
} else {
|
||||
prepare_text = wxString::Format(_L("In Cloud Slicing Queue, there are %s tasks ahead."), std::to_string(obj->queue_number));
|
||||
prepare_text = wxString::Format(_L("In Cloud Slicing Queue, there are %s tasks ahead of you."), std::to_string(obj->queue_number));
|
||||
show_percent = false;
|
||||
}
|
||||
} else
|
||||
@@ -4548,7 +4548,7 @@ void StatusPanel::on_ams_refresh_rfid(wxCommandEvent &event)
|
||||
}
|
||||
|
||||
if (has_filament_at_extruder) {
|
||||
MessageDialog msg_dlg(nullptr, _L("Cannot read filament info: the filament is loaded to the tool head,please unload the filament and try again."), wxEmptyString,
|
||||
MessageDialog msg_dlg(nullptr, _L("Cannot read filament info: the filament is loaded to the tool head. Please unload the filament and try again."), wxEmptyString,
|
||||
wxICON_WARNING | wxYES);
|
||||
msg_dlg.ShowModal();
|
||||
return;
|
||||
|
||||
@@ -1837,10 +1837,10 @@ void SyncAmsInfoDialog::show_status(PrintDialogStatus status, std::vector<wxStri
|
||||
wxString msg_text = _L("Storage needs to be inserted to record timelapse.");
|
||||
update_print_status_msg(msg_text, true, true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusNeedForceUpgrading) {
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware is required to get updated.");
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware must be updated.");
|
||||
update_print_status_msg(msg_text, true, true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusNeedConsistencyUpgrading) {
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware is required to get updated.");
|
||||
wxString msg_text = _L("Cannot send the print job to a printer whose firmware must be updated.");
|
||||
update_print_status_msg(msg_text, true, true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusBlankPlate) {
|
||||
wxString msg_text = _L("Cannot send a print job for an empty plate.");
|
||||
@@ -1854,7 +1854,7 @@ void SyncAmsInfoDialog::show_status(PrintDialogStatus status, std::vector<wxStri
|
||||
for (auto warning : plate->get_slice_result()->warnings) {
|
||||
if (warning.msg == NOT_GENERATE_TIMELAPSE) {
|
||||
if (warning.error_code == "10014001") {
|
||||
msg_text = _L("When enable spiral vase mode, machines with I3 structure will not generate timelapse videos.");
|
||||
msg_text = _L("When spiral vase mode is enabled, machines with I3 structure will not generate timelapse videos.");
|
||||
} else if (warning.error_code == "10014002") {
|
||||
msg_text = _L("Timelapse is not supported because Print sequence is set to \"By object\".");
|
||||
}
|
||||
|
||||
+19
-23
@@ -1570,7 +1570,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value)
|
||||
bool timelapse_enabled = timelapse_type->value == TimelapseType::tlSmooth;
|
||||
if (!boost::any_cast<bool>(value) && timelapse_enabled) {
|
||||
bool set_enable_prime_tower = false;
|
||||
MessageDialog dlg(wxGetApp().plater(), _L("A prime tower is required for smooth timelapse. There may be flaws on the model without prime tower. Are you sure you want to disable prime tower?"),
|
||||
MessageDialog dlg(wxGetApp().plater(), _L("A prime tower is required for smooth timelapse mode. There may be flaws on the model without a prime tower. Are you sure you want to disable the prime tower\?"),
|
||||
_L("Warning"), wxICON_WARNING | wxYES | wxNO);
|
||||
if (dlg.ShowModal() == wxID_NO) {
|
||||
DynamicPrintConfig new_conf = *m_config;
|
||||
@@ -1650,7 +1650,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value)
|
||||
if (opt_key == "timelapse_type") {
|
||||
bool wipe_tower_enabled = m_config->option<ConfigOptionBool>("enable_prime_tower")->value;
|
||||
if (!wipe_tower_enabled && boost::any_cast<int>(value) == (int)TimelapseType::tlSmooth) {
|
||||
MessageDialog dlg(wxGetApp().plater(), _L("A prime tower is required for smooth timelapse. There may be flaws on the model without prime tower. Do you want to enable prime tower?"),
|
||||
MessageDialog dlg(wxGetApp().plater(), _L("A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower\?"),
|
||||
_L("Warning"), wxICON_WARNING | wxYES | wxNO);
|
||||
if (dlg.ShowModal() == wxID_YES) {
|
||||
DynamicPrintConfig new_conf = *m_config;
|
||||
@@ -1717,16 +1717,12 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value)
|
||||
if (!is_soluble_filament(interface_filament_id)) {
|
||||
msg_text = _L("When using support material for the support interface, we recommend the following settings:\n"
|
||||
"0 top Z distance, 0 interface spacing, interlaced rectilinear pattern and disable independent support layer height.");
|
||||
msg_text += "\n\n" + _L("Change these settings automatically?\n"
|
||||
"Yes - Change these settings automatically\n"
|
||||
"No - Do not change these settings for me");
|
||||
msg_text += "\n\n" + _L("Change these settings automatically\?\nYes - Change these settings automatically.\nNo - Do not change these settings for me.");
|
||||
} else {
|
||||
msg_text = _L("When using soluble material for the support interface, we recommend the following settings:\n"
|
||||
"0 top Z distance, 0 interface spacing, interlaced rectilinear pattern, disable independent support layer height\n"
|
||||
"and use soluble materials for both support interface and support base.");
|
||||
msg_text += "\n\n" + _L("Change these settings automatically?\n"
|
||||
"Yes - Change these settings automatically\n"
|
||||
"No - Do not change these settings for me");
|
||||
msg_text += "\n\n" + _L("Change these settings automatically\?\nYes - Change these settings automatically.\nNo - Do not change these settings for me.");
|
||||
}
|
||||
MessageDialog dialog(wxGetApp().plater(), msg_text, _L("Suggestion"), wxICON_WARNING | wxYES | wxNO);
|
||||
DynamicPrintConfig new_conf = *m_config;
|
||||
@@ -2595,7 +2591,7 @@ void TabPrint::build()
|
||||
optgroup->append_single_option_line("raft_layers", "support_settings_raft");
|
||||
optgroup->append_single_option_line("raft_contact_distance", "support_settings_raft");
|
||||
|
||||
optgroup = page->new_optgroup(L("Support filament"), L"param_support_filament");
|
||||
optgroup = page->new_optgroup(L("Filament for Supports"), L"param_support_filament");
|
||||
optgroup->append_single_option_line("support_filament", "support_settings_filament#base");
|
||||
optgroup->append_single_option_line("support_interface_filament", "support_settings_filament#interface");
|
||||
optgroup->append_single_option_line("support_interface_not_for_body", "support_settings_filament#avoid-interface-filament-for-base");
|
||||
@@ -2733,7 +2729,7 @@ void TabPrint::build()
|
||||
optgroup->append_single_option_line("timelapse_type", "others_settings_special_mode#timelapse");
|
||||
optgroup->append_single_option_line("enable_wrapping_detection");
|
||||
|
||||
optgroup = page->new_optgroup(L("Fuzzy Skin"), L"fuzzy_skin");
|
||||
optgroup = page->new_optgroup(L("Fuzzy skin"), L"fuzzy_skin");
|
||||
optgroup->append_single_option_line("fuzzy_skin", "others_settings_fuzzy_skin");
|
||||
optgroup->append_single_option_line("fuzzy_skin_mode", "others_settings_fuzzy_skin#fuzzy-skin-mode");
|
||||
optgroup->append_single_option_line("fuzzy_skin_noise_type", "others_settings_fuzzy_skin#noise-type");
|
||||
@@ -3557,8 +3553,8 @@ bool Tab::validate_custom_gcode(const wxString& title, const std::string& gcode)
|
||||
for (const std::string& keyword : tags)
|
||||
lines += ";" + keyword + "\n";
|
||||
wxString reports = format_wxstr(
|
||||
_L_PLURAL("Following line %s contains reserved keywords.\nPlease remove it, or will beat G-code visualization and printing time estimation.",
|
||||
"Following lines %s contain reserved keywords.\nPlease remove them, or will beat G-code visualization and printing time estimation.",
|
||||
_L_PLURAL("Following line %s contains reserved keywords.\nPlease remove it, or G-code visualization and print time estimation will be broken.",
|
||||
"Following lines %s contain reserved keywords.\nPlease remove them, or G-code visualization and print time estimation will be broken.",
|
||||
tags.size()),
|
||||
lines);
|
||||
//wxMessageDialog dialog(wxGetApp().mainframe, reports, _L("Found reserved keywords in") + " " + _(title), wxICON_WARNING | wxOK);
|
||||
@@ -3917,7 +3913,7 @@ void TabFilament::build()
|
||||
//BBS
|
||||
optgroup->append_single_option_line("temperature_vitrification", "material_basic_information#softening-temperature");
|
||||
optgroup->append_single_option_line("idle_temperature", "material_basic_information#idle-temperature");
|
||||
Line line = { L("Recommended nozzle temperature"), L("Recommended nozzle temperature range of this filament. 0 means no set") };
|
||||
Line line = { L("Recommended nozzle temperature"), L("Recommended nozzle temperature range of this filament. 0 means not set") };
|
||||
line.append_option(optgroup->get_option("nozzle_temperature_range_low"));
|
||||
line.append_option(optgroup->get_option("nozzle_temperature_range_high"));
|
||||
optgroup->append_line(line);
|
||||
@@ -3972,35 +3968,35 @@ void TabFilament::build()
|
||||
optgroup->append_line(line);
|
||||
|
||||
line = { L("Cool Plate"),
|
||||
L("Bed temperature when the Cool Plate is installed. A value of 0 means the filament does not support printing on the Cool Plate.") };
|
||||
L("This is the bed temperature when the Cool Plate is installed. A value of 0 means the filament does not support printing on the Cool Plate.") };
|
||||
line.label_path = "material_temperatures#bed";
|
||||
line.append_option(optgroup->get_option("cool_plate_temp_initial_layer"));
|
||||
line.append_option(optgroup->get_option("cool_plate_temp"));
|
||||
optgroup->append_line(line);
|
||||
|
||||
line = { L("Textured Cool Plate"),
|
||||
L("Bed temperature when the Textured Cool Plate is installed. A value of 0 means the filament does not support printing on the Textured Cool Plate.") };
|
||||
L("This is the bed temperature when the Textured Cool Plate is installed. A value of 0 means the filament does not support printing on the Textured Cool Plate.") };
|
||||
line.label_path = "material_temperatures#bed";
|
||||
line.append_option(optgroup->get_option("textured_cool_plate_temp_initial_layer"));
|
||||
line.append_option(optgroup->get_option("textured_cool_plate_temp"));
|
||||
optgroup->append_line(line);
|
||||
|
||||
line = { L("Engineering Plate"),
|
||||
L("Bed temperature when the Engineering Plate is installed. A value of 0 means the filament does not support printing on the Engineering Plate.") };
|
||||
L("This is the bed temperature when the engineering plate is installed. A value of 0 means the filament does not support printing on the Engineering Plate.") };
|
||||
line.label_path = "material_temperatures#bed";
|
||||
line.append_option(optgroup->get_option("eng_plate_temp_initial_layer"));
|
||||
line.append_option(optgroup->get_option("eng_plate_temp"));
|
||||
optgroup->append_line(line);
|
||||
|
||||
line = { L("Smooth PEI Plate / High Temp Plate"),
|
||||
L("Bed temperature when the Smooth PEI Plate/High Temperature Plate is installed. A value of 0 means the filament does not support printing on the Smooth PEI Plate/High Temp Plate.") };
|
||||
L("This is the bed temperature when the Smooth PEI Plate/High Temperature Plate is installed. A value of 0 means the filament does not support printing on the Smooth PEI Plate/High Temp Plate.") };
|
||||
line.label_path = "material_temperatures#bed";
|
||||
line.append_option(optgroup->get_option("hot_plate_temp_initial_layer"));
|
||||
line.append_option(optgroup->get_option("hot_plate_temp"));
|
||||
optgroup->append_line(line);
|
||||
|
||||
line = { L("Textured PEI Plate"),
|
||||
L("Bed temperature when the Textured PEI Plate is installed. A value of 0 means the filament does not support printing on the Textured PEI Plate.") };
|
||||
L("This is the bed temperature when the Textured PEI Plate is installed. A value of 0 means the filament does not support printing on the Textured PEI Plate.") };
|
||||
line.label_path = "material_temperatures#bed";
|
||||
line.append_option(optgroup->get_option("textured_plate_temp_initial_layer"));
|
||||
line.append_option(optgroup->get_option("textured_plate_temp"));
|
||||
@@ -4061,12 +4057,12 @@ void TabFilament::build()
|
||||
optgroup->append_single_option_line("full_fan_speed_layer", "material_cooling#full-fan-speed-at-layer");
|
||||
|
||||
optgroup = page->new_optgroup(L("Part cooling fan"), L"param_cooling_part_fan");
|
||||
line = { L("Min fan speed threshold"), L("Part cooling fan speed will start to run at min speed when the estimated layer time is no longer than the layer time in setting. When layer time is shorter than threshold, fan speed is interpolated between the minimum and maximum fan speed according to layer printing time") };
|
||||
line = { L("Min fan speed threshold"), L("The part cooling fan will run at the minimum fan speed when the estimated layer time is longer than the threshold value. When the layer time is shorter than the threshold, the fan speed will be interpolated between the minimum and maximum fan speed according to layer printing time.") };
|
||||
line.label_path = "material_cooling#material-part-cooling-fan";
|
||||
line.append_option(optgroup->get_option("fan_min_speed"));
|
||||
line.append_option(optgroup->get_option("fan_cooling_layer_time"));
|
||||
optgroup->append_line(line);
|
||||
line = { L("Max fan speed threshold"), L("Part cooling fan speed will be max when the estimated layer time is shorter than the setting value") };
|
||||
line = { L("Max fan speed threshold"), L("The part cooling fan will run at maximum speed when the estimated layer time is shorter than the threshold value.") };
|
||||
line.label_path = "material_cooling#material-part-cooling-fan";
|
||||
line.append_option(optgroup->get_option("fan_max_speed"));
|
||||
line.append_option(optgroup->get_option("slow_down_layer_time"));
|
||||
@@ -6861,7 +6857,7 @@ void Tab::delete_preset()
|
||||
// "Note, that these printers will be deleted after deleting the selected preset.", ph_printers_only.size()) + "\n\n";
|
||||
//}
|
||||
if (!ph_printers.empty() || !ph_printers_only.empty()) {
|
||||
msg += _L_PLURAL("Following preset will be deleted too.", "Following presets will be deleted too.", ph_printers.size() + ph_printers_only.size());
|
||||
msg += _L_PLURAL("The following preset will be deleted too:", "The following presets will be deleted too:", ph_printers.size() + ph_printers_only.size());
|
||||
for (const std::string &printer : ph_printers) msg += "\n \"" + from_u8(printer) + "\",";
|
||||
for (const std::string &printer : ph_printers_only) msg += "\n \"" + from_u8(printer) + "\",";
|
||||
msg.RemoveLast();
|
||||
@@ -6873,7 +6869,7 @@ void Tab::delete_preset()
|
||||
if (is_base_preset && (current_preset.type == Preset::Type::TYPE_FILAMENT) && action == _utf8(L("Delete"))) {
|
||||
msg += from_u8(_u8L("Are you sure to delete the selected preset?\nIf the preset corresponds to a filament currently in use on your printer, please reset the filament information for that slot."));
|
||||
} else {
|
||||
msg += from_u8((boost::format(_u8L("Are you sure to %1% the selected preset?")) % action).str());
|
||||
msg += from_u8((boost::format(_u8L("Are you sure you want to %1% the selected preset\?")) % action).str());
|
||||
}
|
||||
|
||||
//BBS: add project embedded preset logic and refine is_external
|
||||
@@ -7519,7 +7515,7 @@ void Tab::set_tooltips_text()
|
||||
//m_tt_non_system = &m_ttg_white_bullet_ns;
|
||||
// Text to be shown on the "Undo user changes" button next to each input field.
|
||||
//m_tt_white_bullet = _(L("WHITE BULLET icon indicates that the value is the same as in the last saved preset."));
|
||||
m_tt_value_revert = _(L("Click to drop current modify and reset to saved value."));
|
||||
m_tt_value_revert = _(L("Click to drop current modifications and reset to saved value."));
|
||||
}
|
||||
|
||||
//BBS: GUI refactor
|
||||
|
||||
@@ -920,7 +920,7 @@ void TroubleshootDialog::PackAll()
|
||||
if(!project_name.IsEmpty()){
|
||||
if (wxGetApp().plater()->is_project_dirty()) {
|
||||
auto res = MessageDialog(this,
|
||||
_L("The current project has unsaved changes, save it before continue?") +
|
||||
_L("The current project has unsaved changes. Would you like to save before continuing\?") +
|
||||
"\n\n" +
|
||||
_L("Select NO to close dialog and review project"),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE
|
||||
@@ -949,7 +949,7 @@ void TroubleshootDialog::RebuildSystemProfiles()
|
||||
{
|
||||
if (wxGetApp().plater()->is_project_dirty()) {
|
||||
auto res = MessageDialog(this,
|
||||
_L("The current project has unsaved changes, save it before continue?") +
|
||||
_L("The current project has unsaved changes. Would you like to save before continuing\?") +
|
||||
"\n\n" +
|
||||
_L("Select NO to close dialog and review project."),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE
|
||||
|
||||
@@ -152,7 +152,7 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& ol
|
||||
// check if old/new_value is color
|
||||
if (m_old_color.IsEmpty()) {
|
||||
if (!m_new_color.IsEmpty())
|
||||
m_old_value = _L("Undef");
|
||||
m_old_value = _L("Undefined");
|
||||
}
|
||||
else {
|
||||
m_old_color_bmp = get_bitmap(m_old_color);
|
||||
@@ -161,7 +161,7 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const wxString& ol
|
||||
|
||||
if (m_new_color.IsEmpty()) {
|
||||
if (!m_old_color.IsEmpty())
|
||||
m_new_value = _L("Undef");
|
||||
m_new_value = _L("Undefined");
|
||||
}
|
||||
else {
|
||||
m_new_color_bmp = get_bitmap(m_new_color);
|
||||
@@ -790,7 +790,7 @@ static std::string none{"none"};
|
||||
UnsavedChangesDialog::UnsavedChangesDialog(const wxString &caption, const wxString &header, const std::string &app_config_key, int act_buttons)
|
||||
: DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe),
|
||||
wxID_ANY,
|
||||
caption + ": " + _L("Unsaved Changes"),
|
||||
caption + ": " + _L("unsaved changes"),
|
||||
wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
wxCAPTION | wxCLOSE_BOX)
|
||||
@@ -889,7 +889,7 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_
|
||||
wxBoxSizer *top_title_oldv = new wxBoxSizer(wxVERTICAL);
|
||||
wxBoxSizer *top_title_oldv_h = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
static_oldv_title = new wxStaticText(m_panel_oldv, wxID_ANY, _L("Old Value"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
static_oldv_title = new wxStaticText(m_panel_oldv, wxID_ANY, _L("Old value"), wxDefaultPosition, wxDefaultSize, 0);
|
||||
static_oldv_title->SetFont(::Label::Body_13);
|
||||
static_oldv_title->Wrap(-1);
|
||||
static_oldv_title->SetForegroundColour(*wxWHITE);
|
||||
@@ -1076,7 +1076,7 @@ void UnsavedChangesDialog::show_info_line(Action action, std::string preset_name
|
||||
if (action == Action::Undef)
|
||||
text = _L("Click the right mouse button to display the full text.");
|
||||
else if (action == Action::Discard)
|
||||
text = ActionButtons::DONT_SAVE & m_buttons ? _L("All changes will not be saved") :_L("All changes will be discarded.");
|
||||
text = ActionButtons::DONT_SAVE & m_buttons ? _L("No changes will be saved.") :_L("All changes will be discarded.");
|
||||
else {
|
||||
if (preset_name.empty())
|
||||
text = action == Action::Save ? _L("Save the selected options.") :
|
||||
@@ -1202,7 +1202,7 @@ wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConf
|
||||
return "";
|
||||
return from_u8(_utf8(names[it - def.enum_values.begin()]));
|
||||
}
|
||||
return _L("Undef");
|
||||
return _L("Undefined");
|
||||
}
|
||||
return from_u8(_utf8(names[val]));
|
||||
}
|
||||
@@ -1283,7 +1283,7 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
|
||||
return from_u8(value_str);
|
||||
}
|
||||
}
|
||||
return _L("Undef");
|
||||
return _L("Undefined");
|
||||
}
|
||||
case coBool:
|
||||
return config.opt_bool(opt_key) ? "true" : "false";
|
||||
@@ -1298,7 +1298,7 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
|
||||
if (opt_idx < values->size())
|
||||
return values->get_at(opt_idx) ? "true" : "false";
|
||||
}
|
||||
return _L("Undef");
|
||||
return _L("Undefined");
|
||||
}
|
||||
case coPercent:
|
||||
return from_u8((boost::format("%1%%%") % int(config.optptr(opt_key)->getFloat())).str());
|
||||
@@ -1313,7 +1313,7 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
|
||||
if (opt_idx < values->size())
|
||||
return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str());
|
||||
}
|
||||
return _L("Undef");
|
||||
return _L("Undefined");
|
||||
}
|
||||
case coFloat:
|
||||
return double_to_string(config.opt_float(opt_key));
|
||||
@@ -1328,7 +1328,7 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
|
||||
if (values && opt_idx < values->size())
|
||||
return double_to_string(values->get_at(opt_idx));
|
||||
}
|
||||
return _L("Undef");
|
||||
return _L("Undefined");
|
||||
}
|
||||
case coString:
|
||||
return from_u8(config.opt_string(opt_key));
|
||||
|
||||
@@ -1439,9 +1439,7 @@ void UpgradePanel::update(MachineObject *obj)
|
||||
}
|
||||
});
|
||||
}
|
||||
force_dlg->update_text(_L(
|
||||
"An important update was detected and needs to be run before printing can continue. Do you want to update now? You can also update later from 'Upgrade firmware'."
|
||||
));
|
||||
force_dlg->update_text(_L("An important update was detected and needs to be run before printing can continue. Do you want to update now\? You can also update later from \'Update firmware\'."));
|
||||
force_dlg->on_show();
|
||||
}
|
||||
}
|
||||
@@ -1462,9 +1460,7 @@ void UpgradePanel::update(MachineObject *obj)
|
||||
}
|
||||
});
|
||||
}
|
||||
consistency_dlg->update_text(_L(
|
||||
"The firmware version is abnormal. Repairing and updating are required before printing. Do you want to update now? You can also update later on printer or update next time starting Orca."
|
||||
));
|
||||
consistency_dlg->update_text(_L("The firmware version is abnormal. Repairing and updating are required before printing. Do you want to update now\? You can also update later on the printer or update next time you start Orca Slicer."));
|
||||
consistency_dlg->on_show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1337,7 +1337,7 @@ void AMSControl::ShowFilamentTip(bool hasams)
|
||||
//m_simplebook_right->SetSelection(0);
|
||||
if (hasams) {
|
||||
m_tip_right_top->Show();
|
||||
m_tip_load_info->SetLabelText(_L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments."));
|
||||
m_tip_load_info->SetLabelText(_L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filament."));
|
||||
} else {
|
||||
// m_tip_load_info->SetLabelText(_L("Before loading, please make sure the filament is pushed into toolhead."));
|
||||
m_tip_right_top->Hide();
|
||||
|
||||
@@ -30,7 +30,7 @@ FilamentLoad::FilamentLoad(wxWindow* parent, wxWindowID id, const wxPoint& pos,
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_IDLE] = _L("Idling...");
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE] = _L("Heat the nozzle");
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT] = _L("Cut filament");
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT] = _L("Pull back current filament");
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT] = _L("Pull back the current filament");
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PUSH_NEW_FILAMENT] = _L("Push new filament into extruder");
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_GRAB_NEW_FILAMENT] = _L("Grab new filament");
|
||||
FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PURGE_OLD_FILAMENT] = _L("Purge old filament");
|
||||
|
||||
@@ -1412,7 +1412,7 @@ void PresetUpdater::slic3r_update_notify()
|
||||
|
||||
static bool reload_configs_update_gui()
|
||||
{
|
||||
wxString header = _L("Need to check the unsaved changes before configuration updates.");
|
||||
wxString header = _L("Please check any unsaved changes before updating the configuration.");
|
||||
if (!GUI::wxGetApp().check_and_save_current_preset_changes(_L("Configuration updates"), header, false ))
|
||||
return false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user