Merge branch 'master' into fs_emboss_with_CGAL_5_4
# Conflicts: # src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp
This commit is contained in:
commit
f75f326f8e
1
.gitignore
vendored
1
.gitignore
vendored
@ -18,3 +18,4 @@ local-lib
|
|||||||
build-linux/*
|
build-linux/*
|
||||||
deps/build-linux/*
|
deps/build-linux/*
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
|
/.idea/
|
||||||
|
BIN
resources/profiles/Creality/ENDER3PRO_thumbnail.png
Normal file
BIN
resources/profiles/Creality/ENDER3PRO_thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
@ -1,4 +1,5 @@
|
|||||||
min_slic3r_version = 2.4.0-rc
|
min_slic3r_version = 2.4.0-rc
|
||||||
|
1.4.3 Added new filament profiles and SLA materials.
|
||||||
1.4.2 Added SLA material profiles.
|
1.4.2 Added SLA material profiles.
|
||||||
1.4.1 Updated firmware version.
|
1.4.1 Updated firmware version.
|
||||||
1.4.0 Updated for the PrusaSlicer 2.4.0-rc release. Updated SLA material colors.
|
1.4.0 Updated for the PrusaSlicer 2.4.0-rc release. Updated SLA material colors.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
name = Prusa Research
|
name = Prusa Research
|
||||||
# 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 PrusaSlicer configuration to be downgraded.
|
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||||
config_version = 1.4.2
|
config_version = 1.4.3
|
||||||
# Where to get the updates from?
|
# Where to get the updates from?
|
||||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
|
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
|
||||||
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||||
@ -477,7 +477,7 @@ perimeter_acceleration = 800
|
|||||||
perimeter_speed = 50
|
perimeter_speed = 50
|
||||||
solid_infill_speed = 50
|
solid_infill_speed = 50
|
||||||
top_infill_extrusion_width = 0.4
|
top_infill_extrusion_width = 0.4
|
||||||
top_solid_layers = 7
|
top_solid_layers = 8
|
||||||
bridge_flow_ratio = 1
|
bridge_flow_ratio = 1
|
||||||
bridge_speed = 25
|
bridge_speed = 25
|
||||||
|
|
||||||
@ -1543,6 +1543,7 @@ filament_max_volumetric_speed = 13
|
|||||||
[filament:*ABSMINI*]
|
[filament:*ABSMINI*]
|
||||||
# inherits = *ABS*
|
# inherits = *ABS*
|
||||||
bed_temperature = 100
|
bed_temperature = 100
|
||||||
|
first_layer_bed_temperature = 100
|
||||||
filament_retract_length = 2.7
|
filament_retract_length = 2.7
|
||||||
filament_retract_speed = nil
|
filament_retract_speed = nil
|
||||||
filament_deretract_speed = nil
|
filament_deretract_speed = nil
|
||||||
@ -2914,6 +2915,7 @@ inherits = *PET*
|
|||||||
filament_vendor = BASF
|
filament_vendor = BASF
|
||||||
filament_cost =
|
filament_cost =
|
||||||
filament_density = 1.33
|
filament_density = 1.33
|
||||||
|
filament_colour = #F7F7F7
|
||||||
first_layer_temperature = 220
|
first_layer_temperature = 220
|
||||||
first_layer_bed_temperature = 70
|
first_layer_bed_temperature = 70
|
||||||
temperature = 215
|
temperature = 215
|
||||||
@ -2925,7 +2927,7 @@ bridge_fan_speed = 100
|
|||||||
filament_type = PET
|
filament_type = PET
|
||||||
disable_fan_first_layers = 1
|
disable_fan_first_layers = 1
|
||||||
full_fan_speed_layer = 3
|
full_fan_speed_layer = 3
|
||||||
filament_notes = "BASF Forward AM Ultrafuse PET\nMaterial profile version 1.0\n\nMaterial Description\nUltrafuse PET is made from a premium PET and prints as easy as PLA, but is much stronger. The filament has a large operating window for printing (temperature vs. speed), so it can be used on every 3D-printer. PET will give you outstanding printing results: a good layer adhesion, a high resolution and it is easy to handle. Ultrafuse PET can be 100% recycled, is watertight and has great colors and finish.\n\nPrinting Recommendations:\nUltrafuse PET can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion.\n"
|
filament_notes = "Material Description\nUltrafuse PET is made from a premium PET and prints as easy as PLA, but is much stronger. The filament has a large operating window for printing (temperature vs. speed), so it can be used on every 3D-printer. PET will give you outstanding printing results: a good layer adhesion, a high resolution and it is easy to handle. Ultrafuse PET can be 100% recycled, is watertight and has great colors and finish.\n\nPrinting Recommendations:\nUltrafuse PET can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion."
|
||||||
filament_retract_length = 2
|
filament_retract_length = 2
|
||||||
filament_retract_speed = 40
|
filament_retract_speed = 40
|
||||||
filament_retract_before_travel = 2
|
filament_retract_before_travel = 2
|
||||||
@ -2943,7 +2945,7 @@ filament_cost =
|
|||||||
filament_density = 1.25
|
filament_density = 1.25
|
||||||
filament_spool_weight = 0
|
filament_spool_weight = 0
|
||||||
filament_colour = #FFFFFF
|
filament_colour = #FFFFFF
|
||||||
filament_notes = "BASF Forward AM Ultrafuse PLA PRO1\nMaterial profile version 1.0\n\nMaterial Description\nPLA PRO1 is an extremely versatile tough PLA filament made for professionals. It reduces your printing time by 30% – 80%, (subject to printer and object limitations) and the strength exceeds overall mechanical properties of printed ABS parts. Printer settings can be tuned to achieve blazing fast speeds or an unrivaled surface finish. The excellent quality control ensures the highest levels of consistency between colors and batches, it will perform as expected, every time.\n\nPrinting Recommendations:\nUltrafuse PLA PRO1 can be printed directly onto a clean build plate.\n"
|
filament_notes = "Material Description\nPLA PRO1 is an extremely versatile tough PLA filament made for professionals. It reduces your printing time by 30% – 80%, (subject to printer and object limitations) and the strength exceeds overall mechanical properties of printed ABS parts. Printer settings can be tuned to achieve blazing fast speeds or an unrivaled surface finish. The excellent quality control ensures the highest levels of consistency between colors and batches, it will perform as expected, every time.\n\nPrinting Recommendations:\nUltrafuse PLA PRO1 can be printed directly onto a clean build plate."
|
||||||
filament_retract_length = 2
|
filament_retract_length = 2
|
||||||
filament_retract_lift = 0
|
filament_retract_lift = 0
|
||||||
filament_retract_speed = 40
|
filament_retract_speed = 40
|
||||||
@ -2969,15 +2971,303 @@ max_fan_speed = 20
|
|||||||
bed_temperature = 100
|
bed_temperature = 100
|
||||||
disable_fan_first_layers = 3
|
disable_fan_first_layers = 3
|
||||||
filament_colour = #FFFFFF
|
filament_colour = #FFFFFF
|
||||||
filament_notes = "BASF Forward AM Ultrafuse ABS\nMaterial profile version 1.0\n\nMaterial Description\nABS is the second most used 3D printing material. It is strong, flexible and has a high heat resistance. ABS is a preferred plastic for engineers and professional applications. ABS can be smoothened with acetone. To make a proper 3D print with ABS you will need a heated print bed. The filament is available in 9 colors.\n\nPrinting Recommendations:\n\nApply Tape, adhesion spray or glue to a clean build plate to improve adhesion.\n"
|
filament_notes = "Material Description\nABS is the second most used 3D printing material. It is strong, flexible and has a high heat resistance. ABS is a preferred plastic for engineers and professional applications. ABS can be smoothened with acetone. To make a proper 3D print with ABS you will need a heated print bed. The filament is available in 9 colors.\n\nPrinting Recommendations:\n\nApply Tape, adhesion spray or glue to a clean build plate to improve adhesion."
|
||||||
filament_retract_length = 2
|
|
||||||
filament_retract_speed = 40
|
|
||||||
filament_retract_before_travel = 2
|
filament_retract_before_travel = 2
|
||||||
filament_wipe = 0
|
filament_wipe = 0
|
||||||
filament_retract_layer_change = 0
|
filament_retract_layer_change = 0
|
||||||
|
|
||||||
[filament:Ultrafuse ABS @MINI]
|
[filament:Ultrafuse ABS @MINI]
|
||||||
inherits = Ultrafuse ABS; *ABSMINI*
|
inherits = Ultrafuse ABS; *ABSMINI*
|
||||||
|
filament_retract_layer_change = nil
|
||||||
|
|
||||||
|
[filament:Ultrafuse ABS Fusion+]
|
||||||
|
inherits = Ultrafuse ABS
|
||||||
|
filament_density = 1.08
|
||||||
|
first_layer_bed_temperature = 105
|
||||||
|
temperature = 250
|
||||||
|
filament_colour = #FFF8D9
|
||||||
|
filament_notes = "Material Description\nABS Fusion+ made with Polyscope XILOY™ 3D is an engineering filament which has been optimized for 3D-printing. This special grade has been developed in collaboration with Polyscope Polymers - renowned for its material solutions in the automotive industry. ABS is a thermoplastic which is used in many applications. Although ABS has been classified as a standard material in 3D-printing it is known to be quite challenging to process. ABS Fusion+ combines the properties of ABS with an improved processability. The filament is based on an ABS grade which can be directly printed on glass without any adhesives or tape and has a higher success rate of prints due to extreme low warping."
|
||||||
|
filament_retract_before_travel = 2
|
||||||
|
filament_wipe = nil
|
||||||
|
filament_retract_layer_change = 0
|
||||||
|
filament_retract_lift = 0
|
||||||
|
|
||||||
|
[filament:Ultrafuse ABS Fusion+ @MINI]
|
||||||
|
inherits = Ultrafuse ABS Fusion+; *ABSMINI*
|
||||||
|
first_layer_bed_temperature = 100
|
||||||
|
filament_retract_layer_change = nil
|
||||||
|
|
||||||
|
[filament:Ultrafuse ASA]
|
||||||
|
inherits = Ultrafuse ABS Fusion+
|
||||||
|
filament_density = 1.07
|
||||||
|
filament_colour = #FFF4CA
|
||||||
|
first_layer_temperature = 275
|
||||||
|
temperature = 275
|
||||||
|
first_layer_bed_temperature = 110
|
||||||
|
bed_temperature = 105
|
||||||
|
filament_type = ASA
|
||||||
|
min_fan_speed = 25
|
||||||
|
max_fan_speed = 50
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
disable_fan_first_layers = 4
|
||||||
|
filament_max_volumetric_speed = 5
|
||||||
|
filament_notes = "Material Description\nUltrafuse ASA is a high-performance thermoplastic with similar mechanical properties as ABS. ASA offers additional benefits such as high outdoor weather resistance. The UV resistance, toughness, and rigidity make it an ideal material to 3D-print outdoor fixtures and appliances without losing its properties or color. When also taking into account the high heat resistance and high chemical resistance, this filament is a good choice for many types of applications.\n\nPrinting Recommendations:\nApply Magigoo PC, 3D lac or Dimafix to a clean build plate to improve adhesion."
|
||||||
|
|
||||||
|
[filament:Ultrafuse ASA @MINI]
|
||||||
|
inherits = Ultrafuse ASA; *ABSMINI*
|
||||||
|
filament_type = ASA
|
||||||
|
|
||||||
|
[filament:Ultrafuse HIPS]
|
||||||
|
inherits = Ultrafuse ABS
|
||||||
|
temperature = 250
|
||||||
|
filament_density = 1.02
|
||||||
|
filament_type = HIPS
|
||||||
|
min_fan_speed = 20
|
||||||
|
max_fan_speed = 20
|
||||||
|
filament_soluble = 1
|
||||||
|
filament_notes = "Material Description\nUltrafuse HIPS is a high-quality engineering thermoplastic, which is well known in the 3D-printing industry as a support material for ABS. But this material has additional properties to offer like good impact resistance, good dimensional stability, and easy post-processing. HiPS is a great material to use as a support for ABS because there is a good compatibility between the two materials, and HIPS is an easy breakaway support. Now you have the opportunity to create ABS models with complex geometry. HIPS is easy to post process with glue or with sanding paper."
|
||||||
|
|
||||||
|
[filament:Ultrafuse HIPS @MINI]
|
||||||
|
inherits = Ultrafuse HIPS; *ABSMINI*
|
||||||
|
filament_type = HIPS
|
||||||
|
min_fan_speed = 20
|
||||||
|
max_fan_speed = 20
|
||||||
|
|
||||||
|
[filament:Ultrafuse PA]
|
||||||
|
inherits = Fillamentum Nylon FX256
|
||||||
|
filament_vendor = BASF
|
||||||
|
filament_density = 1.12
|
||||||
|
filament_colour = #ECFAFF
|
||||||
|
first_layer_temperature = 240
|
||||||
|
temperature = 240
|
||||||
|
first_layer_bed_temperature = 80
|
||||||
|
bed_temperature = 70
|
||||||
|
min_fan_speed = 0
|
||||||
|
max_fan_speed = 0
|
||||||
|
bridge_fan_speed = 0
|
||||||
|
fan_below_layer_time = 30
|
||||||
|
slowdown_below_layer_time = 20
|
||||||
|
min_print_speed = 15
|
||||||
|
filament_max_volumetric_speed = 11
|
||||||
|
filament_retract_length = 1
|
||||||
|
filament_retract_lift = 0
|
||||||
|
filament_retract_before_travel = 2
|
||||||
|
filament_retract_layer_change = 0
|
||||||
|
filament_cost = 0
|
||||||
|
filament_spool_weight = 0
|
||||||
|
compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||||
|
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0"
|
||||||
|
filament_notes = "Material Description\nThe key features of Ultrafuse PA are the high strength and high modulus. Furthermore, Ultrafuse PA shows a good thermal distortion stability.\n\nPrinting Recommendations:\nApply PVA glue, Kapton tape or PA adhesive to a clean buildplate to improve adhesion."
|
||||||
|
|
||||||
|
[filament:Ultrafuse PA6 GF30]
|
||||||
|
inherits = Ultrafuse PA
|
||||||
|
filament_density = 1.17
|
||||||
|
first_layer_temperature = 270
|
||||||
|
temperature = 270
|
||||||
|
first_layer_bed_temperature = 100
|
||||||
|
bed_temperature = 100
|
||||||
|
filament_colour = #404040
|
||||||
|
fan_always_on = 1
|
||||||
|
min_fan_speed = 0
|
||||||
|
max_fan_speed = 50
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
disable_fan_first_layers = 1
|
||||||
|
full_fan_speed_layer = 3
|
||||||
|
slowdown_below_layer_time = 15
|
||||||
|
filament_max_volumetric_speed = 10
|
||||||
|
filament_retract_length = 1.2
|
||||||
|
filament_retract_speed = 40
|
||||||
|
filament_deretract_speed = 30
|
||||||
|
filament_retract_lift = nil
|
||||||
|
filament_wipe = 0
|
||||||
|
filament_notes = "Material Description\nUltrafuse® PA6 GF30 is a unique compound specifically developed for FFF printing. Due to the glass fiber content of 30%, parts tend to warp less. In addition the excellent layer adhesion and its compatibility with the water soluble support Ultrafuse® BVOH make this material the perfect solution to develop industrial applications on an FFF printer.\n\nWith its high wear and chemical resistance, high stiffness and strength, Ultrafuse® PA6 GF30 is perfect for a wide variety of applications in automotive, electronics or transportation.\n\nUltrafuse PA6 GF30 is designed for functional prototyping and demanding applications such as industrial tooling, transportation, electronics, small appliances, sports & leisure\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PA6 GF30 can be printed directly onto a clean build plate. For challenging prints, use Magigoo PA gluestick to improve adhesion."
|
||||||
|
compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||||
|
|
||||||
|
[filament:Ultrafuse PAHT-CF15]
|
||||||
|
inherits = Ultrafuse PA6 GF30
|
||||||
|
filament_density = 1.23
|
||||||
|
filament_notes = "Material Description\nPAHT CF15 is a high-performance 3D printing filament that opens new application fields in FFF printing. In parallel to its advanced mechanical properties, dimensional stability, and chemical resistance, it has very good processability. It works in any FFF printer with a hardened nozzle. In addition to that, it is compatible with water-soluble support material and HiPS, which allow printing complex geometries that work in challenging environments. PAHT CF15 has high heat resistance up to 130 °C and low moisture absorption.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PAHT-CF can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion."
|
||||||
|
|
||||||
|
[filament:Ultrafuse PC-ABS-FR]
|
||||||
|
inherits = Ultrafuse ABS
|
||||||
|
filament_colour = #505050
|
||||||
|
filament_density = 1.17
|
||||||
|
first_layer_temperature = 275
|
||||||
|
temperature = 275
|
||||||
|
first_layer_bed_temperature = 110
|
||||||
|
bed_temperature = 105
|
||||||
|
filament_type = PC
|
||||||
|
filament_max_volumetric_speed = 8
|
||||||
|
filament_wipe = nil
|
||||||
|
min_fan_speed = 20
|
||||||
|
max_fan_speed = 20
|
||||||
|
bridge_fan_speed = 30
|
||||||
|
disable_fan_first_layers = 4
|
||||||
|
compatible_printers_condition = printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||||
|
filament_notes = "Material Description\nUltrafuse® PC/ABS FR Black is a V-0 flame retardant blend of Polycarbonate and ABS – two of the most used thermoplastics for engineering & electrical applications. The combination of these two materials results in a premium material with a mix of the excellent mechanical properties of PC and the comparably low printing temperature of ABS. Combined with a halogen free flame retardant, parts printed with Ultrafuse® PC/ABS FR Black feature great tensile and impact strength, higher thermal resistance than ABS and can fulfill the requirements of the UL94 V-0 standard.\n\nPrinting Recommendations:\nApply Magigoo PC to a clean build plate to improve adhesion."
|
||||||
|
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.07{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0"
|
||||||
|
|
||||||
|
[filament:Ultrafuse PET-CF15]
|
||||||
|
inherits = Ultrafuse PET
|
||||||
|
filament_density = 1.36
|
||||||
|
filament_colour = #404040
|
||||||
|
first_layer_temperature = 270
|
||||||
|
temperature = 270
|
||||||
|
first_layer_bed_temperature = 75
|
||||||
|
bed_temperature = 75
|
||||||
|
min_fan_speed = 60
|
||||||
|
max_fan_speed = 100
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
disable_fan_first_layers = 1
|
||||||
|
full_fan_speed_layer = 3
|
||||||
|
slowdown_below_layer_time = 15
|
||||||
|
fan_below_layer_time = 30
|
||||||
|
filament_max_volumetric_speed = 10
|
||||||
|
filament_retract_length = 1.2
|
||||||
|
filament_retract_speed = 40
|
||||||
|
filament_deretract_speed = 30
|
||||||
|
filament_retract_lift = nil
|
||||||
|
filament_wipe = 0
|
||||||
|
start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K18{elsif nozzle_diameter[0]==0.8};{else}M900 K30{endif} ; Filament gcode LA 1.0"
|
||||||
|
filament_notes = "Material Description\nPET CF15 is a Carbon Fiber reinforced PET which has precisely tuned material properties, for a wide range of technical applications. The filament is very strong and stiff and has high heat resistance. With its high dimensional stability and low abrasiveness, the filament offers an easy to print experience which allows direct printing on glass or a PEI sheet. It is compatible with HiPS for breakaway support and water soluble support and has an excellent surface finish.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nUltrafuse PET-CF15 can be printed directly onto a clean build plate. For challenging prints, use 3dLac to improve adhesion."
|
||||||
|
compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||||
|
|
||||||
|
[filament:Ultrafuse PLA]
|
||||||
|
inherits = *PLA*
|
||||||
|
filament_vendor = BASF
|
||||||
|
filament_density = 1.25
|
||||||
|
full_fan_speed_layer = 3
|
||||||
|
filament_notes = "Material Description\nPLA is one of the most used materials for 3D printing. Ultrafuse PLA is available in a wide range of colors. The glossy feel often attracts those who print display models or items for household use. Many appreciate the plant-based origin of this material. When properly cooled, PLA has a high maximum printing speed and sharp printed corners. Combining this with low warping of the print makes it a popular plastic for home printers, hobbyists, prototyping and schools.\n\nPrinting Recommendations:\nUltrafuse PLA can be printed directly onto a clean build plate."
|
||||||
|
|
||||||
|
[filament:Ultrafuse PP]
|
||||||
|
inherits = Ultrafuse ABS
|
||||||
|
filament_density = 0.91
|
||||||
|
filament_colour = #F0F0F0
|
||||||
|
first_layer_temperature = 240
|
||||||
|
temperature = 240
|
||||||
|
first_layer_bed_temperature = 80
|
||||||
|
bed_temperature = 70
|
||||||
|
min_fan_speed = 100
|
||||||
|
max_fan_speed = 100
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
disable_fan_first_layers = 1
|
||||||
|
full_fan_speed_layer = 3
|
||||||
|
fan_below_layer_time = 60
|
||||||
|
slowdown_below_layer_time = 20
|
||||||
|
min_print_speed = 10
|
||||||
|
filament_type = PP
|
||||||
|
filament_max_volumetric_speed = 2.5
|
||||||
|
filament_retract_speed = 25
|
||||||
|
filament_deretract_speed = 25
|
||||||
|
filament_retract_layer_change = 0
|
||||||
|
filament_wipe = nil
|
||||||
|
filament_notes = "Material Description\nUltrafuse PP is high-performance thermoplastic with low density, high elasticity and high resistance to fatigue. The mechanical properties make it an ideal material for 3D-printing applications which have to endure high stress or strain. The filament has high chemical resistance and a high isolation value. PP is one of the most used materials in the world, due to its versatility and ability to engineer lightweight tough parts.\n\nPrinting Recommendations:\nApply PP tape or Magigoo PP adhesive to the buildplate for optimal adhesion."
|
||||||
|
compatible_printers_condition = printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||||
|
|
||||||
|
[filament:Ultrafuse PP-GF30]
|
||||||
|
inherits = Ultrafuse PP
|
||||||
|
filament_density = 1.07
|
||||||
|
filament_colour = #404040
|
||||||
|
first_layer_temperature = 260
|
||||||
|
temperature = 250
|
||||||
|
first_layer_bed_temperature = 90
|
||||||
|
bed_temperature = 40
|
||||||
|
min_fan_speed = 40
|
||||||
|
max_fan_speed = 75
|
||||||
|
fan_always_on = 1
|
||||||
|
fan_below_layer_time = 30
|
||||||
|
slowdown_below_layer_time = 15
|
||||||
|
min_print_speed = 15
|
||||||
|
filament_retract_length = 1.2
|
||||||
|
filament_retract_speed = 40
|
||||||
|
filament_deretract_speed = 30
|
||||||
|
filament_retract_lift = nil
|
||||||
|
filament_wipe = 0
|
||||||
|
filament_notes = "Ultrafuse PP GF30 is polypropylene, reinforced with 30% glass fiber content. The fibers in this compound are specially designed for 3D-printing filaments and are compatible with a wide range of standard FFF 3D-printers. The extreme stiffness makes this material highly suitable for demanding applications. Other key properties of PPGF30 are high heat resistance and improved UV-resistance. All these excellent properties make this filament highly suitable in an industrial environment.\n\nPrinting Recommendations:\nThis material contains fibers that have an abrasive effect on printer components. Use a hardened or Ruby nozzle with a diameter of 0.6 or larger for optimal performance and avoid damage to the nozzle.\n\nApply PP strapping tape or PPGF adhesive to a clean build plate for optimal adhesion."
|
||||||
|
compatible_printers_condition = nozzle_diameter[0]>=0.6 and printer_model!="MINI" and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
|
||||||
|
|
||||||
|
[filament:Ultrafuse TPC-45D]
|
||||||
|
inherits = *FLEX*
|
||||||
|
filament_vendor = BASF
|
||||||
|
extrusion_multiplier = 1
|
||||||
|
filament_density = 1.15
|
||||||
|
filament_colour = #0035EC
|
||||||
|
first_layer_temperature = 235
|
||||||
|
temperature = 235
|
||||||
|
first_layer_bed_temperature = 60
|
||||||
|
bed_temperature = 60
|
||||||
|
min_fan_speed = 10
|
||||||
|
max_fan_speed = 50
|
||||||
|
bridge_fan_speed = 80
|
||||||
|
fan_below_layer_time = 30
|
||||||
|
slowdown_below_layer_time = 15
|
||||||
|
min_print_speed = 15
|
||||||
|
fan_always_on = 1
|
||||||
|
cooling = 1
|
||||||
|
filament_max_volumetric_speed = 1.2
|
||||||
|
filament_retract_length = 1.2
|
||||||
|
filament_retract_speed = 25
|
||||||
|
filament_deretract_speed = 25
|
||||||
|
filament_retract_lift = 0
|
||||||
|
filament_wipe = nil
|
||||||
|
filament_retract_before_wipe = nil
|
||||||
|
filament_retract_before_travel = 2
|
||||||
|
filament_retract_layer_change = 0
|
||||||
|
filament_notes = "Material Description\nTPC 45D is a flexible, shore 45D, rubber-like Thermoplastic Copolyester Elastomer (TPE-C), which is derived from rapeseed oil and combines the best properties of elastomers (rubbers) and polyesters. The material delivers excellent adhesion in the Z-direction, meaning that the printed layers do not detach - even with extreme deformation.\n\nPrinting Recommendations:\nApply Magigoo Flex to a clean build plate to improve adhesion."
|
||||||
|
|
||||||
|
## [filament:Ultrafuse TPS-90A]
|
||||||
|
## inherits = Ultrafuse TPC-45D
|
||||||
|
## filament_density = 1.04
|
||||||
|
## extrusion_multiplier = 1.02
|
||||||
|
## filament_colour = #FFFFFF
|
||||||
|
## first_layer_temperature = 270
|
||||||
|
## temperature = 265
|
||||||
|
## first_layer_bed_temperature = 30
|
||||||
|
## bed_temperature = 30
|
||||||
|
## min_fan_speed = 20
|
||||||
|
## max_fan_speed = 75
|
||||||
|
## filament_notes = "Material Description\nUltrafuse® TPS 90A is an elastomer based on the raw material SEBS. The combination of durable and flexible building blocks leads to a very versatile material. Compared to other flexible 3D printing materials it shows more rubber-like soft touch haptics and better non-slip properties. Furthermore, the material shows a reduced moisture uptake, which allows for printing without pre-drying. Parts printed with Ultrafuse® TPS 90A show almost no visible layers or warpage, which makes it an excellent material choice for end-use parts. Producing multi-material parts is possible by printing it together with ABS.\n\nPrinting Recommendations:\nApply Tape, adhesion spray or glue to a clean build plate to improve adhesion."
|
||||||
|
|
||||||
|
[filament:Ultrafuse TPU-64D]
|
||||||
|
inherits = Ultrafuse TPC-45D
|
||||||
|
filament_density = 1.16
|
||||||
|
first_layer_temperature = 230
|
||||||
|
temperature = 225
|
||||||
|
first_layer_bed_temperature = 40
|
||||||
|
bed_temperature = 40
|
||||||
|
min_fan_speed = 20
|
||||||
|
max_fan_speed = 100
|
||||||
|
filament_notes = "Material Description\nUltrafuse® TPU 64D is the hardest elastomer in BASF Forward AM’s flexible productline. The material shows a relatively high rigidity while maintaining a certain flexibility. This filament is the perfect match for industrial applications requiring rigid parts being resistant to impact, wear and tear. Due to its property profile, the material can be used as an alternative for parts made from ABS and rubbers. Ultrafuse® TPU 64D is easy to print on direct drive and bowden style printers and is compatible with soluble BVOH support to realize the most complex geometries.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing."
|
||||||
|
|
||||||
|
[filament:Ultrafuse TPU-85A]
|
||||||
|
inherits = Ultrafuse TPU-64D
|
||||||
|
filament_density = 1.11
|
||||||
|
first_layer_temperature = 225
|
||||||
|
temperature = 220
|
||||||
|
filament_notes = "Material Description\nUltrafuse® TPU 85A comes in its natural white color. Chemical properties (e.g. resistance against particular substances) and tolerance for solvents can be made available, if these factors are relevant for a specific application. Generally, these properties correspond to publicly available data on polyether based TPUs. This material is not FDA conform. Good flexibility at low temperature, good wear performance and good damping behavior are the key features of Ultrafuse® TPU 85A.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing."
|
||||||
|
|
||||||
|
[filament:Ultrafuse TPU-95A]
|
||||||
|
inherits = Ultrafuse TPU-85A
|
||||||
|
filament_density = 1.14
|
||||||
|
first_layer_temperature = 230
|
||||||
|
temperature = 225
|
||||||
|
filament_notes = "Material Description\nUltrafuse® TPU 95A comes with a well-balanced profile of flexibility and durability. On top of that, it allows for easier and faster printing then softer TPU grades. Parts printed with Ultrafuse® TPU 95A show a high elongation, good impact resistance, excellent layer adhesion and a good resistance to oils and common industrially used chemicals. Due to its good printing behavior, Ultrafuse® TPU 95A is a good choice for starting printing flexible materials on both direct drive and bowden style printers.\n\nPrinting Recommendations:\nUltrafuse TPU can be printed directly onto a clean build plate. A small amount of 3Dlac can make removal easier after printing."
|
||||||
|
|
||||||
|
[filament:Ultrafuse rPET]
|
||||||
|
inherits = Ultrafuse PET
|
||||||
|
filament_density = 1.27
|
||||||
|
filament_colour = #9DC5FF
|
||||||
|
first_layer_temperature = 235
|
||||||
|
temperature = 235
|
||||||
|
first_layer_bed_temperature = 80
|
||||||
|
bed_temperature = 75
|
||||||
|
min_fan_speed = 50
|
||||||
|
max_fan_speed = 100
|
||||||
|
fan_below_layer_time = 15
|
||||||
|
filament_notes = "Material Description\nPET is mainly known by the well-known PET bottle material. This recycled has a natural transparent blueish look. It has excellent 3D printing properties and good mechanical characteristics."
|
||||||
|
filament_retract_length = 1.2
|
||||||
|
filament_retract_lift = 0.6
|
||||||
|
filament_wipe = nil
|
||||||
|
|
||||||
[filament:Ultrafuse Metal]
|
[filament:Ultrafuse Metal]
|
||||||
inherits = *ABSC*
|
inherits = *ABSC*
|
||||||
@ -4629,7 +4919,7 @@ material_colour = #FF8040
|
|||||||
inherits = *common 0.025*
|
inherits = *common 0.025*
|
||||||
exposure_time = 12
|
exposure_time = 12
|
||||||
initial_exposure_time = 30
|
initial_exposure_time = 30
|
||||||
material_type = Tough
|
material_type = Casting
|
||||||
material_vendor = 3DM
|
material_vendor = 3DM
|
||||||
material_colour = #B0B000
|
material_colour = #B0B000
|
||||||
|
|
||||||
@ -5084,6 +5374,38 @@ material_type = Tough
|
|||||||
material_vendor = Ameralabs
|
material_vendor = Ameralabs
|
||||||
material_colour = #C0C0C0
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough Light Grey @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 6
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough Clear @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough White @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #FFFFFF
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Flex Clear @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 4.5
|
||||||
|
initial_exposure_time = 30
|
||||||
|
material_type = Flexible
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
[sla_material:Siraya Tech Simple Clear @0.025]
|
[sla_material:Siraya Tech Simple Clear @0.025]
|
||||||
inherits = *common 0.025*
|
inherits = *common 0.025*
|
||||||
exposure_time = 8
|
exposure_time = 8
|
||||||
@ -5371,7 +5693,7 @@ inherits = *common 0.05*
|
|||||||
exposure_time = 12
|
exposure_time = 12
|
||||||
initial_exposure_time = 45
|
initial_exposure_time = 45
|
||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = Monocure
|
material_vendor = 3DM
|
||||||
material_colour = #EC0000
|
material_colour = #EC0000
|
||||||
|
|
||||||
[sla_material:Esun Bio-Photopolymer Resin White @0.05]
|
[sla_material:Esun Bio-Photopolymer Resin White @0.05]
|
||||||
@ -5550,6 +5872,38 @@ material_type = Tough
|
|||||||
material_vendor = Photocentric
|
material_vendor = Photocentric
|
||||||
material_colour = #C0C0C0
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough Light Grey @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 8.5
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough Clear @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 7
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough White @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 7.5
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #FFFFFF
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Flex Clear @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 6.5
|
||||||
|
initial_exposure_time = 30
|
||||||
|
material_type = Flexible
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
[sla_material:Siraya Tech Simple Clear @0.05]
|
[sla_material:Siraya Tech Simple Clear @0.05]
|
||||||
inherits = *common 0.05*
|
inherits = *common 0.05*
|
||||||
exposure_time = 10
|
exposure_time = 10
|
||||||
@ -6270,6 +6624,38 @@ material_type = Tough
|
|||||||
material_vendor = Made for Prusa
|
material_vendor = Made for Prusa
|
||||||
material_colour = #FF8040
|
material_colour = #FF8040
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough Light Grey @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 14
|
||||||
|
initial_exposure_time = 45
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough Clear @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 13
|
||||||
|
initial_exposure_time = 45
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Tough White @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 13
|
||||||
|
initial_exposure_time = 45
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #FFFFFF
|
||||||
|
|
||||||
|
[sla_material:PrimaCreator Flex Clear @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 12
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Flexible
|
||||||
|
material_vendor = PrimaCreator
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
## SL1S materials ##
|
## SL1S materials ##
|
||||||
|
|
||||||
## 0.025 SL1S
|
## 0.025 SL1S
|
||||||
@ -6916,6 +7302,310 @@ material_type = Tough
|
|||||||
material_vendor = Peopoly
|
material_vendor = Peopoly
|
||||||
material_colour = #F8F8F8
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:3DM-ABS @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.6
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = 3DM
|
||||||
|
material_colour = #FF8040
|
||||||
|
|
||||||
|
[sla_material:3DM-DENT @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.3
|
||||||
|
initial_exposure_time = 36
|
||||||
|
material_type = Dental
|
||||||
|
material_vendor = 3DM
|
||||||
|
material_colour = #FFEEE6
|
||||||
|
|
||||||
|
[sla_material:3DM-HR Green @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = 3DM
|
||||||
|
material_colour = #00B900
|
||||||
|
|
||||||
|
[sla_material:3DM-HR Red Wine @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 6
|
||||||
|
initial_exposure_time = 32
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = 3DM
|
||||||
|
material_colour = #EC0000
|
||||||
|
|
||||||
|
[sla_material:3DM-Vulcan Gold @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Casting
|
||||||
|
material_vendor = 3DM
|
||||||
|
material_colour = #B0B000
|
||||||
|
|
||||||
|
[sla_material:3DM-XPRO White @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = 3DM
|
||||||
|
material_colour = #FFFFFF
|
||||||
|
|
||||||
|
[sla_material:Asiga Denta Model @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Dental
|
||||||
|
material_vendor = Asiga
|
||||||
|
material_colour = #FFEEE6
|
||||||
|
|
||||||
|
[sla_material:Asiga PlasGRAY @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 9.7
|
||||||
|
initial_exposure_time = 48
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Asiga
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:BlueCast EcoGray @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = BlueCast
|
||||||
|
material_colour = #808080
|
||||||
|
|
||||||
|
[sla_material:BlueCast Phrozen Wax @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 5.3
|
||||||
|
initial_exposure_time = 40
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = BlueCast
|
||||||
|
material_colour = #007EFD
|
||||||
|
|
||||||
|
[sla_material:NextDent Model 2.0 Grey @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 4
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Dental
|
||||||
|
material_vendor = NextDent
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:NextDent Cast Purple @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3
|
||||||
|
initial_exposure_time = 16
|
||||||
|
material_type = Casting
|
||||||
|
material_vendor = NextDent
|
||||||
|
material_colour = #E800E8
|
||||||
|
|
||||||
|
[sla_material:Siraya Tech Tenacious @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.7
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Siraya Tech
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:Siraya Tech Blu Clear V2 @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3.3
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Siraya Tech
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:Siraya Tech Blu Blue @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 4
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Siraya Tech
|
||||||
|
material_colour = #007EFD
|
||||||
|
|
||||||
|
[sla_material:Siraya Tech Fast Black @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Siraya Tech
|
||||||
|
material_colour = #595959
|
||||||
|
|
||||||
|
[sla_material:Siraya Tech Fast Grey @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3.3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Siraya Tech
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:Siraya Tech Simple Clear @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3.3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Siraya Tech
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:Siraya Tech Sculpt @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.7
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Siraya Tech
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:Harz Labs Model Resin Cherry @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 4.3
|
||||||
|
initial_exposure_time = 16
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Harz Labs
|
||||||
|
material_colour = #EC0000
|
||||||
|
|
||||||
|
[sla_material:Harz Labs Model Resin Black @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 4.3
|
||||||
|
initial_exposure_time = 16
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Harz Labs
|
||||||
|
material_colour = #595959
|
||||||
|
|
||||||
|
[sla_material:Harz Labs Basic Resin Red @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 4.3
|
||||||
|
initial_exposure_time = 16
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Harz Labs
|
||||||
|
material_colour = #EC0000
|
||||||
|
|
||||||
|
[sla_material:Resinworks 3D Violet @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 5.7
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Resinworks 3D
|
||||||
|
material_colour = #E800E8
|
||||||
|
|
||||||
|
[sla_material:FunToDo Industrial Blend Unpigmented @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 1.3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = FunToDo
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:FunToDo Snow White @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3.3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = FunToDo
|
||||||
|
material_colour = #FFFFFF
|
||||||
|
|
||||||
|
[sla_material:FunToDo Ash Grey @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3
|
||||||
|
initial_exposure_time = 32
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = FunToDo
|
||||||
|
material_colour = #808080
|
||||||
|
|
||||||
|
[sla_material:Ameralabs AMD 3 LED @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 1.7
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Ameralabs
|
||||||
|
material_colour = #808080
|
||||||
|
|
||||||
|
[sla_material:Dragon Resin Metalshine Metal Grey @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 10
|
||||||
|
initial_exposure_time = 40
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Dragon Resin
|
||||||
|
material_colour = #808080
|
||||||
|
|
||||||
|
[sla_material:Dragon Resin Metalshine Dark Brass @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 10
|
||||||
|
initial_exposure_time = 40
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Dragon Resin
|
||||||
|
material_colour = #B0B000
|
||||||
|
|
||||||
|
[sla_material:Dragon Resin Metalshine Brass @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 10
|
||||||
|
initial_exposure_time = 40
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Dragon Resin
|
||||||
|
material_colour = #B0B000
|
||||||
|
|
||||||
|
[sla_material:Esun Bio-Photopolymer Resin White @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.7
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Esun
|
||||||
|
material_colour = #FFFFFF
|
||||||
|
|
||||||
|
[sla_material:Esun Standard Resin Black @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.3
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Esun
|
||||||
|
material_colour = #595959
|
||||||
|
|
||||||
|
[sla_material:Monocure 3D Black Rapid Resin @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Monocure
|
||||||
|
material_colour = #595959
|
||||||
|
|
||||||
|
[sla_material:Monocure 3D Blue Rapid Resin @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Monocure
|
||||||
|
material_colour = #007EFD
|
||||||
|
|
||||||
|
[sla_material:Monocure 3D Clear Rapid Resin @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.7
|
||||||
|
initial_exposure_time = 32
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Monocure
|
||||||
|
material_colour = #F8F8F8
|
||||||
|
|
||||||
|
[sla_material:Monocure 3D Grey Rapid Resin @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3.3
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Monocure
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:Monocure 3D White Rapid Resin @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 3.3
|
||||||
|
initial_exposure_time = 28
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Monocure
|
||||||
|
material_colour = #FFFFFF
|
||||||
|
|
||||||
|
[sla_material:Photocentric Hard Grey @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 24
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Photocentric
|
||||||
|
material_colour = #808080
|
||||||
|
|
||||||
## 0.1 SL1S
|
## 0.1 SL1S
|
||||||
|
|
||||||
## Prusa Polymers 0.1
|
## Prusa Polymers 0.1
|
||||||
|
@ -313,7 +313,7 @@ static std::vector<InnerBrimExPolygons> inner_brim_area(const Print
|
|||||||
// After 7ff76d07684858fd937ef2f5d863f105a10f798e offset and shrink don't work with CW polygons (holes), so let's make it CCW.
|
// After 7ff76d07684858fd937ef2f5d863f105a10f798e offset and shrink don't work with CW polygons (holes), so let's make it CCW.
|
||||||
Polygons ex_poly_holes_reversed = ex_poly.holes;
|
Polygons ex_poly_holes_reversed = ex_poly.holes;
|
||||||
polygons_reverse(ex_poly_holes_reversed);
|
polygons_reverse(ex_poly_holes_reversed);
|
||||||
for (const PrintInstance &instance : object->instances()) {
|
for ([[maybe_unused]] const PrintInstance &instance : object->instances()) {
|
||||||
++polygon_idx; // Increase idx because of the contour of the ExPolygon.
|
++polygon_idx; // Increase idx because of the contour of the ExPolygon.
|
||||||
|
|
||||||
if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner)
|
if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner)
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <boost/range/adaptor/reversed.hpp>
|
#include <boost/range/adaptor/reversed.hpp>
|
||||||
|
|
||||||
|
//#define AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
struct TravelPoint
|
struct TravelPoint
|
||||||
@ -354,8 +356,6 @@ static Polyline to_polyline(const std::vector<TravelPoint> &travel)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// #define AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT
|
|
||||||
|
|
||||||
#ifdef AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT
|
#ifdef AVOID_CROSSING_PERIMETERS_DEBUG_OUTPUT
|
||||||
static void export_travel_to_svg(const Polygons &boundary,
|
static void export_travel_to_svg(const Polygons &boundary,
|
||||||
const Line &original_travel,
|
const Line &original_travel,
|
||||||
@ -521,6 +521,25 @@ static float get_perimeter_spacing_external(const Layer &layer)
|
|||||||
return perimeter_spacing;
|
return perimeter_spacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns average perimeter width calculated from all LayerRegion within the layer.
|
||||||
|
static float get_external_perimeter_width(const Layer &layer)
|
||||||
|
{
|
||||||
|
size_t regions_count = 0;
|
||||||
|
float perimeter_width = 0.f;
|
||||||
|
for (const LayerRegion *layer_region : layer.regions())
|
||||||
|
if (layer_region != nullptr && !layer_region->slices.empty()) {
|
||||||
|
perimeter_width += float(layer_region->flow(frExternalPerimeter).scaled_width());
|
||||||
|
++regions_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(perimeter_width >= 0.f);
|
||||||
|
if (regions_count != 0)
|
||||||
|
perimeter_width /= float(regions_count);
|
||||||
|
else
|
||||||
|
perimeter_width = get_default_perimeter_spacing(*layer.object());
|
||||||
|
return perimeter_width;
|
||||||
|
}
|
||||||
|
|
||||||
// Called by avoid_perimeters() and by simplify_travel_heuristics().
|
// Called by avoid_perimeters() and by simplify_travel_heuristics().
|
||||||
static size_t avoid_perimeters_inner(const AvoidCrossingPerimeters::Boundary &boundary,
|
static size_t avoid_perimeters_inner(const AvoidCrossingPerimeters::Boundary &boundary,
|
||||||
const Point &start,
|
const Point &start,
|
||||||
@ -659,22 +678,22 @@ static size_t avoid_perimeters(const AvoidCrossingPerimeters::Boundary &boundary
|
|||||||
// Check if anyone of ExPolygons contains whole travel.
|
// Check if anyone of ExPolygons contains whole travel.
|
||||||
// called by need_wipe() and AvoidCrossingPerimeters::travel_to()
|
// called by need_wipe() and AvoidCrossingPerimeters::travel_to()
|
||||||
// FIXME Lukas H.: Maybe similar approach could also be used for ExPolygon::contains()
|
// FIXME Lukas H.: Maybe similar approach could also be used for ExPolygon::contains()
|
||||||
static bool any_expolygon_contains(const ExPolygons &ex_polygons,
|
static bool any_expolygon_contains(const ExPolygons &lslices_offset,
|
||||||
const std::vector<BoundingBox> &ex_polygons_bboxes,
|
const std::vector<BoundingBox> &lslices_offset_bboxes,
|
||||||
const EdgeGrid::Grid &grid_lslice,
|
const EdgeGrid::Grid &grid_lslices_offset,
|
||||||
const Line &travel)
|
const Line &travel)
|
||||||
{
|
{
|
||||||
assert(ex_polygons.size() == ex_polygons_bboxes.size());
|
assert(lslices_offset.size() == lslices_offset_bboxes.size());
|
||||||
if(!grid_lslice.bbox().contains(travel.a) || !grid_lslice.bbox().contains(travel.b))
|
if(!grid_lslices_offset.bbox().contains(travel.a) || !grid_lslices_offset.bbox().contains(travel.b))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
FirstIntersectionVisitor visitor(grid_lslice);
|
FirstIntersectionVisitor visitor(grid_lslices_offset);
|
||||||
visitor.pt_current = &travel.a;
|
visitor.pt_current = &travel.a;
|
||||||
visitor.pt_next = &travel.b;
|
visitor.pt_next = &travel.b;
|
||||||
grid_lslice.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor);
|
grid_lslices_offset.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor);
|
||||||
if (!visitor.intersect) {
|
if (!visitor.intersect) {
|
||||||
for (const ExPolygon &ex_polygon : ex_polygons) {
|
for (const ExPolygon &ex_polygon : lslices_offset) {
|
||||||
const BoundingBox &bbox = ex_polygons_bboxes[&ex_polygon - &ex_polygons.front()];
|
const BoundingBox &bbox = lslices_offset_bboxes[&ex_polygon - &lslices_offset.front()];
|
||||||
if (bbox.contains(travel.a) && bbox.contains(travel.b) && ex_polygon.contains(travel.a))
|
if (bbox.contains(travel.a) && bbox.contains(travel.b) && ex_polygon.contains(travel.a))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -684,18 +703,18 @@ static bool any_expolygon_contains(const ExPolygons &ex_polygons,
|
|||||||
|
|
||||||
// Check if anyone of ExPolygons contains whole travel.
|
// Check if anyone of ExPolygons contains whole travel.
|
||||||
// called by need_wipe()
|
// called by need_wipe()
|
||||||
static bool any_expolygon_contains(const ExPolygons &ex_polygons, const std::vector<BoundingBox> &ex_polygons_bboxes, const EdgeGrid::Grid &grid_lslice, const Polyline &travel)
|
static bool any_expolygon_contains(const ExPolygons &ex_polygons, const std::vector<BoundingBox> &ex_polygons_bboxes, const EdgeGrid::Grid &grid_lslice_offset, const Polyline &travel)
|
||||||
{
|
{
|
||||||
assert(ex_polygons.size() == ex_polygons_bboxes.size());
|
assert(ex_polygons.size() == ex_polygons_bboxes.size());
|
||||||
if(std::any_of(travel.points.begin(), travel.points.end(), [&grid_lslice](const Point &point) { return !grid_lslice.bbox().contains(point); }))
|
if(std::any_of(travel.points.begin(), travel.points.end(), [&grid_lslice_offset](const Point &point) { return !grid_lslice_offset.bbox().contains(point); }))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
FirstIntersectionVisitor visitor(grid_lslice);
|
FirstIntersectionVisitor visitor(grid_lslice_offset);
|
||||||
bool any_intersection = false;
|
bool any_intersection = false;
|
||||||
for (size_t line_idx = 1; line_idx < travel.size(); ++line_idx) {
|
for (size_t line_idx = 1; line_idx < travel.size(); ++line_idx) {
|
||||||
visitor.pt_current = &travel.points[line_idx - 1];
|
visitor.pt_current = &travel.points[line_idx - 1];
|
||||||
visitor.pt_next = &travel.points[line_idx];
|
visitor.pt_next = &travel.points[line_idx];
|
||||||
grid_lslice.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor);
|
grid_lslice_offset.visit_cells_intersecting_line(*visitor.pt_current, *visitor.pt_next, visitor);
|
||||||
any_intersection = visitor.intersect;
|
any_intersection = visitor.intersect;
|
||||||
if (any_intersection) break;
|
if (any_intersection) break;
|
||||||
}
|
}
|
||||||
@ -711,14 +730,14 @@ static bool any_expolygon_contains(const ExPolygons &ex_polygons, const std::vec
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool need_wipe(const GCode &gcodegen,
|
static bool need_wipe(const GCode &gcodegen,
|
||||||
const EdgeGrid::Grid &grid_lslice,
|
const ExPolygons &lslices_offset,
|
||||||
const Line &original_travel,
|
const std::vector<BoundingBox> &lslices_offset_bboxes,
|
||||||
const Polyline &result_travel,
|
const EdgeGrid::Grid &grid_lslices_offset,
|
||||||
const size_t intersection_count)
|
const Line &original_travel,
|
||||||
|
const Polyline &result_travel,
|
||||||
|
const size_t intersection_count)
|
||||||
{
|
{
|
||||||
const ExPolygons &lslices = gcodegen.layer()->lslices;
|
|
||||||
const std::vector<BoundingBox> &lslices_bboxes = gcodegen.layer()->lslices_bboxes;
|
|
||||||
bool z_lift_enabled = gcodegen.config().retract_lift.get_at(gcodegen.writer().extruder()->id()) > 0.;
|
bool z_lift_enabled = gcodegen.config().retract_lift.get_at(gcodegen.writer().extruder()->id()) > 0.;
|
||||||
bool wipe_needed = false;
|
bool wipe_needed = false;
|
||||||
|
|
||||||
@ -728,16 +747,16 @@ static bool need_wipe(const GCode &gcodegen,
|
|||||||
// The original layer is intersected with defined boundaries. Then it is necessary to make a detailed test.
|
// The original layer is intersected with defined boundaries. Then it is necessary to make a detailed test.
|
||||||
// If the z-lift is enabled, then a wipe is needed when the original travel leads above the holes.
|
// If the z-lift is enabled, then a wipe is needed when the original travel leads above the holes.
|
||||||
if (z_lift_enabled) {
|
if (z_lift_enabled) {
|
||||||
if (any_expolygon_contains(lslices, lslices_bboxes, grid_lslice, original_travel)) {
|
if (any_expolygon_contains(lslices_offset, lslices_offset_bboxes, grid_lslices_offset, original_travel)) {
|
||||||
// Check if original_travel and result_travel are not same.
|
// Check if original_travel and result_travel are not same.
|
||||||
// If both are the same, then it is possible to skip testing of result_travel
|
// If both are the same, then it is possible to skip testing of result_travel
|
||||||
wipe_needed = !(result_travel.size() > 2 && result_travel.first_point() == original_travel.a && result_travel.last_point() == original_travel.b) &&
|
wipe_needed = !(result_travel.size() > 2 && result_travel.first_point() == original_travel.a && result_travel.last_point() == original_travel.b) &&
|
||||||
!any_expolygon_contains(lslices, lslices_bboxes, grid_lslice, result_travel);
|
!any_expolygon_contains(lslices_offset, lslices_offset_bboxes, grid_lslices_offset, result_travel);
|
||||||
} else {
|
} else {
|
||||||
wipe_needed = true;
|
wipe_needed = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wipe_needed = !any_expolygon_contains(lslices, lslices_bboxes, grid_lslice, result_travel);
|
wipe_needed = !any_expolygon_contains(lslices_offset, lslices_offset_bboxes, grid_lslices_offset, result_travel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1163,10 +1182,8 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point &
|
|||||||
Vec2d startf = start.cast<double>();
|
Vec2d startf = start.cast<double>();
|
||||||
Vec2d endf = end .cast<double>();
|
Vec2d endf = end .cast<double>();
|
||||||
|
|
||||||
const ExPolygons &lslices = gcodegen.layer()->lslices;
|
bool is_support_layer = dynamic_cast<const SupportLayer *>(gcodegen.layer()) != nullptr;
|
||||||
const std::vector<BoundingBox> &lslices_bboxes = gcodegen.layer()->lslices_bboxes;
|
if (!use_external && (is_support_layer || (!m_lslices_offset.empty() && !any_expolygon_contains(m_lslices_offset, m_lslices_offset_bboxes, m_grid_lslices_offset, travel)))) {
|
||||||
bool is_support_layer = dynamic_cast<const SupportLayer *>(gcodegen.layer()) != nullptr;
|
|
||||||
if (!use_external && (is_support_layer || (!lslices.empty() && !any_expolygon_contains(lslices, lslices_bboxes, m_grid_lslice, travel)))) {
|
|
||||||
// Initialize m_internal only when it is necessary.
|
// Initialize m_internal only when it is necessary.
|
||||||
if (m_internal.boundaries.empty())
|
if (m_internal.boundaries.empty())
|
||||||
init_boundary(&m_internal, to_polygons(get_boundary(*gcodegen.layer())));
|
init_boundary(&m_internal, to_polygons(get_boundary(*gcodegen.layer())));
|
||||||
@ -1216,7 +1233,7 @@ Polyline AvoidCrossingPerimeters::travel_to(const GCode &gcodegen, const Point &
|
|||||||
} else if (max_detour_length_exceeded) {
|
} else if (max_detour_length_exceeded) {
|
||||||
*could_be_wipe_disabled = false;
|
*could_be_wipe_disabled = false;
|
||||||
} else
|
} else
|
||||||
*could_be_wipe_disabled = !need_wipe(gcodegen, m_grid_lslice, travel, result_pl, travel_intersection_count);
|
*could_be_wipe_disabled = !need_wipe(gcodegen, m_lslices_offset, m_lslices_offset_bboxes, m_grid_lslices_offset, travel, result_pl, travel_intersection_count);
|
||||||
|
|
||||||
return result_pl;
|
return result_pl;
|
||||||
}
|
}
|
||||||
@ -1227,13 +1244,21 @@ void AvoidCrossingPerimeters::init_layer(const Layer &layer)
|
|||||||
{
|
{
|
||||||
m_internal.clear();
|
m_internal.clear();
|
||||||
m_external.clear();
|
m_external.clear();
|
||||||
|
m_lslices_offset.clear();
|
||||||
|
m_lslices_offset_bboxes.clear();
|
||||||
|
|
||||||
|
float perimeter_offset = -get_external_perimeter_width(layer) / float(2.);
|
||||||
|
m_lslices_offset = offset_ex(layer.lslices, perimeter_offset);
|
||||||
|
|
||||||
|
m_lslices_offset_bboxes.reserve(m_lslices_offset.size());
|
||||||
|
for (const ExPolygon &ex_poly : m_lslices_offset)
|
||||||
|
m_lslices_offset_bboxes.emplace_back(get_extents(ex_poly));
|
||||||
|
|
||||||
BoundingBox bbox_slice(get_extents(layer.lslices));
|
BoundingBox bbox_slice(get_extents(layer.lslices));
|
||||||
bbox_slice.offset(SCALED_EPSILON);
|
bbox_slice.offset(SCALED_EPSILON);
|
||||||
|
|
||||||
m_grid_lslice.set_bbox(bbox_slice);
|
m_grid_lslices_offset.set_bbox(bbox_slice);
|
||||||
//FIXME 1mm grid?
|
m_grid_lslices_offset.create(m_lslices_offset, coord_t(scale_(1.)));
|
||||||
m_grid_lslice.create(layer.lslices, coord_t(scale_(1.)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -58,8 +58,11 @@ private:
|
|||||||
// we enable it by default for the first travel move in print
|
// we enable it by default for the first travel move in print
|
||||||
bool m_disabled_once { true };
|
bool m_disabled_once { true };
|
||||||
|
|
||||||
|
// Lslices offseted by half an external perimeter width. Used for detection if line or polyline is inside of any polygon.
|
||||||
|
ExPolygons m_lslices_offset;
|
||||||
|
std::vector<BoundingBox> m_lslices_offset_bboxes;
|
||||||
// Used for detection of line or polyline is inside of any polygon.
|
// Used for detection of line or polyline is inside of any polygon.
|
||||||
EdgeGrid::Grid m_grid_lslice;
|
EdgeGrid::Grid m_grid_lslices_offset;
|
||||||
// Store all needed data for travels inside object
|
// Store all needed data for travels inside object
|
||||||
Boundary m_internal;
|
Boundary m_internal;
|
||||||
// Store all needed data for travels outside object
|
// Store all needed data for travels outside object
|
||||||
|
@ -203,7 +203,6 @@ set(SLIC3R_GUI_SOURCES
|
|||||||
GUI/Mouse3DController.hpp
|
GUI/Mouse3DController.hpp
|
||||||
GUI/DoubleSlider.cpp
|
GUI/DoubleSlider.cpp
|
||||||
GUI/DoubleSlider.hpp
|
GUI/DoubleSlider.hpp
|
||||||
GUI/DoubleSlider_Utils.hpp
|
|
||||||
GUI/Notebook.cpp
|
GUI/Notebook.cpp
|
||||||
GUI/Notebook.hpp
|
GUI/Notebook.hpp
|
||||||
GUI/ObjectDataViewModel.cpp
|
GUI/ObjectDataViewModel.cpp
|
||||||
|
@ -603,10 +603,7 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas)
|
|||||||
if (bottom)
|
if (bottom)
|
||||||
glsafe(::glFrontFace(GL_CW));
|
glsafe(::glFrontFace(GL_CW));
|
||||||
|
|
||||||
unsigned int stride = m_triangles.get_vertex_data_size();
|
const unsigned int stride = m_triangles.get_vertex_data_size();
|
||||||
|
|
||||||
GLint position_id = shader->get_attrib_location("v_position");
|
|
||||||
GLint tex_coords_id = shader->get_attrib_location("v_tex_coords");
|
|
||||||
|
|
||||||
// show the temporary texture while no compressed data is available
|
// show the temporary texture while no compressed data is available
|
||||||
GLuint tex_id = (GLuint)m_temp_texture.get_id();
|
GLuint tex_id = (GLuint)m_temp_texture.get_id();
|
||||||
@ -616,22 +613,16 @@ void Bed3D::render_texture(bool bottom, GLCanvas3D& canvas)
|
|||||||
glsafe(::glBindTexture(GL_TEXTURE_2D, tex_id));
|
glsafe(::glBindTexture(GL_TEXTURE_2D, tex_id));
|
||||||
glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id));
|
glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id));
|
||||||
|
|
||||||
if (position_id != -1) {
|
glsafe(::glVertexPointer(3, GL_FLOAT, stride, (const void*)(intptr_t)m_triangles.get_position_offset()));
|
||||||
glsafe(::glEnableVertexAttribArray(position_id));
|
glsafe(::glEnableClientState(GL_VERTEX_ARRAY));
|
||||||
glsafe(::glVertexAttribPointer(position_id, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*)(intptr_t)m_triangles.get_position_offset()));
|
|
||||||
}
|
glsafe(::glTexCoordPointer(2, GL_FLOAT, stride, (const void*)(intptr_t)m_triangles.get_tex_coords_offset()));
|
||||||
if (tex_coords_id != -1) {
|
glsafe(::glEnableClientState(GL_TEXTURE_COORD_ARRAY));
|
||||||
glsafe(::glEnableVertexAttribArray(tex_coords_id));
|
|
||||||
glsafe(::glVertexAttribPointer(tex_coords_id, 2, GL_FLOAT, GL_FALSE, stride, (GLvoid*)(intptr_t)m_triangles.get_tex_coords_offset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
glsafe(::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)m_triangles.get_vertices_count()));
|
glsafe(::glDrawArrays(GL_TRIANGLES, 0, (GLsizei)m_triangles.get_vertices_count()));
|
||||||
|
|
||||||
if (tex_coords_id != -1)
|
glsafe(::glDisableClientState(GL_TEXTURE_COORD_ARRAY));
|
||||||
glsafe(::glDisableVertexAttribArray(tex_coords_id));
|
glsafe(::glDisableClientState(GL_VERTEX_ARRAY));
|
||||||
|
|
||||||
if (position_id != -1)
|
|
||||||
glsafe(::glDisableVertexAttribArray(position_id));
|
|
||||||
|
|
||||||
glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0));
|
glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0));
|
||||||
glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
|
glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
|
||||||
|
@ -122,6 +122,10 @@ Control::Control( wxWindow *parent,
|
|||||||
this->Bind(wxEVT_KEY_UP, &Control::OnKeyUp, this);
|
this->Bind(wxEVT_KEY_UP, &Control::OnKeyUp, this);
|
||||||
this->Bind(wxEVT_RIGHT_DOWN, &Control::OnRightDown,this);
|
this->Bind(wxEVT_RIGHT_DOWN, &Control::OnRightDown,this);
|
||||||
this->Bind(wxEVT_RIGHT_UP, &Control::OnRightUp, this);
|
this->Bind(wxEVT_RIGHT_UP, &Control::OnRightUp, this);
|
||||||
|
this->Bind(wxEVT_SIZE, [this](wxSizeEvent& event) {
|
||||||
|
m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step());
|
||||||
|
event.Skip();
|
||||||
|
});
|
||||||
|
|
||||||
// control's view variables
|
// control's view variables
|
||||||
SLIDER_MARGIN = 4 + GUI::wxGetApp().em_unit();
|
SLIDER_MARGIN = 4 + GUI::wxGetApp().em_unit();
|
||||||
@ -137,8 +141,14 @@ Control::Control( wxWindow *parent,
|
|||||||
m_line_pens = { &DARK_GREY_PEN, &GREY_PEN, &LIGHT_GREY_PEN };
|
m_line_pens = { &DARK_GREY_PEN, &GREY_PEN, &LIGHT_GREY_PEN };
|
||||||
m_segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN };
|
m_segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN };
|
||||||
|
|
||||||
|
FOCUS_RECT_PEN = wxPen(wxColour(128, 128, 10), 1, wxPENSTYLE_DOT);
|
||||||
|
FOCUS_RECT_BRUSH = wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_TRANSPARENT);
|
||||||
|
|
||||||
m_font = GetFont();
|
m_font = GetFont();
|
||||||
this->SetMinSize(get_min_size());
|
this->SetMinSize(get_min_size());
|
||||||
|
|
||||||
|
if (style == wxSL_VERTICAL)
|
||||||
|
m_ruler.set_parent(this->GetParent());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::msw_rescale()
|
void Control::msw_rescale()
|
||||||
@ -170,6 +180,9 @@ void Control::msw_rescale()
|
|||||||
|
|
||||||
SetMinSize(get_min_size());
|
SetMinSize(get_min_size());
|
||||||
GetParent()->Layout();
|
GetParent()->Layout();
|
||||||
|
|
||||||
|
m_ruler.update_dpi();
|
||||||
|
m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::sys_color_changed()
|
void Control::sys_color_changed()
|
||||||
@ -266,7 +279,11 @@ void Control::SetMaxValue(const int max_value)
|
|||||||
void Control::SetSliderValues(const std::vector<double>& values)
|
void Control::SetSliderValues(const std::vector<double>& values)
|
||||||
{
|
{
|
||||||
m_values = values;
|
m_values = values;
|
||||||
m_ruler.init(m_values);
|
m_ruler.init(m_values, get_scroll_step());
|
||||||
|
|
||||||
|
// When "No sparce layer" is enabled, use m_layers_values for ruler update.
|
||||||
|
// Because of m_values has duplicate values in this case.
|
||||||
|
// m_ruler.update(this->GetParent(), m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos)
|
void Control::draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos)
|
||||||
@ -426,9 +443,12 @@ void Control::SetLayersTimes(const std::vector<float>& layers_times, float total
|
|||||||
if (m_layers_values.size() != m_layers_times.size())
|
if (m_layers_values.size() != m_layers_times.size())
|
||||||
for (size_t i = m_layers_times.size(); i < m_layers_values.size(); i++)
|
for (size_t i = m_layers_times.size(); i < m_layers_values.size(); i++)
|
||||||
m_layers_times.push_back(total_time);
|
m_layers_times.push_back(total_time);
|
||||||
|
m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step());
|
||||||
Refresh();
|
Refresh();
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
m_ruler.update(m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::SetLayersTimes(const std::vector<double>& layers_times)
|
void Control::SetLayersTimes(const std::vector<double>& layers_times)
|
||||||
@ -494,15 +514,17 @@ void Control::get_lower_and_higher_position(int& lower_pos, int& higher_pos)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::draw_focus_rect()
|
void Control::draw_focus_rect(wxDC& dc)
|
||||||
{
|
{
|
||||||
if (!m_is_focused)
|
if (!m_is_focused)
|
||||||
return;
|
return;
|
||||||
const wxSize sz = GetSize();
|
const wxSize sz = GetSize();
|
||||||
wxPaintDC dc(this);
|
// wxPaintDC dc(this);
|
||||||
const wxPen pen = wxPen(wxColour(128, 128, 10), 1, wxPENSTYLE_DOT);
|
//const wxPen pen = wxPen(wxColour(128, 128, 10), 1, wxPENSTYLE_DOT);
|
||||||
dc.SetPen(pen);
|
//dc.SetPen(pen);
|
||||||
dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_TRANSPARENT));
|
//dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_TRANSPARENT));
|
||||||
|
dc.SetPen(FOCUS_RECT_PEN);
|
||||||
|
dc.SetBrush(FOCUS_RECT_BRUSH);
|
||||||
dc.DrawRectangle(1, 1, sz.x - 2, sz.y - 2);
|
dc.DrawRectangle(1, 1, sz.x - 2, sz.y - 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -513,11 +535,12 @@ void Control::render()
|
|||||||
#else
|
#else
|
||||||
SetBackgroundColour(GetParent()->GetBackgroundColour());
|
SetBackgroundColour(GetParent()->GetBackgroundColour());
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
draw_focus_rect();
|
|
||||||
|
|
||||||
wxPaintDC dc(this);
|
wxPaintDC dc(this);
|
||||||
dc.SetFont(m_font);
|
dc.SetFont(m_font);
|
||||||
|
|
||||||
|
draw_focus_rect(dc);
|
||||||
|
|
||||||
const wxCoord lower_pos = get_position_from_value(m_lower_value);
|
const wxCoord lower_pos = get_position_from_value(m_lower_value);
|
||||||
const wxCoord higher_pos = get_position_from_value(m_higher_value);
|
const wxCoord higher_pos = get_position_from_value(m_higher_value);
|
||||||
|
|
||||||
@ -807,7 +830,7 @@ void Control::draw_tick_text(wxDC& dc, const wxPoint& pos, int tick, LabelType l
|
|||||||
}
|
}
|
||||||
|
|
||||||
wxColour old_clr = dc.GetTextForeground();
|
wxColour old_clr = dc.GetTextForeground();
|
||||||
const wxPen& pen = is_wipe_tower_layer(tick) && (tick == m_lower_value || tick == m_higher_value) ? DARK_ORANGE_PEN : wxPen(old_clr);
|
const wxPen& pen = is_wipe_tower_layer(tick) && (tick == m_lower_value || tick == m_higher_value) ? DARK_ORANGE_PEN : /*wxPen(old_clr)*/GREY_PEN;
|
||||||
dc.SetPen(pen);
|
dc.SetPen(pen);
|
||||||
dc.SetTextForeground(pen.GetColour());
|
dc.SetTextForeground(pen.GetColour());
|
||||||
|
|
||||||
@ -1028,8 +1051,10 @@ void Control::draw_colored_band(wxDC& dc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::Ruler::init(const std::vector<double>& values)
|
void Control::Ruler::init(const std::vector<double>& values, double scroll_step)
|
||||||
{
|
{
|
||||||
|
if (!m_parent)
|
||||||
|
return;
|
||||||
max_values.clear();
|
max_values.clear();
|
||||||
max_values.reserve(std::count(values.begin(), values.end(), values.front()));
|
max_values.reserve(std::count(values.begin(), values.end(), values.front()));
|
||||||
|
|
||||||
@ -1039,14 +1064,35 @@ void Control::Ruler::init(const std::vector<double>& values)
|
|||||||
it = std::find(it + 1, values.end(), values.front());
|
it = std::find(it + 1, values.end(), values.front());
|
||||||
}
|
}
|
||||||
max_values.push_back(*(it - 1));
|
max_values.push_back(*(it - 1));
|
||||||
|
|
||||||
|
update(values, scroll_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::Ruler::update(wxWindow* win, const std::vector<double>& values, double scroll_step)
|
void Control::Ruler::set_parent(wxWindow* parent)
|
||||||
{
|
{
|
||||||
if (values.empty())
|
m_parent = parent;
|
||||||
|
update_dpi();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Control::Ruler::update_dpi()
|
||||||
|
{
|
||||||
|
if (m_parent)
|
||||||
|
m_DPI = GUI::get_dpi_for_window(m_parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Control::Ruler::update(const std::vector<double>& values, double scroll_step)
|
||||||
|
{
|
||||||
|
if (!m_parent || values.empty() ||
|
||||||
|
// check if need to update ruler in respect to input values
|
||||||
|
values.front() == m_min_val && values.back() == m_max_val && m_scroll_step == scroll_step && max_values.size() == m_max_values_cnt)
|
||||||
return;
|
return;
|
||||||
int DPI = GUI::get_dpi_for_window(win);
|
|
||||||
int pixels_per_sm = lround((double)(DPI) * 5.0/25.4);
|
m_min_val = values.front();
|
||||||
|
m_max_val = values.back();
|
||||||
|
m_scroll_step = scroll_step;
|
||||||
|
m_max_values_cnt = max_values.size();
|
||||||
|
|
||||||
|
int pixels_per_sm = lround((double)(m_DPI) * 5.0/25.4);
|
||||||
|
|
||||||
if (lround(scroll_step) > pixels_per_sm) {
|
if (lround(scroll_step) > pixels_per_sm) {
|
||||||
long_step = -1.0;
|
long_step = -1.0;
|
||||||
@ -1091,11 +1137,11 @@ void Control::Ruler::update(wxWindow* win, const std::vector<double>& values, do
|
|||||||
|
|
||||||
void Control::draw_ruler(wxDC& dc)
|
void Control::draw_ruler(wxDC& dc)
|
||||||
{
|
{
|
||||||
if (m_values.empty())
|
if (m_values.empty() || !m_ruler.can_draw())
|
||||||
return;
|
return;
|
||||||
// When "No sparce layer" is enabled, use m_layers_values for ruler update.
|
// When "No sparce layer" is enabled, use m_layers_values for ruler update.
|
||||||
// Because of m_values has duplicate values in this case.
|
// Because of m_values has duplicate values in this case.
|
||||||
m_ruler.update(this->GetParent(), m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step());
|
// m_ruler.update(this->GetParent(), m_layers_values.empty() ? m_values : m_layers_values, get_scroll_step());
|
||||||
|
|
||||||
int height, width;
|
int height, width;
|
||||||
get_size(&width, &height);
|
get_size(&width, &height);
|
||||||
|
@ -303,7 +303,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
|
|
||||||
void render();
|
void render();
|
||||||
void draw_focus_rect();
|
void draw_focus_rect(wxDC& dc);
|
||||||
void draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoint pt_end);
|
void draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoint pt_end);
|
||||||
void draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos);
|
void draw_scroll_line(wxDC& dc, const int lower_pos, const int higher_pos);
|
||||||
void draw_thumb(wxDC& dc, const wxCoord& pos_coord, const SelectedSlider& selection);
|
void draw_thumb(wxDC& dc, const wxCoord& pos_coord, const SelectedSlider& selection);
|
||||||
@ -438,19 +438,36 @@ private:
|
|||||||
wxPen GREY_PEN;
|
wxPen GREY_PEN;
|
||||||
wxPen LIGHT_GREY_PEN;
|
wxPen LIGHT_GREY_PEN;
|
||||||
|
|
||||||
|
wxPen FOCUS_RECT_PEN;
|
||||||
|
wxBrush FOCUS_RECT_BRUSH;
|
||||||
|
|
||||||
std::vector<wxPen*> m_line_pens;
|
std::vector<wxPen*> m_line_pens;
|
||||||
std::vector<wxPen*> m_segm_pens;
|
std::vector<wxPen*> m_segm_pens;
|
||||||
|
|
||||||
struct Ruler {
|
class Ruler {
|
||||||
|
wxWindow* m_parent{nullptr}; // m_parent is nullptr for Unused ruler
|
||||||
|
// in this case we will not init/update/render it
|
||||||
|
// values to check if ruler has to be updated
|
||||||
|
double m_min_val;
|
||||||
|
double m_max_val;
|
||||||
|
double m_scroll_step;
|
||||||
|
size_t m_max_values_cnt;
|
||||||
|
int m_DPI;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
double long_step;
|
double long_step;
|
||||||
double short_step;
|
double short_step;
|
||||||
std::vector<double> max_values;// max value for each object/instance in sequence print
|
std::vector<double> max_values;// max value for each object/instance in sequence print
|
||||||
// > 1 for sequential print
|
// > 1 for sequential print
|
||||||
|
|
||||||
void init(const std::vector<double>& values);
|
void set_parent(wxWindow* parent);
|
||||||
void update(wxWindow* win, const std::vector<double>& values, double scroll_step);
|
void update_dpi();
|
||||||
|
void init(const std::vector<double>& values, double scroll_step);
|
||||||
|
void update(const std::vector<double>& values, double scroll_step);
|
||||||
bool is_ok() { return long_step > 0 && short_step > 0; }
|
bool is_ok() { return long_step > 0 && short_step > 0; }
|
||||||
size_t count() { return max_values.size(); }
|
size_t count() { return max_values.size(); }
|
||||||
|
bool can_draw() { return m_parent != nullptr; }
|
||||||
} m_ruler;
|
} m_ruler;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
#ifndef slic3r_GUI_DoubleSlider_Utils_hpp_
|
|
||||||
#define slic3r_GUI_DoubleSlider_Utils_hpp_
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <random>
|
|
||||||
|
|
||||||
|
|
||||||
#endif // slic3r_GUI_DoubleSlider_Utils_hpp_
|
|
@ -998,7 +998,7 @@ void GLModel::render(const std::pair<size_t, size_t>& range)
|
|||||||
shader->set_uniform("uniform_color", data.color);
|
shader->set_uniform("uniform_color", data.color);
|
||||||
|
|
||||||
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_render_data.ibo_id));
|
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_render_data.ibo_id));
|
||||||
glsafe(::glDrawElements(mode, range.second - range.first + 1, index_type, (const void*)(range.first * Geometry::index_stride_bytes(data.format))));
|
glsafe(::glDrawElements(mode, range.second - range.first, index_type, (const void*)(range.first * Geometry::index_stride_bytes(data.format))));
|
||||||
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
|
glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
|
||||||
|
|
||||||
if (tex_coord)
|
if (tex_coord)
|
||||||
|
@ -170,11 +170,9 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking)
|
|||||||
q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * (-drain_hole.normal).cast<double>());
|
q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * (-drain_hole.normal).cast<double>());
|
||||||
Eigen::AngleAxisd aa(q);
|
Eigen::AngleAxisd aa(q);
|
||||||
glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis().x(), aa.axis().y(), aa.axis().z()));
|
glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis().x(), aa.axis().y(), aa.axis().z()));
|
||||||
glsafe(::glPushMatrix());
|
|
||||||
glsafe(::glTranslated(0., 0., -drain_hole.height));
|
glsafe(::glTranslated(0., 0., -drain_hole.height));
|
||||||
glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength));
|
glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength));
|
||||||
m_cylinder.render();
|
m_cylinder.render();
|
||||||
glsafe(::glPopMatrix());
|
|
||||||
|
|
||||||
if (vol->is_left_handed())
|
if (vol->is_left_handed())
|
||||||
glFrontFace(GL_CCW);
|
glFrontFace(GL_CCW);
|
||||||
|
@ -192,7 +192,7 @@ void GLGizmoPainterBase::render_cursor_circle()
|
|||||||
GLModel::Geometry init_data;
|
GLModel::Geometry init_data;
|
||||||
static const unsigned int StepsCount = 32;
|
static const unsigned int StepsCount = 32;
|
||||||
static const float StepSize = 2.0f * float(PI) / float(StepsCount);
|
static const float StepSize = 2.0f * float(PI) / float(StepsCount);
|
||||||
init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT };
|
init_data.format = { GLModel::Geometry::EPrimitiveType::LineLoop, GLModel::Geometry::EVertexLayout::P2, GLModel::Geometry::EIndexType::USHORT };
|
||||||
init_data.color = { 0.0f, 1.0f, 0.3f, 1.0f };
|
init_data.color = { 0.0f, 1.0f, 0.3f, 1.0f };
|
||||||
init_data.reserve_vertices(StepsCount);
|
init_data.reserve_vertices(StepsCount);
|
||||||
init_data.reserve_indices(StepsCount);
|
init_data.reserve_indices(StepsCount);
|
||||||
@ -200,7 +200,7 @@ void GLGizmoPainterBase::render_cursor_circle()
|
|||||||
// vertices + indices
|
// vertices + indices
|
||||||
for (unsigned short i = 0; i < StepsCount; ++i) {
|
for (unsigned short i = 0; i < StepsCount; ++i) {
|
||||||
const float angle = float(i * StepSize);
|
const float angle = float(i * StepSize);
|
||||||
init_data.add_vertex(Vec3f(center.x() + ::cos(angle) * m_cursor_radius, center.y() + ::sin(angle) * m_cursor_radius, 0.0f));
|
init_data.add_vertex(Vec2f(center.x() + ::cos(angle) * m_cursor_radius, center.y() + ::sin(angle) * m_cursor_radius));
|
||||||
init_data.add_ushort_index(i);
|
init_data.add_ushort_index(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1195,11 +1195,11 @@ void TriangleSelectorGUI::render_debug(ImGuiWrapper* imgui)
|
|||||||
m_varrays[i].init_from(std::move(varrays_data[i]));
|
m_varrays[i].init_from(std::move(varrays_data[i]));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
for (auto* iva : { &m_iva_enforcers, &m_iva_blockers })
|
// for (auto* iva : { &m_iva_enforcers, &m_iva_blockers })
|
||||||
iva->finalize_geometry(true);
|
// iva->finalize_geometry(true);
|
||||||
|
//
|
||||||
for (auto& iva : m_iva_seed_fills)
|
// for (auto& iva : m_iva_seed_fills)
|
||||||
iva.finalize_geometry(true);
|
// iva.finalize_geometry(true);
|
||||||
#endif // ENABLE_GLINDEXEDVERTEXARRAY_REMOVAL
|
#endif // ENABLE_GLINDEXEDVERTEXARRAY_REMOVAL
|
||||||
|
|
||||||
#if ENABLE_GLINDEXEDVERTEXARRAY_REMOVAL
|
#if ENABLE_GLINDEXEDVERTEXARRAY_REMOVAL
|
||||||
|
@ -527,22 +527,26 @@ void GLGizmoRotate::render_angle() const
|
|||||||
const float ex_radius = m_radius * (1.0f + GrabberOffset);
|
const float ex_radius = m_radius * (1.0f + GrabberOffset);
|
||||||
|
|
||||||
#if ENABLE_GLBEGIN_GLEND_REMOVAL
|
#if ENABLE_GLBEGIN_GLEND_REMOVAL
|
||||||
if (!m_angle_arc.is_initialized() || radius_changed) {
|
const bool angle_changed = std::abs(m_old_angle - m_angle) > EPSILON;
|
||||||
|
m_old_angle = m_angle;
|
||||||
|
|
||||||
|
if (!m_angle_arc.is_initialized() || radius_changed || angle_changed) {
|
||||||
m_angle_arc.reset();
|
m_angle_arc.reset();
|
||||||
|
if (m_angle > 0.0f) {
|
||||||
|
GLModel::Geometry init_data;
|
||||||
|
init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT };
|
||||||
|
init_data.reserve_vertices(1 + AngleResolution);
|
||||||
|
init_data.reserve_indices(1 + AngleResolution);
|
||||||
|
|
||||||
GLModel::Geometry init_data;
|
// vertices + indices
|
||||||
init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT };
|
for (unsigned short i = 0; i <= AngleResolution; ++i) {
|
||||||
init_data.vertices.reserve((1 + AngleResolution) * GLModel::Geometry::vertex_stride_floats(init_data.format));
|
const float angle = float(i) * step_angle;
|
||||||
init_data.indices.reserve((1 + AngleResolution) * GLModel::Geometry::index_stride_bytes(init_data.format));
|
init_data.add_vertex(Vec3f(::cos(angle) * ex_radius, ::sin(angle) * ex_radius, 0.0f));
|
||||||
|
init_data.add_ushort_index(i);
|
||||||
|
}
|
||||||
|
|
||||||
// vertices + indices
|
m_angle_arc.init_from(std::move(init_data));
|
||||||
for (unsigned short i = 0; i <= AngleResolution; ++i) {
|
|
||||||
const float angle = float(i) * step_angle;
|
|
||||||
init_data.add_vertex(Vec3f(::cos(angle) * ex_radius, ::sin(angle) * ex_radius, 0.0f));
|
|
||||||
init_data.add_ushort_index(i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_angle_arc.init_from(std::move(init_data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_angle_arc.set_color(color);
|
m_angle_arc.set_color(color);
|
||||||
|
@ -54,6 +54,7 @@ private:
|
|||||||
GrabberConnection m_grabber_connection;
|
GrabberConnection m_grabber_connection;
|
||||||
float m_old_radius{ 0.0f };
|
float m_old_radius{ 0.0f };
|
||||||
float m_old_hover_radius{ 0.0f };
|
float m_old_hover_radius{ 0.0f };
|
||||||
|
float m_old_angle{ 0.0f };
|
||||||
#endif // ENABLE_GLBEGIN_GLEND_REMOVAL
|
#endif // ENABLE_GLBEGIN_GLEND_REMOVAL
|
||||||
|
|
||||||
ColorRGBA m_drag_color;
|
ColorRGBA m_drag_color;
|
||||||
|
@ -120,10 +120,10 @@ void GLGizmoSlaSupports::on_render_for_picking()
|
|||||||
|
|
||||||
void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
||||||
{
|
{
|
||||||
size_t cache_size = m_editing_mode ? m_editing_cache.size() : m_normal_cache.size();
|
const size_t cache_size = m_editing_mode ? m_editing_cache.size() : m_normal_cache.size();
|
||||||
|
|
||||||
bool has_points = (cache_size != 0);
|
const bool has_points = (cache_size != 0);
|
||||||
bool has_holes = (! m_c->hollowed_mesh()->get_hollowed_mesh()
|
const bool has_holes = (! m_c->hollowed_mesh()->get_hollowed_mesh()
|
||||||
&& ! m_c->selection_info()->model_object()->sla_drain_holes.empty());
|
&& ! m_c->selection_info()->model_object()->sla_drain_holes.empty());
|
||||||
|
|
||||||
if (! has_points && ! has_holes)
|
if (! has_points && ! has_holes)
|
||||||
@ -147,9 +147,9 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
#endif // ENABLE_GLBEGIN_GLEND_REMOVAL
|
#endif // ENABLE_GLBEGIN_GLEND_REMOVAL
|
||||||
|
|
||||||
const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin());
|
const GLVolume* vol = selection.get_volume(*selection.get_volume_idxs().begin());
|
||||||
const Transform3d& instance_scaling_matrix_inverse = vol->get_instance_transformation().get_matrix(true, true, false, true).inverse();
|
const Transform3d instance_scaling_matrix_inverse = vol->get_instance_transformation().get_matrix(true, true, false, true).inverse();
|
||||||
const Transform3d& instance_matrix = vol->get_instance_transformation().get_matrix();
|
const Transform3d& instance_matrix = vol->get_instance_transformation().get_matrix();
|
||||||
float z_shift = m_c->selection_info()->get_sla_shift();
|
const float z_shift = m_c->selection_info()->get_sla_shift();
|
||||||
|
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
glsafe(::glTranslated(0.0, 0.0, z_shift));
|
glsafe(::glTranslated(0.0, 0.0, z_shift));
|
||||||
@ -158,7 +158,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
ColorRGBA render_color;
|
ColorRGBA render_color;
|
||||||
for (size_t i = 0; i < cache_size; ++i) {
|
for (size_t i = 0; i < cache_size; ++i) {
|
||||||
const sla::SupportPoint& support_point = m_editing_mode ? m_editing_cache[i].support_point : m_normal_cache[i];
|
const sla::SupportPoint& support_point = m_editing_mode ? m_editing_cache[i].support_point : m_normal_cache[i];
|
||||||
const bool& point_selected = m_editing_mode ? m_editing_cache[i].selected : false;
|
const bool point_selected = m_editing_mode ? m_editing_cache[i].selected : false;
|
||||||
|
|
||||||
if (is_mesh_point_clipped(support_point.pos.cast<double>()))
|
if (is_mesh_point_clipped(support_point.pos.cast<double>()))
|
||||||
continue;
|
continue;
|
||||||
@ -198,7 +198,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
|
|
||||||
// Inverse matrix of the instance scaling is applied so that the mark does not scale with the object.
|
// Inverse matrix of the instance scaling is applied so that the mark does not scale with the object.
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
glsafe(::glTranslatef(support_point.pos(0), support_point.pos(1), support_point.pos(2)));
|
glsafe(::glTranslatef(support_point.pos.x(), support_point.pos.y(), support_point.pos.z()));
|
||||||
glsafe(::glMultMatrixd(instance_scaling_matrix_inverse.data()));
|
glsafe(::glMultMatrixd(instance_scaling_matrix_inverse.data()));
|
||||||
|
|
||||||
if (vol->is_left_handed())
|
if (vol->is_left_handed())
|
||||||
@ -213,27 +213,21 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
|
|
||||||
Eigen::Quaterniond q;
|
Eigen::Quaterniond q;
|
||||||
q.setFromTwoVectors(Vec3d{0., 0., 1.}, instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast<double>());
|
q.setFromTwoVectors(Vec3d{0., 0., 1.}, instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast<double>());
|
||||||
Eigen::AngleAxisd aa(q);
|
const Eigen::AngleAxisd aa(q);
|
||||||
glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis()(0), aa.axis()(1), aa.axis()(2)));
|
glsafe(::glPushMatrix());
|
||||||
|
glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis().x(), aa.axis().y(), aa.axis().z()));
|
||||||
const double cone_radius = 0.25; // mm
|
const double cone_radius = 0.25; // mm
|
||||||
const double cone_height = 0.75;
|
const double cone_height = 0.75;
|
||||||
glsafe(::glPushMatrix());
|
|
||||||
glsafe(::glTranslatef(0.f, 0.f, cone_height + support_point.head_front_radius * RenderPointScale));
|
glsafe(::glTranslatef(0.f, 0.f, cone_height + support_point.head_front_radius * RenderPointScale));
|
||||||
glsafe(::glPushMatrix());
|
|
||||||
glsafe(::glRotated(180., 1., 0., 0.));
|
glsafe(::glRotated(180., 1., 0., 0.));
|
||||||
glsafe(::glScaled(cone_radius, cone_radius, cone_height));
|
glsafe(::glScaled(cone_radius, cone_radius, cone_height));
|
||||||
m_cone.render();
|
m_cone.render();
|
||||||
glsafe(::glPopMatrix());
|
glsafe(::glPopMatrix());
|
||||||
glsafe(::glTranslatef(0.f, 0.f, cone_height));
|
|
||||||
glsafe(::glPopMatrix());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glsafe(::glPushMatrix());
|
const double radius = (double)support_point.head_front_radius * RenderPointScale;
|
||||||
double radius = (double)support_point.head_front_radius * RenderPointScale;
|
|
||||||
glsafe(::glScaled(radius, radius, radius));
|
glsafe(::glScaled(radius, radius, radius));
|
||||||
m_sphere.render();
|
m_sphere.render();
|
||||||
glsafe(::glPopMatrix());
|
|
||||||
|
|
||||||
if (vol->is_left_handed())
|
if (vol->is_left_handed())
|
||||||
glFrontFace(GL_CCW);
|
glFrontFace(GL_CCW);
|
||||||
@ -248,7 +242,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
m_cylinder.set_color(render_color);
|
m_cylinder.set_color(render_color);
|
||||||
#else
|
#else
|
||||||
m_cylinder.set_color(-1, render_color);
|
m_cylinder.set_color(-1, render_color);
|
||||||
if (shader != nu)
|
if (shader != nullptr)
|
||||||
#endif // ENABLE_GLBEGIN_GLEND_REMOVAL
|
#endif // ENABLE_GLBEGIN_GLEND_REMOVAL
|
||||||
shader->set_uniform("emission_factor", 0.5f);
|
shader->set_uniform("emission_factor", 0.5f);
|
||||||
for (const sla::DrainHole& drain_hole : m_c->selection_info()->model_object()->sla_drain_holes) {
|
for (const sla::DrainHole& drain_hole : m_c->selection_info()->model_object()->sla_drain_holes) {
|
||||||
@ -257,7 +251,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
|
|
||||||
// Inverse matrix of the instance scaling is applied so that the mark does not scale with the object.
|
// Inverse matrix of the instance scaling is applied so that the mark does not scale with the object.
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
glsafe(::glTranslatef(drain_hole.pos(0), drain_hole.pos(1), drain_hole.pos(2)));
|
glsafe(::glTranslatef(drain_hole.pos.x(), drain_hole.pos.y(), drain_hole.pos.z()));
|
||||||
glsafe(::glMultMatrixd(instance_scaling_matrix_inverse.data()));
|
glsafe(::glMultMatrixd(instance_scaling_matrix_inverse.data()));
|
||||||
|
|
||||||
if (vol->is_left_handed())
|
if (vol->is_left_handed())
|
||||||
@ -267,13 +261,11 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
|
|||||||
|
|
||||||
Eigen::Quaterniond q;
|
Eigen::Quaterniond q;
|
||||||
q.setFromTwoVectors(Vec3d{0., 0., 1.}, instance_scaling_matrix_inverse * (-drain_hole.normal).cast<double>());
|
q.setFromTwoVectors(Vec3d{0., 0., 1.}, instance_scaling_matrix_inverse * (-drain_hole.normal).cast<double>());
|
||||||
Eigen::AngleAxisd aa(q);
|
const Eigen::AngleAxisd aa(q);
|
||||||
glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis()(0), aa.axis()(1), aa.axis()(2)));
|
glsafe(::glRotated(aa.angle() * (180. / M_PI), aa.axis().x(), aa.axis().y(), aa.axis().z()));
|
||||||
glsafe(::glPushMatrix());
|
|
||||||
glsafe(::glTranslated(0., 0., -drain_hole.height));
|
glsafe(::glTranslated(0., 0., -drain_hole.height));
|
||||||
glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength));
|
glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength));
|
||||||
m_cylinder.render();
|
m_cylinder.render();
|
||||||
glsafe(::glPopMatrix());
|
|
||||||
|
|
||||||
if (vol->is_left_handed())
|
if (vol->is_left_handed())
|
||||||
glFrontFace(GL_CCW);
|
glFrontFace(GL_CCW);
|
||||||
|
@ -916,6 +916,10 @@ void GLGizmosManager::update_hover_state(const EType &type)
|
|||||||
m_tooltip = hovered_gizmo.get_name();
|
m_tooltip = hovered_gizmo.get_name();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Activate given gizmo. Returns true if successful, false in case that current
|
||||||
|
// gizmo vetoed its deactivation.
|
||||||
bool GLGizmosManager::activate_gizmo(EType type)
|
bool GLGizmosManager::activate_gizmo(EType type)
|
||||||
{
|
{
|
||||||
assert(!m_gizmos.empty());
|
assert(!m_gizmos.empty());
|
||||||
|
Loading…
Reference in New Issue
Block a user