Merge branch 'master' into fs_import_svg
@ -1 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path id="b" d="m8.54,4.31c-.53-.19-.81-.69-.73-1.32.08-.62.55-1.01,1.21-1.01.46,0,.82.21,1,.58.1.2.1.22.1.55,0,.43-.07.61-.31.87-.24.26-.46.35-.84.36-.21,0-.33,0-.43-.04Z" style="fill:#ed6b21; isolation:isolate; opacity:1;"/><path id="c" d="m6.82,13.97c-.51-.14-.74-.4-.77-.86-.02-.28-.04-.15.57-3.12.22-1.07.44-2.13.48-2.34.13-.71.07-.77-.77-.81-.21-.01-.38-.03-.39-.04s0-.09.02-.18c.04-.18,0-.16.69-.31.62-.14,1.09-.19,1.63-.2.67,0,.9.07,1.13.36.09.11.09.13.09.41,0,.25-.06.57-.39,2.17-.78,3.74-.79,3.82-.68,3.99.03.04.08.1.12.13.12.08.47.14.8.14h.3s-.02.18-.02.18c-.01.1-.04.19-.05.2-.05.03-.88.2-1.24.26-.45.07-1.31.09-1.51.03h0Z" style="fill:#ed6b21; isolation:isolate; opacity:1;"/><polyline points="14.5 3.5 14.5 1.5 12.5 1.5" style="fill:none; stroke:808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="3.5 1.5 1.5 1.5 1.5 3.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="1.5 12.5 1.5 14.5 3.5 14.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="12.5 14.5 14.5 14.5 14.5 12.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path id="b" d="m8.54,4.31c-.53-.19-.81-.69-.73-1.32.08-.62.55-1.01,1.21-1.01.46,0,.82.21,1,.58.1.2.1.22.1.55,0,.43-.07.61-.31.87-.24.26-.46.35-.84.36-.21,0-.33,0-.43-.04Z" style="fill:#ed6b21; isolation:isolate; opacity:1;"/><path id="c" d="m6.82,13.97c-.51-.14-.74-.4-.77-.86-.02-.28-.04-.15.57-3.12.22-1.07.44-2.13.48-2.34.13-.71.07-.77-.77-.81-.21-.01-.38-.03-.39-.04s0-.09.02-.18c.04-.18,0-.16.69-.31.62-.14,1.09-.19,1.63-.2.67,0,.9.07,1.13.36.09.11.09.13.09.41,0,.25-.06.57-.39,2.17-.78,3.74-.79,3.82-.68,3.99.03.04.08.1.12.13.12.08.47.14.8.14h.3s-.02.18-.02.18c-.01.1-.04.19-.05.2-.05.03-.88.2-1.24.26-.45.07-1.31.09-1.51.03h0Z" style="fill:#ed6b21; isolation:isolate; opacity:1;"/><polyline points="14.5 3.5 14.5 1.5 12.5 1.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="3.5 1.5 1.5 1.5 1.5 3.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="1.5 12.5 1.5 14.5 3.5 14.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="12.5 14.5 14.5 14.5 14.5 12.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/></svg>
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><rect x="1" y="7" width="2" height="6" rx="1" ry="1" style="fill:#ed6b21;"/><rect x="5" y="2" width="2" height="11" rx="1" ry="1" style="fill:#ed6b21;"/><rect x="9" y="3" width="2" height="10" rx="1" ry="1" style="fill:#ed6b21;"/><rect x="13" y="5" width="2" height="8" rx="1" ry="1" style="fill:#ed6b21;"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><rect x="1" y="7" width="2" height="6" rx="1" ry="1" style="fill:#808080;"/><rect x="5" y="2" width="2" height="11" rx="1" ry="1" style="fill:#808080;"/><rect x="9" y="3" width="2" height="10" rx="1" ry="1" style="fill:#808080;"/><rect x="13" y="5" width="2" height="8" rx="1" ry="1" style="fill:#808080;"/></svg>
|
Before Width: | Height: | Size: 418 B After Width: | Height: | Size: 418 B |
@ -1 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><polyline points="4.5 2.5 2.5 2.5 2.5 13.5 4.5 13.5" style="fill:none; stroke:808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="11.5 13.5 13.5 13.5 13.5 2.5 11.5 2.5" style="fill:none; stroke:808080; stroke-linecap:round; stroke-miterlimit:10;"/><path d="m9,8v3.14c0,.47-.45.86-1,.86h0c-.55,0-1-.38-1-.86v-3.14h2Z" style="fill:#808080;"/><circle cx="8" cy="6" r="1" style="fill:#808080;"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><polyline points="4.5 2.5 2.5 2.5 2.5 13.5 4.5 13.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/><polyline points="11.5 13.5 13.5 13.5 13.5 2.5 11.5 2.5" style="fill:none; stroke:#808080; stroke-linecap:round; stroke-miterlimit:10;"/><path d="m9,8v3.14c0,.47-.45.86-1,.86h0c-.55,0-1-.38-1-.86v-3.14h2Z" style="fill:#808080;"/><circle cx="8" cy="6" r="1" style="fill:#808080;"/></svg>
|
Before Width: | Height: | Size: 522 B After Width: | Height: | Size: 524 B |
@ -1,4 +1,5 @@
|
||||
min_slic3r_version = 2.6.0
|
||||
0.0.4 Updated Start G-Codes.
|
||||
0.0.3 Added new printer profile.
|
||||
0.0.2 Updated initial layer heights.
|
||||
0.0.1 Initial version.
|
||||
|
@ -10,7 +10,7 @@ name = LNL3D
|
||||
|
||||
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
||||
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||
config_version = 0.0.3
|
||||
config_version = 0.0.4
|
||||
|
||||
# Where to get the updates from?
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LNL3D/
|
||||
@ -891,7 +891,7 @@ wipe = 1,1
|
||||
z_offset = 0
|
||||
printer_model =
|
||||
default_filament_profile = "Generic PLA @LNL3D"
|
||||
start_gcode = G21 ; Metric values\nG90 ; Absolute positioning\nM82 ; Set extruder to absolute mode\nM107 ; Start with the fan off\nG28 ; Move to min endstops\nG92 E0 ; Reset extruder\nG1 E15 F1500 ; Move extruder 15mm\nG1 Z15.0 F3000 ; Move the header up 15mm\nM117 Final warmup ; LCD message\nM140 S[first_layer_bed_temperature] ; Set bed temp\nM190 S{first_layer_bed_temperature[0] - 5} ; Wait for bed temp-5\nM104 S[first_layer_temperature] ; Heat extruder rest of the way after heatbed\nM109 S[first_layer_temperature] ; Wait for extruder temp\nG1 X40 Y5 Z4 F5000.0 ; Move to position to prevent hitting clamps or bed\nG1 X50 Y5 Z0.3 F5000.0 ; Move to start position\nG1 X110 Y5 Z0.3 F1500.0 E15 ; First purge line\nG1 X70 Y5 Z0.3 F1500.0 E8 ; Second pass\nM117 Printing... ; LCD message\n
|
||||
start_gcode = G21 ; Metric values\nG90 ; Absolute positioning\nM82 ; Set extruder to absolute mode\nM107 ; Start with the fan off\nG28 ; Move to min endstops\nG92 E0 ; Reset extruder\nG1 Z15.0 F3000 ; Move the header up 15mm\nM117 Final warmup ; LCD message\nM140 S[first_layer_bed_temperature] ; Set bed temp\nM190 S{first_layer_bed_temperature[0] - 5} ; Wait for bed temp-5\nM104 S[first_layer_temperature] ; Heat extruder rest of the way after heatbed\nM109 S[first_layer_temperature] ; Wait for extruder temp\nG1 X40 Y5 Z4 F5000.0 ; Move to position to prevent hitting clamps or bed\nG1 X50 Y5 Z0.3 F5000.0 ; Move to start position\nG1 X110 Y5 Z0.3 F1500.0 E15 ; First purge line\nG1 X70 Y5 Z0.3 F1500.0 E8 ; Second pass\nM117 Printing... ; LCD message\n
|
||||
end_gcode = M104 T0 S0 ;left extruder heater off\nM104 T1 S0 ;right extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning
|
||||
|
||||
|
||||
|
@ -1,4 +1,7 @@
|
||||
min_slic3r_version = 2.6.2-alpha0
|
||||
1.11.0-alpha9 Added printer profiles for Prusa XL Input Shaper (Alpha). Updated Prusa MINI Input Shaper profiles. Added profiles for "Filament PM" filaments.
|
||||
1.11.0-alpha8 Default file extension changed to bgcode also for other nozzle diameters (MK4IS/MK3.9).
|
||||
1.11.0-alpha7 Updated end g-code for XL Multi-Tool. Slightly decreased PETG bed temperature (XL).
|
||||
1.11.0-alpha6 Increased MBL temperature for PET. Enabled FW-specific object labels for XL/MK3.9/MK4/MINI. PETG V0 marked as UL certified for MK4.
|
||||
1.11.0-alpha5 Added new profiles (additional nozzle diameters) for Prusa MINI Input Shaper (Alpha). Arc fitting changed to I J.
|
||||
1.11.0-alpha4 Updated compatible printer conditions for specific filament profiles.
|
||||
@ -7,6 +10,7 @@ min_slic3r_version = 2.6.2-alpha0
|
||||
1.11.0-alpha1 Updated ramming parameters. Updated start-gcode for XL Multi-Tool. Updated output filename format.
|
||||
1.11.0-alpha0 Binary g-code, arc fitting, QOI/PNG thumbnails, 90degree XL tower, XL specific filament variants.
|
||||
min_slic3r_version = 2.6.1-rc2
|
||||
1.10.1 Increased MBL temperature for PET filaments (MK4, XL). PETG V0 is now UL certified for MK4. Updated end g-code for XL Multi-Tool. Slightly decreased bed temperature for some PET filaments (XL).
|
||||
1.10.0 Added new profiles for Prusa MINI Input Shaper (Alpha). Enabled XL ramming feature. Prusa XL users may need to re-enable filament profiles in configuration wizard.
|
||||
min_slic3r_version = 2.6.0-beta2
|
||||
1.9.10 Added new print profiles for Prusa MINI Input Shaper (Alpha). Updated MK4 IS profiles.
|
||||
|
BIN
resources/profiles/PrusaResearch/XL2IS_alpha_thumbnail.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
resources/profiles/PrusaResearch/XL5IS_alpha_thumbnail.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
resources/profiles/PrusaResearch/XLIS_alpha_thumbnail.png
Normal file
After Width: | Height: | Size: 59 KiB |
744
resources/profiles/PrusaResearch/xlis_alpha.svg
Normal file
@ -0,0 +1,744 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="Layer_1"
|
||||
data-name="Layer 1"
|
||||
width="360mm"
|
||||
height="360mm"
|
||||
viewBox="0 0 1020.5 1020.5"
|
||||
version="1.1">
|
||||
<metadata
|
||||
id="metadata129">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs1646" />
|
||||
<rect
|
||||
width="1020.5"
|
||||
height="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 5.7px;"
|
||||
id="rect1407" />
|
||||
<g
|
||||
id="g1577">
|
||||
<rect
|
||||
width="1020.5"
|
||||
height="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="rect1409" />
|
||||
<line
|
||||
y1="992.1"
|
||||
x2="1020.5"
|
||||
y2="992.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1411" />
|
||||
<line
|
||||
x1="954"
|
||||
y1="963.8"
|
||||
x2="1020.5"
|
||||
y2="963.8"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1413" />
|
||||
<line
|
||||
y1="963.8"
|
||||
x2="576.3"
|
||||
y2="963.8"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1415" />
|
||||
<line
|
||||
y1="935.4"
|
||||
x2="1020.5"
|
||||
y2="935.4"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1417" />
|
||||
<line
|
||||
y1="907.1"
|
||||
x2="1020.5"
|
||||
y2="907.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1419" />
|
||||
<line
|
||||
y1="878.7"
|
||||
x2="1020.5"
|
||||
y2="878.7"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1421" />
|
||||
<line
|
||||
y1="850.4"
|
||||
x2="1020.5"
|
||||
y2="850.4"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1423" />
|
||||
<line
|
||||
y1="822"
|
||||
x2="1020.5"
|
||||
y2="822"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1425" />
|
||||
<line
|
||||
y1="793.7"
|
||||
x2="1020.5"
|
||||
y2="793.7"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1427" />
|
||||
<line
|
||||
y1="765.4"
|
||||
x2="1020.5"
|
||||
y2="765.4"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1429" />
|
||||
<line
|
||||
y1="737"
|
||||
x2="1020.5"
|
||||
y2="737"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1431" />
|
||||
<line
|
||||
y1="708.7"
|
||||
x2="1020.5"
|
||||
y2="708.7"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1433" />
|
||||
<line
|
||||
y1="680.3"
|
||||
x2="1020.5"
|
||||
y2="680.3"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1435" />
|
||||
<line
|
||||
y1="652"
|
||||
x2="1020.5"
|
||||
y2="652"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1437" />
|
||||
<line
|
||||
y1="623.6"
|
||||
x2="1020.5"
|
||||
y2="623.6"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1439" />
|
||||
<line
|
||||
y1="595.3"
|
||||
x2="1020.5"
|
||||
y2="595.3"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1441" />
|
||||
<line
|
||||
y1="566.9"
|
||||
x2="1020.5"
|
||||
y2="566.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1443" />
|
||||
<line
|
||||
y1="538.6"
|
||||
x2="1020.5"
|
||||
y2="538.6"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1445" />
|
||||
<line
|
||||
y1="510.2"
|
||||
x2="1020.5"
|
||||
y2="510.2"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1447" />
|
||||
<line
|
||||
y1="481.9"
|
||||
x2="1020.5"
|
||||
y2="481.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1449" />
|
||||
<line
|
||||
y1="453.5"
|
||||
x2="1020.5"
|
||||
y2="453.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1451" />
|
||||
<line
|
||||
y1="425.2"
|
||||
x2="1020.5"
|
||||
y2="425.2"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1453" />
|
||||
<line
|
||||
y1="396.9"
|
||||
x2="1020.5"
|
||||
y2="396.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1455" />
|
||||
<line
|
||||
y1="368.5"
|
||||
x2="1020.5"
|
||||
y2="368.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1457" />
|
||||
<line
|
||||
y1="340.2"
|
||||
x2="1020.5"
|
||||
y2="340.2"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1459" />
|
||||
<line
|
||||
y1="311.8"
|
||||
x2="1020.5"
|
||||
y2="311.8"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1461" />
|
||||
<line
|
||||
y1="283.5"
|
||||
x2="1020.5"
|
||||
y2="283.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1463" />
|
||||
<line
|
||||
y1="255.1"
|
||||
x2="1020.5"
|
||||
y2="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1465" />
|
||||
<line
|
||||
y1="226.8"
|
||||
x2="1020.5"
|
||||
y2="226.8"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1467" />
|
||||
<line
|
||||
y1="198.4"
|
||||
x2="1020.5"
|
||||
y2="198.4"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1469" />
|
||||
<line
|
||||
y1="170.1"
|
||||
x2="1020.5"
|
||||
y2="170.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1471" />
|
||||
<line
|
||||
y1="141.7"
|
||||
x2="1020.5"
|
||||
y2="141.7"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1473" />
|
||||
<line
|
||||
y1="113.4"
|
||||
x2="1020.5"
|
||||
y2="113.4"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1475" />
|
||||
<line
|
||||
y1="85"
|
||||
x2="1020.5"
|
||||
y2="85"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1477" />
|
||||
<line
|
||||
y1="56.7"
|
||||
x2="1020.5"
|
||||
y2="56.7"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1479" />
|
||||
<line
|
||||
y1="28.3"
|
||||
x2="1020.5"
|
||||
y2="28.3"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1481" />
|
||||
<line
|
||||
x1="992.1"
|
||||
x2="992.1"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1483" />
|
||||
<line
|
||||
x1="963.8"
|
||||
x2="963.8"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1485" />
|
||||
<line
|
||||
x1="935.4"
|
||||
y1="984.3"
|
||||
x2="935.4"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1487" />
|
||||
<line
|
||||
x1="935.4"
|
||||
x2="935.4"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1489" />
|
||||
<line
|
||||
x1="907.1"
|
||||
y1="984.3"
|
||||
x2="907.1"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1491" />
|
||||
<line
|
||||
x1="907.1"
|
||||
x2="907.1"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1493" />
|
||||
<line
|
||||
x1="878.8"
|
||||
y1="984.3"
|
||||
x2="878.7"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1495" />
|
||||
<line
|
||||
x1="878.7"
|
||||
x2="878.7"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1497" />
|
||||
<line
|
||||
x1="850.5"
|
||||
y1="984.3"
|
||||
x2="850.4"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1499" />
|
||||
<line
|
||||
x1="850.4"
|
||||
x2="850.4"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1501" />
|
||||
<line
|
||||
x1="822.1"
|
||||
y1="984.3"
|
||||
x2="822"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1503" />
|
||||
<line
|
||||
x1="822"
|
||||
x2="822"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1505" />
|
||||
<line
|
||||
x1="793.8"
|
||||
y1="984.3"
|
||||
x2="793.7"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1507" />
|
||||
<line
|
||||
x1="793.7"
|
||||
x2="793.7"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1509" />
|
||||
<line
|
||||
x1="765.4"
|
||||
x2="765.4"
|
||||
y2="935.4"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1511" />
|
||||
<line
|
||||
x1="737"
|
||||
y1="984.2"
|
||||
x2="737"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1513" />
|
||||
<line
|
||||
x1="737"
|
||||
x2="737"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1515" />
|
||||
<line
|
||||
x1="708.7"
|
||||
y1="984.2"
|
||||
x2="708.7"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1517" />
|
||||
<line
|
||||
x1="708.7"
|
||||
x2="708.7"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1519" />
|
||||
<line
|
||||
x1="680.3"
|
||||
y1="984.2"
|
||||
x2="680.3"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1521" />
|
||||
<line
|
||||
x1="680.3"
|
||||
x2="680.3"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1523" />
|
||||
<line
|
||||
x1="652"
|
||||
y1="984.2"
|
||||
x2="652"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1525" />
|
||||
<line
|
||||
x1="652"
|
||||
x2="652"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1527" />
|
||||
<line
|
||||
x1="623.6"
|
||||
y1="984.2"
|
||||
x2="623.6"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1529" />
|
||||
<line
|
||||
x1="623.6"
|
||||
x2="623.6"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1531" />
|
||||
<line
|
||||
x1="595.3"
|
||||
y1="984.2"
|
||||
x2="595.3"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1533" />
|
||||
<line
|
||||
x1="595.3"
|
||||
x2="595.3"
|
||||
y2="944.9"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1535" />
|
||||
<line
|
||||
x1="566.9"
|
||||
x2="566.9"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1537" />
|
||||
<line
|
||||
x1="538.6"
|
||||
x2="538.6"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1539" />
|
||||
<line
|
||||
x1="510.2"
|
||||
x2="510.2"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1541" />
|
||||
<line
|
||||
x1="481.9"
|
||||
x2="481.9"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1543" />
|
||||
<line
|
||||
x1="453.5"
|
||||
x2="453.5"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1545" />
|
||||
<line
|
||||
x1="425.2"
|
||||
x2="425.2"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1547" />
|
||||
<line
|
||||
x1="396.9"
|
||||
x2="396.9"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1549" />
|
||||
<line
|
||||
x1="368.5"
|
||||
x2="368.5"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1551" />
|
||||
<line
|
||||
x1="340.2"
|
||||
x2="340.2"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1553" />
|
||||
<line
|
||||
x1="311.8"
|
||||
x2="311.8"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1555" />
|
||||
<line
|
||||
x1="283.5"
|
||||
x2="283.5"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1557" />
|
||||
<line
|
||||
x1="255.1"
|
||||
x2="255.1"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1559" />
|
||||
<line
|
||||
x1="226.8"
|
||||
x2="226.8"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1561" />
|
||||
<line
|
||||
x1="198.4"
|
||||
x2="198.4"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1563" />
|
||||
<line
|
||||
x1="170.1"
|
||||
x2="170.1"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1565" />
|
||||
<line
|
||||
x1="141.7"
|
||||
x2="141.7"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1567" />
|
||||
<line
|
||||
x1="113.4"
|
||||
x2="113.4"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1569" />
|
||||
<line
|
||||
x1="85"
|
||||
x2="85"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1571" />
|
||||
<line
|
||||
x1="56.7"
|
||||
x2="56.7"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1573" />
|
||||
<line
|
||||
x1="28.3"
|
||||
x2="28.3"
|
||||
y2="1020.5"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .7px;"
|
||||
id="line1575" />
|
||||
</g>
|
||||
<rect
|
||||
y="765.4"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1579" />
|
||||
<rect
|
||||
x="255.1"
|
||||
y="765.4"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1581" />
|
||||
<polyline
|
||||
points="765.4 992.1 765.4 1020.5 510.2 1020.5 510.2 765.4 765.4 765.4 765.4 935.4"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="polyline1583" />
|
||||
<polyline
|
||||
points="765.4 944.9 765.4 765.4 1020.5 765.4 1020.5 1020.5 765.4 1020.5 765.4 984.2"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="polyline1585" />
|
||||
<rect
|
||||
y="510.2"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1587" />
|
||||
<rect
|
||||
x="255.1"
|
||||
y="510.2"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1589" />
|
||||
<rect
|
||||
x="510.2"
|
||||
y="510.2"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1591" />
|
||||
<rect
|
||||
x="765.4"
|
||||
y="510.2"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1593" />
|
||||
<rect
|
||||
y="255.1"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1595" />
|
||||
<rect
|
||||
x="255.1"
|
||||
y="255.1"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1597" />
|
||||
<rect
|
||||
x="510.2"
|
||||
y="255.1"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1599" />
|
||||
<rect
|
||||
x="765.4"
|
||||
y="255.1"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1601" />
|
||||
<rect
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1603" />
|
||||
<rect
|
||||
x="255.1"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1605" />
|
||||
<rect
|
||||
x="510.2"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1607" />
|
||||
<rect
|
||||
x="765.4"
|
||||
width="255.1"
|
||||
height="255.1"
|
||||
style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 1.4px;"
|
||||
id="rect1609" />
|
||||
<g
|
||||
id="g1641">
|
||||
<path
|
||||
d="m584.3,964.3c0-1.9.3-3.7.9-5.3.6-1.7,1.4-3.1,2.5-4.3,1.1-1.2,2.4-2.2,4-2.9,1.6-.7,3.3-1,5.3-1s3.8.3,5.3,1c1.6.7,2.9,1.7,4,2.9,1.1,1.2,1.9,2.7,2.5,4.3.6,1.7.9,3.4.9,5.3s-.3,3.6-.9,5.2c-.6,1.6-1.4,3-2.5,4.2-1.1,1.2-2.4,2.1-4,2.8-1.6.7-3.3,1-5.3,1s-3.8-.3-5.3-1c-1.6-.7-2.9-1.6-4-2.8-1.1-1.2-1.9-2.6-2.5-4.2-.6-1.6-.9-3.4-.9-5.2Zm5.7,0c0,1.1.1,2.1.4,3.2s.7,1.9,1.2,2.8c.6.8,1.3,1.5,2.2,2,.9.5,2,.7,3.2.7s2.4-.2,3.2-.7c.9-.5,1.6-1.1,2.2-2,.6-.8,1-1.7,1.2-2.8s.4-2.1.4-3.2-.1-2.2-.4-3.3c-.3-1.1-.7-2-1.2-2.8s-1.3-1.5-2.2-2c-.9-.5-2-.7-3.2-.7s-2.4.2-3.2.7c-.9.5-1.6,1.2-2.2,2-.6.8-1,1.8-1.2,2.8-.3,1.1-.4,2.1-.4,3.3Z"
|
||||
style="fill: #fff;"
|
||||
id="path1611" />
|
||||
<path
|
||||
d="m613.4,951.3h13.9c1.2,0,2.2.2,3.1.6.9.4,1.7.9,2.4,1.5.7.6,1.2,1.4,1.5,2.3.3.9.5,1.8.5,2.7,0,1.5-.3,2.8-1,3.9-.6,1.1-1.7,1.9-3.1,2.5h0c.7.3,1.3.6,1.7,1,.5.4.8.9,1.1,1.4.3.6.5,1.1.6,1.8.1.6.2,1.3.3,1.9,0,.4,0,.9,0,1.4,0,.6,0,1.1.1,1.7,0,.6.2,1.1.3,1.6.1.5.3,1,.6,1.3h-5.7c-.2-.4-.3-.9-.4-1.3,0-.5-.2-1-.2-1.5,0-.5-.1-1.1-.1-1.7,0-.6,0-1.1-.2-1.6-.2-1.3-.6-2.3-1.2-3-.6-.6-1.6-.9-3.1-.9h-5.7v10h-5.7v-25.7Zm5.7,11.6h6.2c1.3,0,2.2-.3,2.9-.9.7-.6,1-1.5,1-2.8s-.3-2.2-1-2.7c-.7-.6-1.6-.8-2.9-.8h-6.2v7.2Z"
|
||||
style="fill: #fff;"
|
||||
id="path1613" />
|
||||
<path
|
||||
d="m639.4,951.3h5.7v25.7h-5.7v-25.7Z"
|
||||
style="fill: #fff;"
|
||||
id="path1615" />
|
||||
<path
|
||||
d="m668.6,974.1c-1,1.3-2.1,2.2-3.3,2.7-1.2.5-2.5.8-3.7.8-2,0-3.8-.3-5.3-1-1.6-.7-2.9-1.6-4-2.8-1.1-1.2-1.9-2.6-2.5-4.2-.6-1.6-.9-3.4-.9-5.2s.3-3.7.9-5.3c.6-1.7,1.4-3.1,2.5-4.3,1.1-1.2,2.4-2.2,4-2.9,1.6-.7,3.3-1,5.3-1s2.6.2,3.8.6c1.2.4,2.3,1,3.3,1.7,1,.8,1.8,1.7,2.5,2.8s1.1,2.4,1.2,3.9h-5.4c-.3-1.4-1-2.5-2-3.2-1-.7-2.1-1.1-3.5-1.1s-2.4.2-3.2.7c-.9.5-1.6,1.2-2.2,2-.6.8-1,1.8-1.2,2.8-.3,1.1-.4,2.1-.4,3.3s.1,2.1.4,3.2.7,1.9,1.2,2.8c.6.8,1.3,1.5,2.2,2,.9.5,2,.7,3.2.7,1.8,0,3.3-.5,4.3-1.4,1-.9,1.6-2.3,1.8-4.1h-5.7v-4.2h10.8v13.9h-3.6l-.6-2.9Z"
|
||||
style="fill: #fff;"
|
||||
id="path1617" />
|
||||
<path
|
||||
d="m677.4,951.3h5.7v25.7h-5.7v-25.7Z"
|
||||
style="fill: #fff;"
|
||||
id="path1619" />
|
||||
<path
|
||||
d="m688,951.3h5.6l10.7,17.2h0v-17.2h5.3v25.7h-5.7l-10.7-17.2h0v17.2h-5.3v-25.7Z"
|
||||
style="fill: #fff;"
|
||||
id="path1621" />
|
||||
<path
|
||||
d="m721.7,951.3h5.8l9.6,25.7h-5.9l-1.9-5.7h-9.6l-2,5.7h-5.7l9.8-25.7Zm-.5,15.8h6.7l-3.2-9.4h0l-3.3,9.4Z"
|
||||
style="fill: #fff;"
|
||||
id="path1623" />
|
||||
<path
|
||||
d="m739.3,951.3h5.7v21h12.5v4.8h-18.2v-25.7Z"
|
||||
style="fill: #fff;"
|
||||
id="path1625" />
|
||||
<path
|
||||
d="m770.7,951.3h11.6c1.6,0,3,.2,4.1.7s2,1.1,2.8,1.9c.7.8,1.2,1.7,1.5,2.6.3,1,.5,2,.5,3s-.2,2.1-.5,3.1c-.3,1-.8,1.9-1.5,2.6-.7.8-1.6,1.4-2.8,1.9s-2.5.7-4.1.7h-5.9v9.2h-5.7v-25.7Zm5.7,12.1h4.4c.6,0,1.3,0,1.9-.1.6,0,1.1-.3,1.6-.6.5-.3.8-.7,1.1-1.2.3-.5.4-1.2.4-2s-.1-1.5-.4-2c-.3-.5-.6-.9-1.1-1.2-.5-.3-1-.5-1.6-.6-.6,0-1.2-.1-1.9-.1h-4.4v7.7Z"
|
||||
style="fill: #fff;"
|
||||
id="path1627" />
|
||||
<path
|
||||
d="m794.7,951.3h13.9c1.2,0,2.2.2,3.1.6.9.4,1.7.9,2.4,1.5.7.6,1.2,1.4,1.5,2.3.3.9.5,1.8.5,2.7,0,1.5-.3,2.8-1,3.9-.6,1.1-1.7,1.9-3.1,2.5h0c.7.3,1.3.6,1.7,1,.5.4.8.9,1.1,1.4.3.6.5,1.1.6,1.8.1.6.2,1.3.3,1.9,0,.4,0,.9,0,1.4,0,.6,0,1.1.1,1.7,0,.6.2,1.1.3,1.6.1.5.3,1,.6,1.3h-5.7c-.2-.4-.3-.9-.4-1.3s-.2-1-.2-1.5c0-.5-.1-1.1-.1-1.7,0-.6,0-1.1-.2-1.6-.2-1.3-.6-2.3-1.2-3-.6-.6-1.6-.9-3.1-.9h-5.7v10h-5.7v-25.7Zm5.7,11.6h6.2c1.3,0,2.2-.3,2.9-.9.7-.6,1-1.5,1-2.8s-.3-2.2-1-2.7c-.7-.6-1.6-.8-2.9-.8h-6.2v7.2Z"
|
||||
style="fill: #fff;"
|
||||
id="path1629" />
|
||||
<path
|
||||
d="m842.5,967.3c0,3.5-1,6.1-2.9,7.8-1.9,1.7-4.6,2.6-8.1,2.6s-6.2-.8-8.1-2.5c-1.9-1.7-2.9-4.3-2.9-7.8v-16h5.7v16c0,.7,0,1.4.2,2.1s.4,1.3.8,1.8c.4.5.9.9,1.6,1.3.7.3,1.6.5,2.8.5,2,0,3.4-.5,4.2-1.4.8-.9,1.2-2.3,1.2-4.2v-16h5.7v16Z"
|
||||
style="fill: #fff;"
|
||||
id="path1631" />
|
||||
<path
|
||||
d="m851.2,968.5c0,.9.2,1.6.5,2.2.3.6.7,1.1,1.2,1.5.5.4,1.1.6,1.8.8.7.2,1.4.3,2.2.3s1,0,1.6-.1c.6,0,1.1-.2,1.6-.5s.9-.6,1.3-1c.3-.4.5-1,.5-1.6s-.2-1.3-.7-1.7c-.4-.4-1-.8-1.7-1.1-.7-.3-1.5-.6-2.4-.8-.9-.2-1.8-.4-2.8-.7-1-.2-1.9-.5-2.8-.9-.9-.3-1.7-.8-2.4-1.3-.7-.6-1.3-1.2-1.7-2.1-.4-.8-.7-1.8-.7-3s.3-2.5.8-3.4c.6-1,1.3-1.8,2.2-2.4.9-.6,1.9-1.1,3.1-1.4,1.2-.3,2.3-.5,3.5-.5s2.6.2,3.9.5c1.2.3,2.3.8,3.3,1.5,1,.7,1.7,1.5,2.3,2.6.6,1,.8,2.3.8,3.8h-5.5c0-.8-.2-1.4-.5-1.9s-.6-.9-1.1-1.2c-.5-.3-1-.5-1.6-.6-.6-.1-1.2-.2-1.9-.2s-.9,0-1.4.1c-.5,0-.9.3-1.2.5-.4.2-.7.5-.9.9-.2.4-.4.8-.4,1.4s0,.9.3,1.2c.2.3.6.6,1.1.8.6.3,1.3.5,2.3.8,1,.3,2.3.6,3.9,1,.3,0,.7.2,1.2.3.5.1,1,.3,1.6.5.6.2,1.1.5,1.7.9.6.4,1.1.8,1.5,1.3.5.5.8,1.2,1.1,1.9.3.7.4,1.6.4,2.5s-.2,2.3-.7,3.3c-.5,1-1.1,1.9-2,2.6-.9.7-2,1.3-3.3,1.7-1.3.4-2.9.6-4.6.6s-2.8-.2-4.1-.5c-1.3-.4-2.5-.9-3.5-1.7-1-.7-1.8-1.7-2.4-2.8-.6-1.2-.9-2.5-.9-4.1h5.5Z"
|
||||
style="fill: #fff;"
|
||||
id="path1633" />
|
||||
<path
|
||||
d="m877.7,951.3h5.8l9.6,25.7h-5.9l-1.9-5.7h-9.6l-2,5.7h-5.7l9.8-25.7Zm-.5,15.8h6.7l-3.2-9.4h0l-3.3,9.4Z"
|
||||
style="fill: #fff;"
|
||||
id="path1635" />
|
||||
<path
|
||||
d="m911.7,963.6l-8.3-12.2h6.6l5,8.2,5.2-8.2h6.2l-8.2,12.3,9,13.4h-6.7l-5.6-8.9-5.7,8.9h-6.4l9-13.5Z"
|
||||
style="fill: #fff;"
|
||||
id="path1637" />
|
||||
<path
|
||||
d="m929.4,951.3h5.7v21h12.5v4.8h-18.2v-25.7Z"
|
||||
style="fill: #fff;"
|
||||
id="path1639" />
|
||||
</g>
|
||||
<rect
|
||||
x="584.22406"
|
||||
y="983.10077"
|
||||
width="41.176113"
|
||||
height="15.750426"
|
||||
style="fill:#ff3c00;stroke-width:0.75002"
|
||||
id="rect1336" />
|
||||
<g
|
||||
id="g1348"
|
||||
transform="matrix(0.75002026,0,0,0.75002026,295.01625,586.41471)">
|
||||
<path
|
||||
d="m 401.3,545.4 c 0,0.2 0,0.4 -0.2,0.4 h -2 c -0.2,0 -0.4,0 -0.4,-0.3 l -0.4,-1.7 h -3.2 l -0.4,1.7 c 0,0.2 -0.2,0.3 -0.4,0.3 h -2 c -0.2,0 -0.3,-0.1 -0.2,-0.4 l 3.3,-11.9 c 0,-0.2 0.2,-0.3 0.4,-0.3 h 1.7 c 0.2,0 0.3,0 0.4,0.3 l 3.3,11.9 z m -4.5,-9.2 -0.2,1.2 -0.9,4.2 h 2.2 l -0.9,-4.2 z"
|
||||
style="fill:#ffffff"
|
||||
id="path1338" />
|
||||
<path
|
||||
d="m 402.5,532.1 c 0,-0.2 0.1,-0.4 0.3,-0.4 h 1.8 c 0.2,0 0.3,0.1 0.3,0.4 v 13.3 c 0,0.2 0,0.4 -0.3,0.4 h -1.8 c -0.2,0 -0.3,-0.1 -0.3,-0.4 z"
|
||||
style="fill:#ffffff"
|
||||
id="path1340" />
|
||||
<path
|
||||
d="m 415,541.9 c 0,2.3 -1.4,4.1 -3.7,4.1 -2.3,0 -1.4,-0.5 -1.8,-1.1 v 3.9 c 0,0.2 -0.2,0.4 -0.4,0.4 h -1.7 c -0.2,0 -0.3,-0.1 -0.3,-0.4 v -13.5 c 0,-0.2 0.1,-0.4 0.3,-0.4 h 1.3 c 0.2,0 0.4,0.1 0.4,0.4 l 0.2,0.9 c 0.4,-0.8 1.1,-1.5 2.1,-1.5 2.2,0 3.6,1.9 3.6,4.1 z m -2.5,-3.2 c 0,-0.9 -0.6,-1.7 -1.5,-1.7 -0.9,0 -1.4,0.8 -1.5,1.8 v 3 c 0,1 0.6,1.9 1.5,1.9 0.9,0 1.5,-0.8 1.5,-1.7 z"
|
||||
style="fill:#ffffff"
|
||||
id="path1342" />
|
||||
<path
|
||||
d="m 422,538.6 c 0,-0.8 -0.6,-1.6 -1.5,-1.6 -0.9,0 -1.5,0.9 -1.5,1.6 v 6.8 c 0,0.2 -0.3,0.4 -0.5,0.4 h -1.7 c -0.2,0 -0.3,-0.1 -0.3,-0.4 v -13.3 c 0,-0.2 0.1,-0.4 0.3,-0.4 h 1.8 c 0.2,0 0.3,0 0.3,0.3 v 3.9 c 0.5,-0.8 1.2,-1.3 2.2,-1.3 1.9,0 3.3,1.3 3.3,4 v 6.7 c 0,0.2 -0.1,0.4 -0.3,0.4 h -1.8 c -0.2,0 -0.3,-0.1 -0.3,-0.4 v -6.8 z"
|
||||
style="fill:#ffffff"
|
||||
id="path1344" />
|
||||
<path
|
||||
d="m 426,538.8 c 0,-2.2 1.5,-4.1 3.7,-4.1 2.2,0 1.6,0.6 2,1.4 v -0.8 c 0.2,-0.2 0.3,-0.4 0.6,-0.4 h 1.3 c 0.2,0 0.3,0.1 0.3,0.4 v 10.1 c 0,0.2 -0.1,0.4 -0.3,0.4 h -1.3 c -0.2,0 -0.4,-0.1 -0.4,-0.4 v -0.9 c -0.5,0.8 -1.1,1.4 -2.2,1.4 -2.2,0 -3.7,-1.8 -3.7,-4.1 v -3.1 z m 2.5,3.2 c 0,0.9 0.6,1.7 1.5,1.7 0.9,0 1.4,-0.8 1.5,-1.8 v -3.1 c 0,-1 -0.6,-1.8 -1.5,-1.8 -0.9,0 -1.5,0.8 -1.5,1.7 z"
|
||||
style="fill:#ffffff"
|
||||
id="path1346" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 25 KiB |
@ -20,6 +20,10 @@ struct FillBedTask: public ArrangeTaskBase
|
||||
|
||||
std::vector<ArrItem> selected, unselected;
|
||||
|
||||
// For workaround regarding "holes" when filling the bed with the same
|
||||
// item's copies
|
||||
std::vector<ArrItem> selected_fillers;
|
||||
|
||||
ArrangeSettings settings;
|
||||
ExtendedBed bed;
|
||||
size_t selected_existing_count = 0;
|
||||
|
@ -74,8 +74,7 @@ void extract(FillBedTask<ArrItem> &task,
|
||||
|
||||
// Workaround for missing items when arranging the same geometry only:
|
||||
// Injecting a number of items but with slightly shrinked shape, so that
|
||||
// they can fill the emerging holes. Priority is set to lowest so that
|
||||
// these filler items will only be inserted as the last ones.
|
||||
// they can fill the emerging holes.
|
||||
ArrItem prototype_item_shrinked;
|
||||
scene.model().visit_arrangeable(selected_ids.front(),
|
||||
[&prototype_item_shrinked, &itm_conv](const Arrangeable &arrbl) {
|
||||
@ -104,10 +103,6 @@ void extract(FillBedTask<ArrItem> &task,
|
||||
}
|
||||
};
|
||||
|
||||
// Set the lowest priority to the shrinked prototype (hole filler) item
|
||||
set_priority(prototype_item_shrinked,
|
||||
lowest_priority(range(task.selected)) - 1);
|
||||
|
||||
scene.model().for_each_arrangeable(collect_task_items);
|
||||
|
||||
int needed_items = calculate_items_needed_to_fill_bed(task.bed,
|
||||
@ -122,7 +117,7 @@ void extract(FillBedTask<ArrItem> &task,
|
||||
|
||||
// Add as many filler items as there are needed items. Most of them will
|
||||
// be discarded anyways.
|
||||
std::fill_n(std::back_inserter(task.selected), needed_items,
|
||||
std::fill_n(std::back_inserter(task.selected_fillers), needed_items,
|
||||
prototype_item_shrinked);
|
||||
}
|
||||
|
||||
@ -175,7 +170,7 @@ std::unique_ptr<FillBedTaskResult> FillBedTask<ArrItem>::process_native(
|
||||
void on_packed(ArrItem &itm) override
|
||||
{
|
||||
// Stop at the first filler that is not on the physical bed
|
||||
do_stop = get_bed_index(itm) > PhysicalBedId && get_priority(itm) < 0;
|
||||
do_stop = get_bed_index(itm) > PhysicalBedId && get_priority(itm) == 0;
|
||||
}
|
||||
|
||||
} subctl(ctl, *this);
|
||||
@ -184,6 +179,13 @@ std::unique_ptr<FillBedTaskResult> FillBedTask<ArrItem>::process_native(
|
||||
|
||||
arranger->arrange(selected, unselected, bed, subctl);
|
||||
|
||||
auto unsel_cpy = unselected;
|
||||
for (const auto &itm : selected) {
|
||||
unsel_cpy.emplace_back(itm);
|
||||
}
|
||||
|
||||
arranger->arrange(selected_fillers, unsel_cpy, bed, FillBedCtl{ctl, *this});
|
||||
|
||||
auto arranged_range = Range{selected.begin(),
|
||||
selected.begin() + selected_existing_count};
|
||||
|
||||
@ -196,6 +198,10 @@ std::unique_ptr<FillBedTaskResult> FillBedTask<ArrItem>::process_native(
|
||||
if (get_bed_index(itm) == PhysicalBedId)
|
||||
result->add_new_item(itm);
|
||||
|
||||
for (auto &itm : selected_fillers)
|
||||
if (get_bed_index(itm) == PhysicalBedId)
|
||||
result->add_new_item(itm);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -416,12 +416,12 @@ void PrintConfigDef::init_common_params()
|
||||
def->label = L("Authorization Type");
|
||||
// def->tooltip = L("");
|
||||
def->set_enum<AuthorizationType>({
|
||||
{ "user", L("HTTP digest") },
|
||||
{ "key", L("API key") }
|
||||
{ "key", L("API key") },
|
||||
{ "user", L("HTTP digest") }
|
||||
});
|
||||
def->mode = comAdvanced;
|
||||
def->cli = ConfigOptionDef::nocli;
|
||||
def->set_default_value(new ConfigOptionEnum<AuthorizationType>(atUserPassword));
|
||||
def->set_default_value(new ConfigOptionEnum<AuthorizationType>(atKeyPassword));
|
||||
|
||||
// temporary workaround for compatibility with older Slicer
|
||||
{
|
||||
|
@ -899,8 +899,9 @@ void SpinCtrl::BUILD() {
|
||||
if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
|
||||
wxGetApp().UpdateDarkUI(temp);
|
||||
|
||||
if (m_opt.height < 0 && parent_is_custom_ctrl)
|
||||
if (m_opt.height < 0 && parent_is_custom_ctrl) {
|
||||
opt_height = (double)temp->GetSize().GetHeight() / m_em_unit;
|
||||
}
|
||||
|
||||
temp->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e)
|
||||
{
|
||||
@ -1282,8 +1283,8 @@ void Choice::set_values(const std::vector<std::string>& values)
|
||||
auto value = ww->GetValue();
|
||||
ww->Clear();
|
||||
ww->Append("");
|
||||
for (const auto &el : values)
|
||||
ww->Append(wxString(el));
|
||||
for (const std::string& el : values)
|
||||
ww->Append(from_u8(el));
|
||||
ww->SetValue(value);
|
||||
|
||||
m_disable_change_event = false;
|
||||
|
@ -1680,7 +1680,7 @@ void GUI_App::SetWindowVariantForButton(wxButton* btn)
|
||||
int GUI_App::get_max_font_pt_size()
|
||||
{
|
||||
const unsigned disp_count = wxDisplay::GetCount();
|
||||
for (int i = 0; i < disp_count; i++) {
|
||||
for (unsigned i = 0; i < disp_count; i++) {
|
||||
const wxRect display_rect = wxDisplay(i).GetGeometry();
|
||||
if (display_rect.width >= 2560 && display_rect.height >= 1440)
|
||||
return 20;
|
||||
|
@ -1099,28 +1099,30 @@ std::vector<std::string> create_shape_warnings(const EmbossShape &shape, float s
|
||||
|
||||
// This waning is not connected to NSVGshape. It is about union of paths, but Zero index is shown first
|
||||
size_t index = 0;
|
||||
add_warning(index, _u8L("Final shape constains selfintersection or multiple points with same coordinate"));
|
||||
add_warning(index, _u8L("Final shape constains selfintersection or multiple points with same coordinate."));
|
||||
}
|
||||
|
||||
size_t shape_index = 0;
|
||||
for (NSVGshape *shape = image.shapes; shape != NULL; shape = shape->next, ++shape_index) {
|
||||
if (!(shape->flags & NSVG_FLAGS_VISIBLE)){
|
||||
add_warning(shape_index * 2, GUI::format(_L("Shape is marked as invisible (%1%)"), shape->id));
|
||||
add_warning(shape_index * 2, GUI::format(_L("Shape is marked as invisible (%1%)."), shape->id));
|
||||
continue;
|
||||
}
|
||||
|
||||
std::string fill_warning = create_fill_warning(*shape);
|
||||
if (!fill_warning.empty())
|
||||
add_warning(shape_index * 2, GUI::format(_L("Fill of shape (%1%) contains unsupported: %2% "), shape->id, fill_warning));
|
||||
if (!fill_warning.empty()) {
|
||||
// TRN: The first placeholder is shape identifier, the second one is text describing the problem.
|
||||
add_warning(shape_index * 2, GUI::format(_L("Fill of shape (%1%) contains unsupported: %2%."), shape->id, fill_warning));
|
||||
}
|
||||
|
||||
float minimal_width_in_mm = 1e-3f;
|
||||
if (shape->strokeWidth <= minimal_width_in_mm * scale) {
|
||||
add_warning(shape_index * 2, GUI::format(_L("Stroke of shape (%1%) is too thin (minimal width is %2% mm)"), shape->id, minimal_width_in_mm));
|
||||
add_warning(shape_index * 2, GUI::format(_L("Stroke of shape (%1%) is too thin (minimal width is %2% mm)."), shape->id, minimal_width_in_mm));
|
||||
continue;
|
||||
}
|
||||
std::string stroke_warning = create_stroke_warning(*shape);
|
||||
if (!stroke_warning.empty())
|
||||
add_warning(shape_index * 2 + 1, GUI::format(_L("Stroke of shape (%1%) contains unsupported: %2% "), shape->id, stroke_warning));
|
||||
add_warning(shape_index * 2 + 1, GUI::format(_L("Stroke of shape (%1%) contains unsupported: %2%."), shape->id, stroke_warning));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1928,13 +1928,13 @@ void MainFrame::load_config_file()
|
||||
DynamicPrintConfig config = wxGetApp().preset_bundle->full_config();
|
||||
const auto* post_process = config.opt<ConfigOptionStrings>("post_process");
|
||||
if (post_process != nullptr && !post_process->values.empty()) {
|
||||
const wxString msg = _L("The selected config file contains a post-processing script") + "\n" + _L("Please review the script carefully before running it.");
|
||||
wxString text;
|
||||
for (const auto& s : post_process->values) {
|
||||
const wxString msg = _L("The selected config file contains a post-processing script.\nPlease review the script carefully before exporting G-code.");
|
||||
std::string text;
|
||||
for (const std::string& s : post_process->values) {
|
||||
text += s;
|
||||
}
|
||||
|
||||
InfoDialog msg_dlg(nullptr, msg, text, true, wxOK | wxICON_WARNING);
|
||||
InfoDialog msg_dlg(nullptr, msg, from_u8(text), true, wxOK | wxICON_WARNING);
|
||||
msg_dlg.set_caption(wxString(SLIC3R_APP_NAME " - ") + _L("Attention!"));
|
||||
msg_dlg.ShowModal();
|
||||
}
|
||||
|
@ -943,8 +943,8 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config
|
||||
else if (opt->gui_flags == "serialized") {
|
||||
std::vector<std::string> values = config.option<ConfigOptionStrings>(opt_key)->values;
|
||||
if (!values.empty() && !values[0].empty())
|
||||
for (auto el : values)
|
||||
text_value += el + ";";
|
||||
for (const std::string& el : values)
|
||||
text_value += from_u8(el) + ";";
|
||||
ret = text_value;
|
||||
}
|
||||
else
|
||||
|
@ -2616,15 +2616,14 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
if (!config.empty()) {
|
||||
const auto* post_process = config.opt<ConfigOptionStrings>("post_process");
|
||||
if (post_process != nullptr && !post_process->values.empty()) {
|
||||
wxString msg = type_3mf ? _L("The selected 3MF file contains a post-processing script") :
|
||||
_L("The selected AMF file contains a post-processing script");
|
||||
msg += "\n" + _L("Please review the script carefully before running it.");
|
||||
wxString text;
|
||||
for (const auto& s : post_process->values) {
|
||||
// TRN The placeholder is either "3MF" or "AMF"
|
||||
wxString msg = GUI::format_wxstr(_L("The selected %1% file contains a post-processing script.\n"
|
||||
"Please review the script carefully before exporting G-code."), type_3mf ? "3MF" : "AMF" );
|
||||
std::string text;
|
||||
for (const std::string& s : post_process->values)
|
||||
text += s;
|
||||
}
|
||||
|
||||
InfoDialog msg_dlg(nullptr, msg, text, true, wxOK | wxICON_WARNING);
|
||||
InfoDialog msg_dlg(nullptr, msg, from_u8(text), true, wxOK | wxICON_WARNING);
|
||||
msg_dlg.set_caption(wxString(SLIC3R_APP_NAME " - ") + _L("Attention!"));
|
||||
msg_dlg.ShowModal();
|
||||
}
|
||||
@ -5589,10 +5588,8 @@ void Plater::convert_gcode_to_ascii()
|
||||
}
|
||||
else {
|
||||
output_file = rename_file(output_file, ".gcode");
|
||||
wxString msg = _L("You are trying to convert to ASCII a binary file whose extension is '.gcode'.");
|
||||
msg += "\n" + _L("The exported file will be renamed as:");
|
||||
msg += "\n\n" + output_file;
|
||||
msg += "\n\n" + _L("Continue with export?");
|
||||
wxString msg = GUI::format_wxstr("The converted binary G-code file has '.gcode' extension.\n"
|
||||
"The exported file will be renamed to:\n\n%1%\n\nDo you want to continue?", output_file);
|
||||
MessageDialog msg_dlg(this, msg, _L("Warning"), wxYES_NO);
|
||||
if (msg_dlg.ShowModal() != wxID_YES)
|
||||
return;
|
||||
@ -5669,10 +5666,8 @@ void Plater::convert_gcode_to_binary()
|
||||
}
|
||||
else {
|
||||
output_file = rename_file(output_file, ".bgcode");
|
||||
wxString msg = _L("You are trying to convert to binary an ASCII file whose extension is '.bgcode'.");
|
||||
msg += "\n" + _L("The exported file will be renamed as:");
|
||||
msg += "\n\n" + output_file;
|
||||
msg += "\n\n" + _L("Continue with export?");
|
||||
wxString msg = GUI::format_wxstr("The converted ASCII G-code file has '.bgcode' extension.\n"
|
||||
"The exported file will be renamed to:\n\n%1%\n\nDo you want to continue?", output_file);
|
||||
MessageDialog msg_dlg(this, msg, _L("Warning"), wxYES_NO);
|
||||
if (msg_dlg.ShowModal() != wxID_YES)
|
||||
return;
|
||||
|
@ -1372,10 +1372,10 @@ void Tab::update_preset_description_line()
|
||||
if (!default_filament_profiles.empty())
|
||||
{
|
||||
description_line += "\n\n\t" + _(L("default filament profile")) + ": \n\t\t";
|
||||
for (auto& profile : default_filament_profiles) {
|
||||
for (const std::string& profile : default_filament_profiles) {
|
||||
if (&profile != &*default_filament_profiles.begin())
|
||||
description_line += ", ";
|
||||
description_line += profile;
|
||||
description_line += from_u8(profile);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1947,23 +1947,22 @@ void TabFilament::create_line_with_near_label_widget(ConfigOptionsGroupShp optgr
|
||||
else
|
||||
line = optgroup->create_single_option_line(optgroup->get_option(opt_key));
|
||||
|
||||
line.near_label_widget = [this, optgroup_wk = ConfigOptionsGroupWkp(optgroup), opt_key, opt_index](wxWindow* parent) {
|
||||
wxWindow* check_box = CheckBox::GetNewWin(parent);
|
||||
wxGetApp().UpdateDarkUI(check_box);
|
||||
|
||||
line.near_label_widget = [this, optgroup_wk = ConfigOptionsGroupWkp(optgroup), opt_key, opt_index](wxWindow* parent) {
|
||||
wxWindow* check_box = CheckBox::GetNewWin(parent);
|
||||
wxGetApp().UpdateDarkUI(check_box);
|
||||
|
||||
check_box->Bind(wxEVT_CHECKBOX, [optgroup_wk, opt_key, opt_index](wxCommandEvent& evt) {
|
||||
const bool is_checked = evt.IsChecked();
|
||||
if (auto optgroup_sh = optgroup_wk.lock(); optgroup_sh) {
|
||||
if (Field *field = optgroup_sh->get_fieldc(opt_key, opt_index); field != nullptr) {
|
||||
field->toggle(is_checked);
|
||||
if (is_checked)
|
||||
field->set_last_meaningful_value();
|
||||
else
|
||||
field->set_na_value();
|
||||
}
|
||||
check_box->Bind(wxEVT_CHECKBOX, [optgroup_wk, opt_key, opt_index](wxCommandEvent& evt) {
|
||||
const bool is_checked = evt.IsChecked();
|
||||
if (auto optgroup_sh = optgroup_wk.lock(); optgroup_sh) {
|
||||
if (Field *field = optgroup_sh->get_fieldc(opt_key, opt_index); field != nullptr) {
|
||||
field->toggle(is_checked);
|
||||
if (is_checked)
|
||||
field->set_last_meaningful_value();
|
||||
else
|
||||
field->set_na_value();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
m_overrides_options[opt_key] = check_box;
|
||||
return check_box;
|
||||
@ -2435,6 +2434,7 @@ void TabFilament::msw_rescale()
|
||||
|
||||
void TabFilament::sys_color_changed()
|
||||
{
|
||||
wxGetApp().UpdateDarkUI(m_extruders_cb);
|
||||
m_extruders_cb->Clear();
|
||||
update_extruder_combobox();
|
||||
|
||||
|
@ -306,7 +306,7 @@ MsgUpdateConfig::MsgUpdateConfig(const std::vector<Update> &updates, bool force_
|
||||
}
|
||||
|
||||
if (! update.new_printers.empty()) {
|
||||
flex->Add(new wxStaticText(this, wxID_ANY, _L_PLURAL("New printer:", "New printers:", update.new_printers.find(',') == std::string::npos ? 1 : 2)), 0, wxALIGN_RIGHT);
|
||||
flex->Add(new wxStaticText(this, wxID_ANY, _L_PLURAL("New printer", "New printers", update.new_printers.find(',') == std::string::npos ? 1 : 2) + ":"), 0, wxALIGN_RIGHT);
|
||||
auto* update_printer = new wxStaticText(this, wxID_ANY, from_u8(update.new_printers));
|
||||
update_printer->Wrap(CONTENT_WIDTH * wxGetApp().em_unit());
|
||||
flex->Add(update_printer);
|
||||
@ -373,7 +373,7 @@ MsgUpdateForced::MsgUpdateForced(const std::vector<Update>& updates) :
|
||||
}
|
||||
|
||||
if (!update.new_printers.empty()) {
|
||||
versions->Add(new wxStaticText(this, wxID_ANY, _L_PLURAL("New printer:", "New printers:", update.new_printers.find(',') == std::string::npos ? 1 : 2))/*, 0, wxALIGN_RIGHT*/);
|
||||
versions->Add(new wxStaticText(this, wxID_ANY, _L_PLURAL("New printer", "New printers", update.new_printers.find(',') == std::string::npos ? 1 : 2)+":")/*, 0, wxALIGN_RIGHT*/);
|
||||
auto* update_printer = new wxStaticText(this, wxID_ANY, from_u8(update.new_printers));
|
||||
update_printer->Wrap(CONTENT_WIDTH * wxGetApp().em_unit());
|
||||
versions->Add(update_printer);
|
||||
|
@ -272,7 +272,7 @@ void ComboBox::mouseWheelMoved(wxMouseEvent &event)
|
||||
{
|
||||
event.Skip();
|
||||
if (drop_down) return;
|
||||
auto delta = (event.GetWheelRotation() < 0 == event.IsWheelInverted()) ? -1 : 1;
|
||||
auto delta = ((event.GetWheelRotation() < 0) == event.IsWheelInverted()) ? -1 : 1;
|
||||
unsigned int n = GetSelection() + delta;
|
||||
if (n < GetCount()) {
|
||||
SetSelection((int) n);
|
||||
|
@ -302,7 +302,7 @@ void DropDown::render(wxDC &dc)
|
||||
}
|
||||
// draw texts & icons
|
||||
dc.SetTextForeground(text_color.colorForStates(states));
|
||||
for (int i = 0; i < texts.size(); ++i) {
|
||||
for (size_t i = 0; i < texts.size(); ++i) {
|
||||
if (rcContent.GetBottom() < 0) {
|
||||
rcContent.y += rowSize.y;
|
||||
continue;
|
||||
@ -460,13 +460,14 @@ void DropDown::mouseCaptureLost(wxMouseCaptureLostEvent &event)
|
||||
void DropDown::mouseMove(wxMouseEvent &event)
|
||||
{
|
||||
wxPoint pt = event.GetPosition();
|
||||
int text_size = int(texts.size());
|
||||
if (pressedDown) {
|
||||
wxPoint pt2 = offset + pt - dragStart;
|
||||
dragStart = pt;
|
||||
if (pt2.y > 0)
|
||||
pt2.y = 0;
|
||||
else if (pt2.y + rowSize.y * texts.size() < GetSize().y)
|
||||
pt2.y = GetSize().y - rowSize.y * texts.size();
|
||||
else if (pt2.y + rowSize.y * text_size < GetSize().y)
|
||||
pt2.y = GetSize().y - rowSize.y * text_size;
|
||||
if (pt2.y != offset.y) {
|
||||
offset = pt2;
|
||||
hover_item = -1; // moved
|
||||
@ -476,7 +477,7 @@ void DropDown::mouseMove(wxMouseEvent &event)
|
||||
}
|
||||
if (!pressedDown || hover_item >= 0) {
|
||||
int hover = (pt.y - offset.y) / rowSize.y;
|
||||
if (hover >= (int) texts.size()) hover = -1;
|
||||
if (hover >= text_size) hover = -1;
|
||||
if (hover == hover_item) return;
|
||||
hover_item = hover;
|
||||
if (hover >= 0)
|
||||
@ -489,17 +490,18 @@ void DropDown::mouseWheelMoved(wxMouseEvent &event)
|
||||
{
|
||||
auto delta = event.GetWheelRotation() > 0 ? rowSize.y : -rowSize.y;
|
||||
wxPoint pt2 = offset + wxPoint{0, delta};
|
||||
int text_size = int(texts.size());
|
||||
if (pt2.y > 0)
|
||||
pt2.y = 0;
|
||||
else if (pt2.y + rowSize.y * texts.size() < GetSize().y)
|
||||
pt2.y = GetSize().y - rowSize.y * texts.size();
|
||||
else if (pt2.y + rowSize.y * text_size < GetSize().y)
|
||||
pt2.y = GetSize().y - rowSize.y * text_size;
|
||||
if (pt2.y != offset.y) {
|
||||
offset = pt2;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
int hover = (event.GetPosition().y - offset.y) / rowSize.y;
|
||||
if (hover >= (int) texts.size()) hover = -1;
|
||||
if (hover >= text_size) hover = -1;
|
||||
if (hover != hover_item) {
|
||||
hover_item = hover;
|
||||
if (hover >= 0) SetToolTip(texts[hover]);
|
||||
|
@ -297,7 +297,7 @@ void SpinInput::Create(wxWindow *parent,
|
||||
text_ctrl->Bind(wxEVT_TEXT, &SpinInput::onText, this);
|
||||
text_ctrl->Bind(wxEVT_TEXT_ENTER, &SpinInput::onTextEnter, this);
|
||||
text_ctrl->Bind(wxEVT_KEY_DOWN, &SpinInput::keyPressed, this);
|
||||
text_ctrl->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable context menu
|
||||
text_ctrl->Bind(wxEVT_RIGHT_DOWN, [](auto &e) {}); // disable context menu
|
||||
button_inc = create_button(ButtonId::btnIncrease);
|
||||
button_dec = create_button(ButtonId::btnDecrease);
|
||||
delta = 0;
|
||||
@ -403,7 +403,7 @@ void SpinInput::onTextEnter(wxCommandEvent &event)
|
||||
|
||||
void SpinInput::mouseWheelMoved(wxMouseEvent &event)
|
||||
{
|
||||
auto delta = (event.GetWheelRotation() < 0 == event.IsWheelInverted()) ? 1 : -1;
|
||||
auto delta = ((event.GetWheelRotation() < 0) == event.IsWheelInverted()) ? 1 : -1;
|
||||
SetValue(val + delta);
|
||||
sendSpinEvent();
|
||||
text_ctrl->SetFocus();
|
||||
@ -473,7 +473,7 @@ void SpinInputDouble::Create(wxWindow *parent,
|
||||
text_ctrl->Bind(wxEVT_TEXT, &SpinInputDouble::onText, this);
|
||||
text_ctrl->Bind(wxEVT_TEXT_ENTER, &SpinInputDouble::onTextEnter, this);
|
||||
text_ctrl->Bind(wxEVT_KEY_DOWN, &SpinInputDouble::keyPressed, this);
|
||||
text_ctrl->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable context menu
|
||||
text_ctrl->Bind(wxEVT_RIGHT_DOWN, [](auto &e) {}); // disable context menu
|
||||
button_inc = create_button(ButtonId::btnIncrease);
|
||||
button_dec = create_button(ButtonId::btnDecrease);
|
||||
delta = 0;
|
||||
@ -600,7 +600,7 @@ void SpinInputDouble::onTextEnter(wxCommandEvent &event)
|
||||
|
||||
void SpinInputDouble::mouseWheelMoved(wxMouseEvent &event)
|
||||
{
|
||||
auto delta = (event.GetWheelRotation() < 0 == event.IsWheelInverted()) ? inc : -inc;
|
||||
auto delta = ((event.GetWheelRotation() < 0) == event.IsWheelInverted()) ? inc : -inc;
|
||||
SetValue(val + delta);
|
||||
sendSpinEvent();
|
||||
text_ctrl->SetFocus();
|
||||
|
@ -22,7 +22,7 @@ void StateColor::append(unsigned long color, int states)
|
||||
{
|
||||
if ((color & 0xff000000) == 0)
|
||||
color |= 0xff000000;
|
||||
wxColour cl; cl.SetRGBA(color & 0xff00ff00 | ((color & 0xff) << 16) | ((color >> 16) & 0xff));
|
||||
wxColour cl; cl.SetRGBA((color & 0xff00ff00) | ((color & 0xff) << 16) | ((color >> 16) & 0xff));
|
||||
append(cl, states);
|
||||
}
|
||||
|
||||
@ -49,7 +49,7 @@ wxColour StateColor::defaultColor() {
|
||||
wxColour StateColor::colorForStates(int states)
|
||||
{
|
||||
bool focused = takeFocusedAsHovered_ && (states & Focused);
|
||||
for (int i = 0; i < statesList_.size(); ++i) {
|
||||
for (size_t i = 0; i < statesList_.size(); ++i) {
|
||||
int s = statesList_[i];
|
||||
int on = s & 0xffff;
|
||||
int off = s >> 16;
|
||||
@ -69,18 +69,18 @@ wxColour StateColor::colorForStates(int states)
|
||||
|
||||
int StateColor::colorIndexForStates(int states)
|
||||
{
|
||||
for (int i = 0; i < statesList_.size(); ++i) {
|
||||
for (size_t i = 0; i < statesList_.size(); ++i) {
|
||||
int s = statesList_[i];
|
||||
int on = s & 0xffff;
|
||||
int off = s >> 16;
|
||||
if ((on & states) == on && (off & ~states) == off) { return i; }
|
||||
if ((on & states) == on && (off & ~states) == off) { return int(i); }
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool StateColor::setColorForStates(wxColour const &color, int states)
|
||||
{
|
||||
for (int i = 0; i < statesList_.size(); ++i) {
|
||||
for (size_t i = 0; i < statesList_.size(); ++i) {
|
||||
if (statesList_[i] == states) {
|
||||
colors_[i] = color;
|
||||
return true;
|
||||
|
@ -52,7 +52,7 @@ void StateHandler::update_binds()
|
||||
int diff = bind_states ^ bind_states_;
|
||||
State states[] = {Enabled, Checked, Focused, Hovered, Pressed};
|
||||
wxEventType events[] = {EVT_ENABLE_CHANGED, wxEVT_CHECKBOX, wxEVT_SET_FOCUS, wxEVT_ENTER_WINDOW, wxEVT_LEFT_DOWN};
|
||||
wxEventType events2[] = {{0}, {0}, wxEVT_KILL_FOCUS, wxEVT_LEAVE_WINDOW, wxEVT_LEFT_UP};
|
||||
wxEventType events2[] = {0, 0, wxEVT_KILL_FOCUS, wxEVT_LEAVE_WINDOW, wxEVT_LEFT_UP};
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
int s = states[i];
|
||||
if (diff & s) {
|
||||
@ -82,7 +82,7 @@ void StateHandler::changed(wxEvent &event)
|
||||
{
|
||||
event.Skip();
|
||||
wxEventType events[] = {EVT_ENABLE_CHANGED, wxEVT_CHECKBOX, wxEVT_SET_FOCUS, wxEVT_ENTER_WINDOW, wxEVT_LEFT_DOWN};
|
||||
wxEventType events2[] = {{0}, {0}, wxEVT_KILL_FOCUS, wxEVT_LEAVE_WINDOW, wxEVT_LEFT_UP};
|
||||
wxEventType events2[] = { 0, 0, wxEVT_KILL_FOCUS, wxEVT_LEAVE_WINDOW, wxEVT_LEFT_UP};
|
||||
int old = states_;
|
||||
// some events are from another window (ex: text_ctrl of TextInput), save state in states2_ to avoid conflicts
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
|
@ -78,7 +78,7 @@ void TextInput::Create(wxWindow * parent,
|
||||
e.SetId(GetId());
|
||||
ProcessEventLocally(e);
|
||||
});
|
||||
text_ctrl->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable context menu
|
||||
text_ctrl->Bind(wxEVT_RIGHT_DOWN, [](auto &e) {}); // disable context menu
|
||||
|
||||
if (!icon.IsEmpty()) {
|
||||
this->drop_down_icon = ScalableBitmap(this, icon.ToStdString(), 16);
|
||||
@ -86,12 +86,6 @@ void TextInput::Create(wxWindow * parent,
|
||||
messureSize();
|
||||
}
|
||||
|
||||
void TextInput::SetCornerRadius(double radius)
|
||||
{
|
||||
this->radius = radius;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void TextInput::SetLabel(const wxString& label)
|
||||
{
|
||||
wxWindow::SetLabel(label);
|
||||
|
@ -37,9 +37,7 @@ public:
|
||||
const wxSize & size = wxDefaultSize,
|
||||
long style = 0);
|
||||
|
||||
void SetCornerRadius(double radius);
|
||||
|
||||
void SetLabel(const wxString& label);
|
||||
void SetLabel(const wxString& label) wxOVERRIDE;
|
||||
|
||||
void SetIcon(const wxBitmapBundle& icon);
|
||||
|
||||
@ -76,8 +74,7 @@ public:
|
||||
protected:
|
||||
virtual void OnEdit() {}
|
||||
|
||||
virtual void DoSetSize(
|
||||
int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
|
||||
void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO) wxOVERRIDE;
|
||||
|
||||
void DoSetToolTipText(wxString const &tip) override;
|
||||
|
||||
|
@ -13,10 +13,15 @@
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <boost/filesystem.hpp>
|
||||
|
||||
#include "Widgets/ComboBox.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
const char* WIFI_CONFIGFILE_NAME = "prusa_printer_settings.ini";
|
||||
|
||||
WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, RemovableDriveManager* removable_manager)
|
||||
// TRN: This is the dialog title.
|
||||
: DPIDialog(parent, wxID_ANY, _L("Wi-Fi Configuration File Generator"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
||||
, m_wifi_scanner(new WifiScanner())
|
||||
, out_file_path(file_path)
|
||||
@ -31,29 +36,29 @@ WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, Rem
|
||||
// TRN Wifi config dialog explanation line 1.
|
||||
wxStaticText* explain_label1 = new wxStaticText(panel, wxID_ANY, _L("Generate a file to be loaded by a Prusa printer to configure its Wi-Fi connection."));
|
||||
// TRN Wifi config dialog explanation line 2.
|
||||
wxStaticText* explain_label2 = new wxStaticText(panel, wxID_ANY, _L("Write this file on a USB flash drive. Its name will be prusa_printer_settings.ini."));
|
||||
wxStaticText* explain_label2 = new wxStaticText(panel, wxID_ANY, GUI::format_wxstr(_L("Write this file on the USB flash drive. Its name will be %1%."), WIFI_CONFIGFILE_NAME));
|
||||
// TRN Wifi config dialog explanation line 3.
|
||||
wxStaticText* explain_label3 = new wxStaticText(panel, wxID_ANY, _L("Your Prusa Printer should load this file automatically."));
|
||||
// TRN Wifi config dialog explanation line 4.
|
||||
wxStaticText* explain_label4 = new wxStaticText(panel, wxID_ANY, _L("Note: This file will contains SSID and password in plain text."));
|
||||
wxStaticText* explain_label4 = new wxStaticText(panel, wxID_ANY, _L("Note: This file will contain the SSID and password in plain text."));
|
||||
|
||||
auto* ssid_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
// TRN SSID of WiFi network.
|
||||
// TRN SSID of WiFi network. It is a standard abbreviation which should probably not change in most languages.
|
||||
wxStaticText* ssid_label = new wxStaticText(panel, wxID_ANY, GUI::format_wxstr("%1%:", _L("SSID")));
|
||||
m_ssid_combo = new wxComboBox(panel, wxID_ANY);
|
||||
m_ssid_combo = new ::ComboBox(panel, wxID_ANY);
|
||||
#if __APPLE__
|
||||
m_ssid_combo->SetToolTip(_L("On some versions of MacOS, this only loads SSID of connected network."));
|
||||
#endif // __APPLE__
|
||||
rescan_networks(false);
|
||||
// TRN Text of button to rescan visible networks in Wifi Config dialog.
|
||||
wxButton* ssid_button = new wxButton(panel, wxID_ANY, _(L("Rescan")));
|
||||
ssid_sizer->Add(m_ssid_combo, 1, wxALIGN_CENTER_VERTICAL, 10);
|
||||
ssid_sizer->Add(m_ssid_combo, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
|
||||
ssid_sizer->Add(ssid_button, 0);
|
||||
|
||||
auto* pass_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
// TRN Password of WiFi network.
|
||||
wxStaticText* password_label = new wxStaticText(panel, wxID_ANY, GUI::format_wxstr("%1%:", _L("Password")));
|
||||
m_pass_textctrl = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxDefaultSize);
|
||||
m_pass_textctrl = new ::TextInput(panel, "", "", "", wxDefaultPosition, wxDefaultSize);
|
||||
pass_sizer->Add(m_pass_textctrl, 1, wxALIGN_CENTER_VERTICAL, 10);
|
||||
#if __APPLE__
|
||||
// TRN Text of button to retrieve password from keychain in Wifi Config dialog. Only on Mac.
|
||||
@ -67,11 +72,11 @@ WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, Rem
|
||||
auto* drive_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
// TRN description of Combo Box with path to USB drive.
|
||||
wxStaticText* drive_label = new wxStaticText(panel, wxID_ANY, GUI::format_wxstr("%1%:", _L("Drive")));
|
||||
m_drive_combo = new wxComboBox(panel, wxID_ANY);
|
||||
m_drive_combo = new ::ComboBox(panel, wxID_ANY);
|
||||
rescan_drives();
|
||||
// TRN Text of button to rescan connect usb drives in Wifi Config dialog.
|
||||
wxButton* drive_button = new wxButton(panel, wxID_ANY, _(L("Rescan")));
|
||||
drive_sizer->Add(m_drive_combo, 1, wxALIGN_CENTER_VERTICAL, 10);
|
||||
drive_sizer->Add(m_drive_combo, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
|
||||
drive_sizer->Add(drive_button, 0);
|
||||
|
||||
// TRN Text of button to write config file in Wifi Config dialog.
|
||||
@ -111,6 +116,8 @@ WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, Rem
|
||||
m_ssid_combo->Bind(wxEVT_TEXT, &WifiConfigDialog::on_combo, this);
|
||||
drive_button->Bind(wxEVT_BUTTON, &WifiConfigDialog::on_rescan_drives, this);
|
||||
ssid_button->Bind(wxEVT_BUTTON, &WifiConfigDialog::on_rescan_networks, this);
|
||||
|
||||
wxGetApp().UpdateDlgDarkUI(this);
|
||||
}
|
||||
|
||||
WifiConfigDialog::~WifiConfigDialog()
|
||||
@ -208,7 +215,7 @@ void WifiConfigDialog::on_ok(wxCommandEvent& e)
|
||||
return;
|
||||
}
|
||||
|
||||
boost::filesystem::path file_path = boost::filesystem::path(selected_path) / "prusa_printer_settings.ini";
|
||||
boost::filesystem::path file_path = boost::filesystem::path(selected_path) / WIFI_CONFIGFILE_NAME;
|
||||
|
||||
bool path_on_removable_media = m_removable_manager->set_and_verify_last_save_path(file_path.string());
|
||||
if (!path_on_removable_media) {
|
||||
|
@ -10,6 +10,9 @@
|
||||
#include <wx/combobox.h>
|
||||
#include <wx/textctrl.h>
|
||||
|
||||
#include "Widgets/ComboBox.hpp"
|
||||
#include "Widgets/TextInput.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
@ -20,9 +23,9 @@ public:
|
||||
WifiConfigDialog(wxWindow* parent, std::string& file_path, RemovableDriveManager* removable_manager);
|
||||
~WifiConfigDialog();
|
||||
private:
|
||||
wxComboBox* m_ssid_combo {nullptr};
|
||||
wxTextCtrl* m_pass_textctrl {nullptr};
|
||||
wxComboBox* m_drive_combo {nullptr};
|
||||
::ComboBox* m_ssid_combo {nullptr};
|
||||
::TextInput* m_pass_textctrl {nullptr};
|
||||
::ComboBox* m_drive_combo {nullptr};
|
||||
|
||||
void on_ok(wxCommandEvent& e);
|
||||
void on_combo(wxCommandEvent& e);
|
||||
|
@ -71,11 +71,8 @@ TEST_CASE("Moments calculation for rotated axis.", "[SupportSpotsGenerator]") {
|
||||
|
||||
Integrals integrals{{polygon}};
|
||||
|
||||
std::mt19937 generator{std::random_device{}()};
|
||||
std::uniform_real_distribution<float> angle_distribution{0.f, float(2*M_PI)};
|
||||
|
||||
// Meassured counterclockwise from (1, 0)
|
||||
const float angle = angle_distribution(generator);
|
||||
const float angle = 1.432f;
|
||||
Vec2f axis{std::cos(angle), std::sin(angle)};
|
||||
|
||||
float moment_calculated_then_rotated = compute_second_moment(
|
||||
@ -93,7 +90,8 @@ TEST_CASE("Moments calculation for rotated axis.", "[SupportSpotsGenerator]") {
|
||||
Vec2f{1, 0}
|
||||
);
|
||||
|
||||
CHECK(moment_calculated_then_rotated == Approx(moment_rotated_polygon));
|
||||
// Up to 0.1% accuracy
|
||||
CHECK_THAT(moment_calculated_then_rotated, Catch::Matchers::WithinRel(moment_rotated_polygon, 0.001f));
|
||||
}
|
||||
|
||||
struct ObjectPartFixture {
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
set(SLIC3R_APP_NAME "PrusaSlicer")
|
||||
set(SLIC3R_APP_KEY "PrusaSlicer")
|
||||
set(SLIC3R_VERSION "2.7.0-alpha0")
|
||||
set(SLIC3R_VERSION "2.7.0-alpha1")
|
||||
set(SLIC3R_BUILD_ID "PrusaSlicer-${SLIC3R_VERSION}+UNKNOWN")
|
||||
set(SLIC3R_RC_VERSION "2,7,0,0")
|
||||
set(SLIC3R_RC_VERSION_DOTS "2.7.0.0")
|
||||
|