mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-09-18 02:23:14 +08:00
Merge branch 'stable'
This commit is contained in:
commit
1bf9afbd80
32
.github/workflows/ccpp_mac.yml
vendored
32
.github/workflows/ccpp_mac.yml
vendored
@ -13,7 +13,9 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: change date in version
|
||||
run: sed "s/+UNKNOWN/_$(date '+%F')/" version.inc
|
||||
run: |
|
||||
sed "s/+UNKNOWN/_$(date '+%F')/" version.inc > version.date.inc
|
||||
mv version.date.inc version.inc
|
||||
- name: mkdir in deps
|
||||
run: mkdir deps/build
|
||||
- name: cmake deps
|
||||
@ -33,6 +35,9 @@ jobs:
|
||||
- name: make slic3r
|
||||
working-directory: ./build
|
||||
run: make slic3r
|
||||
- name: update Info.plist
|
||||
working-directory: ./build/src
|
||||
run: sed "s/+UNKNOWN/_$(date '+%F')/" Info.plist >Info.date.plist
|
||||
- name: create directory and copy into it
|
||||
working-directory: ./build
|
||||
run: |
|
||||
@ -46,14 +51,22 @@ jobs:
|
||||
working-directory: ./build
|
||||
run: |
|
||||
cp -Rf ../resources Slic3r++/Slic3r++.app/Contents/resources
|
||||
cp Slic3r++/Slic3r++.app/Contents/resources/icons/slic3r.icns Slic3r++/Slic3r++.app/Contents/resources/slic3r.icns
|
||||
cp src/Info.plist Slic3r++/Slic3r++.app/Contents/Info.plist
|
||||
echo -n -e '\xff\xfeAPPL\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x0a\x00' > PkgInfo
|
||||
cp Slic3r++/Slic3r++.app/Contents/resources/icons/slic3r.icns Slic3r++/Slic3r++.app/Contents/resources/Slic3r.icns
|
||||
cp src/Info.date.plist Slic3r++/Slic3r++.app/Contents/Info.plist
|
||||
echo -n -e 'APPL????\x0a' > PkgInfo
|
||||
cp PkgInfo Slic3r++/Slic3r++.app/Contents/PkgInfo
|
||||
# echo -n -e '\xff\xfeAPPL\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x0a\x00' > PkgInfo
|
||||
- name: copy bin
|
||||
working-directory: ./build
|
||||
run: |
|
||||
cp -f src/slic3r++ Slic3r++/Slic3r++.app/Contents/MacOS/slic3r++
|
||||
chmod 777 Slic3r++/Slic3r++.app/Contents/MacOS/slic3r++
|
||||
chmod u+x Slic3r++/Slic3r++.app/Contents/MacOS/slic3r++
|
||||
tar -cvf slic3r++.tar Slic3r++
|
||||
- name: create dmg
|
||||
working-directory: ./build
|
||||
run: |
|
||||
hdiutil create -ov -fs HFS+ -volname "Slic3r++" -srcfolder "Slic3r++" temp.dmg
|
||||
hdiutil convert temp.dmg -format UDZO -o Slic3r++.dmg
|
||||
# - name: signing resources (creating CodeResources inside _CodeSignature)
|
||||
# working-directory: .
|
||||
# run: codesign -s <identity> resources
|
||||
@ -61,5 +74,10 @@ jobs:
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v1.0.0
|
||||
with:
|
||||
name: nightly_macos
|
||||
path: build/Slic3r++/
|
||||
name: nightly_macos.tar
|
||||
path: build/slic3r++.tar
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v1.0.0
|
||||
with:
|
||||
name: nightly_macos.dmg
|
||||
path: build/Slic3r++.dmg
|
||||
|
15
.github/workflows/ccpp_ubuntu.yml
vendored
15
.github/workflows/ccpp_ubuntu.yml
vendored
@ -14,8 +14,12 @@ jobs:
|
||||
- uses: actions/checkout@v1
|
||||
- name: change date in version
|
||||
run: sed -i "s/+UNKNOWN/_$(date '+%F')/" version.inc
|
||||
- name: update clock
|
||||
run: sudo hwclock -s
|
||||
- name: update apt
|
||||
run: sudo apt update
|
||||
- name: install gtk2 glew
|
||||
run: sudo apt-get install libgtk2.0-dev libglew-dev libudev-dev
|
||||
run: sudo apt install libgtk2.0-dev libglew-dev libudev-dev
|
||||
- name: mkdir in deps
|
||||
run: mkdir deps/build
|
||||
- name: cmake deps
|
||||
@ -48,9 +52,12 @@ jobs:
|
||||
run: cp -f src/slic3r++ package/bin/slic3r++
|
||||
- name: create sh from echo
|
||||
working-directory: ./build/package
|
||||
run: echo -e '#!/bin/bash\nDIR=$(readlink -f "$0" | xargs dirname)\nexport LD_LIBRARY_PATH="$DIR/bin"\nexec "$DIR/bin/slic3r++" "$@"' >slic3r++
|
||||
run: |
|
||||
echo -e '#!/bin/bash\nDIR=$(readlink -f "$0" | xargs dirname)\nexport LD_LIBRARY_PATH="$DIR/bin"\nexec "$DIR/bin/slic3r++" "$@"' >slic3r++
|
||||
chmod u+x slic3r++
|
||||
tar -cvf ../slic3r++.tar .
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v1.0.0
|
||||
with:
|
||||
name: nightly_linux
|
||||
path: build/package/
|
||||
name: nightly_linux.tar
|
||||
path: build/slic3r++.tar
|
||||
|
@ -38,7 +38,7 @@ namespace Slic3r {
|
||||
else params_modifided.flow_mult *= (float)percentFlow[idx];
|
||||
|
||||
//choose if we are going to extrude with or without overlap
|
||||
if ((params.flow->bridge && idx == 0) || has_overlap[idx]){
|
||||
if ((params.flow->bridge && idx == 0) || has_overlap[idx] || this->no_overlap_expolygons.empty()){
|
||||
this->fill_expolygon(idx, *eec, srf_source, params_modifided, volume);
|
||||
}
|
||||
else{
|
||||
@ -90,12 +90,12 @@ namespace Slic3r {
|
||||
good_role = params.flow->bridge && idx == 0 ? erBridgeInfill : rolePass[idx];
|
||||
}
|
||||
// print
|
||||
float mult_flow = (params.fill_exactly /*&& idx == 0*/ ? std::min(2., volume / extrudedVolume) : 1);
|
||||
float mult_flow = float(params.fill_exactly /*&& idx == 0*/ ? std::min(2., volume / extrudedVolume) : 1);
|
||||
extrusion_entities_append_paths(
|
||||
eec.entities, std::move(polylines_layer),
|
||||
good_role,
|
||||
params.flow->mm3_per_mm() * params.flow_mult * mult_flow,
|
||||
//min-reduced flow width for a better view (it's only a gui thing)
|
||||
//min-reduced flow width for a better view (it's mostly a gui thing, but some support code can want to mess with it)
|
||||
(float)(params.flow->width * (params.flow_mult* mult_flow < 0.1 ? 0.1 : params.flow_mult * mult_flow)), (float)params.flow->height);
|
||||
}
|
||||
}
|
||||
@ -121,6 +121,9 @@ namespace Slic3r {
|
||||
//extruded volume: see http://manual.slic3r.org/advanced/flow-math, and we need to remove a circle at an end (as the flow continue)
|
||||
volumeToOccupy += poylineVolume;
|
||||
}
|
||||
if (this->no_overlap_expolygons.empty()) {
|
||||
volumeToOccupy = unscaled(unscaled(surface->area())) * params.flow->height;
|
||||
}
|
||||
|
||||
//create root node
|
||||
ExtrusionEntityCollection *eecroot = new ExtrusionEntityCollection();
|
||||
|
@ -333,7 +333,13 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T
|
||||
unsigned int old_extruder_id = gcodegen.writer().extruder()->id();
|
||||
const std::string &end_filament_gcode = gcodegen.config().end_filament_gcode.get_at(old_extruder_id);
|
||||
if (gcodegen.writer().extruder() != nullptr && ! end_filament_gcode.empty()) {
|
||||
end_filament_gcode_str = gcodegen.placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id);
|
||||
DynamicConfig config;
|
||||
int previous_extruder_id = gcodegen.writer().extruder() ? (int)gcodegen.writer().extruder()->id() : -1;
|
||||
config.set_key_value("previous_extruder", new ConfigOptionInt(previous_extruder_id));
|
||||
config.set_key_value("next_extruder", new ConfigOptionInt((int)new_extruder_id));
|
||||
config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index));
|
||||
config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z));
|
||||
end_filament_gcode_str = gcodegen.placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id, &config);
|
||||
check_add_eol(end_filament_gcode_str);
|
||||
}
|
||||
}
|
||||
@ -373,6 +379,10 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T
|
||||
// Process the start_filament_gcode for the active filament only.
|
||||
DynamicConfig config;
|
||||
config.set_key_value("filament_extruder_id", new ConfigOptionInt(new_extruder_id));
|
||||
config.set_key_value("previous_extruder", new ConfigOptionInt(gcodegen.writer().extruder() ? (int)gcodegen.writer().extruder()->id() : -1));
|
||||
config.set_key_value("next_extruder", new ConfigOptionInt(new_extruder_id));
|
||||
config.set_key_value("layer_num", new ConfigOptionInt(0));
|
||||
config.set_key_value("layer_z", new ConfigOptionFloat(z));
|
||||
start_filament_gcode_str = gcodegen.placeholder_parser_process("start_filament_gcode", start_filament_gcode, new_extruder_id, &config);
|
||||
check_add_eol(start_filament_gcode_str);
|
||||
}
|
||||
@ -1431,6 +1441,8 @@ void GCode::_do_export(Print &print, FILE *file)
|
||||
for (const std::string &end_gcode : print.config().end_filament_gcode.values) {
|
||||
int extruder_id = (unsigned int)(&end_gcode - &print.config().end_filament_gcode.values.front());
|
||||
config.set_key_value("filament_extruder_id", new ConfigOptionInt(extruder_id));
|
||||
config.set_key_value("previous_extruder", new ConfigOptionInt(extruder_id));
|
||||
config.set_key_value("next_extruder", new ConfigOptionInt(0));
|
||||
_writeln(file, this->placeholder_parser_process("end_filament_gcode", end_gcode, extruder_id, &config));
|
||||
}
|
||||
}
|
||||
@ -2920,7 +2932,7 @@ std::string GCode::extrude_loop(const ExtrusionLoop &original_loop, const std::s
|
||||
//but not for the first layer
|
||||
&& this->m_layer->id() > 0
|
||||
//exclude if min_layer_height * 2 > layer_height (increase from 2 to 3 because it's working but uses in-between)
|
||||
&& this->m_layer->height < EXTRUDER_CONFIG(min_layer_height) * 3
|
||||
&& this->m_layer->height >= EXTRUDER_CONFIG(min_layer_height) * 2
|
||||
) {
|
||||
|
||||
return extrude_loop_vase(original_loop, description, speed, lower_layer_edge_grid);
|
||||
@ -3585,8 +3597,13 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z)
|
||||
// Append the filament start G-code.
|
||||
const std::string &start_filament_gcode = m_config.start_filament_gcode.get_at(extruder_id);
|
||||
if (! start_filament_gcode.empty()) {
|
||||
// Process the start_filament_gcode for the filament.
|
||||
gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id);
|
||||
DynamicConfig config;
|
||||
config.set_key_value("previous_extruder", new ConfigOptionInt((int)extruder_id));
|
||||
config.set_key_value("next_extruder", new ConfigOptionInt((int)extruder_id));
|
||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||
// Process the start_filament_gcode for the new filament.
|
||||
gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id, &config);
|
||||
check_add_eol(gcode);
|
||||
}
|
||||
gcode += m_writer.toolchange(extruder_id);
|
||||
@ -3605,7 +3622,12 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z)
|
||||
unsigned int old_extruder_id = m_writer.extruder()->id();
|
||||
const std::string &end_filament_gcode = m_config.end_filament_gcode.get_at(old_extruder_id);
|
||||
if (! end_filament_gcode.empty()) {
|
||||
gcode += placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id);
|
||||
DynamicConfig config;
|
||||
config.set_key_value("previous_extruder", new ConfigOptionInt((int)(m_writer.extruder() != nullptr ? m_writer.extruder()->id() : -1)));
|
||||
config.set_key_value("next_extruder", new ConfigOptionInt((int)extruder_id));
|
||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||
gcode += placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id, &config);
|
||||
check_add_eol(gcode);
|
||||
}
|
||||
}
|
||||
@ -3652,8 +3674,13 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z)
|
||||
// Append the filament start G-code.
|
||||
const std::string &start_filament_gcode = m_config.start_filament_gcode.get_at(extruder_id);
|
||||
if (! start_filament_gcode.empty()) {
|
||||
DynamicConfig config;
|
||||
config.set_key_value("previous_extruder", new ConfigOptionInt((int)(m_writer.extruder() != nullptr ? m_writer.extruder()->id() : -1)));
|
||||
config.set_key_value("next_extruder", new ConfigOptionInt((int)extruder_id));
|
||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||
// Process the start_filament_gcode for the new filament.
|
||||
gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id);
|
||||
gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id, &config);
|
||||
check_add_eol(gcode);
|
||||
}
|
||||
// Set the new extruder to the operating temperature.
|
||||
|
@ -419,7 +419,7 @@ void PerimeterGenerator::process()
|
||||
thin[0].remove_point_too_near((coord_t)SCALED_RESOLUTION);
|
||||
if (thin[0].area() > min_width*(ext_perimeter_width + ext_perimeter_spacing2)) {
|
||||
bound.remove_point_too_near((coord_t)SCALED_RESOLUTION);
|
||||
// the maximum thickness of our thin wall area is equal to the minimum thickness of a single loop
|
||||
// the maximum thickness of our thin wall area is equal to the minimum thickness of a single loop (*1.1 because of circles approx.)
|
||||
Slic3r::MedialAxis ma{ thin[0], (coord_t)((ext_perimeter_width + ext_perimeter_spacing2)*1.1),
|
||||
min_width, coord_t(this->layer_height) };
|
||||
ma.use_bounds(bound)
|
||||
@ -436,7 +436,7 @@ void PerimeterGenerator::process()
|
||||
//FIXME Is this offset correct if the line width of the inner perimeters differs
|
||||
// from the line width of the infill?
|
||||
coord_t good_spacing = (i == 1) ? ext_perimeter_spacing2 : perimeter_spacing;
|
||||
if (this->config->thin_walls){
|
||||
if (!this->config->thin_perimeters){
|
||||
// This path will ensure, that the perimeters do not overfill, as in
|
||||
// prusa3d/Slic3r GH #32, but with the cost of rounding the perimeters
|
||||
// excessively, creating gaps, which then need to be filled in by the not very
|
||||
@ -628,7 +628,7 @@ void PerimeterGenerator::process()
|
||||
double min = 0.2 * perimeter_width * (1 - INSET_OVERLAP_TOLERANCE);
|
||||
//be sure we don't gapfill where the perimeters are already touching each other (negative spacing).
|
||||
min = std::max(min, double(Flow::new_from_spacing(EPSILON, nozzle_diameter, this->layer_height, false).scaled_width()));
|
||||
double max = 2. * perimeter_spacing;
|
||||
double max = 2.2 * perimeter_spacing;
|
||||
ExPolygons gaps_ex = diff_ex(
|
||||
offset2_ex(gaps, double(-min / 2), double(+min / 2)),
|
||||
offset2_ex(gaps, double(-max / 2), double(+max / 2)),
|
||||
|
@ -2349,41 +2349,39 @@ end:
|
||||
}
|
||||
|
||||
ExPolygons PrintObject::_offset_holes(double hole_delta, const ExPolygons &polys) const{
|
||||
if (hole_delta != 0.f) {
|
||||
ExPolygons new_polys;
|
||||
for (const ExPolygon &ex_poly : polys) {
|
||||
ExPolygon new_ex_poly(ex_poly);
|
||||
new_ex_poly.holes.clear();
|
||||
for (const Polygon &hole : ex_poly.holes) {
|
||||
//check if convex to reduce it
|
||||
// check whether first point forms a convex angle
|
||||
//note: we allow a deviation of 5.7° (0.01rad = 0.57°)
|
||||
bool ok = true;
|
||||
ok = (hole.points.front().ccw_angle(hole.points.back(), *(hole.points.begin() + 1)) <= PI + 0.1);
|
||||
// check whether points 1..(n-1) form convex angles
|
||||
if (ok)
|
||||
for (Points::const_iterator p = hole.points.begin() + 1; p != hole.points.end() - 1; ++p) {
|
||||
ok = (p->ccw_angle(*(p - 1), *(p + 1)) <= PI + 0.1);
|
||||
if (!ok) break;
|
||||
}
|
||||
|
||||
// check whether last point forms a convex angle
|
||||
ok &= (hole.points.back().ccw_angle(*(hole.points.end() - 2), hole.points.front()) <= PI + 0.1);
|
||||
|
||||
if (ok) {
|
||||
for (Polygon newHole : offset(hole, hole_delta)) {
|
||||
//reverse because it's a hole, not an object
|
||||
newHole.make_clockwise();
|
||||
new_ex_poly.holes.push_back(newHole);
|
||||
}
|
||||
} else {
|
||||
new_ex_poly.holes.push_back(hole);
|
||||
ExPolygons new_polys;
|
||||
for (const ExPolygon &ex_poly : polys) {
|
||||
ExPolygon new_ex_poly(ex_poly);
|
||||
new_ex_poly.holes.clear();
|
||||
for (const Polygon &hole : ex_poly.holes) {
|
||||
//check if convex to reduce it
|
||||
// check whether first point forms a convex angle
|
||||
//note: we allow a deviation of 5.7° (0.01rad = 0.57°)
|
||||
bool ok = true;
|
||||
ok = (hole.points.front().ccw_angle(hole.points.back(), *(hole.points.begin() + 1)) <= PI + 0.1);
|
||||
// check whether points 1..(n-1) form convex angles
|
||||
if (ok)
|
||||
for (Points::const_iterator p = hole.points.begin() + 1; p != hole.points.end() - 1; ++p) {
|
||||
ok = (p->ccw_angle(*(p - 1), *(p + 1)) <= PI + 0.1);
|
||||
if (!ok) break;
|
||||
}
|
||||
|
||||
// check whether last point forms a convex angle
|
||||
ok &= (hole.points.back().ccw_angle(*(hole.points.end() - 2), hole.points.front()) <= PI + 0.1);
|
||||
|
||||
if (ok) {
|
||||
for (Polygon newHole : offset(hole, hole_delta)) {
|
||||
//reverse because it's a hole, not an object
|
||||
newHole.make_clockwise();
|
||||
new_ex_poly.holes.push_back(newHole);
|
||||
}
|
||||
} else {
|
||||
new_ex_poly.holes.push_back(hole);
|
||||
}
|
||||
new_polys.push_back(new_ex_poly);
|
||||
}
|
||||
return new_polys;
|
||||
new_polys.push_back(new_ex_poly);
|
||||
}
|
||||
return new_polys;
|
||||
}
|
||||
|
||||
/// max angle: you ahve to be lwer than that to divide it. PI => all accepted
|
||||
@ -2475,6 +2473,7 @@ ExPolygons PrintObject::_smooth_curves(const ExPolygons & input, const PrintRegi
|
||||
ExPolygons new_polys;
|
||||
for (const ExPolygon &ex_poly : input) {
|
||||
ExPolygon new_ex_poly(ex_poly);
|
||||
new_ex_poly.contour.remove_collinear(SCALED_RESOLUTION);
|
||||
new_ex_poly.contour = _smooth_curve(new_ex_poly.contour, PI,
|
||||
conf.curve_smoothing_angle_convex.value*PI / 180.0,
|
||||
conf.curve_smoothing_angle_concave.value*PI / 180.0,
|
||||
@ -2482,13 +2481,14 @@ ExPolygons PrintObject::_smooth_curves(const ExPolygons & input, const PrintRegi
|
||||
scale_(conf.curve_smoothing_precision.value));
|
||||
for (Polygon &phole : new_ex_poly.holes){
|
||||
phole.reverse(); // make_counter_clockwise();
|
||||
phole.remove_collinear(SCALED_RESOLUTION);
|
||||
phole = _smooth_curve(phole, PI,
|
||||
conf.curve_smoothing_angle_convex.value*PI / 180.0,
|
||||
conf.curve_smoothing_angle_concave.value*PI / 180.0,
|
||||
scale_(conf.curve_smoothing_cutoff_dist.value),
|
||||
scale_(conf.curve_smoothing_precision.value));
|
||||
phole.reverse(); // make_clockwise();
|
||||
}
|
||||
}
|
||||
new_polys.push_back(new_ex_poly);
|
||||
}
|
||||
return new_polys;
|
||||
|
@ -2811,8 +2811,10 @@ void modulate_extrusion_by_overlapping_layers(
|
||||
path_fragments.back().polylines = diff_pl(path_fragments.back().polylines, polygons_trimming, false);
|
||||
// Adjust the extrusion parameters for a reduced layer height and a non-bridging flow (nozzle_dmr = -1, does not matter).
|
||||
assert(this_layer.print_z > overlapping_layer.print_z);
|
||||
float old_height = frag.height;
|
||||
frag.height = float(this_layer.print_z - overlapping_layer.print_z);
|
||||
frag.mm3_per_mm = Flow(frag.width, frag.height, -1.f, false).mm3_per_mm();
|
||||
// don't recompute the flow, just use a simple % reduction/increase
|
||||
frag.mm3_per_mm = frag.mm3_per_mm * frag.height / old_height;
|
||||
#ifdef SLIC3R_DEBUG
|
||||
svg.draw(frag.polylines, dbg_index_to_color(i_overlapping_layer), scale_(0.1));
|
||||
#endif /* SLIC3R_DEBUG */
|
||||
|
@ -13,7 +13,7 @@
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>@SLIC3R_APP_NAME@ @SLIC3R_BUILD_ID@</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.prusa3d.slic3r/</string>
|
||||
<string>com.merill.slic3r/</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
@ -111,7 +111,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.14</string>
|
||||
<string>10.13</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
|
@ -1733,6 +1733,7 @@ void ConfigWizard::priv::apply_config(AppConfig *app_config, PresetBundle *prese
|
||||
if (bundle.second.is_prusa_bundle) { continue; }
|
||||
|
||||
const auto config = enabled_vendors.find(bundle.first);
|
||||
if (config == enabled_vendors.end()) { continue; }
|
||||
for (const auto &model : bundle.second.vendor_profile->models) {
|
||||
const auto model_it = config->second.find(model.id);
|
||||
if (model_it != config->second.end() && model_it->second.size() > 0) {
|
||||
|
@ -935,7 +935,7 @@ void Choice::set_value(const boost::any& value, bool change_event)
|
||||
case coEnum: {
|
||||
int val = boost::any_cast<int>(value);
|
||||
if (m_opt_id == "top_fill_pattern" || m_opt_id == "bottom_fill_pattern" || m_opt_id == "solid_fill_pattern"
|
||||
|| m_opt_id == "fill_pattern" || m_opt_id == "support_fill_pattern")
|
||||
|| m_opt_id == "fill_pattern" || m_opt_id == "support_material_interface_pattern")
|
||||
{
|
||||
val = idx_from_enum_value<InfillPattern>(val);
|
||||
} else if (m_opt_id.compare("perimeter_loop_seam") == 0) {
|
||||
|
@ -5,5 +5,5 @@ set(SLIC3R_APP_NAME "Slic3r++")
|
||||
set(SLIC3R_APP_KEY "Slic3r++")
|
||||
set(SLIC3R_VERSION "2.2.47")
|
||||
set(SLIC3R_BUILD_ID "slic3r++_${SLIC3R_VERSION}+UNKNOWN")
|
||||
set(SLIC3R_RC_VERSION "2,2,47,0")
|
||||
set(SLIC3R_RC_VERSION_DOTS "2.2.47.0")
|
||||
set(SLIC3R_RC_VERSION "2,2,47,1")
|
||||
set(SLIC3R_RC_VERSION_DOTS "2.2.47.1")
|
||||
|
Loading…
x
Reference in New Issue
Block a user