Compare commits

...

6 Commits

Author SHA1 Message Date
QIDI TECH
8c610a76ba version update 1.1.7 2024-09-29 08:54:38 +08:00
QIDI TECH
1f38488c27 fix some bug 2024-09-28 16:15:29 +08:00
QIDI TECH
f3d619b9b8 Optimize the filament list 2024-09-28 10:39:54 +08:00
QIDI TECH
7db4414838 Optimize device connectivity, and fix some bug 2024-09-28 10:39:11 +08:00
QIDI TECH
b2ca6dda6a add plus4 stl 2024-09-26 13:10:05 +08:00
QIDI TECH
ab349ad81b update readme 2024-09-25 13:26:41 +08:00
30 changed files with 1850 additions and 369 deletions

1
.gitignore vendored
View File

@@ -21,5 +21,4 @@ deps/build-linux/*
**/.idea/ **/.idea/
.pkg_cache .pkg_cache
CMakeUserPresets.json CMakeUserPresets.json
/resources/profiles
/src/slic3r/QIDI /src/slic3r/QIDI

View File

@@ -234,7 +234,8 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
endif () endif ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-reorder" ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-reorder" )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-enum-constexpr-conversion" )
# On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error. # On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error.
add_compile_options(-Werror=return-type) add_compile_options(-Werror=return-type)

115
README.md
View File

