mirror of
https://github.com/QIDITECH/QIDISlicer.git
synced 2026-01-31 07:58:43 +03:00
Compare commits
6 Commits
Version_1.
...
V1.1.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8c610a76ba | ||
|
|
1f38488c27 | ||
|
|
f3d619b9b8 | ||
|
|
7db4414838 | ||
|
|
b2ca6dda6a | ||
|
|
ab349ad81b |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -21,5 +21,4 @@ deps/build-linux/*
|
||||
**/.idea/
|
||||
.pkg_cache
|
||||
CMakeUserPresets.json
|
||||
/resources/profiles
|
||||
/src/slic3r/QIDI
|
||||
|
||||
@@ -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" )
|
||||
endif ()
|
||||
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.
|
||||
add_compile_options(-Werror=return-type)
|
||||
|
||||
|
||||
115
README.md
115
README.md
@@ -4,32 +4,123 @@
|
||||
# QIDISlicer
|
||||
QIDISlicer is a professional 3D printer slicing software,which 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.
|
||||
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.
|
||||
|
||||
### 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.
|
||||
|
||||
|
||||
BIN
readmeRes/UI.png
Normal file
BIN
readmeRes/UI.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 168 KiB |
BIN
readmeRes/qidilink.png
Normal file
BIN
readmeRes/qidilink.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 560 KiB |
@@ -1,3 +1,5 @@
|
||||
min_slic3r_version = 1.1.7
|
||||
1.1.7 Optimize parameters
|
||||
min_slic3r_version = 1.1.6
|
||||
1.1.6 Optimize parameters
|
||||
min_slic3r_version = 1.1.5
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
name = QIDI Technology
|
||||
# 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.
|
||||
config_version = 1.1.6
|
||||
config_version = 1.1.7
|
||||
# Where to get the updates from?
|
||||
config_update_url = https://github.com/QIDITECH/QIDISlicer/releases/download/QIDITechnology/
|
||||
changelog_url = https://qidi3d.com/pages/software-firmware
|
||||
@@ -21,7 +21,7 @@ technology = FFF
|
||||
family = X 4
|
||||
bed_model = X-Plus 4_bed.stl
|
||||
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]
|
||||
name = Q1 Pro
|
||||
@@ -30,7 +30,7 @@ technology = FFF
|
||||
family = Q
|
||||
bed_model = Q1 Pro_bed.stl
|
||||
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]
|
||||
name = X-MAX 3
|
||||
@@ -39,7 +39,7 @@ technology = FFF
|
||||
family = X 3
|
||||
bed_model = X-MAX 3_bed.stl
|
||||
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]
|
||||
name = X-Plus 3
|
||||
@@ -48,7 +48,7 @@ technology = FFF
|
||||
family = X 3
|
||||
bed_model = X-Plus 3_bed.stl
|
||||
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]
|
||||
name = X-smart 3
|
||||
@@ -57,7 +57,7 @@ technology = FFF
|
||||
family = X 3
|
||||
bed_model = X-smart 3_bed.stl
|
||||
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
|
||||
# not make it into the user interface.
|
||||
@@ -719,7 +719,7 @@ compatible_prints_condition =
|
||||
cooling = 1
|
||||
disable_fan_first_layers = 1
|
||||
disable_rapid_cooling_fan_first_layers = 3
|
||||
dont_slow_down_outer_wall = 1
|
||||
dont_slow_down_outer_wall = 0
|
||||
enable_advance_pressure = 1
|
||||
enable_auxiliary_fan = 100
|
||||
enable_auxiliary_fan_unseal = 0
|
||||
@@ -850,7 +850,7 @@ enable_dynamic_fan_speeds = 1
|
||||
enable_volume_fan = 0
|
||||
extrusion_multiplier = 0.95
|
||||
filament_colour = #FFC800
|
||||
filament_density = 1.05
|
||||
filament_density = 1.06
|
||||
filament_max_volumetric_speed = 22
|
||||
filament_type = ABS
|
||||
first_layer_bed_temperature = 90
|
||||
@@ -1070,20 +1070,24 @@ filament_max_volumetric_speed = 21
|
||||
|
||||
[filament:*QIDI PLA Rapido Metal*]
|
||||
inherits = *common*
|
||||
filament_density = 1.20
|
||||
|
||||
[filament:*QIDI PLA Rapido Silk*]
|
||||
inherits = *common*
|
||||
bed_temperature = 60
|
||||
bed_temperature = 55
|
||||
enable_auxiliary_fan = 0
|
||||
filament_colour = #80FFFF
|
||||
filament_density = 1.20
|
||||
filament_density = 1.24
|
||||
filament_max_volumetric_speed = 7.5
|
||||
filament_retract_length = 0.5
|
||||
first_layer_bed_temperature = 60
|
||||
first_layer_temperature = 220
|
||||
first_layer_bed_temperature = 55
|
||||
first_layer_temperature = 230
|
||||
temperature = 230
|
||||
|
||||
[filament:*QIDI PLA-CF*]
|
||||
inherits = *common*
|
||||
advance_pressure = 0.02
|
||||
enable_auxiliary_fan = 0
|
||||
extrusion_multiplier = 0.96
|
||||
filament_colour = #27408B
|
||||
filament_density = 1.25
|
||||
@@ -1102,7 +1106,7 @@ enable_auxiliary_fan = 0
|
||||
extrusion_multiplier = 0.97
|
||||
fan_below_layer_time = 5
|
||||
filament_colour = #4F4F4F
|
||||
filament_density = 1.26
|
||||
filament_density = 1.3
|
||||
filament_max_volumetric_speed = 6
|
||||
filament_type = PPS-CF
|
||||
first_layer_bed_temperature = 110
|
||||
@@ -1119,7 +1123,7 @@ advance_pressure = 0.1
|
||||
enable_auxiliary_fan = 0
|
||||
extrusion_multiplier = 1
|
||||
filament_colour = #8000FF
|
||||
filament_density = 1.21
|
||||
filament_density = 1.15
|
||||
filament_max_volumetric_speed = 4
|
||||
filament_type = TPU
|
||||
filament_vendor = Generic
|
||||
@@ -1194,6 +1198,7 @@ temperature = 250
|
||||
|
||||
[filament:*Generic PLA*]
|
||||
inherits = *common*
|
||||
enable_auxiliary_fan = 0
|
||||
filament_colour = #0000FF
|
||||
filament_density = 1.20
|
||||
filament_max_volumetric_speed = 14
|
||||
@@ -1203,6 +1208,7 @@ filament_vendor = Generic
|
||||
inherits = *common*
|
||||
advance_pressure = 0.024
|
||||
bed_temperature = 55
|
||||
enable_auxiliary_fan = 0
|
||||
filament_colour = #80FFFF
|
||||
filament_density = 1.20
|
||||
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]
|
||||
inherits = *QIDI PLA Rapido Silk*
|
||||
advance_pressure = 0.034
|
||||
first_layer_temperature = 210
|
||||
temperature = 210
|
||||
first_layer_temperature = 220
|
||||
temperature = 220
|
||||
compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]==0.4
|
||||
|
||||
[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]
|
||||
inherits = *QIDI PLA Rapido Silk*
|
||||
advance_pressure = 0.021
|
||||
first_layer_temperature = 210
|
||||
temperature = 210
|
||||
first_layer_temperature = 220
|
||||
temperature = 220
|
||||
compatible_printers_condition = printer_model=="X-Plus 4" and nozzle_diameter[0]==0.6
|
||||
|
||||
[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]
|
||||
inherits = *QIDI PLA Rapido Silk*
|
||||
advance_pressure = 0.034
|
||||
first_layer_temperature = 210
|
||||
temperature = 210
|
||||
first_layer_temperature = 220
|
||||
temperature = 220
|
||||
compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==0.4
|
||||
|
||||
[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]
|
||||
inherits = *QIDI PLA Rapido Silk*
|
||||
advance_pressure = 0.024
|
||||
first_layer_temperature = 210
|
||||
temperature = 210
|
||||
first_layer_temperature = 220
|
||||
temperature = 220
|
||||
compatible_printers_condition = printer_model=="Q1 Pro" and nozzle_diameter[0]==0.6
|
||||
|
||||
[filament:QIDI PLA-CF @Q1 Pro 0.6 nozzle]
|
||||
@@ -3597,7 +3603,7 @@ inherits = *common*
|
||||
printer_model = X-Plus 4
|
||||
autoemit_temperature_commands = 0
|
||||
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
|
||||
before_layer_gcode = ;TIMELAPSE_TAKE_FRAME
|
||||
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
|
||||
max_print_height = 280
|
||||
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
|
||||
wipe_device = 1
|
||||
|
||||
|
||||
73
resources/profiles/QIDITechnology/X-Plus 4.svg
Normal file
73
resources/profiles/QIDITechnology/X-Plus 4.svg
Normal 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 |
BIN
resources/profiles/QIDITechnology/X-Plus 4_bed.STL
Normal file
BIN
resources/profiles/QIDITechnology/X-Plus 4_bed.STL
Normal file
Binary file not shown.
BIN
resources/profiles/QIDITechnology/X-Plus 4_thumbnail.png
Normal file
BIN
resources/profiles/QIDITechnology/X-Plus 4_thumbnail.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
1432
resources/web/guide/filament_table.html
Normal file
1432
resources/web/guide/filament_table.html
Normal file
File diff suppressed because it is too large
Load Diff
@@ -334,7 +334,7 @@
|
||||
<div class="IntroduceBoard" board="X-Plus 4">
|
||||
<div class="AutozoomImage"><img src="img/X-Plus4Poster.png"/></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 class="IntroduceBoard" board="Q1 Pro">
|
||||
@@ -363,256 +363,17 @@
|
||||
|
||||
<div class="IntroduceBoard" board="Filaments">
|
||||
<div class="FilamentsTable">
|
||||
<table cellspacing="0">
|
||||
<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>
|
||||
<iframe id="filamentTableIframe" class="table-container" style="width: 100%; height: 1000px; border: none;"></iframe>
|
||||
</div>
|
||||
<div class="IntroduceTextBold trans" tid="l0"></div>
|
||||
<div class="IntroduceText">https://qidi3d.com/collections/filaments</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="IntroduceTitle trans" tid="t6"></div>
|
||||
|
||||
@@ -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();
|
||||
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();
|
||||
|
||||
|
||||
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
|
||||
if (get_config_bool("background_processing"))
|
||||
{
|
||||
RemovableDriveManager::RemovableDrivesStatus removable_media_status = wxGetApp().removable_drive_manager()->status();
|
||||
if (sidebar->show_reslice(false) |
|
||||
sidebar->show_export(true) |
|
||||
sidebar->show_send(send_gcode_shown) |
|
||||
sidebar->show_export(true) | sidebar->show_send(send_gcode_shown | link_has_machine) |
|
||||
sidebar->show_export_removable(removable_media_status.has_removable_drives))
|
||||
// sidebar->show_eject(removable_media_status.has_eject))
|
||||
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();
|
||||
if (sidebar->show_reslice(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_eject(!ready_to_slice && removable_media_status.has_eject))
|
||||
sidebar->Layout();
|
||||
@@ -8011,11 +8013,10 @@ void Plater::send_gcode()
|
||||
{
|
||||
// if physical_printer is selected, send gcode for this printer
|
||||
DynamicPrintConfig* physical_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config();
|
||||
if (! physical_printer_config || p->model.objects.empty())
|
||||
return;
|
||||
auto m_devices = wxGetApp().get_devices();
|
||||
const bool link_has_machine = m_devices.size() > 0;
|
||||
|
||||
PrintHostJob upload_job(physical_printer_config);
|
||||
if (upload_job.empty())
|
||||
if ((!physical_printer_config && !link_has_machine) || p->model.objects.empty())
|
||||
return;
|
||||
|
||||
// Obtain default output path
|
||||
@@ -8039,25 +8040,30 @@ void Plater::send_gcode()
|
||||
|
||||
// Repetier specific: Query the server for the list of file groups.
|
||||
wxArrayString groups;
|
||||
{
|
||||
wxBusyCursor wait;
|
||||
upload_job.printhost->get_groups(groups);
|
||||
}
|
||||
// QIDILink specific: Query the server for the list of file groups.
|
||||
wxArrayString storage_paths;
|
||||
wxArrayString storage_names;
|
||||
{
|
||||
bool only_link = false;
|
||||
if (physical_printer_config) {
|
||||
PrintHostJob upload_job(physical_printer_config);
|
||||
if (upload_job.empty())
|
||||
return;
|
||||
wxBusyCursor wait;
|
||||
upload_job.printhost->get_groups(groups);
|
||||
|
||||
try {
|
||||
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);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
only_link = true;
|
||||
}
|
||||
|
||||
//B61
|
||||
PrintHostSendDialog dlg(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, storage_paths, storage_names,
|
||||
this, (this->fff_print().print_statistics()));
|
||||
PrintHostSendDialog dlg(default_output_file, PrintHostPostUploadAction::StartPrint, groups, storage_paths, storage_names, this,
|
||||
(this->fff_print().print_statistics()), only_link);
|
||||
|
||||
if (dlg.ShowModal() == wxID_OK) {
|
||||
if (printer_technology() == ptFFF) {
|
||||
|
||||
@@ -46,7 +46,8 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path & path,
|
||||
const wxArrayString & storage_paths,
|
||||
const wxArrayString & storage_names,
|
||||
Plater * plater,
|
||||
const PrintStatistics & ps)
|
||||
const PrintStatistics & ps,
|
||||
bool onlylink)
|
||||
: MsgDialog(static_cast<wxWindow *>(wxGetApp().mainframe),
|
||||
_L("Send G-Code to printer host"),
|
||||
_L(""),
|
||||
@@ -196,9 +197,15 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path & path,
|
||||
}
|
||||
}
|
||||
//y4
|
||||
PhysicalPrinter selected_printer = ph_printers.get_selected_printer();
|
||||
std::set<std::string> selected_printer_presets = selected_printer.get_preset_names();
|
||||
std::string printer_preset = *selected_printer_presets.begin();
|
||||
std::string printer_preset = "";
|
||||
if (!onlylink) {
|
||||
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;
|
||||
for (const PhysicalPrinterPresetData &data : preset_data) {
|
||||
//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");
|
||||
|
||||
set_state(evt.job_id, ST_ERROR);
|
||||
// y1
|
||||
std::string response_msg = into_u8(evt.status);
|
||||
size_t pos_404 = evt.status.find("HTTP 404:");
|
||||
wxString code_msg = "";
|
||||
if (pos_404 != std::string::npos) {
|
||||
code_msg = _L("Network connection fails.");
|
||||
if (response_msg.find("HTTP 404:") != std::string::npos) {
|
||||
size_t isAws = response_msg.find("AWS");
|
||||
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
|
||||
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
|
||||
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);
|
||||
job_list->SetValue(wxVariant(0), evt.job_id, COL_PROGRESS);
|
||||
|
||||
@@ -66,7 +66,8 @@ public:
|
||||
const wxArrayString & storage_paths,
|
||||
const wxArrayString & storage_names,
|
||||
Plater * plater,
|
||||
const PrintStatistics & ps);
|
||||
const PrintStatistics & ps,
|
||||
bool onlyLik);
|
||||
boost::filesystem::path filename() const;
|
||||
PrintHostPostUploadAction post_action() const;
|
||||
std::string group() const;
|
||||
|
||||
@@ -281,9 +281,13 @@ void PrinterWebView::CreatThread() {
|
||||
if (m_pauseThread)
|
||||
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(
|
||||
PrintHost::get_print_host_url((button->getIPLabel()).ToStdString(), (button->getIPLabel()).ToStdString()));
|
||||
PrintHost::get_print_host(&cfg_t));
|
||||
if (!printhost) {
|
||||
BOOST_LOG_TRIVIAL(error) << ("Could not get a valid Printer Host reference");
|
||||
return;
|
||||
@@ -291,13 +295,15 @@ void PrinterWebView::CreatThread() {
|
||||
wxString msg;
|
||||
std::string state = "standby";
|
||||
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)
|
||||
button->SetStateText(state);
|
||||
|
||||
if (state == "printing") {
|
||||
progress = (printhost->get_progress(msg)) * 100;
|
||||
progress = state_progress.second * 100;
|
||||
int progressInt = static_cast<int>(progress);
|
||||
button->SetProgressText(wxString::Format(wxT("(%d%%)"), progressInt));
|
||||
}
|
||||
@@ -321,13 +327,14 @@ void PrinterWebView::CreatThread() {
|
||||
wxString msg;
|
||||
std::string state = "standby";
|
||||
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)
|
||||
m_net_buttons[count]->SetStateText(state);
|
||||
|
||||
if (state == "printing") {
|
||||
progress = (printhost->get_progress(msg)) * 100;
|
||||
progress = state_progress.second * 100;
|
||||
int progressInt = static_cast<int>(progress);
|
||||
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;
|
||||
for (PhysicalPrinterCollection::ConstIterator it = ph_printers.begin(); it != ph_printers.end(); ++it) {
|
||||
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()) {
|
||||
Preset * preset = wxGetApp().preset_bundle->printers.find_preset(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_preset_name(full_name));
|
||||
//BOOST_LOG_TRIVIAL(error) << model_id;
|
||||
AddButton((it->get_short_name(full_name)), host, model_id, full_name, is_selected,
|
||||
(host_type == htMoonraker));
|
||||
AddButton((it->get_short_name(full_name)), host, model_id, full_name, is_selected, (host_type == htMoonraker), apikey);
|
||||
m_exit_host.insert(host);
|
||||
}
|
||||
}
|
||||
@@ -399,47 +406,42 @@ void PrinterWebView::SetPresetChanged(bool status) {
|
||||
AddNetButton(device);
|
||||
}
|
||||
#endif
|
||||
if (m_isNetMode)
|
||||
ShowNetPrinterButton();
|
||||
else
|
||||
ShowLocalPrinterButton();
|
||||
//y3
|
||||
if (webisNetMode == isNetWeb) {
|
||||
ShowNetPrinterButton();
|
||||
for (DeviceButton* button : m_net_buttons) {
|
||||
if (m_ip == (button->getIPLabel())) {
|
||||
button->SetIsSelected(true);
|
||||
wxCommandEvent event(wxEVT_BUTTON, button->GetId());
|
||||
wxPostEvent(button, event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
toggleBar->SetValue(true);
|
||||
m_isNetMode = true;
|
||||
} else if (webisNetMode == isLocalWeb) {
|
||||
ShowLocalPrinterButton();
|
||||
}
|
||||
else if (webisNetMode == isLocalWeb)
|
||||
{
|
||||
if (m_exit_host.find(into_u8(m_ip)) != m_exit_host.end())
|
||||
{
|
||||
for (DeviceButton* button : m_buttons) {
|
||||
if (m_ip == (button->getIPLabel())) {
|
||||
for (DeviceButton* button : m_buttons)
|
||||
{
|
||||
if (m_ip == (button->getIPLabel()))
|
||||
{
|
||||
button->SetIsSelected(true);
|
||||
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
|
||||
{
|
||||
if (m_isNetMode)
|
||||
{
|
||||
ShowNetPrinterButton();
|
||||
wxString m_host = wxString::Format("file://%s/web/qidi/link_missing_connection.html", from_u8(resources_dir()));
|
||||
load_disconnect_url(m_host);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowLocalPrinterButton();
|
||||
wxString m_host = wxString::Format("file://%s/web/qidi/missing_connection.html", from_u8(resources_dir()));
|
||||
load_disconnect_url(m_host);
|
||||
}
|
||||
@@ -501,7 +503,8 @@ void PrinterWebView::AddButton(const wxString & device_name,
|
||||
const wxString & machine_type,
|
||||
const wxString & fullname,
|
||||
bool isSelected,
|
||||
bool isQIDI)
|
||||
bool isQIDI,
|
||||
const wxString & apikey)
|
||||
{
|
||||
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(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->SetBorderColor(wxColour(67, 67, 71));
|
||||
machine_button->SetCanFocus(false);
|
||||
@@ -607,23 +610,32 @@ void PrinterWebView::AddNetButton(const Device device)
|
||||
machine_button->Bind(wxEVT_BUTTON, [this, device](wxCommandEvent &event) {
|
||||
//y5
|
||||
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;
|
||||
std::string formattedHost2 = "http://fluidd2_" + formattedHost;
|
||||
if (formattedHost1 == m_web || formattedHost2 == m_web)
|
||||
return;
|
||||
if (device.isSpecialMachine)
|
||||
{
|
||||
if (wxGetApp().app_config->get("dark_color_mode") == "1")
|
||||
formattedHost = device.link_url + "&theme=dark";
|
||||
else
|
||||
formattedHost = device.link_url + "&theme=light";
|
||||
|
||||
if (m_isfluidd_1) {
|
||||
formattedHost = "http://fluidd_" + formattedHost;
|
||||
m_isfluidd_1 = false;
|
||||
} else {
|
||||
formattedHost = "http://fluidd2_" + formattedHost;
|
||||
m_isfluidd_1 = true;
|
||||
std::string formattedHost1 = "http://fluidd_" + formattedHost;
|
||||
std::string formattedHost2 = "http://fluidd2_" + formattedHost;
|
||||
if (formattedHost1 == m_web || formattedHost2 == m_web)
|
||||
return;
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
@@ -1056,7 +1068,7 @@ void PrinterWebView::load_url(wxString &url)
|
||||
}
|
||||
|
||||
for (DeviceButton *button : m_buttons) {
|
||||
if (url == (button->getIPLabel()))
|
||||
if ((button->getIPLabel()).find(m_ip) != std::string::npos)
|
||||
button->SetIsSelected(true);
|
||||
else
|
||||
button->SetIsSelected(false);
|
||||
|
||||
@@ -94,7 +94,8 @@ public:
|
||||
const wxString & machine_type,
|
||||
const wxString & fullname,
|
||||
bool isSelected,
|
||||
bool isQIDI);
|
||||
bool isQIDI,
|
||||
const wxString & apikey);
|
||||
void DeleteButton();
|
||||
void UnSelectedButton();
|
||||
void ShowNetPrinterButton();
|
||||
|
||||
@@ -23,7 +23,7 @@ END_EVENT_TABLE()
|
||||
* 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(
|
||||
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,
|
||||
wxString text,
|
||||
wxString icon,
|
||||
long style,
|
||||
wxSize iconSize /* = wxSize(16, 16)*/,
|
||||
wxString name_text,
|
||||
wxString ip_text)
|
||||
: DeviceButton(name_text,ip_text)
|
||||
wxString text,
|
||||
wxString icon,
|
||||
long style,
|
||||
wxSize iconSize /* = wxSize(16, 16)*/,
|
||||
wxString name_text,
|
||||
wxString ip_text,
|
||||
wxString api_text)
|
||||
: DeviceButton(name_text,ip_text, api_text)
|
||||
{
|
||||
m_icon_text = icon;
|
||||
Create(parent, text, icon, style, iconSize);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "../wxExtensions.hpp"
|
||||
#include "StaticBox.hpp"
|
||||
|
||||
|
||||
class DeviceButton : public StaticBox
|
||||
{
|
||||
wxSize textSize;
|
||||
@@ -22,7 +23,7 @@ class DeviceButton : public StaticBox
|
||||
static const int buttonHeight = 50;
|
||||
|
||||
public:
|
||||
DeviceButton(wxString name_text, wxString ip_text);
|
||||
DeviceButton(wxString name_text, wxString ip_text, wxString api_text);
|
||||
|
||||
DeviceButton(wxWindow *parent,
|
||||
wxString text,
|
||||
@@ -30,7 +31,8 @@ public:
|
||||
long style = 0,
|
||||
wxSize iconSize = wxSize(16, 16),
|
||||
wxString name_text = "",
|
||||
wxString ip_text = "");
|
||||
wxString ip_text = "",
|
||||
wxString api_text = "");
|
||||
//y3
|
||||
DeviceButton(wxWindow *parent, wxString icon, long style);
|
||||
|
||||
@@ -76,6 +78,7 @@ public:
|
||||
|
||||
wxString GetStateText() { return m_state_text; }
|
||||
|
||||
wxString GetApikey() { return m_apikey; };
|
||||
|
||||
void Rescale();
|
||||
|
||||
@@ -108,6 +111,7 @@ private:
|
||||
wxString m_progress_text = "(0%)";
|
||||
bool m_isSimpleMode = true;
|
||||
bool m_isSelected = false;
|
||||
wxString m_apikey;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
@@ -25,6 +25,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg (wxString &msg) const override;
|
||||
|
||||
@@ -23,6 +23,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg(wxString &msg) const override;
|
||||
|
||||
@@ -25,6 +25,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg(wxString &msg) const override;
|
||||
|
||||
@@ -24,6 +24,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg(wxString& msg) const override;
|
||||
|
||||
@@ -294,6 +294,82 @@ float Moonraker::get_progress(wxString &msg) const
|
||||
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
|
||||
{
|
||||
// POST /server/files/upload
|
||||
|
||||
@@ -32,6 +32,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg (wxString &msg) const override;
|
||||
|
||||
@@ -27,6 +27,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg (wxString &msg) const override;
|
||||
|
||||
@@ -46,7 +46,7 @@ PrintHost* PrintHost::get_print_host(DynamicPrintConfig *config)
|
||||
|
||||
if (tech == ptFFF) {
|
||||
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
|
||||
switch (host_type) {
|
||||
|
||||
@@ -56,6 +56,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg (wxString &msg) const = 0;
|
||||
virtual bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const = 0;
|
||||
|
||||
@@ -24,6 +24,7 @@ public:
|
||||
//B45
|
||||
virtual std::string get_status(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_failed_msg (wxString &msg) const override;
|
||||
bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const override;
|
||||
|
||||
@@ -7,7 +7,7 @@ endif()
|
||||
|
||||
set(SLIC3R_APP_NAME "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_RC_VERSION "1,1,6,0")
|
||||
set(SLIC3R_RC_VERSION_DOTS "1.1.6.0")
|
||||
set(SLIC3R_RC_VERSION "1,1,7,0")
|
||||
set(SLIC3R_RC_VERSION_DOTS "1.1.7.0")
|
||||
|
||||
Reference in New Issue
Block a user