@@ -4,32 +4,123 @@
# QIDISlicer # QIDISlicer
QIDISlicer is a professional 3D printer slicing softwarewhich is perfectly compatible with all printers and 3D printing filaments of QIDI Technology. Multi-platform support, simple inerface, easy to use, complate functions, easy to learn 3D printing. QIDISlicer is a professional 3D printer slicing softwarewhich is perfectly compatible with all printers and 3D printing filaments of QIDI Technology. Multi-platform support, simple inerface, easy to use, complate functions, easy to learn 3D printing.
**Notice:QIDISlicer as a new software dedicated to QIDI's new high speed printers, please make sure your firmware version is V 4.0.0 or above.**
QIDISlicer is based on [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community. QIDISlicer is based on [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community.
Thanks to PrusaSlicer, Bambulab and OrcaSlicer for their contributions to the 3D printing community. Thanks to PrusaSlicer, Bambulab and OrcaSlicer for their contributions to the 3D printing community.
See the [QIDI's homepage](https://qidi3d.com) for more information. See the [QIDI's homepage](https://qidi3d.com) for more information.
### Firmware <details open>
<summary>Content Navigation</summary>
<ol>
<li>
<a href="#function-introduction">Function Introduction</a>
</li>
<li>
<a href="#wiki">Wiki</a>
</li>
<li>
<a href="#Supporting-QIDI-Link-App">Supporting QIDI Link App</a>
</li>
<li>
<a href="#report-issues-and-make-suggestions">Report Issues and Make Suggestions</a>
<ul>
<li><a href="#some-formatting-requirements">Some Formatting Requirements</a></li>
</ul>
</li>
<li>
<a href="#license">License</a>
</li>
</ol>
</details>
You can find the printer's firmware here: ----
[Q1 Pro](https://github.com/QIDITECH/QIDI_Q1_Pro) ## Function Introduction
[X-MAX 3](https://github.com/QIDITECH/QIDI_MAX3) <p align="center">
<img src="/readmeRes/UI.png" alt="UI">
</p>
[X-Plus 3](https://github.com/QIDITECH/QIDI_PLUS3) ### Key features are:
[X-smart 3](https://github.com/QIDITECH/QIDI_SMART3) * **Slicer:** Fast and stable 3D model slicer
* **Printer:** Perfect compatibility with all high-speed 3D printers of QIDI TECH
* **Filament:** Perfect compatibility with all filaments of QIDI TECH and some general filaments
* **LAN:** The printer can be directly connected through IP, convenient, safe and stable
* **Internet:** Remote connection, start printing anytime, anywhere
### Report Issues and Make Suggestions ### Other major features are:
Please send your question in the form of video or pictures to us through the [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support), we will reply to your information within 12 hours. * **Model:** A variety of model operations, move, scale, rotate, crop, color, repair, combine, split, and more
* **Parameter:** Rich parameter Settings, fine adjustment for a variety of complex models and application scenarios
* **Calibration:** Multiple calibration functions to adjust the best parameters according to the actual situation
Please try to contact us through [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support) and report problems or suggestions. On github, we cannot obtain your order information, operation records and other private intelligence, nor can we generate after-sales orders, send repair files, etc. Thank you for your understanding and cooperation. ----
### License ## wiki
The wiki below aims to provide a detailed explanation of the QIDISlicer settings, how to get the most out of them as
well as how to calibrate and setup your printer.
The wiki is work in progress so bear with us while we get it up and running!
**[Access the wiki here](https://wiki.qidi3d.com/en/software/QIDISlicier)**
----
## Supporting QIDI Link App
**[Access QIDI Link App Guide Here](https://wiki.qidi3d.com/en/app)**
The supporting QIDI Link App supports IOS and Android platforms. In the app, you can scan the code to connect to the printer, remotely monitor the printer's printing progress, control the printer's printing parameters, and perform operations such as feeding and returning materials.
<p align="center">
<img src="/readmeRes/qidilink.png" alt="Add filament option ——Seal">
</p>
----
## Report Issues and Make Suggestions
Please send your question in the form of video or pictures to us through
the [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support), we will reply to your
information within 12 hours.
Please try to contact us through [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support) and
report problems or suggestions. On github, we cannot obtain your order information, operation records and other private
intelligence, nor can we generate after-sales orders, send repair files, etc. Thank you for your understanding and
cooperation.
### Some formatting requirements
#### Issue Title:
Briefly describe the issue (e.g., `could not open file`)
#### Description:
Provide a detailed description of the issue.This will help our engineers quickly locate the problem and assist you in
resolving it
- **Issue Description**:
- A clear explanation of the problem.
- Compare the expected behavior with the actual behavior.
- **Steps to Reproduce**:
1. Step one
2. Step two
3. Step three
- Specific steps to reproduce the issue. Include a precise sequence of actions if possible.
- **Additional Information**:
- **Screenshots/Images**: Attach relevant screenshots or images that help in understanding the issue. Please add or
link to images here.
- **Environment Information**:
- Operating System Version
- Browser/Application Version
- Other relevant environment details
## License
QIDISlicer is licensed under the _GNU Affero General Public License, version 3_. QIDISlicer is based on PrusaSlicer by PrusaResearch. QIDISlicer is licensed under the _GNU Affero General Public License, version 3_. QIDISlicer is based on PrusaSlicer by PrusaResearch.

BIN
readmeRes/UI.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
readmeRes/qidilink.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 KiB

View File

@@ -1,3 +1,5 @@
min_slic3r_version = 1.1.7
1.1.7 Optimize parameters
min_slic3r_version = 1.1.6 min_slic3r_version = 1.1.6
1.1.6 Optimize parameters 1.1.6 Optimize parameters
min_slic3r_version = 1.1.5 min_slic3r_version = 1.1.5

View File

@@ -5,7 +5,7 @@
name = QIDI Technology name = QIDI Technology
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the QIDISlicer configuration to be downgraded. # This means, the server may force the QIDISlicer configuration to be downgraded.
config_version = 1.1.6 config_version = 1.1.7
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://github.com/QIDITECH/QIDISlicer/releases/download/QIDITechnology/ config_update_url = https://github.com/QIDITECH/QIDISlicer/releases/download/QIDITechnology/
changelog_url = https://qidi3d.com/pages/software-firmware changelog_url = https://qidi3d.com/pages/software-firmware
@@ -21,7 +21,7 @@ technology = FFF
family = X 4 family = X 4
bed_model = X-Plus 4_bed.stl bed_model = X-Plus 4_bed.stl
bed_texture = X-Plus 4.svg bed_texture = X-Plus 4.svg
default_materials = QIDI ABS Odorless @X-Plus 4 0.4 nozzle; QIDI ABS Rapido @X-Plus 4 0.4 nozzle; QIDI PLA Rapido @X-Plus 4 0.4 nozzle; QIDI PLA Rapido Matte @X-Plus 4 0.4 nozzle; QIDI PLA-CF @X-Plus 4 0.4 nozzle; Generic ABS @X-Plus 4 0.4 nozzle; Generic PLA @X-Plus 4 0.4 nozzle default_materials = QIDI ABS Odorless @X-Plus 4 0.4 nozzle; QIDI ABS Rapido @X-Plus 4 0.4 nozzle; QIDI PLA Rapido @X-Plus 4 0.4 nozzle; QIDI PLA Rapido Matte @X-Plus 4 0.4 nozzle; QIDI PLA-CF @X-Plus 4 0.4 nozzle; Generic ABS @X-Plus 4 0.4 nozzle; Generic PLA @X-Plus 4 0.4 nozzle; QIDI PLA Rapido Silk @X-Plus 4 0.4 nozzle; Generic PLA Silk @X-Plus 4 0.4 nozzle
[printer_model:Q1 Pro] [printer_model:Q1 Pro]
name = Q1 Pro name = Q1 Pro
@@ -30,7 +30,7 @@ technology = FFF
family = Q family = Q
bed_model = Q1 Pro_bed.stl bed_model = Q1 Pro_bed.stl
bed_texture = Q1 Pro.svg bed_texture = Q1 Pro.svg
default_materials = QIDI ABS Odorless @Q1 Pro 0.4 nozzle; QIDI ABS Rapido @Q1 Pro 0.4 nozzle; QIDI PLA Rapido @Q1 Pro 0.4 nozzle; QIDI PLA Rapido Matte @Q1 Pro 0.4 nozzle; QIDI PLA-CF @Q1 Pro 0.4 nozzle; Generic ABS @Q1 Pro 0.4 nozzle; Generic PLA @Q1 Pro 0.4 nozzle default_materials = QIDI ABS Odorless @Q1 Pro 0.4 nozzle; QIDI ABS Rapido @Q1 Pro 0.4 nozzle; QIDI PLA Rapido @Q1 Pro 0.4 nozzle; QIDI PLA Rapido Matte @Q1 Pro 0.4 nozzle; QIDI PLA-CF @Q1 Pro 0.4 nozzle; Generic ABS @Q1 Pro 0.4 nozzle; Generic PLA @Q1 Pro 0.4 nozzle; QIDI PLA Rapido Silk @Q1 Pro 0.4 nozzle; Generic PLA Silk @Q1 Pro 0.4 nozzle
[printer_model:X-MAX 3] [printer_model:X-MAX 3]
name = X-MAX 3 name = X-MAX 3
@@ -39,7 +39,7 @@ technology = FFF
family = X 3 family = X 3
bed_model = X-MAX 3_bed.stl bed_model = X-MAX 3_bed.stl
bed_texture = X-MAX 3.svg bed_texture = X-MAX 3.svg
default_materials = QIDI ABS Odorless @X-MAX 3 0.4 nozzle; QIDI ABS Rapido @X-MAX 3 0.4 nozzle; QIDI PLA Rapido @X-MAX 3 0.4 nozzle; QIDI PLA Rapido Matte @X-MAX 3 0.4 nozzle; QIDI PLA-CF @X-MAX 3 0.4 nozzle; Generic ABS @X-MAX 3 0.4 nozzle; Generic PLA @X-MAX 3 0.4 nozzle default_materials = QIDI ABS Odorless @X-MAX 3 0.4 nozzle; QIDI ABS Rapido @X-MAX 3 0.4 nozzle; QIDI PLA Rapido @X-MAX 3 0.4 nozzle; QIDI PLA Rapido Matte @X-MAX 3 0.4 nozzle; QIDI PLA-CF @X-MAX 3 0.4 nozzle; Generic ABS @X-MAX 3 0.4 nozzle; Generic PLA @X-MAX 3 0.4 nozzle; QIDI PLA Rapido Silk @X-MAX 3 0.4 nozzle; Generic PLA Silk @X-MAX 3 0.4 nozzle
[printer_model:X-Plus 3] [printer_model:X-Plus 3]
name = X-Plus 3 name = X-Plus 3
@@ -48,7 +48,7 @@ technology = FFF
family = X 3 family = X 3
bed_model = X-Plus 3_bed.stl bed_model = X-Plus 3_bed.stl
bed_texture = X-Plus 3.svg bed_texture = X-Plus 3.svg
default_materials = QIDI ABS Odorless @X-Plus 3 0.4 nozzle; QIDI ABS Rapido @X-Plus 3 0.4 nozzle; QIDI PLA Rapido @X-Plus 3 0.4 nozzle; QIDI PLA Rapido Matte @X-Plus 3 0.4 nozzle; QIDI PLA-CF @X-Plus 3 0.4 nozzle; Generic ABS @X-Plus 3 0.4 nozzle; Generic PLA @X-Plus 3 0.4 nozzle default_materials = QIDI ABS Odorless @X-Plus 3 0.4 nozzle; QIDI ABS Rapido @X-Plus 3 0.4 nozzle; QIDI PLA Rapido @X-Plus 3 0.4 nozzle; QIDI PLA Rapido Matte @X-Plus 3 0.4 nozzle; QIDI PLA-CF @X-Plus 3 0.4 nozzle; Generic ABS @X-Plus 3 0.4 nozzle; Generic PLA @X-Plus 3 0.4 nozzle; QIDI PLA Rapido Silk @X-Plus 3 0.4 nozzle; Generic PLA Silk @X-Plus 3 0.4 nozzle
[printer_model:X-smart 3] [printer_model:X-smart 3]
name = X-smart 3 name = X-smart 3
@@ -57,7 +57,7 @@ technology = FFF
family = X 3 family = X 3
bed_model = X-smart 3_bed.stl bed_model = X-smart 3_bed.stl
bed_texture = X-smart 3.svg bed_texture = X-smart 3.svg
default_materials = QIDI ABS Odorless @X-smart 3 0.4 nozzle;QIDI ABS Rapido @X-smart 3 0.4 nozzle; QIDI PLA Rapido @X-smart 3 0.4 nozzle; QIDI PLA Rapido Matte @X-smart 3 0.4 nozzle; QIDI PLA-CF @X-smart 3 0.4 nozzle; Generic ABS @X-smart 3 0.4 nozzle; Generic PLA @X-smart 3 0.4 nozzle default_materials = QIDI ABS Odorless @X-smart 3 0.4 nozzle;QIDI ABS Rapido @X-smart 3 0.4 nozzle; QIDI PLA Rapido @X-smart 3 0.4 nozzle; QIDI PLA Rapido Matte @X-smart 3 0.4 nozzle; QIDI PLA-CF @X-smart 3 0.4 nozzle; Generic ABS @X-smart 3 0.4 nozzle; Generic PLA @X-smart 3 0.4 nozzle; QIDI PLA Rapido Silk @X-smart 3 0.4 nozzle; Generic PLA Silk @X-smart 3 0.4 nozzle
# All presets starting with asterisk, for example *common*, are intermediate and they will # All presets starting with asterisk, for example *common*, are intermediate and they will
# not make it into the user interface. # not make it into the user interface.
@@ -719,7 +719,7 @@ compatible_prints_condition =
cooling = 1 cooling = 1
disable_fan_first_layers = 1 disable_fan_first_layers = 1
disable_rapid_cooling_fan_first_layers = 3 disable_rapid_cooling_fan_first_layers = 3
dont_slow_down_outer_wall = 1 dont_slow_down_outer_wall = 0
enable_advance_pressure = 1 enable_advance_pressure = 1
enable_auxiliary_fan = 100 enable_auxiliary_fan = 100
enable_auxiliary_fan_unseal = 0 enable_auxiliary_fan_unseal = 0
@@ -850,7 +850,7 @@ enable_dynamic_fan_speeds = 1
enable_volume_fan = 0 enable_volume_fan = 0
extrusion_multiplier = 0.95 extrusion_multiplier = 0.95
filament_colour = #FFC800 filament_colour = #FFC800
filament_density = 1.05 filament_density = 1.06
filament_max_volumetric_speed = 22 filament_max_volumetric_speed = 22
filament_type = ABS filament_type = ABS
first_layer_bed_temperature = 90 first_layer_bed_temperature = 90
@@ -1070,20 +1070,24 @@ filament_max_volumetric_speed = 21
[filament:*QIDI PLA Rapido Metal*] [filament:*QIDI PLA Rapido Metal*]
inherits = *common* inherits = *common*
filament_density = 1.20
[filament:*QIDI PLA Rapido Silk*] [filament:*QIDI PLA Rapido Silk*]
inherits = *common* inherits = *common*
bed_temperature = 60 bed_temperature = 55
enable_auxiliary_fan = 0
filament_colour = #80FFFF filament_colour = #80FFFF
filament_density = 1.20 filament_density = 1.24
filament_max_volumetric_speed = 7.5 filament_max_volumetric_speed = 7.5
filament_retract_length = 0.5 filament_retract_length = 0.5
first_layer_bed_temperature = 60 first_layer_bed_temperature = 55
first_layer_temperature = 220 first_layer_temperature = 230
temperature = 230
[filament:*QIDI PLA-CF*] [filament:*QIDI PLA-CF*]
inherits = *common* inherits = *common*
advance_pressure = 0.02 advance_pressure = 0.02
enable_auxiliary_fan = 0
extrusion_multiplier = 0.96 extrusion_multiplier = 0.96
filament_colour = #27408B filament_colour = #27408B
filament_density = 1.25 filament_density = 1.25
@@ -1102,7 +1106,7 @@ enable_auxiliary_fan = 0
extrusion_multiplier = 0.97 extrusion_multiplier = 0.97
fan_below_layer_time = 5 fan_below_layer_time = 5
filament_colour = #4F4F4F filament_colour = #4F4F4F
filament_density = 1.26 filament_density = 1.3
filament_max_volumetric_speed = 6 filament_max_volumetric_speed = 6
filament_type = PPS-CF filament_type = PPS-CF
first_layer_bed_temperature = 110 first_layer_bed_temperature = 110
@@ -1119,7 +1123,7 @@ advance_pressure = 0.1
enable_auxiliary_fan = 0 enable_auxiliary_fan = 0
extrusion_multiplier = 1 extrusion_multiplier = 1
filament_colour = #8000FF filament_colour = #8000FF
filament_density = 1.21 filament_density = 1.15
filament_max_volumetric_speed = 4 filament_max_volumetric_speed = 4
filament_type = TPU filament_type = TPU
filament_vendor = Generic filament_vendor = Generic
@@ -1194,6 +1198,7 @@ temperature = 250
[filament:*Generic PLA*] [filament:*Generic PLA*]
inherits = *common* inherits = *common*
enable_auxiliary_fan = 0
filament_colour = #0000FF filament_colour = #0000FF
filament_density = 1.20 filament_density = 1.20
filament_max_volumetric_speed = 14 filament_max_volumetric_speed = 14
@@ -1203,6 +1208,7 @@ filament_vendor = Generic
inherits = *common* inherits = *common*
advance_pressure = 0.024 advance_pressure = 0.024
bed_temperature = 55 bed_temperature = 55
enable_auxiliary_fan = 0
filament_colour = #80FFFF filament_colour = #80FFFF
filament_density = 1.20 filament_density = 1.20
filament_max_volumetric_speed = 7.5 filament_max_volumetric_speed = 7.5
@@ -1394,8 +1400,8 @@ compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]
[filament:QIDI PLA Rapido Silk @X-Plus 4 0.4 nozzle] [filament:QIDI PLA Rapido Silk @X-Plus 4 0.4 nozzle]
inherits = *QIDI PLA Rapido Silk* inherits = *QIDI PLA Rapido Silk*
advance_pressure = 0.034 advance_pressure = 0.034
first_layer_temperature = 210 first_layer_temperature = 220
temperature = 210 temperature = 220
compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]==0.4
[filament:QIDI PLA-CF @X-Plus 4 0.4 nozzle] [filament:QIDI PLA-CF @X-Plus 4 0.4 nozzle]
@@ -1541,8 +1547,8 @@ compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]
[filament:QIDI PLA Rapido Silk @X-Plus 4 0.6 nozzle] [filament:QIDI PLA Rapido Silk @X-Plus 4 0.6 nozzle]
inherits = *QIDI PLA Rapido Silk* inherits = *QIDI PLA Rapido Silk*
advance_pressure = 0.021 advance_pressure = 0.021
first_layer_temperature = 210 first_layer_temperature = 220
temperature = 210 temperature = 220
compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]==0.6 compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]==0.6
[filament:QIDI PLA-CF @X-Plus 4 0.6 nozzle] [filament:QIDI PLA-CF @X-Plus 4 0.6 nozzle]
@@ -1913,8 +1919,8 @@ compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==
[filament:QIDI PLA Rapido Silk @Q1 Pro 0.4 nozzle] [filament:QIDI PLA Rapido Silk @Q1 Pro 0.4 nozzle]
inherits = *QIDI PLA Rapido Silk* inherits = *QIDI PLA Rapido Silk*
advance_pressure = 0.034 advance_pressure = 0.034
first_layer_temperature = 210 first_layer_temperature = 220
temperature = 210 temperature = 220
compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==0.4 compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==0.4
[filament:QIDI PLA-CF @Q1 Pro 0.4 nozzle] [filament:QIDI PLA-CF @Q1 Pro 0.4 nozzle]
@@ -2061,8 +2067,8 @@ compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==
[filament:QIDI PLA Rapido Silk @Q1 Pro 0.6 nozzle] [filament:QIDI PLA Rapido Silk @Q1 Pro 0.6 nozzle]
inherits = *QIDI PLA Rapido Silk* inherits = *QIDI PLA Rapido Silk*
advance_pressure = 0.024 advance_pressure = 0.024
first_layer_temperature = 210 first_layer_temperature = 220
temperature = 210 temperature = 220
compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==0.6 compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==0.6
[filament:QIDI PLA-CF @Q1 Pro 0.6 nozzle] [filament:QIDI PLA-CF @Q1 Pro 0.6 nozzle]
@@ -3597,7 +3603,7 @@ inherits = *common*
printer_model = X-Plus 4 printer_model = X-Plus 4
autoemit_temperature_commands = 0 autoemit_temperature_commands = 0
auxiliary_fan = 1 auxiliary_fan = 1
bed_exclude_area = 0x0,0x0,0x300,0x305,50x305,50x300,0x300,0x0,0x0,293x0,293x10,305x10,305x0,293x0,0x0 bed_exclude_area = 0x0,0x0,0x302,0x305,35x302,35x302,0x302,0x0,0x0,293x0,293x20,305x20,305x0,293x0,0x0
bed_shape = 0x0,305x0,305x305,0x305 bed_shape = 0x0,305x0,305x305,0x305
before_layer_gcode = ;TIMELAPSE_TAKE_FRAME before_layer_gcode = ;TIMELAPSE_TAKE_FRAME
chamber_temperature = 1 chamber_temperature = 1
@@ -3605,7 +3611,7 @@ layer_gcode = G92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}
machine_max_feedrate_z = 20 machine_max_feedrate_z = 20
max_print_height = 280 max_print_height = 280
retract_lift_below = 279 retract_lift_below = 279
start_gcode = PRINT_START BED=[first_layer_bed_temperature] HOTEND=[first_layer_temperature] CHAMBER=[volume_temperature]\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nM83\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature]\nM141 S[volume_temperature]\nG4 P3000\n{position[0] = max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0)}\n{position[1] = max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85), 0)}\n{position[2] = 0.5 * first_layer_height * nozzle_diameter[0]}\n{if position[0] <= 50 and position[1] >= 215} {position[1] = 215} {endif}\n{if position[0] >= 208 and position[1] <= 10} {position[0] = 208} {endif}\nG0 X{position[0]} Y{position[1]} Z5 F6000\nG0 Z[first_layer_height] F600\nG1 E3 F1800\nG1 X{position[0] + 85} E{85 * position[2]} F3000\nG1 Y{position[1] + 2} E{2 * position[2]}\nG1 X{position[0]} E{85 * position[2]}\nG1 Y{position[1] + 85} E{83 * position[2]}\nG1 X{position[0] + 2} E{2 * position[2]}\nG1 Y{position[1] + 3} E{82 * position[2]}\nG1 X{position[0] + 3} Z0\nG1 X{position[0] + 6}\nG1 Z1 F600\nSET_PRINT_STATS_INFO CURRENT_LAYER=1\n start_gcode = PRINT_START BED=[first_layer_bed_temperature] HOTEND=[first_layer_temperature] CHAMBER=[volume_temperature]\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nM83\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature]\nM141 S[volume_temperature]\nG4 P3000\n{position[0] = max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0)}\n{position[1] = max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85), 0)}\n{position[2] = 0.5 * first_layer_height * nozzle_diameter[0]}\n{if position[0] <= 35 and position[1] >= 217} {position[1] = 217} {endif}\n{if position[0] >= 208 and position[1] <= 20} {position[0] = 208} {endif}\nG0 X{position[0]} Y{position[1]} Z5 F6000\nG0 Z[first_layer_height] F600\nG1 E3 F1800\nG1 X{position[0] + 85} E{85 * position[2]} F3000\nG1 Y{position[1] + 2} E{2 * position[2]}\nG1 X{position[0]} E{85 * position[2]}\nG1 Y{position[1] + 85} E{83 * position[2]}\nG1 X{position[0] + 2} E{2 * position[2]}\nG1 Y{position[1] + 3} E{82 * position[2]}\nG1 X{position[0] + 3} Z0\nG1 X{position[0] + 6}\nG1 Z1 F600\nSET_PRINT_STATS_INFO CURRENT_LAYER=1\n
thumbnails = 272x272/PNG, 96x96/PNG thumbnails = 272x272/PNG, 96x96/PNG
wipe_device = 1 wipe_device = 1

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1_x5F_复制" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 864.6 864.6" enable-background="new 0 0 864.6 864.6" xml:space="preserve">
<rect x="0" y="843.1" fill="#FFFFFF" width="830.6" height="0.4"/>
<rect x="0.4" y="814.8" fill="#FFFFFF" width="829.5" height="0.4"/>
<rect x="0" y="785.9" fill="#FFFFFF" width="863.8" height="1.4"/>
<rect x="0" y="758.1" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="729.7" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="701.4" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="673" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="644.2" fill="#FFFFFF" width="863.8" height="1.4"/>
<rect x="0" y="616.3" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="588" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="559.6" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="531.3" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="502.4" fill="#FFFFFF" width="863.8" height="1.4"/>
<rect x="0.1" y="474.6" fill="#FFFFFF" width="863.7" height="0.4"/>
<rect x="0" y="446.3" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0.1" y="417.9" fill="#FFFFFF" width="863.7" height="0.4"/>
<rect x="0" y="389.6" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="360.7" fill="#FFFFFF" width="863.8" height="1.4"/>
<rect x="0" y="332.9" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="304.5" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="276.2" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="247.8" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="219" fill="#FFFFFF" width="863.8" height="1.4"/>
<rect x="0" y="191.1" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="162.8" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="134.4" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="106.1" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="77.3" fill="#FFFFFF" width="863.8" height="1.4"/>
<rect y="863.2" fill="#FFFFFF" width="830.6" height="1.4"/>
<rect x="100.6" fill="#FFFFFF" width="764" height="1.4"/>
<rect y="8.5" fill="#FFFFFF" width="100.6" height="1.4"/>
<rect x="829.2" y="806.5" fill="#FFFFFF" width="35.4" height="1.4"/>
<rect x="829.2" y="807.9" fill="#FFFFFF" width="1.4" height="56.7"/>
<rect x="99.2" y="0" fill="#FFFFFF" width="1.4" height="9.2"/>
<rect x="0" y="8.9" fill="#FFFFFF" width="1.4" height="855.7"/>
<rect x="863.2" fill="#FFFFFF" width="1.4" height="807.2"/>
<rect x="0" y="49.4" fill="#FFFFFF" width="863.8" height="0.4"/>
<rect x="0" y="21.1" fill="#FFFFFF" width="864.6" height="0.4"/>
<rect x="21.1" y="9.6" fill="#FFFFFF" width="0.4" height="855"/>
<rect x="49.4" y="9.6" fill="#FFFFFF" width="0.4" height="855"/>
<rect x="77.3" y="9.6" fill="#FFFFFF" width="1.4" height="855"/>
<rect x="106.1" y="0.7" fill="#FFFFFF" width="0.4" height="863.9"/>
<rect x="134.4" y="0.7" fill="#FFFFFF" width="0.4" height="863.9"/>
<rect x="162.8" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="191.1" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="219" y="0" fill="#FFFFFF" width="1.4" height="864.6"/>
<rect x="247.8" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="276.2" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="304.5" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="332.9" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="360.7" y="0" fill="#FFFFFF" width="1.4" height="864.6"/>
<rect x="389.6" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="417.9" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="446.3" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="474.6" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="502.4" y="0" fill="#FFFFFF" width="1.4" height="864.6"/>
<rect x="531.3" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="559.6" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="588" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="616.3" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="644.2" y="0" fill="#FFFFFF" width="1.4" height="864.6"/>
<rect x="673" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="701.4" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="729.7" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="758.1" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="785.9" y="0" fill="#FFFFFF" width="1.4" height="864.6"/>
<rect x="814.8" y="0" fill="#FFFFFF" width="0.4" height="864.6"/>
<rect x="843.1" y="0" fill="#FFFFFF" width="0.4" height="807.2"/>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -334,7 +334,7 @@
<div class="IntroduceBoard" board="X-Plus 4"> <div class="IntroduceBoard" board="X-Plus 4">
<div class="AutozoomImage"><img src="img/X-Plus4Poster.png"/></div> <div class="AutozoomImage"><img src="img/X-Plus4Poster.png"/></div>
<div class="IntroduceTextBold trans" tid="l0"></div> <div class="IntroduceTextBold trans" tid="l0"></div>
<div class="IntroduceText">https://qidi3d.com/products/qidi-x-plus-4</div> <div class="IntroduceText">https://qidi3d.com/products/plus4-3d-printer</div>
</div> </div>
<div class="IntroduceBoard" board="Q1 Pro"> <div class="IntroduceBoard" board="Q1 Pro">
@@ -363,256 +363,17 @@
<div class="IntroduceBoard" board="Filaments"> <div class="IntroduceBoard" board="Filaments">
<div class="FilamentsTable"> <div class="FilamentsTable">
<table cellspacing="0"> <iframe id="filamentTableIframe" class="table-container" style="width: 100%; height: 1000px; border: none;"></iframe>
<thead>
<tr>
<th>Filament</th>
<th>Drying box</th>
<th>Anneal</th>
<th>Water resistance</th>
<th>Corrosion resistance</th>
<th>Creep resistance</th>
<th>HDT 0.45</th>
<th>HDT 1.80</th>
<th>Tensile strength(MPa)</th>
<th>Tensile modulus(MPa)</th>
<th>Elongation at break(%)</th>
<th>Flexural strength(MPa)</th>
<th>Flexural modulus(MPa)</th>
<th>Notch impact strength(KJ/㎡)</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in 1" :key="index">
<td>ABS Odorless</td>
<td>≤30</td>
<td>/</td>
<td>++</td>
<td>+</td>
<td>+++</td>
<td>92℃</td>
<td>86℃</td>
<td>41.65 ± 0.27</td>
<td>2351.00 ± 92.00</td>
<td>7.95 ± 4.53</td>
<td>67.81 ± 0.54</td>
<td>2400.00 ± 79.69</td>
<td>20.03 ± 1.32</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>ABS Rapido</td>
<td>≤30</td>
<td>/</td>
<td>++</td>
<td>+</td>
<td>+++</td>
<td>85℃</td>
<td>/</td>
<td>41 ± 1</td>
<td>3850 ± 150</td>
<td>11 ± 1</td>
<td>77.5 ± 2.5</td>
<td>77.5 ± 2.5</td>
<td>20 ± 2</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>ABS-GF25</td>
<td>≤30</td>
<td>/</td>
<td>+++</td>
<td>+</td>
<td>+++</td>
<td>97℃</td>
<td>93℃</td>
<td>48.48 ± 0.61</td>
<td>3752.13 ± 68.39</td>
<td>2.10 ± 0.10</td>
<td>78.80 ± 1.26</td>
<td>3531.71 ± 75.79</td>
<td>8.91 ± 0.63</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>ASA</td>
<td>≤30</td>
<td>/</td>
<td>+++</td>
<td>+</td>
<td>+++</td>
<td>94℃</td>
<td>86℃</td>
<td>38.50 ± 1.60</td>
<td>2317.00 ± 246.00</td>
<td>5.20 ± 1.40</td>
<td>64.49 ± 1.30</td>
<td>2399.00 ± 147.00</td>
<td>12.90 ± 0.90</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>ASA-Aero</td>
<td>≤30</td>
<td>/</td>
<td>++</td>
<td>+</td>
<td>++</td>
<td>70℃</td>
<td>55℃</td>
<td>8.25 ± 0.15</td>
<td>593.99 ± 24.34</td>
<td>11.52 ± 0.58</td>
<td>14.31 ± 1.66</td>
<td>457.94 ± 20.84</td>
<td>2.29 ± 0.13</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PA12-CF</td>
<td>≤15</td>
<td>80-100℃</td>
<td>+</td>
<td>++</td>
<td>+</td>
<td>149.6℃</td>
<td>112.4℃</td>
<td>87.49 ± 2.81</td>
<td>5438.40 ± 282.82</td>
<td>2.59 ± 0.19</td>
<td>133.17 ± 4.66</td>
<td>4667.43 ± 339.80</td>
<td>6.11 ± 1.45</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PAHT-CF</td>
<td>≤15</td>
<td>80-100℃</td>
<td>++</td>
<td>+++</td>
<td>+++</td>
<td>192.3℃</td>
<td>121.7℃</td>
<td>104.90 ± 1.99</td>
<td>8383.26 ± 419.53</td>
<td>1.60 ± 0.07</td>
<td>147.70 ± 4.09</td>
<td>5969.35 ± 145.28</td>
<td>6.17 ± 0.2</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PC/ABS-FR</td>
<td>≤15</td>
<td>/</td>
<td>+++</td>
<td>+</td>
<td>+++</td>
<td>88℃</td>
<td>83℃</td>
<td>52.51 ± 0.28</td>
<td>2588.73 ± 64.81</td>
<td>5.55 ± 0.99</td>
<td>85.95 ± 0.83</td>
<td>2504.55 ± 22.88</td>
<td>8.39 ± 0.46</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PET-CF</td>
<td>≤15</td>
<td>80-100℃</td>
<td>+++</td>
<td>+++</td>
<td>+++</td>
<td>148.8℃</td>
<td>112.1℃</td>
<td>87.41 ± 3.57</td>
<td>6025.53 ± 355.46</td>
<td>1.99 ±0.18</td>
<td>122.69 ± 5.19</td>
<td>5313.21 ± 197.89</td>
<td>5.57 ± 0.58</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PETG-Tough</td>
<td>≤20</td>
<td>/</td>
<td>+++</td>
<td>++</td>
<td>+++</td>
<td>78℃</td>
<td>73℃</td>
<td>40.3±0.6</td>
<td>1780±80</td>
<td>4.0±0.2</td>
<td>62.8±0.4</td>
<td>1919±54</td>
<td>13.9±2.3</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PLA Rapido</td>
<td>≤30</td>
<td>/</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>57℃</td>
<td>/</td>
<td>39 ± 3</td>
<td>4650 ± 150</td>
<td>12.5 ± 2.5</td>
<td>72.5 ± 2.5</td>
<td>2850 ± 150</td>
<td>6 ± 2</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PLA Rapido Matte</td>
<td>≤30</td>
<td>/</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>58℃</td>
<td>/</td>
<td>39 ± 3</td>
<td>2400 ± 200</td>
<td>3 ± 1</td>
<td>77.5 ± 2.5</td>
<td>2200 ± 200</td>
<td>7.5 ± 1.5</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>PLA-CF</td>
<td>≤30</td>
<td>/</td>
<td>+</td>
<td>+</td>
<td>++</td>
<td>55.2℃</td>
<td>52.6℃</td>
<td>54.92 ± 0.22</td>
<td>4020.55 ± 99.11</td>
<td>4.90 ± 0.97</td>
<td>91.57 ± 0.31</td>
<td>4197.66 ± 279.96</td>
<td>6.65 ± 0.38</td>
</tr>
<tr v-for="(item, index) in 1" :key="index">
<td>UltraPA</td>
<td>≤15</td>
<td>/</td>
<td>++</td>
<td>++</td>
<td>++</td>
<td>77.8℃</td>
<td>73.1℃</td>
<td>86.15 ± 0.56</td>
<td>3609.22 ± 153.31</td>
<td>11.68 ± 3.36</td>
<td>121.47 ± 3.14</td>
<td>3314.03 ±181.88</td>
<td>5.78 ± 0.30</td>
</tr>
</tbody>
</table>
</div> </div>
<div class="IntroduceTextBold trans" tid="l0"></div> <div class="IntroduceTextBold trans" tid="l0"></div>
<div class="IntroduceText">https://qidi3d.com/collections/filaments</div> <div class="IntroduceText">https://qidi3d.com/collections/filaments</div>
</div> </div>
<script>
const urlParams = new URLSearchParams(window.location.search);
const lang = urlParams.get('lang') || 'en';
var iframe = document.getElementById('filamentTableIframe');
iframe.src = 'filament_table.html?lang=' + lang;
</script>
<div class="IssueBoard" board="IssueReport"> <div class="IssueBoard" board="IssueReport">
<div class="IntroduceTitle trans" tid="t6"></div> <div class="IntroduceTitle trans" tid="t6"></div>

View File

@@ -5111,14 +5111,16 @@ void Plater::priv::show_action_buttons(const bool ready_to_slice_) const
DynamicPrintConfig* selected_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config(); DynamicPrintConfig* selected_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config();
const auto print_host_opt = selected_printer_config ? selected_printer_config->option<ConfigOptionString>("print_host") : nullptr; const auto print_host_opt = selected_printer_config ? selected_printer_config->option<ConfigOptionString>("print_host") : nullptr;
const bool send_gcode_shown = print_host_opt != nullptr && !print_host_opt->value.empty(); const bool send_gcode_shown = print_host_opt != nullptr && !print_host_opt->value.empty();
auto m_devices = wxGetApp().get_devices();
const bool link_has_machine = m_devices.size() > 0;
// when a background processing is ON, export_btn and/or send_btn are showing // when a background processing is ON, export_btn and/or send_btn are showing
if (get_config_bool("background_processing")) if (get_config_bool("background_processing"))
{ {
RemovableDriveManager::RemovableDrivesStatus removable_media_status = wxGetApp().removable_drive_manager()->status(); RemovableDriveManager::RemovableDrivesStatus removable_media_status = wxGetApp().removable_drive_manager()->status();
if (sidebar->show_reslice(false) | if (sidebar->show_reslice(false) |
sidebar->show_export(true) | sidebar->show_export(true) | sidebar->show_send(send_gcode_shown | link_has_machine) |
sidebar->show_send(send_gcode_shown) |
sidebar->show_export_removable(removable_media_status.has_removable_drives)) sidebar->show_export_removable(removable_media_status.has_removable_drives))
// sidebar->show_eject(removable_media_status.has_eject)) // sidebar->show_eject(removable_media_status.has_eject))
sidebar->Layout(); sidebar->Layout();
@@ -5130,7 +5132,7 @@ void Plater::priv::show_action_buttons(const bool ready_to_slice_) const
removable_media_status = wxGetApp().removable_drive_manager()->status(); removable_media_status = wxGetApp().removable_drive_manager()->status();
if (sidebar->show_reslice(ready_to_slice) | if (sidebar->show_reslice(ready_to_slice) |
sidebar->show_export(!ready_to_slice) | sidebar->show_export(!ready_to_slice) |
sidebar->show_send(send_gcode_shown && !ready_to_slice) | sidebar->show_send((send_gcode_shown | link_has_machine) && !ready_to_slice) |
sidebar->show_export_removable(!ready_to_slice && removable_media_status.has_removable_drives)) sidebar->show_export_removable(!ready_to_slice && removable_media_status.has_removable_drives))
// sidebar->show_eject(!ready_to_slice && removable_media_status.has_eject)) // sidebar->show_eject(!ready_to_slice && removable_media_status.has_eject))
sidebar->Layout(); sidebar->Layout();
@@ -8011,11 +8013,10 @@ void Plater::send_gcode()
{ {
// if physical_printer is selected, send gcode for this printer // if physical_printer is selected, send gcode for this printer
DynamicPrintConfig* physical_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config(); DynamicPrintConfig* physical_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config();
if (! physical_printer_config || p->model.objects.empty()) auto m_devices = wxGetApp().get_devices();
return; const bool link_has_machine = m_devices.size() > 0;
PrintHostJob upload_job(physical_printer_config); if ((!physical_printer_config && !link_has_machine) || p->model.objects.empty())
if (upload_job.empty())
return; return;
// Obtain default output path // Obtain default output path
@@ -8039,25 +8040,30 @@ void Plater::send_gcode()
// Repetier specific: Query the server for the list of file groups. // Repetier specific: Query the server for the list of file groups.
wxArrayString groups; wxArrayString groups;
{
wxBusyCursor wait;
upload_job.printhost->get_groups(groups);
}
// QIDILink specific: Query the server for the list of file groups. // QIDILink specific: Query the server for the list of file groups.
wxArrayString storage_paths; wxArrayString storage_paths;
wxArrayString storage_names; wxArrayString storage_names;
{ bool only_link = false;
if (physical_printer_config) {
PrintHostJob upload_job(physical_printer_config);
if (upload_job.empty())
return;
wxBusyCursor wait; wxBusyCursor wait;
upload_job.printhost->get_groups(groups);
try { try {
upload_job.printhost->get_storage(storage_paths, storage_names); upload_job.printhost->get_storage(storage_paths, storage_names);
} catch (const Slic3r::IOError& ex) { } catch (const Slic3r::IOError &ex) {
show_error(this, ex.what(), false); show_error(this, ex.what(), false);
return; return;
} }
} else {
only_link = true;
} }
//B61 //B61
PrintHostSendDialog dlg(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, storage_paths, storage_names, PrintHostSendDialog dlg(default_output_file, PrintHostPostUploadAction::StartPrint, groups, storage_paths, storage_names, this,
this, (this->fff_print().print_statistics())); (this->fff_print().print_statistics()), only_link);
if (dlg.ShowModal() == wxID_OK) { if (dlg.ShowModal() == wxID_OK) {
if (printer_technology() == ptFFF) { if (printer_technology() == ptFFF) {

View File

@@ -46,7 +46,8 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path & path,
const wxArrayString & storage_paths, const wxArrayString & storage_paths,
const wxArrayString & storage_names, const wxArrayString & storage_names,
Plater * plater, Plater * plater,
const PrintStatistics & ps) const PrintStatistics & ps,
bool onlylink)
: MsgDialog(static_cast<wxWindow *>(wxGetApp().mainframe), : MsgDialog(static_cast<wxWindow *>(wxGetApp().mainframe),
_L("Send G-Code to printer host"), _L("Send G-Code to printer host"),
_L(""), _L(""),
@@ -196,9 +197,15 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path & path,
} }
} }
//y4 //y4
PhysicalPrinter selected_printer = ph_printers.get_selected_printer(); std::string printer_preset = "";
std::set<std::string> selected_printer_presets = selected_printer.get_preset_names(); if (!onlylink) {
std::string printer_preset = *selected_printer_presets.begin(); PhysicalPrinter selected_printer = ph_printers.get_selected_printer();
std::set<std::string> selected_printer_presets = selected_printer.get_preset_names();
printer_preset = *selected_printer_presets.begin();
} else {
Preset &select_preset = preset_bundle.printers.get_edited_preset();
printer_preset = select_preset.name;
}
m_presetData = preset_data; m_presetData = preset_data;
for (const PhysicalPrinterPresetData &data : preset_data) { for (const PhysicalPrinterPresetData &data : preset_data) {
//y4 //y4
@@ -939,20 +946,20 @@ void PrintHostQueueDialog::on_error(Event &evt)
wxCHECK_RET(evt.job_id < (size_t)job_list->GetItemCount(), "Out of bounds access to job list"); wxCHECK_RET(evt.job_id < (size_t)job_list->GetItemCount(), "Out of bounds access to job list");
set_state(evt.job_id, ST_ERROR); set_state(evt.job_id, ST_ERROR);
// y1
std::string response_msg = into_u8(evt.status); std::string response_msg = into_u8(evt.status);
size_t pos_404 = evt.status.find("HTTP 404:");
wxString code_msg = ""; wxString code_msg = "";
if (pos_404 != std::string::npos) { if (response_msg.find("HTTP 404:") != std::string::npos) {
code_msg = _L("Network connection fails.");
size_t isAws = response_msg.find("AWS"); size_t isAws = response_msg.find("AWS");
if(isAws != std::string::npos) if(isAws != std::string::npos)
code_msg += _L("Unable to get required resources from AWS server, please check your network settings."); code_msg = _L("HTTP 404. Unable to get required resources from AWS server, please check your network settings.");
else else
code_msg += _L("Unable to get required resources from Aliyun server, please check your network settings."); code_msg = _L("HTTP 404. Unable to get required resources from Aliyun server, please check your network settings.");
} }
else if (response_msg.find("HTTP 401:") != std::string::npos)
code_msg = _L("HTTP 401: Unauthorized. Please check whether your physical printer has added users. If a user exists, add the "
"APIKEY when adding/editing the printer.");
else else
code_msg = _L("Network connection times out. Please check the device network Settings."); code_msg = response_msg;
auto errormsg = format_wxstr("%1%\n%2%", _L("Error uploading to print host") + ":", code_msg); auto errormsg = format_wxstr("%1%\n%2%", _L("Error uploading to print host") + ":", code_msg);
job_list->SetValue(wxVariant(0), evt.job_id, COL_PROGRESS); job_list->SetValue(wxVariant(0), evt.job_id, COL_PROGRESS);

View File

@@ -66,7 +66,8 @@ public:
const wxArrayString & storage_paths, const wxArrayString & storage_paths,
const wxArrayString & storage_names, const wxArrayString & storage_names,
Plater * plater, Plater * plater,
const PrintStatistics & ps); const PrintStatistics & ps,
bool onlyLik);
boost::filesystem::path filename() const; boost::filesystem::path filename() const;
PrintHostPostUploadAction post_action() const; PrintHostPostUploadAction post_action() const;
std::string group() const; std::string group() const;

View File

@@ -281,9 +281,13 @@ void PrinterWebView::CreatThread() {
if (m_pauseThread) if (m_pauseThread)
break; break;
DynamicPrintConfig cfg_t;
cfg_t.set_key_value("print_host", new ConfigOptionString(into_u8(button->getIPLabel())));
cfg_t.set_key_value("printhost_apikey", new ConfigOptionString(into_u8(button->GetApikey())));
cfg_t.set_key_value("printhost_cafile", new ConfigOptionString(""));
cfg_t.set_key_value("printhost_ssl_ignore_revoke", new ConfigOptionBool(false));
std::unique_ptr<PrintHost> printhost( std::unique_ptr<PrintHost> printhost(
PrintHost::get_print_host_url((button->getIPLabel()).ToStdString(), (button->getIPLabel()).ToStdString())); PrintHost::get_print_host(&cfg_t));
if (!printhost) { if (!printhost) {
BOOST_LOG_TRIVIAL(error) << ("Could not get a valid Printer Host reference"); BOOST_LOG_TRIVIAL(error) << ("Could not get a valid Printer Host reference");
return; return;
@@ -291,13 +295,15 @@ void PrinterWebView::CreatThread() {
wxString msg; wxString msg;
std::string state = "standby"; std::string state = "standby";
float progress = 0; float progress = 0;
state = printhost->get_status(msg); std::pair<std::string, float> state_progress = printhost->get_status_progress(msg);
state = state_progress.first;
if ((button->GetStateText()).ToStdString() != state) if ((button->GetStateText()).ToStdString() != state)
button->SetStateText(state); button->SetStateText(state);
if (state == "printing") { if (state == "printing") {
progress = (printhost->get_progress(msg)) * 100; progress = state_progress.second * 100;
int progressInt = static_cast<int>(progress); int progressInt = static_cast<int>(progress);
button->SetProgressText(wxString::Format(wxT("(%d%%)"), progressInt)); button->SetProgressText(wxString::Format(wxT("(%d%%)"), progressInt));
} }
@@ -321,13 +327,14 @@ void PrinterWebView::CreatThread() {
wxString msg; wxString msg;
std::string state = "standby"; std::string state = "standby";
float progress = 0; float progress = 0;
state = printhost->get_status(msg); std::pair<std::string, float> state_progress = printhost->get_status_progress(msg);
state = state_progress.first;
if ((m_net_buttons[count]->GetStateText()).ToStdString() != state) if ((m_net_buttons[count]->GetStateText()).ToStdString() != state)
m_net_buttons[count]->SetStateText(state); m_net_buttons[count]->SetStateText(state);
if (state == "printing") { if (state == "printing") {
progress = (printhost->get_progress(msg)) * 100; progress = state_progress.second * 100;
int progressInt = static_cast<int>(progress); int progressInt = static_cast<int>(progress);
m_net_buttons[count]->SetProgressText(wxString::Format(wxT("(%d%%)"), progressInt)); m_net_buttons[count]->SetProgressText(wxString::Format(wxT("(%d%%)"), progressInt));
} }
@@ -355,6 +362,7 @@ void PrinterWebView::SetPresetChanged(bool status) {
PhysicalPrinterCollection &ph_printers = preset_bundle.physical_printers; PhysicalPrinterCollection &ph_printers = preset_bundle.physical_printers;
for (PhysicalPrinterCollection::ConstIterator it = ph_printers.begin(); it != ph_printers.end(); ++it) { for (PhysicalPrinterCollection::ConstIterator it = ph_printers.begin(); it != ph_printers.end(); ++it) {
std::string host = (it->config.opt_string("print_host")); std::string host = (it->config.opt_string("print_host"));
wxString apikey = from_u8(it->config.opt_string("printhost_apikey"));
for (const std::string &preset_name : it->get_preset_names()) { for (const std::string &preset_name : it->get_preset_names()) {
Preset * preset = wxGetApp().preset_bundle->printers.find_preset(preset_name); Preset * preset = wxGetApp().preset_bundle->printers.find_preset(preset_name);
std::string full_name = it->get_full_name(preset_name); std::string full_name = it->get_full_name(preset_name);
@@ -385,8 +393,7 @@ void PrinterWebView::SetPresetChanged(bool status) {
//BOOST_LOG_TRIVIAL(error) << (it->get_short_name(full_name)); //BOOST_LOG_TRIVIAL(error) << (it->get_short_name(full_name));
//BOOST_LOG_TRIVIAL(error) << (it->get_preset_name(full_name)); //BOOST_LOG_TRIVIAL(error) << (it->get_preset_name(full_name));
//BOOST_LOG_TRIVIAL(error) << model_id; //BOOST_LOG_TRIVIAL(error) << model_id;
AddButton((it->get_short_name(full_name)), host, model_id, full_name, is_selected, AddButton((it->get_short_name(full_name)), host, model_id, full_name, is_selected, (host_type == htMoonraker), apikey);
(host_type == htMoonraker));
m_exit_host.insert(host); m_exit_host.insert(host);
} }
} }
@@ -399,47 +406,42 @@ void PrinterWebView::SetPresetChanged(bool status) {
AddNetButton(device); AddNetButton(device);
} }
#endif #endif
if (m_isNetMode)
ShowNetPrinterButton();
else
ShowLocalPrinterButton();
//y3 //y3
if (webisNetMode == isNetWeb) { if (webisNetMode == isNetWeb) {
ShowNetPrinterButton();
for (DeviceButton* button : m_net_buttons) { for (DeviceButton* button : m_net_buttons) {
if (m_ip == (button->getIPLabel())) { if (m_ip == (button->getIPLabel())) {
button->SetIsSelected(true); button->SetIsSelected(true);
wxCommandEvent event(wxEVT_BUTTON, button->GetId());
wxPostEvent(button, event);
break; break;
} }
} }
toggleBar->SetValue(true); }
m_isNetMode = true; else if (webisNetMode == isLocalWeb)
} else if (webisNetMode == isLocalWeb) { {
ShowLocalPrinterButton();
if (m_exit_host.find(into_u8(m_ip)) != m_exit_host.end()) if (m_exit_host.find(into_u8(m_ip)) != m_exit_host.end())
{ {
for (DeviceButton* button : m_buttons) { for (DeviceButton* button : m_buttons)
if (m_ip == (button->getIPLabel())) { {
if (m_ip == (button->getIPLabel()))
{
button->SetIsSelected(true); button->SetIsSelected(true);
break; break;
} }
} }
toggleBar->SetValue(false);
m_isNetMode = false;
} else {
wxString m_host = wxString::Format("file://%s/web/qidi/missing_connection.html", from_u8(resources_dir()));
load_disconnect_url(m_host);
} }
} }
else else
{ {
if (m_isNetMode) if (m_isNetMode)
{ {
ShowNetPrinterButton();
wxString m_host = wxString::Format("file://%s/web/qidi/link_missing_connection.html", from_u8(resources_dir())); wxString m_host = wxString::Format("file://%s/web/qidi/link_missing_connection.html", from_u8(resources_dir()));
load_disconnect_url(m_host); load_disconnect_url(m_host);
} }
else else
{ {
ShowLocalPrinterButton();
wxString m_host = wxString::Format("file://%s/web/qidi/missing_connection.html", from_u8(resources_dir())); wxString m_host = wxString::Format("file://%s/web/qidi/missing_connection.html", from_u8(resources_dir()));
load_disconnect_url(m_host); load_disconnect_url(m_host);
} }
@@ -501,7 +503,8 @@ void PrinterWebView::AddButton(const wxString & device_name,
const wxString & machine_type, const wxString & machine_type,
const wxString & fullname, const wxString & fullname,
bool isSelected, bool isSelected,
bool isQIDI) bool isQIDI,
const wxString & apikey)
{ {
wxString Machine_Name = Machine_Name.Format("%s%s", machine_type, "_thumbnail"); wxString Machine_Name = Machine_Name.Format("%s%s", machine_type, "_thumbnail");
@@ -509,7 +512,7 @@ void PrinterWebView::AddButton(const wxString & device_name,
std::pair<wxColour, int>(wxColour(76, 76, 80), StateColor::Hovered), std::pair<wxColour, int>(wxColour(76, 76, 80), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(67, 67, 71), StateColor::Normal)); std::pair<wxColour, int>(wxColour(67, 67, 71), StateColor::Normal));
DeviceButton *machine_button = new DeviceButton(leftScrolledWindow, fullname, Machine_Name, wxBU_LEFT, wxSize(80, 80), device_name, ip); DeviceButton *machine_button = new DeviceButton(leftScrolledWindow, fullname, Machine_Name, wxBU_LEFT, wxSize(80, 80), device_name, ip, apikey);
machine_button->SetBackgroundColor(mac_btn_bg); machine_button->SetBackgroundColor(mac_btn_bg);
machine_button->SetBorderColor(wxColour(67, 67, 71)); machine_button->SetBorderColor(wxColour(67, 67, 71));
machine_button->SetCanFocus(false); machine_button->SetCanFocus(false);
@@ -607,23 +610,32 @@ void PrinterWebView::AddNetButton(const Device device)
machine_button->Bind(wxEVT_BUTTON, [this, device](wxCommandEvent &event) { machine_button->Bind(wxEVT_BUTTON, [this, device](wxCommandEvent &event) {
//y5 //y5
std::string formattedHost; std::string formattedHost;
if (wxGetApp().app_config->get("dark_color_mode") == "1")
formattedHost = device.link_url + "&theme=dark";
else
formattedHost = device.link_url + "&theme=light";
std::string formattedHost1 = "http://fluidd_" + formattedHost; if (device.isSpecialMachine)
std::string formattedHost2 = "http://fluidd2_" + formattedHost; {
if (formattedHost1 == m_web || formattedHost2 == m_web) if (wxGetApp().app_config->get("dark_color_mode") == "1")
return; formattedHost = device.link_url + "&theme=dark";
else
formattedHost = device.link_url + "&theme=light";
if (m_isfluidd_1) { std::string formattedHost1 = "http://fluidd_" + formattedHost;
formattedHost = "http://fluidd_" + formattedHost; std::string formattedHost2 = "http://fluidd2_" + formattedHost;
m_isfluidd_1 = false; if (formattedHost1 == m_web || formattedHost2 == m_web)
} else { return;
formattedHost = "http://fluidd2_" + formattedHost;
m_isfluidd_1 = true; if (m_isfluidd_1) {
formattedHost = "http://fluidd_" + formattedHost;
m_isfluidd_1 = false;
} else {
formattedHost = "http://fluidd2_" + formattedHost;
m_isfluidd_1 = true;
}
}
else
{
formattedHost = "http://" + device.link_url;
} }
load_net_url(formattedHost, device.local_ip); load_net_url(formattedHost, device.local_ip);
}); });
@@ -1056,7 +1068,7 @@ void PrinterWebView::load_url(wxString &url)
} }
for (DeviceButton *button : m_buttons) { for (DeviceButton *button : m_buttons) {
if (url == (button->getIPLabel())) if ((button->getIPLabel()).find(m_ip) != std::string::npos)
button->SetIsSelected(true); button->SetIsSelected(true);
else else
button->SetIsSelected(false); button->SetIsSelected(false);

View File

@@ -94,7 +94,8 @@ public:
const wxString & machine_type, const wxString & machine_type,
const wxString & fullname, const wxString & fullname,
bool isSelected, bool isSelected,
bool isQIDI); bool isQIDI,
const wxString & apikey);
void DeleteButton(); void DeleteButton();
void UnSelectedButton(); void UnSelectedButton();
void ShowNetPrinterButton(); void ShowNetPrinterButton();

View File

@@ -23,7 +23,7 @@ END_EVENT_TABLE()
* calling Refresh()/Update(). * calling Refresh()/Update().
*/ */
DeviceButton::DeviceButton(wxString name_text, wxString ip_text) : paddingSize(10, 8), m_name_text(name_text), m_ip_text(ip_text) DeviceButton::DeviceButton(wxString name_text, wxString ip_text, wxString api_text) : paddingSize(10, 8), m_name_text(name_text), m_ip_text(ip_text), m_apikey(api_text)
{ {
background_color = StateColor( background_color = StateColor(
std::make_pair(0x262629, (int) StateColor::Disabled), std::make_pair(0x262629, (int) StateColor::Disabled),
@@ -37,13 +37,14 @@ DeviceButton::DeviceButton(wxString name_text, wxString ip_text) : paddingSize(1
} }
DeviceButton::DeviceButton(wxWindow *parent, DeviceButton::DeviceButton(wxWindow *parent,
wxString text, wxString text,
wxString icon, wxString icon,
long style, long style,
wxSize iconSize /* = wxSize(16, 16)*/, wxSize iconSize /* = wxSize(16, 16)*/,
wxString name_text, wxString name_text,
wxString ip_text) wxString ip_text,
: DeviceButton(name_text,ip_text) wxString api_text)
: DeviceButton(name_text,ip_text, api_text)
{ {
m_icon_text = icon; m_icon_text = icon;
Create(parent, text, icon, style, iconSize); Create(parent, text, icon, style, iconSize);

View File

@@ -4,6 +4,7 @@
#include "../wxExtensions.hpp" #include "../wxExtensions.hpp"
#include "StaticBox.hpp" #include "StaticBox.hpp"
class DeviceButton : public StaticBox class DeviceButton : public StaticBox
{ {
wxSize textSize; wxSize textSize;
@@ -22,7 +23,7 @@ class DeviceButton : public StaticBox
static const int buttonHeight = 50; static const int buttonHeight = 50;
public: public:
DeviceButton(wxString name_text, wxString ip_text); DeviceButton(wxString name_text, wxString ip_text, wxString api_text);
DeviceButton(wxWindow *parent, DeviceButton(wxWindow *parent,
wxString text, wxString text,
@@ -30,7 +31,8 @@ public:
long style = 0, long style = 0,
wxSize iconSize = wxSize(16, 16), wxSize iconSize = wxSize(16, 16),
wxString name_text = "", wxString name_text = "",
wxString ip_text = ""); wxString ip_text = "",
wxString api_text = "");
//y3 //y3
DeviceButton(wxWindow *parent, wxString icon, long style); DeviceButton(wxWindow *parent, wxString icon, long style);
@@ -76,6 +78,7 @@ public:
wxString GetStateText() { return m_state_text; } wxString GetStateText() { return m_state_text; }
wxString GetApikey() { return m_apikey; };
void Rescale(); void Rescale();
@@ -108,6 +111,7 @@ private:
wxString m_progress_text = "(0%)"; wxString m_progress_text = "(0%)";
bool m_isSimpleMode = true; bool m_isSimpleMode = true;
bool m_isSelected = false; bool m_isSelected = false;
wxString m_apikey;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };

View File

@@ -25,6 +25,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const override { return "1"; }; virtual std::string get_status(wxString &curl_msg) const override { return "1"; };
virtual float get_progress(wxString &curl_msg) const override { return 1; }; virtual float get_progress(wxString &curl_msg) const override { return 1; };
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const override { return std::make_pair("1", 1); };
wxString get_test_ok_msg () const override; wxString get_test_ok_msg () const override;
wxString get_test_failed_msg (wxString &msg) const override; wxString get_test_failed_msg (wxString &msg) const override;

View File

@@ -23,6 +23,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const override { return "1"; }; virtual std::string get_status(wxString &curl_msg) const override { return "1"; };
virtual float get_progress(wxString &curl_msg) const override { return 1; }; virtual float get_progress(wxString &curl_msg) const override { return 1; };
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const override { return std::make_pair("1", 1); };
wxString get_test_ok_msg() const override; wxString get_test_ok_msg() const override;
wxString get_test_failed_msg(wxString &msg) const override; wxString get_test_failed_msg(wxString &msg) const override;

View File

@@ -25,6 +25,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const override { return "1"; }; virtual std::string get_status(wxString &curl_msg) const override { return "1"; };
virtual float get_progress(wxString &curl_msg) const override { return 1; }; virtual float get_progress(wxString &curl_msg) const override { return 1; };
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const override { return std::make_pair("1", 1); };
wxString get_test_ok_msg() const override; wxString get_test_ok_msg() const override;
wxString get_test_failed_msg(wxString &msg) const override; wxString get_test_failed_msg(wxString &msg) const override;

View File

@@ -24,6 +24,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const override { return "1"; }; virtual std::string get_status(wxString &curl_msg) const override { return "1"; };
virtual float get_progress(wxString &curl_msg) const override { return 1; }; virtual float get_progress(wxString &curl_msg) const override { return 1; };
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const override { return std::make_pair("1", 1); };
wxString get_test_ok_msg() const override; wxString get_test_ok_msg() const override;
wxString get_test_failed_msg(wxString& msg) const override; wxString get_test_failed_msg(wxString& msg) const override;

View File

@@ -294,6 +294,82 @@ float Moonraker::get_progress(wxString &msg) const
return process; return process;
} }
std::pair<std::string, float> Moonraker::get_status_progress(wxString &msg) const
{
// GET /server/info
// Since the request is performed synchronously here,
// it is ok to refer to `msg` from within the closure
const char *name = get_name();
bool res = true;
std::string print_state = "standby";
float process = 0;
auto url = make_url("printer/objects/query?print_stats=state&display_status=progress");
BOOST_LOG_TRIVIAL(info) << boost::format("%1%: Get version at: %2%") % name % url;
auto http = Http::get(std::move(url));
set_auth(http);
// B64 //y6
http.timeout_connect(4)
.on_error([&](std::string body, std::string error, unsigned status) {
// y1
if (status == 404) {
body = ("Network connection fails.");
if (body.find("AWS") != std::string::npos)
body += ("Unable to get required resources from AWS server, please check your network settings.");
else
body += ("Unable to get required resources from Aliyun server, please check your network settings.");
}
BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error getting version: %2%, HTTP %3%, body: `%4%`") % name % error % status %
body;
print_state = "offline";
msg = format_error(body, error, status);
})
.on_complete([&](std::string body, unsigned) {
BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got print_stats and process: %2%") % name % body;
try {
// All successful HTTP requests will return a json encoded object in the form of :
// {result: <response data>}
std::stringstream ss(body);
pt::ptree ptree;
pt::read_json(ss, ptree);
if (ptree.front().first != "result") {
msg = "Could not parse server response";
print_state = "offline";
process = 0;
return;
}
if (!ptree.front().second.get_optional<std::string>("status")) {
msg = "Could not parse server response";
print_state = "offline";
process = 0;
return;
}
print_state = ptree.get<std::string>("result.status.print_stats.state");
process = std::stof(ptree.get<std::string>("result.status.display_status.progress"));
BOOST_LOG_TRIVIAL(info) << boost::format("%1%: Got state: %2%") % name % print_state;
;
} catch (const std::exception &) {
print_state = "offline";
process = 0;
msg = "Could not parse server response";
}
})
#ifdef _WIN32
.ssl_revoke_best_effort(m_ssl_revoke_best_effort)
.on_ip_resolve([&](std::string address) {
// Workaround for Windows 10/11 mDNS resolve issue, where two mDNS resolves in succession fail.
// Remember resolved address to be reused at successive REST API call.
msg = GUI::from_u8(address);
})
#endif // _WIN32
.perform_sync();
return std::make_pair(print_state, process);
}
bool Moonraker::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const bool Moonraker::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const
{ {
// POST /server/files/upload // POST /server/files/upload

View File

@@ -32,6 +32,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const override; virtual std::string get_status(wxString &curl_msg) const override;
virtual float get_progress(wxString &curl_msg) const override; virtual float get_progress(wxString &curl_msg) const override;
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const override;
wxString get_test_ok_msg () const override; wxString get_test_ok_msg () const override;
wxString get_test_failed_msg (wxString &msg) const override; wxString get_test_failed_msg (wxString &msg) const override;

View File

@@ -27,6 +27,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const override { return "1"; }; virtual std::string get_status(wxString &curl_msg) const override { return "1"; };
virtual float get_progress(wxString &curl_msg) const override { return 1; }; virtual float get_progress(wxString &curl_msg) const override { return 1; };
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const override { return std::make_pair("1", 1); };
wxString get_test_ok_msg () const override; wxString get_test_ok_msg () const override;
wxString get_test_failed_msg (wxString &msg) const override; wxString get_test_failed_msg (wxString &msg) const override;

View File

@@ -46,7 +46,7 @@ PrintHost* PrintHost::get_print_host(DynamicPrintConfig *config)
if (tech == ptFFF) { if (tech == ptFFF) {
const auto opt = config->option<ConfigOptionEnum<PrintHostType>>("host_type"); const auto opt = config->option<ConfigOptionEnum<PrintHostType>>("host_type");
const auto host_type = opt != nullptr ? opt->value : htOctoPrint; const auto host_type = opt != nullptr ? opt->value : htMoonraker;
//B55 //B55
switch (host_type) { switch (host_type) {

View File

@@ -56,6 +56,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const = 0; virtual std::string get_status(wxString &curl_msg) const = 0;
virtual float get_progress(wxString &curl_msg) const = 0; virtual float get_progress(wxString &curl_msg) const = 0;
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const = 0;
virtual wxString get_test_ok_msg () const = 0; virtual wxString get_test_ok_msg () const = 0;
virtual wxString get_test_failed_msg (wxString &msg) const = 0; virtual wxString get_test_failed_msg (wxString &msg) const = 0;
virtual bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const = 0; virtual bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const = 0;

View File

@@ -24,6 +24,7 @@ public:
//B45 //B45
virtual std::string get_status(wxString &curl_msg) const override { return "1"; }; virtual std::string get_status(wxString &curl_msg) const override { return "1"; };
virtual float get_progress(wxString &curl_msg) const override { return 1; }; virtual float get_progress(wxString &curl_msg) const override { return 1; };
virtual std::pair<std::string, float> get_status_progress(wxString &curl_msg) const override { return std::make_pair("1", 1); };
wxString get_test_ok_msg () const override; wxString get_test_ok_msg () const override;
wxString get_test_failed_msg (wxString &msg) const override; wxString get_test_failed_msg (wxString &msg) const override;
bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const override; bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const override;

View File

@@ -7,7 +7,7 @@ endif()
set(SLIC3R_APP_NAME "QIDISlicer") set(SLIC3R_APP_NAME "QIDISlicer")
set(SLIC3R_APP_KEY "QIDISlicer") set(SLIC3R_APP_KEY "QIDISlicer")
set(SLIC3R_VERSION "1.1.6") set(SLIC3R_VERSION "1.1.7")
set(SLIC3R_BUILD_ID "QIDISlicer-${SLIC3R_VERSION}+Win64") set(SLIC3R_BUILD_ID "QIDISlicer-${SLIC3R_VERSION}+Win64")
set(SLIC3R_RC_VERSION "1,1,6,0") set(SLIC3R_RC_VERSION "1,1,7,0")
set(SLIC3R_RC_VERSION_DOTS "1.1.6.0") set(SLIC3R_RC_VERSION_DOTS "1.1.7.0")