mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-04-06 00:32:05 +02:00
Compare commits
17 Commits
nightly-bu
...
v1.8.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be1bd083a3 | ||
|
|
f0522065d8 | ||
|
|
e502ffaa5f | ||
|
|
72378557cc | ||
|
|
a18f42efc8 | ||
|
|
b4b9805383 | ||
|
|
e823044b9a | ||
|
|
f2f2ede5d5 | ||
|
|
3a8b799083 | ||
|
|
5676e0e76a | ||
|
|
88298530e4 | ||
|
|
09a8fa3811 | ||
|
|
4dbd866d18 | ||
|
|
c122c76ee8 | ||
|
|
79a7221b60 | ||
|
|
5f89963fc5 | ||
|
|
b5b5e03e4d |
2
.github/workflows/build_orca.yml
vendored
2
.github/workflows/build_orca.yml
vendored
@@ -4,6 +4,7 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- release/*
|
||||
paths:
|
||||
- 'src/**'
|
||||
- '**/CMakeLists.txt'
|
||||
@@ -15,6 +16,7 @@ on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- release/*
|
||||
paths:
|
||||
- 'src/**'
|
||||
- '**/CMakeLists.txt'
|
||||
|
||||
@@ -8,7 +8,7 @@ You can download Orca Slicer here: [github releases page](https://github.com/Sof
|
||||
# Main features
|
||||
- Auto calibrations for all printers
|
||||
- Sandwich(inner-outer-inner) mode - an improved version of the `External perimeters first` mode
|
||||
- Precise wall
|
||||
- [Precise wall](https://github.com/SoftFever/OrcaSlicer/wiki/Precise-wall)
|
||||
- Polyholes conversion support [SuperSlicer Wiki: Polyholes](https://github.com/supermerill/SuperSlicer/wiki/Polyholes)
|
||||
- Klipper support
|
||||
- More granular controls
|
||||
|
||||
13
doc/Precise-wall.md
Normal file
13
doc/Precise-wall.md
Normal file
@@ -0,0 +1,13 @@
|
||||
The 'Precise Wall' is a distinctive feature introduced by OrcaSlicer, aimed at improving the dimensional accuracy of prints and minimizing layer inconsistencies by slightly increasing the spacing between the outer wall and the inner wall.
|
||||
|
||||
Below is a technical explanation of how this feature works.
|
||||
First, it's important to understand some basic concepts like flow, extrusion width, and space. Slic3r has an excellent document that covers these topics in detail. You can refer to this article: [link to article](https://manual.slic3r.org/advanced/flow-math).
|
||||
|
||||
Now, let's dive into the specifics. Slic3r and its forks, such as PrusaSlicer, SuperSlicer, and OrcaSlicer, assume that the extrusion path has an oval shape, which accounts for the overlaps. For example, if we set the wall width to 0.4mm and the layer height to 0.2mm, the combined thickness of two walls laid side by side is 0.714mm instead of 0.8mm due to the overlapping.
|
||||

|
||||
This approach enhances the strength of 3D-printed parts. However, it does have some side effects. For instance, when the inner-outer wall order is used, the outer wall can be pushed outside, leading to potential size inaccuracy and more layer inconsistency.
|
||||
|
||||
It's important to keep in mind that this approach to handling flow is specific to Slic3r and it's forks. Other slicing software, such as Cura, assumes that the extrusion path is rectangular and, therefore, does not include overlapping. Two 0.4 mm walls will result in a 0.8 mm shell thickness in Cura
|
||||
|
||||
OrcaSlicer adheres to Slic3r's approach to handling flow. To address the downsides mentioned earlier, OrcaSlicer introduced the 'Precise Wall' feature. When this feature is enabled in OrcaSlicer, the overlap between the outer wall and its adjacent inner wall is set to zero. This ensures that the overall strength of the printed part is unaffected, while the size accuracy and layer consistency are improved.
|
||||
|
||||
@@ -4,4 +4,5 @@ Print settings:
|
||||
* [Axiliary fan](auxiliary-fan)
|
||||
* [Chamber temperature](chamber-temperature)
|
||||
* [Air filtration/Exhaust fan](air-filtration)
|
||||
* [Single Extruder Multimaterial](semm)
|
||||
* [Single Extruder Multimaterial](semm)
|
||||
* [Precise wall](Precise-wall)
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -4324,24 +4324,6 @@ msgstr ""
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr ""
|
||||
|
||||
#, possible-c-format, possible-boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr ""
|
||||
|
||||
@@ -7121,6 +7103,15 @@ msgid ""
|
||||
"material for bridge, to improve sag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr ""
|
||||
|
||||
@@ -7392,6 +7383,15 @@ msgid ""
|
||||
"shorter bridged distances."
|
||||
msgstr ""
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: 2023-09-30 15:15+0200\n"
|
||||
"Last-Translator: René Mošner <Renemosner@seznam.cz>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -658,7 +658,8 @@ msgid ""
|
||||
"Please note, application settings will be lost, but printer profiles will "
|
||||
"not be affected."
|
||||
msgstr ""
|
||||
"Soubor konfigurace programu OrcaSlicer může být poškozen a nelze ho analyzovat.\n"
|
||||
"Soubor konfigurace programu OrcaSlicer může být poškozen a nelze ho "
|
||||
"analyzovat.\n"
|
||||
"OrcaSlicer se pokusil znovu vytvořit konfigurační soubor.\n"
|
||||
"Všimněte si, že nastavení aplikace bude ztraceno, ale profily tiskárny "
|
||||
"nebudou ovlivněny."
|
||||
@@ -4620,28 +4621,6 @@ msgstr "Nelze načíst konfiguraci."
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr "3mf je generován starým Orca Slicerem, načtěte pouze geometrická data."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"Verze 3mf %s je novější než verze %s %s, byly nalezeny následující klíče "
|
||||
"nerozpoznaný:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Měli byste aktualizovat software.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Novější verze 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"Verze %s zařízení 3mf je novější než verze %s %s, navrhněte upgrade vašeho "
|
||||
"software."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "V 3mf byly nalezeny neplatné hodnoty:"
|
||||
|
||||
@@ -7720,6 +7699,15 @@ msgstr ""
|
||||
"Snižte tuto hodnotu mírně (například 0,9), abyste snížili množství materiálu "
|
||||
"pro most a zlepšili prověšení"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "Poměr průtoku horní vrstvy"
|
||||
|
||||
@@ -8042,6 +8030,15 @@ msgstr ""
|
||||
"Pokud je zakázáno, mosty vypadají lépe, ale jsou spolehlivé jen pro kratší "
|
||||
"přemostění."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Maximální délka mostu"
|
||||
|
||||
@@ -8327,8 +8324,8 @@ msgid ""
|
||||
"Filament diameter is used to calculate extrusion in gcode, so it's important "
|
||||
"and should be accurate"
|
||||
msgstr ""
|
||||
"Průměr filamentu se používá k výpočtu extruze v gkódu, takže je důležitý "
|
||||
"a měl by být přesný"
|
||||
"Průměr filamentu se používá k výpočtu extruze v gkódu, takže je důležitý a "
|
||||
"měl by být přesný"
|
||||
|
||||
msgid "Shrinkage"
|
||||
msgstr "Smrštění"
|
||||
@@ -9159,8 +9156,8 @@ msgid ""
|
||||
"layer height. Too high value results in overextrusion on the surface"
|
||||
msgstr ""
|
||||
"Množství materiálu, které se má vytlačit během žehlení. V poměru k průtoku "
|
||||
"normální výšky vrstvy. Příliš vysoká hodnota vede k nadměrné extruzi "
|
||||
"na povrchu"
|
||||
"normální výšky vrstvy. Příliš vysoká hodnota vede k nadměrné extruzi na "
|
||||
"povrchu"
|
||||
|
||||
msgid "Ironing line spacing"
|
||||
msgstr "Řádkování žehlení"
|
||||
@@ -9365,22 +9362,23 @@ msgstr ""
|
||||
"tiskárna přechází z extruze s vysokým průtokem (vysoká rychlost/větší šířka) "
|
||||
"na extruzi s nižším průtokem (nižší rychlost/menší šířka) a naopak.\n"
|
||||
"\n"
|
||||
"Definuje maximální rychlost, kterou může objemový průtok extrudovaného materiálu "
|
||||
"v mm3/s měnit v čase. Vyšší hodnoty znamenají, že jsou povoleny větší změny "
|
||||
"extruzní rychlosti, což vede k rychlejším přechodům rychlosti.\n"
|
||||
"Definuje maximální rychlost, kterou může objemový průtok extrudovaného "
|
||||
"materiálu v mm3/s měnit v čase. Vyšší hodnoty znamenají, že jsou povoleny "
|
||||
"větší změny extruzní rychlosti, což vede k rychlejším přechodům rychlosti.\n"
|
||||
"\n"
|
||||
"Hodnota 0 funkci zakáže. \n"
|
||||
"\n"
|
||||
"Pro tiskárny s přímým pohonem a vysokou rychlostí a průtokem (např. Bambu lab "
|
||||
"nebo Voron) tato hodnota obvykle není potřebná. Nicméně v některých případech, "
|
||||
"kde se rychlosti funkcí výrazně liší, může poskytnout marginální přínos. "
|
||||
"Například při agresivních zpomaleních způsobených přesahy. V těchto případech "
|
||||
"se doporučuje vysoká hodnota kolem 300-350 mm3/s2, protože to umožňuje dostatečné "
|
||||
"vyhlazení pro pomoc při dosažení plynulejšího přechodu tlaku při extruzi.\n"
|
||||
"Pro tiskárny s přímým pohonem a vysokou rychlostí a průtokem (např. Bambu "
|
||||
"lab nebo Voron) tato hodnota obvykle není potřebná. Nicméně v některých "
|
||||
"případech, kde se rychlosti funkcí výrazně liší, může poskytnout marginální "
|
||||
"přínos. Například při agresivních zpomaleních způsobených přesahy. V těchto "
|
||||
"případech se doporučuje vysoká hodnota kolem 300-350 mm3/s2, protože to "
|
||||
"umožňuje dostatečné vyhlazení pro pomoc při dosažení plynulejšího přechodu "
|
||||
"tlaku při extruzi.\n"
|
||||
"\n"
|
||||
"Pro pomalejší tiskárny bez tlakového předstihu by měla být hodnota nastavena "
|
||||
"mnohem nižší. Pro přímé pohony je hodnota 10-15 mm3/s2 dobrým výchozím bodem, "
|
||||
"a pro styl Bowden 5-10 mm3/s2. \n"
|
||||
"mnohem nižší. Pro přímé pohony je hodnota 10-15 mm3/s2 dobrým výchozím "
|
||||
"bodem, a pro styl Bowden 5-10 mm3/s2. \n"
|
||||
"\n"
|
||||
"Tato funkce je známa jako Pressure Equalizer v programu Prusa Slicer.\n"
|
||||
"\n"
|
||||
@@ -9870,9 +9868,9 @@ msgid ""
|
||||
"if a wipe action is executed immediately following an outer wall extrusion, "
|
||||
"the speed of the outer wall extrusion will be utilized for the wipe action."
|
||||
msgstr ""
|
||||
"Rychlost čištění je určena rychlostí aktuální role extruze, např. pokud "
|
||||
"je činnost čištění provedena bezprostředně po extruzi vnější stěny, "
|
||||
"rychlost extruze vnější stěny bude využita pro činnost čištění."
|
||||
"Rychlost čištění je určena rychlostí aktuální role extruze, např. pokud je "
|
||||
"činnost čištění provedena bezprostředně po extruzi vnější stěny, rychlost "
|
||||
"extruze vnější stěny bude využita pro činnost čištění."
|
||||
|
||||
msgid "Wipe on loops"
|
||||
msgstr "Čistit na smyčce"
|
||||
@@ -9881,8 +9879,8 @@ msgid ""
|
||||
"To minimize the visibility of the seam in a closed loop extrusion, a small "
|
||||
"inward movement is executed before the extruder leaves the loop."
|
||||
msgstr ""
|
||||
"Aby byla minimalizována viditelnost švu při extruzi s uzavřenou smyčkou, "
|
||||
"je proveden malý pohyb dovnitř předtím, než vytlačovací stroj opustí smyčku."
|
||||
"Aby byla minimalizována viditelnost švu při extruzi s uzavřenou smyčkou, je "
|
||||
"proveden malý pohyb dovnitř předtím, než vytlačovací stroj opustí smyčku."
|
||||
|
||||
msgid "Wipe speed"
|
||||
msgstr "Rychlost čištění"
|
||||
@@ -10560,9 +10558,9 @@ msgid ""
|
||||
"Move nozzle along the last extrusion path when retracting to clean leaked "
|
||||
"material on nozzle. This can minimize blob when print new part after travel"
|
||||
msgstr ""
|
||||
"Při retrakci přesuňte trysku podél poslední dráhy extruze, abyste "
|
||||
"vyčistili uniklý materiál na trysce. To může minimalizovat skvrny při tisku "
|
||||
"nového dílu po cestě"
|
||||
"Při retrakci přesuňte trysku podél poslední dráhy extruze, abyste vyčistili "
|
||||
"uniklý materiál na trysce. To může minimalizovat skvrny při tisku nového "
|
||||
"dílu po cestě"
|
||||
|
||||
msgid "Wipe Distance"
|
||||
msgstr "Vzdálenost čištění"
|
||||
@@ -10777,10 +10775,10 @@ msgid ""
|
||||
"Wipe tower is only compatible with relative mode. It is always enabled on "
|
||||
"BambuLab printers. Default is checked"
|
||||
msgstr ""
|
||||
"Při použití volby \"label_objects\" se doporučuje relativní extruzi. "
|
||||
"Některé extrudery fungují lépe, když je tato možnost odškrtnuta (režim "
|
||||
"absolutní extruze). Čistící věž je kompatibilní pouze s relativním "
|
||||
"režimem. Na tiskárnách BambuLab je vždy povolen. Výchozí je zaškrtnuto"
|
||||
"Při použití volby \"label_objects\" se doporučuje relativní extruzi. Některé "
|
||||
"extrudery fungují lépe, když je tato možnost odškrtnuta (režim absolutní "
|
||||
"extruze). Čistící věž je kompatibilní pouze s relativním režimem. Na "
|
||||
"tiskárnách BambuLab je vždy povolen. Výchozí je zaškrtnuto"
|
||||
|
||||
msgid ""
|
||||
"Classic wall generator produces walls with constant extrusion width and for "
|
||||
@@ -12373,6 +12371,28 @@ msgstr ""
|
||||
"při tisku filamentu s nižší teplotou a vyšší teplotě uzavřeného prostoru. "
|
||||
"Další informace naleznete ve Wiki."
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "Verze 3mf %s je novější než verze %s %s, byly nalezeny následující klíče "
|
||||
#~ "nerozpoznaný:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Měli byste aktualizovat software.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Novější verze 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "Verze %s zařízení 3mf je novější než verze %s %s, navrhněte upgrade "
|
||||
#~ "vašeho software."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Vloženo"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 11:25+0100\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -3223,7 +3223,7 @@ msgstr "Volumen:"
|
||||
msgid "Size:"
|
||||
msgstr "Größe:"
|
||||
|
||||
#, boost-format
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please "
|
||||
"separate the conflicted objects farther (%s <-> %s)."
|
||||
@@ -4711,28 +4711,6 @@ msgstr ""
|
||||
"Die 3mf wurde mit einer alten Version von OrcaSlicer generiert, lade nur die "
|
||||
"Geometriedaten."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"Die Version %s von 3mf ist neuer als die Version %s von %s, folgende "
|
||||
"Schlüssel wurden nicht erkannt:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Sie sollten Ihre Software aktualisieren.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Neuere 3mf-Version"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"Die Version %s der 3mf ist neuer als die Version %s %s. Bitte Ihre Software "
|
||||
"aktualisieren."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Ungültige Werte in der 3MF-Datei gefunden:"
|
||||
|
||||
@@ -6064,13 +6042,13 @@ msgstr ""
|
||||
msgid ""
|
||||
"When recording timelapse without toolhead, it is recommended to add a "
|
||||
"\"Timelapse Wipe Tower\" \n"
|
||||
"by right-click the empty position of build plate and choose \"Add "
|
||||
"Primitive\"->\"Timelapse Wipe Tower\"."
|
||||
"by right-click the empty position of build plate and choose \"Add Primitive"
|
||||
"\"->\"Timelapse Wipe Tower\"."
|
||||
msgstr ""
|
||||
"Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, einen "
|
||||
"\"Timelapse Wischturm\" hinzuzufügen, indem Sie mit der rechten Maustaste "
|
||||
"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"-"
|
||||
">\"Timelapse Wischturm\" wählen."
|
||||
"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"->"
|
||||
"\"Timelapse Wischturm\" wählen."
|
||||
|
||||
msgid "Line width"
|
||||
msgstr "Breite der Linie"
|
||||
@@ -7913,6 +7891,15 @@ msgstr ""
|
||||
"Verringern Sie diesen Wert geringfügig (z. B. 0,9), um die Materialmenge für "
|
||||
"die Brücke zu verringern und den Durchhang zu minimieren"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "Durchflussverhältnis obere Fläche"
|
||||
|
||||
@@ -8250,6 +8237,15 @@ msgstr ""
|
||||
"Wenn deaktiviert, sehen Brücken besser aus, sind aber nur für kürzere "
|
||||
"Entfernungen zuverlässig."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Max Überbrückungslänge"
|
||||
|
||||
@@ -9031,13 +9027,13 @@ msgstr "Volle Lüfterdrehzahl ab Schicht"
|
||||
|
||||
msgid ""
|
||||
"Fan speed will be ramped up linearly from zero at layer "
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer "
|
||||
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower "
|
||||
"than \"close_fan_the_first_x_layers\", in which case the fan will be running "
|
||||
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
|
||||
"\". \"full_fan_speed_layer\" will be ignored if lower than "
|
||||
"\"close_fan_the_first_x_layers\", in which case the fan will be running at "
|
||||
"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
msgstr ""
|
||||
"Die Lüftergeschwindigkeit wird linear von Null bei der "
|
||||
"Schicht\"close_fan_the_first_x_layers\" auf das Maximum bei der Schicht "
|
||||
"Die Lüftergeschwindigkeit wird linear von Null bei der Schicht"
|
||||
"\"close_fan_the_first_x_layers\" auf das Maximum bei der Schicht "
|
||||
"\"full_fan_speed_layer\" erhöht. \"full_fan_speed_layer\" wird ignoriert, "
|
||||
"wenn es niedriger ist als \"close_fan_the_first_x_layers\",in diesem Fall "
|
||||
"läuft der Lüfter bei Schicht \"close_fan_the_first_x_layers\"+ 1 mit maximal "
|
||||
@@ -12730,6 +12726,28 @@ msgstr ""
|
||||
"höherer Gehäusetemperatur verringern. Weitere Informationen dazu finden Sie "
|
||||
"in der Wiki."
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "Die Version %s von 3mf ist neuer als die Version %s von %s, folgende "
|
||||
#~ "Schlüssel wurden nicht erkannt:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Sie sollten Ihre Software aktualisieren.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Neuere 3mf-Version"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "Die Version %s der 3mf ist neuer als die Version %s %s. Bitte Ihre "
|
||||
#~ "Software aktualisieren."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Eingebettet"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -4519,28 +4519,6 @@ msgstr "The Config cannot be loaded."
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "You should update your software.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Newer 3mf version"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Invalid values found in the 3mf:"
|
||||
|
||||
@@ -5809,13 +5787,13 @@ msgstr ""
|
||||
msgid ""
|
||||
"When recording timelapse without toolhead, it is recommended to add a "
|
||||
"\"Timelapse Wipe Tower\" \n"
|
||||
"by right-click the empty position of build plate and choose \"Add "
|
||||
"Primitive\"->\"Timelapse Wipe Tower\"."
|
||||
"by right-click the empty position of build plate and choose \"Add Primitive"
|
||||
"\"->\"Timelapse Wipe Tower\"."
|
||||
msgstr ""
|
||||
"When recording timelapse without toolhead, it is recommended to add a "
|
||||
"\"Timelapse Wipe Tower\" \n"
|
||||
"by right-click the empty position of build plate and choose \"Add "
|
||||
"Primitive\"->\"Timelapse Wipe Tower\"."
|
||||
"by right-click the empty position of build plate and choose \"Add Primitive"
|
||||
"\"->\"Timelapse Wipe Tower\"."
|
||||
|
||||
msgid "Line width"
|
||||
msgstr "Line width"
|
||||
@@ -7568,6 +7546,15 @@ msgstr ""
|
||||
"Decrease this value slightly (for example 0.9) to reduce the amount of "
|
||||
"material extruded for bridges to avoid sagging."
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr ""
|
||||
|
||||
@@ -7863,6 +7850,15 @@ msgstr ""
|
||||
"may look worse. If disabled, bridges look better but are reliable only for "
|
||||
"shorter distances."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Max bridge length"
|
||||
|
||||
@@ -8543,10 +8539,10 @@ msgstr "Full fan speed at layer"
|
||||
|
||||
msgid ""
|
||||
"Fan speed will be ramped up linearly from zero at layer "
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer "
|
||||
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower "
|
||||
"than \"close_fan_the_first_x_layers\", in which case the fan will be running "
|
||||
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
|
||||
"\". \"full_fan_speed_layer\" will be ignored if lower than "
|
||||
"\"close_fan_the_first_x_layers\", in which case the fan will be running at "
|
||||
"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
msgstr ""
|
||||
|
||||
msgid "Support interface fan speed"
|
||||
@@ -11718,6 +11714,28 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "You should update your software.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Newer 3mf version"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Embedded"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Carlos Fco. Caruncho Serrano <puzzlero@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4670,28 +4670,6 @@ msgstr ""
|
||||
"El 3mf está generado por un Orca Slicer antiguo, cargar solo datos de "
|
||||
"geometría."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"La versión de 3mf %s es más nueva que la versión de %s %s, encontradas las "
|
||||
"siguientes llaves no reconocidas:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Será mejor que actualices tu software.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Nueva versión 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"La versión de 3mf %s es más nueva que la versión de %s %s, se sugiere "
|
||||
"actualizar su sofware."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Valores inválidos encontrados en el 3mf:"
|
||||
|
||||
@@ -6010,8 +5988,8 @@ msgstr ""
|
||||
msgid ""
|
||||
"When recording timelapse without toolhead, it is recommended to add a "
|
||||
"\"Timelapse Wipe Tower\" \n"
|
||||
"by right-click the empty position of build plate and choose \"Add "
|
||||
"Primitive\"->\"Timelapse Wipe Tower\"."
|
||||
"by right-click the empty position of build plate and choose \"Add Primitive"
|
||||
"\"->\"Timelapse Wipe Tower\"."
|
||||
msgstr ""
|
||||
"Cuando grabamos timelapse sin cabezal de impresión, es recomendable añadir "
|
||||
"un \"Torre de Purga de Intervalo\" \n"
|
||||
@@ -7849,6 +7827,15 @@ msgstr ""
|
||||
"Disminuya este valor ligeramente (por ejemplo 0,9) para reducir la cantidad "
|
||||
"de material para el puente, para mejorar el hundimiento"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "Ratio de caudal en superficie superior"
|
||||
|
||||
@@ -8187,6 +8174,15 @@ msgstr ""
|
||||
"más largas, pero pueden tener peor aspecto. Si están desactivados, los "
|
||||
"puentes se ven mejor pero son fiables sólo para distancias más cortas."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Distancia máxima de puentes"
|
||||
|
||||
@@ -8967,10 +8963,10 @@ msgstr "Velocidad máxima del ventilador en la capa"
|
||||
|
||||
msgid ""
|
||||
"Fan speed will be ramped up linearly from zero at layer "
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer "
|
||||
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower "
|
||||
"than \"close_fan_the_first_x_layers\", in which case the fan will be running "
|
||||
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
|
||||
"\". \"full_fan_speed_layer\" will be ignored if lower than "
|
||||
"\"close_fan_the_first_x_layers\", in which case the fan will be running at "
|
||||
"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
msgstr ""
|
||||
"La velocidad de ventilador se incrementará linealmente de cero a "
|
||||
"\"close_fan_the_first_x_layers\" al máximo de capa \"full_fan_speed_layer\". "
|
||||
@@ -11707,12 +11703,12 @@ msgstr ""
|
||||
"wiki.\n"
|
||||
"\n"
|
||||
"Normalmente la calibración es innecesaria. Cuando se inicia una impresión de "
|
||||
"un solo color/material, con la opción \"Calibración de la dinámica de "
|
||||
"caudal\" marcada en el menú de inicio de impresión, la impresora seguirá el "
|
||||
"método antiguo, calibrar el filamento antes de la impresión; Cuando se "
|
||||
"inicia una impresión de varios colores/materiales, la impresora utilizará el "
|
||||
"parámetro de compensación por defecto para el filamento durante cada cambio "
|
||||
"de filamento que tendrá un buen resultado en la mayoría de los casos.\n"
|
||||
"un solo color/material, con la opción \"Calibración de la dinámica de caudal"
|
||||
"\" marcada en el menú de inicio de impresión, la impresora seguirá el método "
|
||||
"antiguo, calibrar el filamento antes de la impresión; Cuando se inicia una "
|
||||
"impresión de varios colores/materiales, la impresora utilizará el parámetro "
|
||||
"de compensación por defecto para el filamento durante cada cambio de "
|
||||
"filamento que tendrá un buen resultado en la mayoría de los casos.\n"
|
||||
"\n"
|
||||
"Tenga en cuenta que hay algunos casos en los que el resultado de la "
|
||||
"calibración no es fiable: el uso de una placa de textura para hacer la "
|
||||
@@ -12664,6 +12660,28 @@ msgstr ""
|
||||
"extrusor/hotend al imprimir filamento de baja temperatura con una "
|
||||
"temperatura de carcasa más alta. Más información sobre esto en la Wiki."
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "La versión de 3mf %s es más nueva que la versión de %s %s, encontradas "
|
||||
#~ "las siguientes llaves no reconocidas:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Será mejor que actualices tu software.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Nueva versión 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "La versión de 3mf %s es más nueva que la versión de %s %s, se sugiere "
|
||||
#~ "actualizar su sofware."
|
||||
|
||||
#~ msgid "The minimum printing speed when slow down for cooling"
|
||||
#~ msgstr ""
|
||||
#~ "La velocidad mínima de impresión cuando se ralentiza para el refrigeración"
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Guislain Cyril\n"
|
||||
@@ -4656,28 +4656,6 @@ msgstr ""
|
||||
"Le fichier 3mf a été généré par une ancienne version de Orca Slicer, "
|
||||
"chargement des données de géométrie uniquement."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"La version %s de 3mf est plus récente que la version %s de %s, clés "
|
||||
"suivantes non reconnues :"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Il est préférable de mettre à jour votre logiciel.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Nouvelle version 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"La version %s de 3mf est plus récente que la version %s de %s, nous vous "
|
||||
"suggérons de mettre à jour votre logiciel."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Valeurs non valides trouvées dans le 3mf :"
|
||||
|
||||
@@ -7853,6 +7831,15 @@ msgstr ""
|
||||
"Diminuez légèrement cette valeur (par exemple 0.9) pour réduire la quantité "
|
||||
"de matériaux pour le pont, pour améliorer l'affaissement"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "Débit des surfaces supérieures"
|
||||
|
||||
@@ -8166,6 +8153,15 @@ msgstr ""
|
||||
"les ponts ont une meilleure apparence mais ne sont fiables que pour des "
|
||||
"distances plus courtes."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Longueur maximale des ponts"
|
||||
|
||||
@@ -12328,6 +12324,28 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "La version %s de 3mf est plus récente que la version %s de %s, clés "
|
||||
#~ "suivantes non reconnues :"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Il est préférable de mettre à jour votre logiciel.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Nouvelle version 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "La version %s de 3mf est plus récente que la version %s de %s, nous vous "
|
||||
#~ "suggérons de mettre à jour votre logiciel."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Intégré"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -4546,28 +4546,6 @@ msgstr "A konfiguráció nem tölthető be."
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"A 3mf fájl %s verziója újabb, mint a(z) %s verziója %s, a következő "
|
||||
"ismeretlen kulcsokat találtuk:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Jobb lenne, ha frissítenéd a szoftvert.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Újabb 3mf verzió"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"A 3mf fájl %s verziója újabb, mint a(z) %s verziója %s, javasolt a szoftver "
|
||||
"frissítése."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Invalid values found in the 3mf:"
|
||||
|
||||
@@ -7639,6 +7617,15 @@ msgstr ""
|
||||
"Csökkentsd kicsit ezt az értéket (például 0,9-re), hogy ezzel csökkentsd az "
|
||||
"áthidaláshoz használt anyag mennyiségét, és a megereszkedést"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr ""
|
||||
|
||||
@@ -7933,6 +7920,15 @@ msgstr ""
|
||||
"Ha ki van kapcsolva, az áthidalások jobban néznek ki, de csak a rövidebb "
|
||||
"áthidalt távolságokon megbízhatóak."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Maximum áthidalás hossza"
|
||||
|
||||
@@ -11884,6 +11880,28 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "A 3mf fájl %s verziója újabb, mint a(z) %s verziója %s, a következő "
|
||||
#~ "ismeretlen kulcsokat találtuk:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Jobb lenne, ha frissítenéd a szoftvert.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Újabb 3mf verzió"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "A 3mf fájl %s verziója újabb, mint a(z) %s verziója %s, javasolt a "
|
||||
#~ "szoftver frissítése."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Embedded"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-12 15:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -612,7 +612,8 @@ msgid ""
|
||||
"Click Yes to install it now."
|
||||
msgstr ""
|
||||
"Orca Slicer richiede il runtime di Microsoft WebView2 per utilizzare "
|
||||
"determinate funzionalità.\vFai clic su Sì per installarlo ora.\v"
|
||||
"determinate funzionalità.\n"
|
||||
"Fai clic su Sì per installarlo ora."
|
||||
|
||||
msgid "WebView2 Runtime"
|
||||
msgstr "WebView2 Runtime"
|
||||
@@ -4654,28 +4655,6 @@ msgstr ""
|
||||
"Il 3mf è stato generato da una vecchia versione di Orca Slicer, caricando \n"
|
||||
"solo i dati geometrici."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"Versione del 3mf %s è più recente %s della versione %s, trovate le seguenti "
|
||||
"chiavi non riconosciute:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Devi aggiornare il software.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Versione 3mf più recente"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"Versione del 3mf %s è più recente della versione %s di %s, si consiglia di "
|
||||
"aggiornare il software."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Valori non validi trovati in 3mf:"
|
||||
|
||||
@@ -5217,7 +5196,6 @@ msgstr ""
|
||||
"\"\n"
|
||||
"\"i file .step."
|
||||
|
||||
|
||||
msgid "Maximum recent projects"
|
||||
msgstr "Numero massimo di progetti recenti"
|
||||
|
||||
@@ -5989,8 +5967,8 @@ msgstr ""
|
||||
msgid ""
|
||||
"When recording timelapse without toolhead, it is recommended to add a "
|
||||
"\"Timelapse Wipe Tower\" \n"
|
||||
"by right-click the empty position of build plate and choose \"Add "
|
||||
"Primitive\"->\"Timelapse Wipe Tower\"."
|
||||
"by right-click the empty position of build plate and choose \"Add Primitive"
|
||||
"\"->\"Timelapse Wipe Tower\"."
|
||||
msgstr ""
|
||||
"Quando si registra un timelapse senza testa di satmpa, si consiglia di "
|
||||
"aggiungere un \"Timelapse Torre di pulizia\"\n"
|
||||
@@ -7002,8 +6980,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"È stato rilevato un aggiornamento importante che deve essere eseguito prima "
|
||||
"che la stampa possa continuare. Si desidera aggiornare ora? È possibile "
|
||||
"effettuare l'aggiornamento anche in un secondo momento da \"Aggiorna "
|
||||
"firmware\"."
|
||||
"effettuare l'aggiornamento anche in un secondo momento da \"Aggiorna firmware"
|
||||
"\"."
|
||||
|
||||
msgid ""
|
||||
"The firmware version is abnormal. Repairing and updating are required before "
|
||||
@@ -7837,6 +7815,15 @@ msgstr ""
|
||||
"Diminuire leggermente questo valore (ad esempio 0.9) per ridurre la quantità "
|
||||
"di materiale per il ponte e migliorare l'abbassamento dello stesso"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "Rapporto di portata superficiale superiore"
|
||||
|
||||
@@ -8177,6 +8164,15 @@ msgstr ""
|
||||
"maggiori, ma potrebbero avere un aspetto peggiore. Se disattivato, i ponti "
|
||||
"hanno un aspetto migliore ma sono affidabili solo per distanze più brevi."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Lunghezza massima Bridge"
|
||||
|
||||
@@ -8963,17 +8959,16 @@ msgstr "Massima velocità della ventola al layer"
|
||||
|
||||
msgid ""
|
||||
"Fan speed will be ramped up linearly from zero at layer "
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer "
|
||||
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower "
|
||||
"than \"close_fan_the_first_x_layers\", in which case the fan will be running "
|
||||
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
|
||||
"\". \"full_fan_speed_layer\" will be ignored if lower than "
|
||||
"\"close_fan_the_first_x_layers\", in which case the fan will be running at "
|
||||
"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
msgstr ""
|
||||
"La velocità della ventola aumenterà linearmente da zero al livello "
|
||||
"\"close_fan_the_first_x_layers\" al massimo al livello "
|
||||
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" verrà ignorato se "
|
||||
"inferiore a \"close_fan_the_first_x_layers\", nel qual caso la ventola "
|
||||
"funzionerà alla massima velocità consentita al livello "
|
||||
"\"close_fan_the_first_x_layers\" + 1."
|
||||
"\"close_fan_the_first_x_layers\" al massimo al livello \"full_fan_speed_layer"
|
||||
"\". \"full_fan_speed_layer\" verrà ignorato se inferiore a "
|
||||
"\"close_fan_the_first_x_layers\", nel qual caso la ventola funzionerà alla "
|
||||
"massima velocità consentita al livello \"close_fan_the_first_x_layers\" + 1."
|
||||
|
||||
msgid "Support interface fan speed"
|
||||
msgstr "Supporta la velocità della ventola dell'interfaccia"
|
||||
@@ -11159,7 +11154,6 @@ msgstr ""
|
||||
msgid "Detect narrow internal solid infill"
|
||||
msgstr "Rileva riempimento solido interno stretto"
|
||||
|
||||
|
||||
msgid ""
|
||||
"This option will auto detect narrow internal solid infill area. If enabled, "
|
||||
"concentric pattern will be used for the area to speed printing up. "
|
||||
@@ -11170,7 +11164,6 @@ msgstr ""
|
||||
"velocizzare la stampa. Altrimenti, la trama rettilinea verrà utilizzata per "
|
||||
"impostazione predefinita."
|
||||
|
||||
|
||||
msgid "invalid value "
|
||||
msgstr "Valore non valido"
|
||||
|
||||
@@ -12670,6 +12663,28 @@ msgstr ""
|
||||
"temperatura inferiore con una temperatura dell'involucro più elevata. "
|
||||
"Maggiori informazioni su questo nel Wiki."
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "Versione del 3mf %s è più recente %s della versione %s, trovate le "
|
||||
#~ "seguenti chiavi non riconosciute:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Devi aggiornare il software.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Versione 3mf più recente"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "Versione del 3mf %s è più recente della versione %s di %s, si consiglia "
|
||||
#~ "di aggiornare il software."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Integrato"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -4443,27 +4443,6 @@ msgstr ""
|
||||
"3mfは古いバージョンのOrca Slicerで作成されています、ジオメトリーデータのみ読"
|
||||
"込みます。"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"3mfのバージョン %s は %sのバージョン %sより新しい為、下記のキーを認識できませ"
|
||||
"ん"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "ソフトウェアをアップデートする必要があります。\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "新3mfバージョン"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"3mfのバージョン%sは%sの%sより新しい為、ソフトウェアを更新してください。"
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Invalid values found in the 3mf:"
|
||||
|
||||
@@ -7399,6 +7378,15 @@ msgstr ""
|
||||
"この値を少し (例えば 0.9) 小さくし、ブリッジ用に押出し量を減らし、たるみを防"
|
||||
"ぎます。"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr ""
|
||||
|
||||
@@ -7683,6 +7671,15 @@ msgstr ""
|
||||
"有効になる場合、より長いブリッジを造形できますが、仕上がりが劣る可能性があり"
|
||||
"ます。"
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "最大ブリッジ長さ"
|
||||
|
||||
@@ -11486,6 +11483,27 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "3mfのバージョン %s は %sのバージョン %sより新しい為、下記のキーを認識でき"
|
||||
#~ "ません"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "ソフトウェアをアップデートする必要があります。\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "新3mfバージョン"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "3mfのバージョン%sは%sの%sより新しい為、ソフトウェアを更新してください。"
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Embedded"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: 2023-11-14 11:26+0900\n"
|
||||
"Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply."
|
||||
"github.com>, crwusiz <crwusiz@naver.com>\n"
|
||||
@@ -4545,28 +4545,6 @@ msgstr "구성을 로드할 수 없습니다."
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr "이 3mf는 이전 Orca Slicer에서 생성되었으며, 형상 데이터만 로드합니다."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"3mf의 버전 %s이(가) %s의 버전 %s보다 최신입니다. 인식할 수 없는 다음 키를 찾"
|
||||
"았습니다:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "소프트웨어를 업그레이드하는 것이 좋습니다.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "최신 3mf 버전"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"3mf의 %s 버전이 %s의 %s 버전보다 최신입니다. 소프트웨어를 업그레이드 하십시"
|
||||
"오."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "3mf에서 잘못된 값이 발견됨:"
|
||||
|
||||
@@ -5823,8 +5801,8 @@ msgstr ""
|
||||
msgid ""
|
||||
"When recording timelapse without toolhead, it is recommended to add a "
|
||||
"\"Timelapse Wipe Tower\" \n"
|
||||
"by right-click the empty position of build plate and choose \"Add "
|
||||
"Primitive\"->\"Timelapse Wipe Tower\"."
|
||||
"by right-click the empty position of build plate and choose \"Add Primitive"
|
||||
"\"->\"Timelapse Wipe Tower\"."
|
||||
msgstr ""
|
||||
"툴헤드 없이 시간 경과를 기록할 경우 \"타임랩스 닦기 타워\"를 추가하는 것이 좋"
|
||||
"습니다\n"
|
||||
@@ -7583,6 +7561,15 @@ msgid ""
|
||||
"material for bridge, to improve sag"
|
||||
msgstr "이 값을 약간(예: 0.9) 줄여 다리의 압출량을 줄여 처짐을 개선합니다"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "상단 표면 유량 비율"
|
||||
|
||||
@@ -7900,6 +7887,15 @@ msgstr ""
|
||||
"습니다. 비활성화하면 다리가 더 좋아 보이지만 짧은 브리지 거리에 대해서만 안정"
|
||||
"적입니다."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "최대 다리 거리"
|
||||
|
||||
@@ -8619,10 +8615,10 @@ msgstr "팬 최대 속도 레이어"
|
||||
|
||||
msgid ""
|
||||
"Fan speed will be ramped up linearly from zero at layer "
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer "
|
||||
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower "
|
||||
"than \"close_fan_the_first_x_layers\", in which case the fan will be running "
|
||||
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
|
||||
"\". \"full_fan_speed_layer\" will be ignored if lower than "
|
||||
"\"close_fan_the_first_x_layers\", in which case the fan will be running at "
|
||||
"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
|
||||
msgstr ""
|
||||
"팬 속도는 \"close_fan_the_first_x_layers\" 의 0에서 \"full_fan_speed_layer\" "
|
||||
"의 최고 속도까지 선형적으로 증가합니다. \"full_fan_speed_layer\"가 "
|
||||
@@ -12119,6 +12115,28 @@ msgstr ""
|
||||
"기/핫엔드가 막힐 가능성을 줄일 수 있습니다. 이에 대한 자세한 내용은 Wiki에서 "
|
||||
"확인하세요."
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "3mf의 버전 %s이(가) %s의 버전 %s보다 최신입니다. 인식할 수 없는 다음 키를 "
|
||||
#~ "찾았습니다:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "소프트웨어를 업그레이드하는 것이 좋습니다.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "최신 3mf 버전"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "3mf의 %s 버전이 %s의 %s 버전보다 최신입니다. 소프트웨어를 업그레이드 하십"
|
||||
#~ "시오."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "매입"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -4588,28 +4588,6 @@ msgstr "De configuratie kan niet worden geladen."
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"Versie %s van de 3mf is nieuwer dan versie %s van %s. De volgende sleutels "
|
||||
"worden niet herkend:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "U dient de software te upgraden.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Nieuwere versie 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"Versie %s van de 3mf is nieuwer dan versie %s van %s. Wij stellen voor om uw "
|
||||
"software te upgraden."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Invalid values found in the 3mf:"
|
||||
|
||||
@@ -7724,6 +7702,15 @@ msgstr ""
|
||||
"Verlaag deze waarde iets (bijvoorbeeld 0,9) om de hoeveelheid materiaal voor "
|
||||
"bruggen te verminderen, dit om doorzakken te voorkomen."
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr ""
|
||||
|
||||
@@ -8022,6 +8009,15 @@ msgstr ""
|
||||
"uitgeschakeld, zien bruggen er beter uit, maar zijn ze alleen betrouwbaar "
|
||||
"voor kortere afstanden."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Maximale bruglengte"
|
||||
|
||||
@@ -12002,6 +11998,28 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "Versie %s van de 3mf is nieuwer dan versie %s van %s. De volgende "
|
||||
#~ "sleutels worden niet herkend:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "U dient de software te upgraden.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Nieuwere versie 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "Versie %s van de 3mf is nieuwer dan versie %s van %s. Wij stellen voor om "
|
||||
#~ "uw software te upgraden."
|
||||
|
||||
# Source and destination string both English but don't match!
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Embedded"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -4531,28 +4531,6 @@ msgstr "Konfigurationen kan inte laddas."
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"3mf:s version %s är nyare än %s version %s, Följande nycklar har hittats som "
|
||||
"inte känns igen:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Uppdatera mjukvaran.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Nyare 3mf version"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"3mf:s version %s är nyare än %s version %s, Föreslår att du uppdaterar din "
|
||||
"programvara."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "Ogiltiga värden hittades i 3mf:"
|
||||
|
||||
@@ -7584,6 +7562,15 @@ msgstr ""
|
||||
"Minska detta värde något (tex 0.9) för att minska material åtgång för "
|
||||
"bridges/bryggor, detta för att förbättra kvaliteten"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr ""
|
||||
|
||||
@@ -7876,6 +7863,15 @@ msgstr ""
|
||||
"sträckor men kan se sämre ut. Om de är inaktiverade ser bridges bättre ut "
|
||||
"men är tillförlitliga endast för kortare avstånd."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Max bridge/brygg längd"
|
||||
|
||||
@@ -11809,6 +11805,28 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "3mf:s version %s är nyare än %s version %s, Följande nycklar har hittats "
|
||||
#~ "som inte känns igen:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Uppdatera mjukvaran.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Nyare 3mf version"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "3mf:s version %s är nyare än %s version %s, Föreslår att du uppdaterar "
|
||||
#~ "din programvara."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Inbäddad"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OrcaSlicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: 2023-11-15 00:35+0300\n"
|
||||
"Last-Translator: Olcay ÖREN\n"
|
||||
"Language-Team: Türkçe\n"
|
||||
@@ -2170,7 +2170,9 @@ msgstr "Yazıcı şu anda otomatik yeniden doldurmayı desteklemiyor."
|
||||
|
||||
msgid ""
|
||||
"AMS filament backup is not enabled, please enable it in the AMS settings."
|
||||
msgstr "AMS filament yedekleme özelliği etkin değil, lütfen AMS ayarlarından etkinleştirin."
|
||||
msgstr ""
|
||||
"AMS filament yedekleme özelliği etkin değil, lütfen AMS ayarlarından "
|
||||
"etkinleştirin."
|
||||
|
||||
msgid ""
|
||||
"If there are two identical filaments in AMS, AMS filament backup will be "
|
||||
@@ -2180,8 +2182,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Eğer AMS'de iki aynı filament bulunursa, AMS filament yedekleme özelliği "
|
||||
"etkinleştirilecektir. \n"
|
||||
"(Şu anda aynı markaya ait sarf malzemelerinin otomatik temini desteklenmektedir, "
|
||||
"malzeme türü ve rengi)"
|
||||
"(Şu anda aynı markaya ait sarf malzemelerinin otomatik temini "
|
||||
"desteklenmektedir, malzeme türü ve rengi)"
|
||||
|
||||
msgid "AMS Settings"
|
||||
msgstr "AMS Ayarları"
|
||||
@@ -2748,8 +2750,7 @@ msgstr "Yazdırma işi başlatılamadı"
|
||||
|
||||
msgid ""
|
||||
"This calibration does not support the currently selected nozzle diameter"
|
||||
msgstr ""
|
||||
"Bu kalibrasyon, şu anda seçilen nozzle çapını desteklememektedir"
|
||||
msgstr "Bu kalibrasyon, şu anda seçilen nozzle çapını desteklememektedir"
|
||||
|
||||
msgid "Current flowrate cali param is invalid"
|
||||
msgstr "Geçerli akış hızı cali parametresi geçersiz"
|
||||
@@ -4577,9 +4578,9 @@ msgid ""
|
||||
"clogged when printing this filament in a closed enclosure. Please open the "
|
||||
"front door and/or remove the upper glass."
|
||||
msgstr ""
|
||||
"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti "
|
||||
"kapalı bir muhafaza içinde bastırırken nozzle tıkanabilir. "
|
||||
"Lütfen ön kapağı açın ve/veya üst camı çıkarın."
|
||||
"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti kapalı bir "
|
||||
"muhafaza içinde bastırırken nozzle tıkanabilir. Lütfen ön kapağı açın ve/"
|
||||
"veya üst camı çıkarın."
|
||||
|
||||
msgid ""
|
||||
"The nozzle hardness required by the filament is higher than the default "
|
||||
@@ -4602,7 +4603,9 @@ msgid "Loading file: %s"
|
||||
msgstr "Dosya yükleniyor: %s"
|
||||
|
||||
msgid "The 3mf is not supported by OrcaSlicer, load geometry data only."
|
||||
msgstr "OrcaSlicer, 3mf formatını desteklememektedir. Sadece geometri verilerini yükle."
|
||||
msgstr ""
|
||||
"OrcaSlicer, 3mf formatını desteklememektedir. Sadece geometri verilerini "
|
||||
"yükle."
|
||||
|
||||
msgid "Load 3mf"
|
||||
msgstr "3mf yükle"
|
||||
@@ -4615,28 +4618,6 @@ msgstr ""
|
||||
"3mf, eski Orca Slicer tarafından oluşturulmuştur, yalnızca geometri "
|
||||
"verilerini yükleyin."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr ""
|
||||
"3mf'nin %s sürümü, %s'in %s sürümünden daha yeni, Aşağıdaki anahtarlar "
|
||||
"tanınmadan bulundu:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Yazılımınızı yükseltseniz iyi olur.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Daha yeni 3mf sürümü"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"3mf'nin %s sürümü, %s'in %s sürümünden daha yeni, Yazılımınızı yükseltmenizi "
|
||||
"öneririz."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "3mf'de geçersiz değerler bulundu:"
|
||||
|
||||
@@ -5099,7 +5080,9 @@ msgid "Use free camera"
|
||||
msgstr "Serbest kamera kullan"
|
||||
|
||||
msgid "If enabled, use free camera. If not enabled, use constrained camera."
|
||||
msgstr "Etkinleştirilirse serbest kamerayı kullanın. Etkin değilse kısıtlı kamerayı kullanın."
|
||||
msgstr ""
|
||||
"Etkinleştirilirse serbest kamerayı kullanın. Etkin değilse kısıtlı kamerayı "
|
||||
"kullanın."
|
||||
|
||||
msgid "Show splash screen"
|
||||
msgstr "Açılış ekranını göster"
|
||||
@@ -5592,8 +5575,8 @@ msgid ""
|
||||
"Filaments to AMS slots mappings have been established. You can click a "
|
||||
"filament above to change its mapping AMS slot"
|
||||
msgstr ""
|
||||
"AMS slot eşlemelerine yönelik filament oluşturulmuştur. Eşleme AMS "
|
||||
"yuvasını değiştirmek için yukarıdaki filamentlerden birine tıklayabilirsiniz"
|
||||
"AMS slot eşlemelerine yönelik filament oluşturulmuştur. Eşleme AMS yuvasını "
|
||||
"değiştirmek için yukarıdaki filamentlerden birine tıklayabilirsiniz"
|
||||
|
||||
msgid ""
|
||||
"Please click each filament above to specify its mapping AMS slot before "
|
||||
@@ -6085,9 +6068,9 @@ msgid ""
|
||||
"Value 0 means the filament does not support to print on the Smooth PEI Plate/"
|
||||
"High Temp Plate"
|
||||
msgstr ""
|
||||
"Düz PEI Plakası/Yüksek Sıcaklık Plakası takılığın da yatak sıcaklığı. "
|
||||
"0 Değeri, filamentin Düz PEI Plakası/Yüksek Sıcaklık Plakası üzerin de baskı yapmayı "
|
||||
"desteklemediği anlamına gelir."
|
||||
"Düz PEI Plakası/Yüksek Sıcaklık Plakası takılığın da yatak sıcaklığı. 0 "
|
||||
"Değeri, filamentin Düz PEI Plakası/Yüksek Sıcaklık Plakası üzerin de baskı "
|
||||
"yapmayı desteklemediği anlamına gelir."
|
||||
|
||||
msgid "Textured PEI Plate"
|
||||
msgstr "Dokulu PEI Plaka"
|
||||
@@ -7420,10 +7403,9 @@ msgid ""
|
||||
"the next layers will be linearly shrunk less, up to the layer indicated by "
|
||||
"this value."
|
||||
msgstr ""
|
||||
"Fil ayağı telafisinin etkin olacağı katman sayısı. "
|
||||
"İlk katman, fil ayak telafisi değeri tarafından küçültülecek, ardından "
|
||||
"sonraki katmanlar daha az lineer olarak küçültülecek, bu değer tarafından "
|
||||
"belirtilen katmana kadar."
|
||||
"Fil ayağı telafisinin etkin olacağı katman sayısı. İlk katman, fil ayak "
|
||||
"telafisi değeri tarafından küçültülecek, ardından sonraki katmanlar daha az "
|
||||
"lineer olarak küçültülecek, bu değer tarafından belirtilen katmana kadar."
|
||||
|
||||
msgid "layers"
|
||||
msgstr "katmanlar"
|
||||
@@ -7727,6 +7709,15 @@ msgstr ""
|
||||
"Köprü için malzeme miktarını azaltmak ve sarkmayı iyileştirmek için bu "
|
||||
"değeri biraz azaltın (örneğin 0,9)"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "Üst katı dolgu akış oranı"
|
||||
|
||||
@@ -7766,6 +7757,7 @@ msgstr ""
|
||||
msgid "One wall threshold"
|
||||
msgstr "Tek duvar eşiği"
|
||||
|
||||
#, fuzzy, c-format, boost-format
|
||||
msgid ""
|
||||
"If a top surface has to be printed and it's partially covered by another "
|
||||
"layer, it won't be considered at a top layer where its width is below this "
|
||||
@@ -7776,14 +7768,14 @@ msgid ""
|
||||
"on the next layer, like letters. Set this setting to 0 to remove these "
|
||||
"artifacts."
|
||||
msgstr ""
|
||||
"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından kaplıysa "
|
||||
"layer genişliği bu değerin altında olan bir üst katman olarak "
|
||||
"değerlendirilmeyecek. Yalnızca çevrelerle kaplanması gereken yüzeyde 'bir çevre üstte' "
|
||||
"tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya "
|
||||
"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından "
|
||||
"kaplıysa layer genişliği bu değerin altında olan bir üst katman olarak "
|
||||
"değerlendirilmeyecek. Yalnızca çevrelerle kaplanması gereken yüzeyde 'bir "
|
||||
"çevre üstte' tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya "
|
||||
"a % çevre ekstrüzyon genişliğinin bir yüzdesi olabilir.\n"
|
||||
"Uyarı: Etkinleştirilirse bir sonraki katmanda harfler gibi bazı ince özelliklerin "
|
||||
"olması durumunda yapay yapılar oluşturulabilir. Bu yapıları kaldırmak için bu ayarı 0 "
|
||||
"olarak ayarlayın."
|
||||
"Uyarı: Etkinleştirilirse bir sonraki katmanda harfler gibi bazı ince "
|
||||
"özelliklerin olması durumunda yapay yapılar oluşturulabilir. Bu yapıları "
|
||||
"kaldırmak için bu ayarı 0 olarak ayarlayın."
|
||||
|
||||
msgid "Only one wall on first layer"
|
||||
msgstr "İlk katmanda yalnızca bir duvar"
|
||||
@@ -7817,8 +7809,8 @@ msgid ""
|
||||
"steep overhang."
|
||||
msgstr ""
|
||||
"Tek katmanlarda ters yönde bir çıkıntının üzerinde bir kısmı bulunan "
|
||||
"çevreleri ekstrüzyonla çıkarın. Bu değişen desen, dik eğimli çıkıntıları önemli "
|
||||
"ölçüde iyileştirebilir."
|
||||
"çevreleri ekstrüzyonla çıkarın. Bu değişen desen, dik eğimli çıkıntıları "
|
||||
"önemli ölçüde iyileştirebilir."
|
||||
|
||||
msgid "Reverse threshold"
|
||||
msgstr "Ters eşik"
|
||||
@@ -7826,13 +7818,14 @@ msgstr "Ters eşik"
|
||||
msgid "Overhang reversal threshold"
|
||||
msgstr "Çıkıntıyı tersine çevirme eşiği"
|
||||
|
||||
#, fuzzy, c-format, boost-format
|
||||
msgid ""
|
||||
"Number of mm the overhang need to be for the reversal to be considered "
|
||||
"useful. Can be a % of the perimeter width.\n"
|
||||
"Value 0 enables reversal on every odd layers regardless."
|
||||
msgstr ""
|
||||
"Ters çevirmenin faydalı sayılması için çıkıntının mm sayısı "
|
||||
"olması gerekir. Çevre genişliğinin %'si olabilir.\n"
|
||||
"Ters çevirmenin faydalı sayılması için çıkıntının mm sayısı olması gerekir. "
|
||||
"Çevre genişliğinin %'si olabilir.\n"
|
||||
"Değer 0 her tek katmanda terslemeyi etkinleştirir."
|
||||
|
||||
msgid "Classic mode"
|
||||
@@ -8005,7 +7998,8 @@ msgid "Activate air filtration"
|
||||
msgstr "Hava filtrelemesini etkinleştirin"
|
||||
|
||||
msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)"
|
||||
msgstr "Daha iyi hava filtrasyonu için etkinleştirin. G-kodu komutu: M106 P3 S(0-255)"
|
||||
msgstr ""
|
||||
"Daha iyi hava filtrasyonu için etkinleştirin. G-kodu komutu: M106 P3 S(0-255)"
|
||||
|
||||
msgid "Fan speed"
|
||||
msgstr "Fan hızı"
|
||||
@@ -8053,6 +8047,15 @@ msgstr ""
|
||||
"köprüler daha iyi görünür ancak yalnızca daha kısa köprü mesafeleri için "
|
||||
"güvenilirdir."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Maksimum köprü uzunluğu"
|
||||
|
||||
@@ -8533,9 +8536,9 @@ msgid ""
|
||||
"equal to or greater than it, it's highly recommended to open the front door "
|
||||
"and/or remove the upper glass to avoid cloggings."
|
||||
msgstr ""
|
||||
"Filament bu sıcaklıkta yumuşar, bu nedenle yatak sıcaklığı bununla "
|
||||
"eşit veya daha yüksekse, tıkanmaları önlemek için ön kapağı açmanız "
|
||||
"ve/veya üst camı çıkarmanız şiddetle önerilir."
|
||||
"Filament bu sıcaklıkta yumuşar, bu nedenle yatak sıcaklığı bununla eşit veya "
|
||||
"daha yüksekse, tıkanmaları önlemek için ön kapağı açmanız ve/veya üst camı "
|
||||
"çıkarmanız şiddetle önerilir."
|
||||
|
||||
msgid "Price"
|
||||
msgstr "Fiyat"
|
||||
@@ -9037,7 +9040,8 @@ msgid ""
|
||||
"This option is enabled if machine support controlling chamber temperature\n"
|
||||
"G-code command: M141 S(0-255)"
|
||||
msgstr ""
|
||||
"Bu seçenek, hazne sıcaklığını kontrol eden makine desteği varsa etkinleştirilir\n"
|
||||
"Bu seçenek, hazne sıcaklığını kontrol eden makine desteği varsa "
|
||||
"etkinleştirilir\n"
|
||||
"G-code komut: M141 S(0-255)"
|
||||
|
||||
msgid "Support air filtration"
|
||||
@@ -9193,8 +9197,8 @@ msgid "Ironing angle"
|
||||
msgstr "Ütüleme açısı"
|
||||
|
||||
msgid ""
|
||||
"Ütüleme işleminin gerçekleştiği açı. Negatif bir sayı, bu işlevi devre dışı bırakır ve "
|
||||
"varsayılan yöntemi kullanır."
|
||||
"The angle ironing is done at. A negative number disables this function and "
|
||||
"uses the default method."
|
||||
msgstr ""
|
||||
|
||||
msgid "This gcode part is inserted at every layer change after lift z"
|
||||
@@ -9441,8 +9445,8 @@ msgstr ""
|
||||
"Yardımcı parça soğutma fanının hızı. Yardımcı fan, soğutma katmanlarının "
|
||||
"bulunmadığı ilk birkaç katman dışında, yazdırma sırasında bu hızda "
|
||||
"çalışacaktır.\n"
|
||||
"Lütfen bu özelliği kullanmak için yazıcı ayarlarında yardımcı_fan'ı etkinleştirin. G-code "
|
||||
"komut: M106 P2 S(0-255)"
|
||||
"Lütfen bu özelliği kullanmak için yazıcı ayarlarında yardımcı_fan'ı "
|
||||
"etkinleştirin. G-code komut: M106 P2 S(0-255)"
|
||||
|
||||
msgid "Min"
|
||||
msgstr "Min"
|
||||
@@ -9464,8 +9468,8 @@ msgid ""
|
||||
"specified explicitly."
|
||||
msgstr ""
|
||||
"Daha iyi katman soğutması için yavaşlama etkinleştirildiğinde, yazdırma "
|
||||
"çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde "
|
||||
"filament için minimum yazdırma hızı."
|
||||
"çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde filament "
|
||||
"için minimum yazdırma hızı."
|
||||
|
||||
msgid "Nozzle diameter"
|
||||
msgstr "Nozul çapı"
|
||||
@@ -10042,11 +10046,11 @@ msgid ""
|
||||
"printing, where we use M600/PAUSE to trigger the manual filament change "
|
||||
"action."
|
||||
msgstr ""
|
||||
"Sadece baskının başında özel Filament Değiştirme G-kodu'nu atlamak için "
|
||||
"bu seçeneği etkinleştirin. Aracı değiştirme komutu (örneğin, T0), baskının "
|
||||
"Sadece baskının başında özel Filament Değiştirme G-kodu'nu atlamak için bu "
|
||||
"seçeneği etkinleştirin. Aracı değiştirme komutu (örneğin, T0), baskının "
|
||||
"tamamı boyunca atlanacaktır. Bu, manuel çoklu malzeme baskısı için "
|
||||
"kullanışlıdır, burada manuel filament değişim eylemini tetiklemek için M600/PAUSE "
|
||||
"kullanırız."
|
||||
"kullanışlıdır, burada manuel filament değişim eylemini tetiklemek için M600/"
|
||||
"PAUSE kullanırız."
|
||||
|
||||
msgid "Purge in prime tower"
|
||||
msgstr "Prime Tower'da temizlik"
|
||||
@@ -10121,10 +10125,11 @@ msgid ""
|
||||
"example, if your endstop zero actually leaves the nozzle 0.3mm far from the "
|
||||
"print bed, set this to -0.3 (or fix your endstop)."
|
||||
msgstr ""
|
||||
"Bu değer, çıkış G-kodu içindeki tüm Z koordinatlarına eklenir (veya çıkarılır)."
|
||||
"Bu, kötü Z endstop konumunu telafi etmek için kullanılır: örneğin, endstop "
|
||||
"sıfır noktanız aslında nozulu baskı tablasından 0.3mm uzakta bırakıyorsa, "
|
||||
"bu değeri -0.3 olarak ayarlayın (veya endstop'unuzu düzeltin)."
|
||||
"Bu değer, çıkış G-kodu içindeki tüm Z koordinatlarına eklenir (veya "
|
||||
"çıkarılır).Bu, kötü Z endstop konumunu telafi etmek için kullanılır: "
|
||||
"örneğin, endstop sıfır noktanız aslında nozulu baskı tablasından 0.3mm "
|
||||
"uzakta bırakıyorsa, bu değeri -0.3 olarak ayarlayın (veya endstop'unuzu "
|
||||
"düzeltin)."
|
||||
|
||||
msgid "Enable support"
|
||||
msgstr "Desteği etkinleştir"
|
||||
@@ -10312,12 +10317,14 @@ msgid ""
|
||||
"overhangs."
|
||||
msgstr ""
|
||||
"Destek stil ve şekli. Normal destek için, destekleri düzenli bir ızgara "
|
||||
"içine projelendirmek daha stabil destekler oluşturacaktır (varsayılan), "
|
||||
"aynı zamanda sıkı destek kuleleri malzeme tasarrufu sağlar ve nesne üzerindeki izleri azaltır.\n"
|
||||
"Ağaç destek için, ince ve organik tarz, dalları daha etkili bir şekilde birleştirir ve "
|
||||
"büyük düz çıkıntılarda normal destekle benzer bir yapı oluştururken birçok malzeme "
|
||||
"tasarrufu sağlar (varsayılan organik tarz). Hybrid stil, büyük düz çıkıntıların altında normal "
|
||||
"destekle benzer bir yapı oluşturacaktır."
|
||||
"içine projelendirmek daha stabil destekler oluşturacaktır (varsayılan), aynı "
|
||||
"zamanda sıkı destek kuleleri malzeme tasarrufu sağlar ve nesne üzerindeki "
|
||||
"izleri azaltır.\n"
|
||||
"Ağaç destek için, ince ve organik tarz, dalları daha etkili bir şekilde "
|
||||
"birleştirir ve büyük düz çıkıntılarda normal destekle benzer bir yapı "
|
||||
"oluştururken birçok malzeme tasarrufu sağlar (varsayılan organik tarz). "
|
||||
"Hybrid stil, büyük düz çıkıntıların altında normal destekle benzer bir yapı "
|
||||
"oluşturacaktır."
|
||||
|
||||
msgid "Snug"
|
||||
msgstr "Snug"
|
||||
@@ -10495,8 +10502,8 @@ msgid ""
|
||||
"added before \"machine_start_gcode\"\n"
|
||||
"G-code commands: M141/M191 S(0-255)"
|
||||
msgstr ""
|
||||
"Hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Önce bir M191 komutu "
|
||||
"eklenecek \"machine_start_gcode\"\n"
|
||||
"Hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Önce bir M191 "
|
||||
"komutu eklenecek \"machine_start_gcode\"\n"
|
||||
"G-code komut: M141/M191 S(0-255)"
|
||||
|
||||
msgid "Chamber temperature"
|
||||
@@ -12409,6 +12416,28 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr ""
|
||||
#~ "3mf'nin %s sürümü, %s'in %s sürümünden daha yeni, Aşağıdaki anahtarlar "
|
||||
#~ "tanınmadan bulundu:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Yazılımınızı yükseltseniz iyi olur.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Daha yeni 3mf sürümü"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "3mf'nin %s sürümü, %s'in %s sürümünden daha yeni, Yazılımınızı "
|
||||
#~ "yükseltmenizi öneririz."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Gömülü"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: 2023-08-10 20:25-0400\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -4586,26 +4586,6 @@ msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr ""
|
||||
"3mf генерується старим слайсером Orca, завантажувати лише дані геометрії."
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr "Версія 3mf %s новіша, ніж версія %s %s, знайдено наступні ключі:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "Вам краще оновити програмне забезпечення.\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "Нова версія 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr ""
|
||||
"Версія 3mf %s новіша, ніж версія %s %s, запропонуйте оновити програмне "
|
||||
"забезпечення."
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "У 3mf знайдено неприпустимі значення:"
|
||||
|
||||
@@ -7642,6 +7622,15 @@ msgstr ""
|
||||
"Трохи зменшіть це значення (наприклад, 0.9), щоб зменшити кількість "
|
||||
"матеріалу для мосту, щоб покращити провисання"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "Коефіцієнт потоку верхньої поверхні"
|
||||
|
||||
@@ -7943,6 +7932,15 @@ msgstr ""
|
||||
"великівідстань, але можуть виглядати гірше. Якщо відключити, мости "
|
||||
"виглядають краще,Але надійні лише для більш коротких мостових відстаней."
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "Максимальна довжина мосту"
|
||||
|
||||
@@ -11996,6 +11994,26 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr "Версія 3mf %s новіша, ніж версія %s %s, знайдено наступні ключі:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "Вам краще оновити програмне забезпечення.\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "Нова версія 3mf"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr ""
|
||||
#~ "Версія 3mf %s новіша, ніж версія %s %s, запропонуйте оновити програмне "
|
||||
#~ "забезпечення."
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "Вбудовано"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Slic3rPE\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: 2023-04-01 13:21+0800\n"
|
||||
"Last-Translator: SoftFever <softfeverever@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4425,24 +4425,6 @@ msgstr "配置无法加载。"
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr "该3mf文件来自旧版本的逆戟鲸切片,将只加载几何数据。"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr "该3mf的版本%s比%s的版本%s新,发现以下参数键值无法识别:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "建议升级您的软件版本。\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "较新的3mf版本"
|
||||
|
||||
#, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr "该3mf的版本%s比%s的版本%s要新,建议升级你的软件。"
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "在3mf文件中发现无效值:"
|
||||
|
||||
@@ -7323,6 +7305,15 @@ msgid ""
|
||||
"material for bridge, to improve sag"
|
||||
msgstr "稍微减小这个数值(比如0.9)可以减小桥接的材料量,来改善下垂。"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr "内部桥接流量"
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "顶部表面流量比例"
|
||||
|
||||
@@ -7617,6 +7608,15 @@ msgstr ""
|
||||
"如果启用,桥接会更可靠,可以桥接更长的距离,但可能看起来更糟。如果关闭,桥梁"
|
||||
"看起来更好,但只适用于较短的桥接距离。"
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr "厚内部桥"
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "最大桥接长度"
|
||||
|
||||
@@ -11545,6 +11545,24 @@ msgid ""
|
||||
"temperature. More info about this in the Wiki."
|
||||
msgstr ""
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr "该3mf的版本%s比%s的版本%s新,发现以下参数键值无法识别:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "建议升级您的软件版本。\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "较新的3mf版本"
|
||||
|
||||
#, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr "该3mf的版本%s比%s的版本%s要新,建议升级你的软件。"
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "嵌入的"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Orca Slicer\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-11-10 14:54+0800\n"
|
||||
"POT-Creation-Date: 2023-12-02 01:44+0800\n"
|
||||
"PO-Revision-Date: 2023-11-06 14:37+0800\n"
|
||||
"Last-Translator: ablegods <ablegods@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@@ -4680,24 +4680,6 @@ msgstr "設定檔無法載入。"
|
||||
msgid "The 3mf is generated by old Orca Slicer, load geometry data only."
|
||||
msgstr "該 3mf 檔案來自舊版本的 Orca Slicer"
|
||||
|
||||
#, fuzzy, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
"unrecognized:"
|
||||
msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 新,發現以下參數值無法識別:"
|
||||
|
||||
msgid "You'd better upgrade your software.\n"
|
||||
msgstr "建議升級您的軟體版本。\n"
|
||||
|
||||
msgid "Newer 3mf version"
|
||||
msgstr "較新的 3mf 版本"
|
||||
|
||||
#, fuzzy, c-format, boost-format
|
||||
msgid ""
|
||||
"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your "
|
||||
"software."
|
||||
msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 要新,建議升級你的軟體。"
|
||||
|
||||
msgid "Invalid values found in the 3mf:"
|
||||
msgstr "在 3mf 檔案中發現無效值:"
|
||||
|
||||
@@ -7808,6 +7790,15 @@ msgid ""
|
||||
"material for bridge, to improve sag"
|
||||
msgstr "稍微減小這個數值(比如 0.9)可以減小橋接的線材量,來改善下垂。"
|
||||
|
||||
msgid "Internal bridge flow"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This value governs the thickness of the internal bridge layer. This is the "
|
||||
"first layer over sparse infill. Decrease this value slightly (for example "
|
||||
"0.9) to improve surface quality over sparse infill."
|
||||
msgstr ""
|
||||
|
||||
msgid "Top surface flow ratio"
|
||||
msgstr "頂部表面流量比例"
|
||||
|
||||
@@ -8138,6 +8129,15 @@ msgstr ""
|
||||
"如果啟用,橋接會更可靠,可以橋接更長的距離,但可能看起來更糟。如果關閉,橋梁"
|
||||
"看起來更好,但只適用於較短的橋接距離。"
|
||||
|
||||
msgid "Thick internal bridges"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, thick internal bridges will be used. It's usually recommended to "
|
||||
"have this feature turned on. However, consider turning it off if you are "
|
||||
"using large nozzles."
|
||||
msgstr ""
|
||||
|
||||
msgid "Max bridge length"
|
||||
msgstr "最大橋接長度"
|
||||
|
||||
@@ -12282,6 +12282,24 @@ msgstr ""
|
||||
"當列印較低溫度的耗材時,打開印表機門可以減少擠出機或熱端堵塞的可能性。 有關此"
|
||||
"內容的更多信息,請參見 Wiki。"
|
||||
|
||||
#, fuzzy, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Found following keys "
|
||||
#~ "unrecognized:"
|
||||
#~ msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 新,發現以下參數值無法識別:"
|
||||
|
||||
#~ msgid "You'd better upgrade your software.\n"
|
||||
#~ msgstr "建議升級您的軟體版本。\n"
|
||||
|
||||
#~ msgid "Newer 3mf version"
|
||||
#~ msgstr "較新的 3mf 版本"
|
||||
|
||||
#, fuzzy, c-format, boost-format
|
||||
#~ msgid ""
|
||||
#~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade "
|
||||
#~ "your software."
|
||||
#~ msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 要新,建議升級你的軟體。"
|
||||
|
||||
#~ msgid "Embeded"
|
||||
#~ msgstr "嵌入的"
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 13 B After Width: | Height: | Size: 2.5 KiB |
@@ -11,12 +11,13 @@
|
||||
"fan_cooling_layer_time": ["30"],
|
||||
"overhang_fan_speed": ["90"],
|
||||
"overhang_fan_threshold": ["25%"],
|
||||
"fan_max_speed": ["90"],
|
||||
"fan_min_speed": ["40"],
|
||||
"fan_max_speed": ["25"],
|
||||
"fan_min_speed": ["10"],
|
||||
"slow_down_min_speed": ["10"],
|
||||
"slow_down_layer_time": ["8"],
|
||||
"filament_flow_ratio": ["0.95"],
|
||||
"filament_max_volumetric_speed": ["30"],
|
||||
"filament_flow_ratio": ["0.98"],
|
||||
"filament_max_volumetric_speed": ["8"],
|
||||
"nozzle_temperature_initial_layer": ["260"],
|
||||
"filament_retraction_length": ["0.5"],
|
||||
"filament_start_gcode": ["; filament start gcode\n"],
|
||||
"compatible_printers": [
|
||||
|
||||
@@ -18,16 +18,16 @@
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"20000",
|
||||
"20000"
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"8000",
|
||||
"8000"
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"8000",
|
||||
"8000"
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"500",
|
||||
@@ -38,12 +38,12 @@
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500",
|
||||
"200"
|
||||
"300",
|
||||
"300"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500",
|
||||
"200"
|
||||
"300",
|
||||
"300"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"12",
|
||||
@@ -79,7 +79,7 @@
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"printable_height": "500",
|
||||
"extruder_clearance_radius": "65",
|
||||
"extruder_clearance_height_to_rod": "36",
|
||||
"extruder_clearance_height_to_lid": "140",
|
||||
@@ -124,6 +124,12 @@
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"thumbnails": [
|
||||
"32x32",
|
||||
"300x300"
|
||||
],
|
||||
"thumbnails_format": "PNG",
|
||||
"nozzle_type": "hardened_steel",
|
||||
"default_filament_profile": [
|
||||
"Comgrow Generic PETG"
|
||||
],
|
||||
@@ -136,6 +142,5 @@
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
|
||||
"scan_first_layer": "0",
|
||||
"nozzle_type": "undefine",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "8000",
|
||||
"outer_wall_acceleration": "8000",
|
||||
"top_surface_acceleration": "8000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "8000",
|
||||
"inner_wall_acceleration": "8000",
|
||||
"initial_layer_line_width": "0.4",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "0",
|
||||
"outer_wall_acceleration": "0",
|
||||
"top_surface_acceleration": "0",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "0",
|
||||
"travel_acceleration": "0",
|
||||
"inner_wall_acceleration": "0",
|
||||
"initial_layer_line_width": "0.42",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "8000",
|
||||
"outer_wall_acceleration": "8000",
|
||||
"top_surface_acceleration": "8000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "8000",
|
||||
"inner_wall_acceleration": "8000",
|
||||
"initial_layer_line_width": "0.4",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "1.0",
|
||||
"initial_layer_print_height": "0.28",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "0",
|
||||
"outer_wall_acceleration": "0",
|
||||
"top_surface_acceleration": "0",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "0",
|
||||
"travel_acceleration": "0",
|
||||
"inner_wall_acceleration": "0",
|
||||
"initial_layer_line_width": "0.42",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "8000",
|
||||
"outer_wall_acceleration": "8000",
|
||||
"top_surface_acceleration": "8000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "8000",
|
||||
"inner_wall_acceleration": "8000",
|
||||
"initial_layer_line_width": "0.4",
|
||||
"initial_layer_print_height": "0.28",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"initial_layer_print_height": "0.28",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.8",
|
||||
"initial_layer_print_height": "0.28",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "8000",
|
||||
"outer_wall_acceleration": "8000",
|
||||
"top_surface_acceleration": "8000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "8000",
|
||||
"inner_wall_acceleration": "8000",
|
||||
"initial_layer_line_width": "0.4",
|
||||
"initial_layer_print_height": "0.32",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"initial_layer_print_height": "0.32",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.8",
|
||||
"initial_layer_print_height": "0.36",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.8",
|
||||
"initial_layer_print_height": "0.44",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.8",
|
||||
"initial_layer_print_height": "0.52",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "3000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
@@ -31,9 +28,6 @@
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "3000",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"initial_layer_line_width": "0.8",
|
||||
"initial_layer_print_height": "0.60",
|
||||
"infill_combination": "0",
|
||||
|
||||
@@ -1,104 +1,229 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_comgrow_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"inherits": "fdm_process_common",
|
||||
"adaptive_layer_height": "0",
|
||||
"reduce_crossing_wall": "0",
|
||||
"max_travel_detour_distance": "0",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_layers": "3",
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"bottom_shell_layers": "2",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_flow": "0.95",
|
||||
"bridge_speed": "25",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0.1",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "500",
|
||||
"top_surface_acceleration": "500",
|
||||
"bottom_solid_infill_flow_ratio": "1",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bridge_acceleration": "50%",
|
||||
"bridge_angle": "0",
|
||||
"bridge_density": "100%",
|
||||
"bridge_flow": "0.85",
|
||||
"bridge_no_support": "0",
|
||||
"bridge_speed": "25",
|
||||
"brim_ears_detection_length": "1",
|
||||
"brim_ears_max_angle": "125",
|
||||
"brim_object_gap": "0",
|
||||
"brim_type": "auto_brim",
|
||||
"brim_width": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"default_acceleration": "3000",
|
||||
"default_jerk": "0",
|
||||
"detect_overhang_wall": "1",
|
||||
"detect_thin_wall": "1",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"enable_arc_fitting": "0",
|
||||
"outer_wall_line_width": "0.4",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"line_width": "0.4",
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_acceleration": "500",
|
||||
"travel_acceleration": "700",
|
||||
"inner_wall_acceleration": "500",
|
||||
"initial_layer_line_width": "0.5",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"enable_overhang_speed": "1",
|
||||
"enable_prime_tower": "0",
|
||||
"enable_support": "0",
|
||||
"enforce_support_layers": "0",
|
||||
"exclude_object": "0",
|
||||
"extra_perimeters_on_overhangs": "0",
|
||||
"filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"filter_out_gap_fill": "0",
|
||||
"flush_into_infill": "0",
|
||||
"flush_into_objects": "0",
|
||||
"flush_into_support": "1",
|
||||
"from": "",
|
||||
"fuzzy_skin": "none",
|
||||
"fuzzy_skin_point_distance": "0.8",
|
||||
"fuzzy_skin_thickness": "0.3",
|
||||
"gap_infill_speed": "70",
|
||||
"gcode_add_line_number": "0",
|
||||
"gcode_comments": "0",
|
||||
"gcode_label_objects": "0",
|
||||
"hole_to_polyhole": "0",
|
||||
"hole_to_polyhole_threshold": "0.01",
|
||||
"hole_to_polyhole_twisted": "1",
|
||||
"independent_support_layer_height": "1",
|
||||
"infill_anchor": "400%",
|
||||
"infill_anchor_max": "20",
|
||||
"infill_combination": "0",
|
||||
"sparse_infill_line_width": "0.45",
|
||||
"infill_direction": "45",
|
||||
"infill_jerk": "9",
|
||||
"infill_wall_overlap": "23%",
|
||||
"inherits": "fdm_process_common",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"initial_layer_infill_speed": "60",
|
||||
"initial_layer_jerk": "9",
|
||||
"initial_layer_line_width": "0.4",
|
||||
"initial_layer_min_bead_width": "85%",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"initial_layer_speed": "40",
|
||||
"initial_layer_travel_speed": "100%",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"inner_wall_jerk": "9",
|
||||
"inner_wall_line_width": "0.4",
|
||||
"inner_wall_speed": "160",
|
||||
"interface_shells": "0",
|
||||
"internal_bridge_speed": "150%",
|
||||
"internal_solid_infill_acceleration": "100%",
|
||||
"internal_solid_infill_line_width": "0",
|
||||
"internal_solid_infill_pattern": "monotonic",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"ironing_angle": "-1",
|
||||
"ironing_flow": "15%",
|
||||
"ironing_spacing": "0.1",
|
||||
"ironing_pattern": "zig-zag",
|
||||
"ironing_spacing": "0.25",
|
||||
"ironing_speed": "15",
|
||||
"ironing_type": "no ironing",
|
||||
"layer_height": "0.2",
|
||||
"reduce_infill_retraction": "1",
|
||||
"filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"line_width": "0.4",
|
||||
"make_overhang_printable": "0",
|
||||
"make_overhang_printable_angle": "55",
|
||||
"make_overhang_printable_hole_size": "0",
|
||||
"max_bridge_length": "10",
|
||||
"max_travel_detour_distance": "0",
|
||||
"max_volumetric_extrusion_rate_slope": "0",
|
||||
"max_volumetric_extrusion_rate_slope_segment_length": "3",
|
||||
"min_bead_width": "85%",
|
||||
"min_feature_size": "25%",
|
||||
"min_width_top_surface": "300%",
|
||||
"minimum_sparse_infill_area": "10",
|
||||
"only_one_wall_first_layer": "0",
|
||||
"only_one_wall_top": "0",
|
||||
"ooze_prevention": "0",
|
||||
"outer_wall_acceleration": "1000",
|
||||
"outer_wall_jerk": "9",
|
||||
"outer_wall_speed": "140",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "20",
|
||||
"overhang_3_4_speed": "15",
|
||||
"overhang_4_4_speed": "10",
|
||||
"inner_wall_line_width": "0.45",
|
||||
"wall_loops": "3",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "2",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"internal_solid_infill_line_width": "0.4",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "normal(auto)",
|
||||
"support_style": "default",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.2",
|
||||
"support_filament": "0",
|
||||
"support_line_width": "0.4",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "2",
|
||||
"support_interface_bottom_layers": "2",
|
||||
"support_interface_spacing": "0.5",
|
||||
"support_interface_speed": "80",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "2.5",
|
||||
"support_speed": "150",
|
||||
"support_threshold_angle": "30",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "45",
|
||||
"tree_support_wall_count": "0",
|
||||
"detect_thin_wall": "0",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"top_surface_line_width": "0.4",
|
||||
"top_shell_layers": "3",
|
||||
"top_shell_thickness": "0.8",
|
||||
"initial_layer_speed": "15",
|
||||
"initial_layer_infill_speed": "20",
|
||||
"outer_wall_speed": "25",
|
||||
"inner_wall_speed": "40",
|
||||
"internal_solid_infill_speed": "40",
|
||||
"top_surface_speed": "30",
|
||||
"gap_infill_speed": "30",
|
||||
"sparse_infill_speed": "50",
|
||||
"travel_speed": "150",
|
||||
"enable_prime_tower": "0",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"overhang_reverse": "0",
|
||||
"overhang_reverse_threshold": "50%",
|
||||
"overhang_speed_classic": "0",
|
||||
"post_process": [],
|
||||
"precise_outer_wall": "0",
|
||||
"prime_tower_brim_width": "3",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0"
|
||||
"prime_volume": "45",
|
||||
"print_flow_ratio": "1",
|
||||
"print_sequence": "by layer",
|
||||
"raft_contact_distance": "0.1",
|
||||
"raft_expansion": "1.5",
|
||||
"raft_first_layer_density": "90%",
|
||||
"raft_first_layer_expansion": "2",
|
||||
"raft_layers": "0",
|
||||
"reduce_crossing_wall": "0",
|
||||
"reduce_infill_retraction": "1",
|
||||
"resolution": "0.012",
|
||||
"role_based_wipe_speed": "1",
|
||||
"seam_gap": "5%",
|
||||
"seam_position": "aligned",
|
||||
"single_extruder_multi_material_priming": "1",
|
||||
"skirt_distance": "3",
|
||||
"skirt_height": "2",
|
||||
"skirt_loops": "0",
|
||||
"skirt_speed": "50",
|
||||
"slice_closing_radius": "0.049",
|
||||
"slicing_mode": "regular",
|
||||
"slow_down_layers": "0",
|
||||
"slowdown_for_curled_perimeters": "0",
|
||||
"small_perimeter_speed": "50%",
|
||||
"small_perimeter_threshold": "0",
|
||||
"solid_infill_filament": "1",
|
||||
"sparse_infill_acceleration": "100%",
|
||||
"sparse_infill_density": "10%",
|
||||
"sparse_infill_filament": "1",
|
||||
"sparse_infill_line_width": "0.4",
|
||||
"sparse_infill_pattern": "adaptivecubic",
|
||||
"sparse_infill_speed": "200",
|
||||
"spiral_mode": "0",
|
||||
"staggered_inner_seams": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"support_angle": "0",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "0.2",
|
||||
"support_bottom_interface_spacing": "0.5",
|
||||
"support_bottom_z_distance": "0.2",
|
||||
"support_critical_regions_only": "0",
|
||||
"support_expansion": "0",
|
||||
"support_filament": "0",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_pattern": "rectilinear",
|
||||
"support_interface_spacing": "0.2",
|
||||
"support_interface_speed": "80",
|
||||
"support_interface_top_layers": "3",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_remove_small_overhang": "1",
|
||||
"support_speed": "140",
|
||||
"support_style": "grid",
|
||||
"support_threshold_angle": "40",
|
||||
"support_top_z_distance": "0.15",
|
||||
"support_type": "normal(auto)",
|
||||
"thick_bridges": "0",
|
||||
"timelapse_type": "0",
|
||||
"top_shell_layers": "2",
|
||||
"top_solid_infill_flow_ratio": "1",
|
||||
"top_surface_acceleration": "2000",
|
||||
"top_surface_jerk": "9",
|
||||
"top_surface_line_width": "0.4",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"top_surface_speed": "40",
|
||||
"travel_acceleration": "3000",
|
||||
"travel_jerk": "12",
|
||||
"travel_speed": "200",
|
||||
"travel_speed_z": "0",
|
||||
"tree_support_adaptive_layer_height": "1",
|
||||
"tree_support_angle_slow": "25",
|
||||
"tree_support_auto_brim": "1",
|
||||
"tree_support_branch_angle": "40",
|
||||
"tree_support_branch_angle_organic": "40",
|
||||
"tree_support_branch_diameter": "5",
|
||||
"tree_support_branch_diameter_angle": "5",
|
||||
"tree_support_branch_diameter_double_wall": "3",
|
||||
"tree_support_branch_diameter_organic": "2",
|
||||
"tree_support_branch_distance": "5",
|
||||
"tree_support_branch_distance_organic": "1",
|
||||
"tree_support_brim_width": "3",
|
||||
"tree_support_tip_diameter": "0.8",
|
||||
"tree_support_top_rate": "30%",
|
||||
"tree_support_wall_count": "0",
|
||||
"version": "1.7.0.0",
|
||||
"wall_distribution_count": "1",
|
||||
"wall_filament": "1",
|
||||
"wall_generator": "arachne",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"wall_loops": "3",
|
||||
"wall_transition_angle": "10",
|
||||
"wall_transition_filter_deviation": "25%",
|
||||
"wall_transition_length": "100%",
|
||||
"wipe_on_loops": "0",
|
||||
"wipe_speed": "80%",
|
||||
"wipe_tower_bridging": "10",
|
||||
"wipe_tower_cone_angle": "0",
|
||||
"wipe_tower_extra_spacing": "100%",
|
||||
"wipe_tower_extruder": "0",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"wipe_tower_rotation_angle": "0",
|
||||
"wiping_volumes_extruders": [
|
||||
"70",
|
||||
"70",
|
||||
"70",
|
||||
"70",
|
||||
"70",
|
||||
"70",
|
||||
"70",
|
||||
"70",
|
||||
"70",
|
||||
"70"
|
||||
],
|
||||
"xy_contour_compensation": "0",
|
||||
"xy_hole_compensation": "0"
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"change_filament_gcode": "",
|
||||
"machine_pause_gcode": "M25",
|
||||
"default_filament_profile": [ "Flashforge Generic PLA" ],
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.25 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0",
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0",
|
||||
"machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nG28\nM104 S0 ; turn off temperature\nM84 ; disable motors",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"change_filament_gcode": "",
|
||||
"machine_pause_gcode": "M25",
|
||||
"default_filament_profile": [ "Flashforge Generic PLA" ],
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.25 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0",
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0",
|
||||
"machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nG28\nM104 S0 ; turn off temperature\nM84 ; disable motors",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"change_filament_gcode": "",
|
||||
"machine_pause_gcode": "M25",
|
||||
"default_filament_profile": [ "Flashforge Generic PLA" ],
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.25 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0",
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0",
|
||||
"machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nG28\nM104 S0 ; turn off temperature\nM84 ; disable motors",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"change_filament_gcode": "",
|
||||
"machine_pause_gcode": "M25",
|
||||
"default_filament_profile": [ "Flashforge Generic PLA" ],
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.25 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0",
|
||||
"machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0",
|
||||
"machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nG28\nM104 S0 ; turn off temperature\nM84 ; disable motors",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
|
||||
@@ -39,7 +39,9 @@ BeadingStrategyPtr BeadingStrategyFactory::makeStrategy(
|
||||
BOOST_LOG_TRIVIAL(debug) << "Applying the Widening Beading meta-strategy with minimum input width " << min_feature_size << " and minimum output width " << min_bead_width << ".";
|
||||
ret = std::make_unique<WideningBeadingStrategy>(std::move(ret), min_feature_size, min_bead_width);
|
||||
}
|
||||
if (outer_wall_offset > 0) {
|
||||
// Orca: we allow negative outer_wall_offset here
|
||||
if (outer_wall_offset != 0)
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(debug) << "Applying the OuterWallOffset meta-strategy with offset = " << outer_wall_offset << ".";
|
||||
ret = std::make_unique<OuterWallInsetBeadingStrategy>(outer_wall_offset, std::move(ret));
|
||||
}
|
||||
|
||||
@@ -485,9 +485,10 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
|
||||
|
||||
// Calculate the actual flow we'll be using for this infill.
|
||||
params.bridge = is_bridge || Fill::use_bridge_flow(params.pattern);
|
||||
const bool is_thick_bridge = surface.is_bridge() && (surface.is_internal_bridge() ? object_config.thick_internal_bridges : object_config.thick_bridges);
|
||||
params.flow = params.bridge ?
|
||||
//BBS: always enable thick bridge for internal bridge
|
||||
layerm.bridging_flow(extrusion_role, (surface.is_bridge() && !surface.is_external()) || object_config.thick_bridges) :
|
||||
//Orca: enable thick bridge based on config
|
||||
layerm.bridging_flow(extrusion_role, is_thick_bridge) :
|
||||
layerm.flow(extrusion_role, (surface.thickness == -1) ? layer.height : surface.thickness);
|
||||
|
||||
// Calculate flow spacing for infill pattern generation.
|
||||
|
||||
@@ -4588,6 +4588,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
||||
_mm3_per_mm *= m_config.top_solid_infill_flow_ratio;
|
||||
else if (path.role() == erBottomSurface)
|
||||
_mm3_per_mm *= m_config.bottom_solid_infill_flow_ratio;
|
||||
else if (path.role() == erInternalBridgeInfill)
|
||||
_mm3_per_mm *= m_config.internal_bridge_flow;
|
||||
|
||||
|
||||
double e_per_mm = m_writer.extruder()->e_per_mm3() * _mm3_per_mm;
|
||||
@@ -4691,68 +4693,68 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
||||
|
||||
if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic && !this->on_first_layer() &&
|
||||
(is_bridge(path.role()) || is_perimeter(path.role()))) {
|
||||
|
||||
double out_wall_ref_speed = m_config.get_abs_value("outer_wall_speed");
|
||||
ConfigOptionPercents overhang_overlap_levels({75, 50, 25, 13, 12.99, 0});
|
||||
bool is_external = is_external_perimeter(path.role());
|
||||
double ref_speed = is_external ? m_config.get_abs_value("outer_wall_speed") : m_config.get_abs_value("inner_wall_speed");
|
||||
ConfigOptionPercents overhang_overlap_levels({75, 50, 25, 13, 12.99, 0});
|
||||
|
||||
if (m_config.slowdown_for_curled_perimeters){
|
||||
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
||||
{(m_config.get_abs_value("overhang_1_4_speed") < 0.5) ?
|
||||
{(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_2_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_3_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed") * 100 / out_wall_ref_speed, true}});
|
||||
if (out_wall_ref_speed == 0)
|
||||
out_wall_ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm;
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}});
|
||||
if (ref_speed == 0)
|
||||
ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm;
|
||||
|
||||
if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) {
|
||||
out_wall_ref_speed = std::min(out_wall_ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm);
|
||||
ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm);
|
||||
}
|
||||
|
||||
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
||||
out_wall_ref_speed, speed, m_config.slowdown_for_curled_perimeters);
|
||||
ref_speed, speed, m_config.slowdown_for_curled_perimeters);
|
||||
}else{
|
||||
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
||||
{(m_config.get_abs_value("overhang_1_4_speed") < 0.5) ?
|
||||
{(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_2_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_3_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed") < 0.5) ?
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
(m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ?
|
||||
FloatOrPercent{100, true} :
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed") * 100 / out_wall_ref_speed, true},
|
||||
FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / out_wall_ref_speed, true},
|
||||
FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / out_wall_ref_speed, true}});
|
||||
FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true},
|
||||
FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true},
|
||||
FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}});
|
||||
|
||||
if (out_wall_ref_speed == 0)
|
||||
out_wall_ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm;
|
||||
if (ref_speed == 0)
|
||||
ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm;
|
||||
|
||||
if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) {
|
||||
out_wall_ref_speed = std::min(out_wall_ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm);
|
||||
ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm);
|
||||
}
|
||||
|
||||
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
||||
out_wall_ref_speed, speed, m_config.slowdown_for_curled_perimeters);
|
||||
ref_speed, speed, m_config.slowdown_for_curled_perimeters);
|
||||
}
|
||||
variable_speed = std::any_of(new_points.begin(), new_points.end(), [speed](const ProcessedPoint &p) { return p.speed != speed; });
|
||||
|
||||
variable_speed = std::any_of(new_points.begin(), new_points.end(),
|
||||
[speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > EPSILON; });
|
||||
}
|
||||
|
||||
double F = speed * 60; // convert mm/sec to mm/min
|
||||
@@ -5449,7 +5451,7 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z)
|
||||
old_retract_length = m_config.retraction_length.get_at(previous_extruder_id);
|
||||
old_retract_length_toolchange = m_config.retract_length_toolchange.get_at(previous_extruder_id);
|
||||
old_filament_temp = this->on_first_layer()? m_config.nozzle_temperature_initial_layer.get_at(previous_extruder_id) : m_config.nozzle_temperature.get_at(previous_extruder_id);
|
||||
if (m_config.purge_in_prime_tower) {
|
||||
if (m_config.purge_in_prime_tower || is_BBL_Printer()) {
|
||||
wipe_volume = flush_matrix[previous_extruder_id * number_of_extruders + extruder_id];
|
||||
wipe_volume *= m_config.flush_multiplier;
|
||||
} else {
|
||||
|
||||
@@ -1890,24 +1890,22 @@ void PerimeterGenerator::process_arachne()
|
||||
// extra perimeters for each one
|
||||
for (const Surface& surface : this->slices->surfaces) {
|
||||
coord_t bead_width_0 = ext_perimeter_spacing;
|
||||
if (config->precise_outer_wall)
|
||||
bead_width_0 = ext_perimeter_width + this->perimeter_flow.scaled_width() - perimeter_spacing;
|
||||
// detect how many perimeters must be generated for this island
|
||||
int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops
|
||||
if (this->layer_id == 0 && this->config->only_one_wall_first_layer)
|
||||
loop_number = 0;
|
||||
// BBS: set the topmost layer to be one wall
|
||||
// Orca: set the topmost layer to be one wall according to the config
|
||||
if (loop_number > 0 && config->only_one_wall_top && this->upper_slices == nullptr)
|
||||
loop_number = 0;
|
||||
// Orca: properly adjust offset for the outer wall if precise_outer_wall is enabled.
|
||||
ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution),
|
||||
config->precise_outer_wall ? -float(ext_perimeter_width / 2. - bead_width_0 / 2.)
|
||||
config->precise_outer_wall ? -float(ext_perimeter_width - ext_perimeter_spacing )
|
||||
: -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
|
||||
|
||||
Arachne::WallToolPathsParams input_params = Arachne::make_paths_params(this->layer_id, *object_config, *print_config);
|
||||
coord_t wall_0_inset = 0;
|
||||
//if (config->precise_outer_wall)
|
||||
// wall_0_inset = 0.5 * (ext_perimeter_width + this->perimeter_flow.scaled_width() - ext_perimeter_spacing -
|
||||
// perimeter_spacing);
|
||||
if (config->precise_outer_wall)
|
||||
wall_0_inset = -coord_t(ext_perimeter_width / 2 - ext_perimeter_spacing / 2);
|
||||
|
||||
std::vector<Arachne::VariableWidthLines> out_shell;
|
||||
ExPolygons top_fills;
|
||||
|
||||
@@ -744,12 +744,12 @@ static std::vector<std::string> s_Preset_print_options {
|
||||
"independent_support_layer_height",
|
||||
"support_angle", "support_interface_top_layers", "support_interface_bottom_layers",
|
||||
"support_interface_pattern", "support_interface_spacing", "support_interface_loop_pattern",
|
||||
"support_top_z_distance", "support_on_build_plate_only","support_critical_regions_only", "bridge_no_support", "thick_bridges", "max_bridge_length", "print_sequence", "support_remove_small_overhang",
|
||||
"support_top_z_distance", "support_on_build_plate_only","support_critical_regions_only", "bridge_no_support", "thick_bridges", "thick_internal_bridges", "max_bridge_length", "print_sequence", "support_remove_small_overhang",
|
||||
"filename_format", "wall_filament", "support_bottom_z_distance",
|
||||
"sparse_infill_filament", "solid_infill_filament", "support_filament", "support_interface_filament",
|
||||
"ooze_prevention", "standby_temperature_delta", "interface_shells", "line_width", "initial_layer_line_width",
|
||||
"inner_wall_line_width", "outer_wall_line_width", "sparse_infill_line_width", "internal_solid_infill_line_width",
|
||||
"top_surface_line_width", "support_line_width", "infill_wall_overlap", "bridge_flow",
|
||||
"top_surface_line_width", "support_line_width", "infill_wall_overlap", "bridge_flow", "internal_bridge_flow",
|
||||
"elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower",
|
||||
"prime_tower_width", "prime_tower_brim_width", "prime_volume",
|
||||
"wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits",
|
||||
|
||||
@@ -776,6 +776,15 @@ void PrintConfigDef::init_fff_params()
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(1));
|
||||
|
||||
def = this->add("internal_bridge_flow", coFloat);
|
||||
def->label = L("Internal bridge flow");
|
||||
def->category = L("Quality");
|
||||
def->tooltip = L("This value governs the thickness of the internal bridge layer. This is the first layer over sparse infill. Decrease this value slightly (for example 0.9) to improve surface quality over sparse infill.");
|
||||
def->min = 0;
|
||||
def->max = 2.0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(1));
|
||||
|
||||
def = this->add("top_solid_infill_flow_ratio", coFloat);
|
||||
def->label = L("Top surface flow ratio");
|
||||
def->category = L("Advanced");
|
||||
@@ -1156,6 +1165,15 @@ void PrintConfigDef::init_fff_params()
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("thick_internal_bridges", coBool);
|
||||
def->label = L("Thick internal bridges");
|
||||
def->category = L("Quality");
|
||||
def->tooltip = L("If enabled, thick internal bridges will be used. It's usually recommended to have this feature turned on. However, "
|
||||
"consider turning it off if you are using large nozzles.");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(true));
|
||||
|
||||
|
||||
def = this->add("max_bridge_length", coFloat);
|
||||
def->label = L("Max bridge length");
|
||||
def->category = L("Support");
|
||||
@@ -5702,6 +5720,11 @@ std::map<std::string, std::string> validate(const FullPrintConfig &cfg, bool und
|
||||
if (cfg.bridge_flow <= 0) {
|
||||
error_message.emplace("bridge_flow", L("invalid value ") + std::to_string(cfg.bridge_flow));
|
||||
}
|
||||
|
||||
// --bridge-flow-ratio
|
||||
if (cfg.bridge_flow <= 0) {
|
||||
error_message.emplace("internal_bridge_flow", L("invalid value ") + std::to_string(cfg.internal_bridge_flow));
|
||||
}
|
||||
|
||||
// extruder clearance
|
||||
if (cfg.extruder_clearance_radius <= 0) {
|
||||
|
||||
@@ -725,7 +725,9 @@ PRINT_CONFIG_CLASS_DEFINE(
|
||||
((ConfigOptionEnum<SupportMaterialStyle>, support_style))
|
||||
// BBS
|
||||
//((ConfigOptionBool, independent_support_layer_height))
|
||||
// Orca internal thick bridge
|
||||
((ConfigOptionBool, thick_bridges))
|
||||
((ConfigOptionBool, thick_internal_bridges))
|
||||
// Overhang angle threshold.
|
||||
((ConfigOptionInt, support_threshold_angle))
|
||||
((ConfigOptionFloat, support_object_xy_distance))
|
||||
@@ -796,6 +798,7 @@ PRINT_CONFIG_CLASS_DEFINE(
|
||||
((ConfigOptionFloat, bottom_shell_thickness))
|
||||
((ConfigOptionFloat, bridge_angle))
|
||||
((ConfigOptionFloat, bridge_flow))
|
||||
((ConfigOptionFloat, internal_bridge_flow))
|
||||
((ConfigOptionFloat, bridge_speed))
|
||||
((ConfigOptionFloatOrPercent, internal_bridge_speed))
|
||||
((ConfigOptionBool, ensure_vertical_shell_thickness))
|
||||
|
||||
@@ -1105,7 +1105,7 @@ bool PrintObject::invalidate_state_by_config_options(
|
||||
|| opt_key == "overhang_speed_classic") {
|
||||
steps.emplace_back(posPerimeters);
|
||||
steps.emplace_back(posSupportMaterial);
|
||||
} else if (opt_key == "bridge_flow") {
|
||||
} else if (opt_key == "bridge_flow" || opt_key == "internal_bridge_flow") {
|
||||
if (m_config.support_top_z_distance > 0.) {
|
||||
// Only invalidate due to bridging if bridging is enabled.
|
||||
// If later "support_top_z_distance" is modified, the complete PrintObject is invalidated anyway.
|
||||
|
||||
@@ -439,11 +439,8 @@ std::string CalibPressureAdvanceLine::generate_test(double start_pa /*= 0*/, dou
|
||||
|
||||
m_length_long = 40 + std::min(w - 120.0, 0.0);
|
||||
|
||||
auto startx = (w - m_length_short * 2 - m_length_long - 20) / 2;
|
||||
auto starty = (h - count * m_space_y) / 2;
|
||||
if (is_delta()) {
|
||||
CalibPressureAdvanceLine::delta_modify_start(startx, starty, count);
|
||||
}
|
||||
auto startx = bed_ext.min.x() + (w - m_length_short * 2 - m_length_long - 20) / 2;
|
||||
auto starty = bed_ext.min.y() + (h - count * m_space_y) / 2;
|
||||
|
||||
return print_pa_lines(startx, starty, start_pa, step_pa, count);
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
Upstream source: https://github.com/memononen/nanosvg/tree/c1f6e209c16b18b46aa9f45d7e619acf42c29726
|
||||
Upstream source: https://github.com/fltk/nanosvg/archive/abcd277ea45e9098bed752cf9c6875b533c0892f.zip
|
||||
@@ -72,6 +72,7 @@ extern "C" {
|
||||
*/
|
||||
|
||||
enum NSVGpaintType {
|
||||
NSVG_PAINT_UNDEF = -1,
|
||||
NSVG_PAINT_NONE = 0,
|
||||
NSVG_PAINT_COLOR = 1,
|
||||
NSVG_PAINT_LINEAR_GRADIENT = 2,
|
||||
@@ -119,7 +120,7 @@ typedef struct NSVGgradient {
|
||||
} NSVGgradient;
|
||||
|
||||
typedef struct NSVGpaint {
|
||||
char type;
|
||||
signed char type;
|
||||
union {
|
||||
unsigned int color;
|
||||
NSVGgradient* gradient;
|
||||
@@ -143,14 +144,17 @@ typedef struct NSVGshape
|
||||
float opacity; // Opacity of the shape.
|
||||
float strokeWidth; // Stroke width (scaled).
|
||||
float strokeDashOffset; // Stroke dash offset (scaled).
|
||||
float strokeDashArray[8]; // Stroke dash array (scaled).
|
||||
char strokeDashCount; // Number of dash values in dash array.
|
||||
float strokeDashArray[8]; // Stroke dash array (scaled).
|
||||
char strokeDashCount; // Number of dash values in dash array.
|
||||
char strokeLineJoin; // Stroke join type.
|
||||
char strokeLineCap; // Stroke cap type.
|
||||
float miterLimit; // Miter limit
|
||||
char fillRule; // Fill rule, see NSVGfillRule.
|
||||
unsigned char flags; // Logical or of NSVG_FLAGS_* flags
|
||||
float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy].
|
||||
char fillGradient[64]; // Optional 'id' of fill gradient
|
||||
char strokeGradient[64]; // Optional 'id' of stroke gradient
|
||||
float xform[6]; // Root transformation for fill/stroke gradient
|
||||
NSVGpath* paths; // Linked list of paths in the image.
|
||||
struct NSVGshape* next; // Pointer to next shape, or NULL if last element.
|
||||
} NSVGshape;
|
||||
@@ -181,16 +185,13 @@ void nsvgDelete(NSVGimage* image);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // NANOSVG_H
|
||||
|
||||
#ifdef NANOSVG_IMPLEMENTATION
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <boost/algorithm/string/replace.hpp>
|
||||
|
||||
#define NSVG_PI (3.14159265358979323846264338327f)
|
||||
#define NSVG_KAPPA90 (0.5522847493f) // Length proportional to radius of a cubic bezier handle for 90deg arcs.
|
||||
|
||||
@@ -227,11 +228,6 @@ static int nsvg__isdigit(char c)
|
||||
return c >= '0' && c <= '9';
|
||||
}
|
||||
|
||||
static int nsvg__isnum(char c)
|
||||
{
|
||||
return strchr("0123456789+-.eE", c) != 0;
|
||||
}
|
||||
|
||||
static NSVG_INLINE float nsvg__minf(float a, float b) { return a < b ? a : b; }
|
||||
static NSVG_INLINE float nsvg__maxf(float a, float b) { return a > b ? a : b; }
|
||||
|
||||
@@ -402,7 +398,7 @@ typedef struct NSVGgradientData
|
||||
{
|
||||
char id[64];
|
||||
char ref[64];
|
||||
char type;
|
||||
signed char type;
|
||||
union {
|
||||
NSVGlinearData linear;
|
||||
NSVGradialData radial;
|
||||
@@ -618,7 +614,7 @@ static void nsvg__curveBounds(float* bounds, float* curve)
|
||||
}
|
||||
}
|
||||
|
||||
static NSVGparser* nsvg__createParser()
|
||||
static NSVGparser* nsvg__createParser(void)
|
||||
{
|
||||
NSVGparser* p;
|
||||
p = (NSVGparser*)malloc(sizeof(NSVGparser));
|
||||
@@ -738,9 +734,11 @@ static void nsvg__lineTo(NSVGparser* p, float x, float y)
|
||||
|
||||
static void nsvg__cubicBezTo(NSVGparser* p, float cpx1, float cpy1, float cpx2, float cpy2, float x, float y)
|
||||
{
|
||||
nsvg__addPoint(p, cpx1, cpy1);
|
||||
nsvg__addPoint(p, cpx2, cpy2);
|
||||
nsvg__addPoint(p, x, y);
|
||||
if (p->npts > 0) {
|
||||
nsvg__addPoint(p, cpx1, cpy1);
|
||||
nsvg__addPoint(p, cpx2, cpy2);
|
||||
nsvg__addPoint(p, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
static NSVGattrib* nsvg__getAttr(NSVGparser* p)
|
||||
@@ -810,7 +808,9 @@ static float nsvg__convertToPixels(NSVGparser* p, NSVGcoordinate c, float orig,
|
||||
static NSVGgradientData* nsvg__findGradientData(NSVGparser* p, const char* id)
|
||||
{
|
||||
NSVGgradientData* grad = p->gradients;
|
||||
while (grad) {
|
||||
if (id == NULL || *id == '\0')
|
||||
return NULL;
|
||||
while (grad != NULL) {
|
||||
if (strcmp(grad->id, id) == 0)
|
||||
return grad;
|
||||
grad = grad->next;
|
||||
@@ -818,28 +818,34 @@ static NSVGgradientData* nsvg__findGradientData(NSVGparser* p, const char* id)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, char* paintType)
|
||||
static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, float *xform, signed char* paintType)
|
||||
{
|
||||
NSVGattrib* attr = nsvg__getAttr(p);
|
||||
NSVGgradientData* data = NULL;
|
||||
NSVGgradientData* ref = NULL;
|
||||
NSVGgradientStop* stops = NULL;
|
||||
NSVGgradient* grad;
|
||||
float ox, oy, sw, sh, sl;
|
||||
int nstops = 0;
|
||||
int refIter;
|
||||
|
||||
data = nsvg__findGradientData(p, id);
|
||||
if (data == NULL) return NULL;
|
||||
|
||||
// TODO: use ref to fill in all unset values too.
|
||||
ref = data;
|
||||
refIter = 0;
|
||||
while (ref != NULL) {
|
||||
NSVGgradientData* nextRef = NULL;
|
||||
if (stops == NULL && ref->stops != NULL) {
|
||||
stops = ref->stops;
|
||||
nstops = ref->nstops;
|
||||
break;
|
||||
}
|
||||
ref = nsvg__findGradientData(p, ref->ref);
|
||||
nextRef = nsvg__findGradientData(p, ref->ref);
|
||||
if (nextRef == ref) break; // prevent infite loops on malformed data
|
||||
ref = nextRef;
|
||||
refIter++;
|
||||
if (refIter > 32) break; // prevent infite loops on malformed data
|
||||
}
|
||||
if (stops == NULL) return NULL;
|
||||
|
||||
@@ -888,7 +894,7 @@ static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const f
|
||||
}
|
||||
|
||||
nsvg__xformMultiply(grad->xform, data->xform);
|
||||
nsvg__xformMultiply(grad->xform, attr->xform);
|
||||
nsvg__xformMultiply(grad->xform, xform);
|
||||
|
||||
grad->spread = data->spread;
|
||||
memcpy(grad->stops, stops, nstops*sizeof(NSVGgradientStop));
|
||||
@@ -952,6 +958,9 @@ static void nsvg__addShape(NSVGparser* p)
|
||||
memset(shape, 0, sizeof(NSVGshape));
|
||||
|
||||
memcpy(shape->id, attr->id, sizeof shape->id);
|
||||
memcpy(shape->fillGradient, attr->fillGradient, sizeof shape->fillGradient);
|
||||
memcpy(shape->strokeGradient, attr->strokeGradient, sizeof shape->strokeGradient);
|
||||
memcpy(shape->xform, attr->xform, sizeof shape->xform);
|
||||
scale = nsvg__getAverageScale(attr->xform);
|
||||
shape->strokeWidth = attr->strokeWidth * scale;
|
||||
shape->strokeDashOffset = attr->strokeDashOffset * scale;
|
||||
@@ -987,13 +996,7 @@ static void nsvg__addShape(NSVGparser* p)
|
||||
shape->fill.color = attr->fillColor;
|
||||
shape->fill.color |= (unsigned int)(attr->fillOpacity*255) << 24;
|
||||
} else if (attr->hasFill == 2) {
|
||||
float inv[6], localBounds[4];
|
||||
nsvg__xformInverse(inv, attr->xform);
|
||||
nsvg__getLocalBounds(localBounds, shape, inv);
|
||||
shape->fill.gradient = nsvg__createGradient(p, attr->fillGradient, localBounds, &shape->fill.type);
|
||||
if (shape->fill.gradient == NULL) {
|
||||
shape->fill.type = NSVG_PAINT_NONE;
|
||||
}
|
||||
shape->fill.type = NSVG_PAINT_UNDEF;
|
||||
}
|
||||
|
||||
// Set stroke
|
||||
@@ -1004,12 +1007,7 @@ static void nsvg__addShape(NSVGparser* p)
|
||||
shape->stroke.color = attr->strokeColor;
|
||||
shape->stroke.color |= (unsigned int)(attr->strokeOpacity*255) << 24;
|
||||
} else if (attr->hasStroke == 2) {
|
||||
float inv[6], localBounds[4];
|
||||
nsvg__xformInverse(inv, attr->xform);
|
||||
nsvg__getLocalBounds(localBounds, shape, inv);
|
||||
shape->stroke.gradient = nsvg__createGradient(p, attr->strokeGradient, localBounds, &shape->stroke.type);
|
||||
if (shape->stroke.gradient == NULL)
|
||||
shape->stroke.type = NSVG_PAINT_NONE;
|
||||
shape->stroke.type = NSVG_PAINT_UNDEF;
|
||||
}
|
||||
|
||||
// Set flags
|
||||
@@ -1042,6 +1040,10 @@ static void nsvg__addPath(NSVGparser* p, char closed)
|
||||
if (closed)
|
||||
nsvg__lineTo(p, p->pts[0], p->pts[1]);
|
||||
|
||||
// Expect 1 + N*3 points (N = number of cubic bezier segments).
|
||||
if ((p->npts % 3) != 1)
|
||||
return;
|
||||
|
||||
path = (NSVGpath*)malloc(sizeof(NSVGpath));
|
||||
if (path == NULL) goto error;
|
||||
memset(path, 0, sizeof(NSVGpath));
|
||||
@@ -1090,7 +1092,7 @@ static double nsvg__atof(const char* s)
|
||||
char* cur = (char*)s;
|
||||
char* end = NULL;
|
||||
double res = 0.0, sign = 1.0;
|
||||
long long intPart = 0, fracPart = 0;
|
||||
double intPart = 0.0, fracPart = 0.0;
|
||||
char hasIntPart = 0, hasFracPart = 0;
|
||||
|
||||
// Parse optional sign
|
||||
@@ -1104,9 +1106,13 @@ static double nsvg__atof(const char* s)
|
||||
// Parse integer part
|
||||
if (nsvg__isdigit(*cur)) {
|
||||
// Parse digit sequence
|
||||
#ifdef _MSC_VER
|
||||
intPart = (double)_strtoi64(cur, &end, 10);
|
||||
#else
|
||||
intPart = (double)strtoll(cur, &end, 10);
|
||||
#endif
|
||||
if (cur != end) {
|
||||
res = (double)intPart;
|
||||
res = intPart;
|
||||
hasIntPart = 1;
|
||||
cur = end;
|
||||
}
|
||||
@@ -1117,9 +1123,13 @@ static double nsvg__atof(const char* s)
|
||||
cur++; // Skip '.'
|
||||
if (nsvg__isdigit(*cur)) {
|
||||
// Parse digit sequence
|
||||
fracPart = strtoll(cur, &end, 10);
|
||||
#ifdef _MSC_VER
|
||||
fracPart = (double)_strtoi64(cur, &end, 10);
|
||||
#else
|
||||
fracPart = (double)strtoll(cur, &end, 10);
|
||||
#endif
|
||||
if (cur != end) {
|
||||
res += (double)fracPart / pow(10.0, (double)(end - cur));
|
||||
res += fracPart / pow(10.0, (double)(end - cur));
|
||||
hasFracPart = 1;
|
||||
cur = end;
|
||||
}
|
||||
@@ -1132,11 +1142,11 @@ static double nsvg__atof(const char* s)
|
||||
|
||||
// Parse optional exponent
|
||||
if (*cur == 'e' || *cur == 'E') {
|
||||
int expPart = 0;
|
||||
double expPart = 0.0;
|
||||
cur++; // skip 'E'
|
||||
expPart = strtol(cur, &end, 10); // Parse digit sequence with sign
|
||||
expPart = (double)strtol(cur, &end, 10); // Parse digit sequence with sign
|
||||
if (cur != end) {
|
||||
res *= pow(10.0, (double)expPart);
|
||||
res *= pow(10.0, expPart);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1170,7 +1180,7 @@ static const char* nsvg__parseNumber(const char* s, char* it, const int size)
|
||||
}
|
||||
}
|
||||
// exponent
|
||||
if (*s == 'e' || *s == 'E') {
|
||||
if ((*s == 'e' || *s == 'E') && (s[1] != 'm' && s[1] != 'x')) {
|
||||
if (i < last) it[i++] = *s;
|
||||
s++;
|
||||
if (*s == '-' || *s == '+') {
|
||||
@@ -1187,6 +1197,19 @@ static const char* nsvg__parseNumber(const char* s, char* it, const int size)
|
||||
return s;
|
||||
}
|
||||
|
||||
static const char* nsvg__getNextPathItemWhenArcFlag(const char* s, char* it)
|
||||
{
|
||||
it[0] = '\0';
|
||||
while (*s && (nsvg__isspace(*s) || *s == ',')) s++;
|
||||
if (!*s) return s;
|
||||
if (*s == '0' || *s == '1') {
|
||||
it[0] = *s++;
|
||||
it[1] = '\0';
|
||||
return s;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
static const char* nsvg__getNextPathItem(const char* s, char* it)
|
||||
{
|
||||
it[0] = '\0';
|
||||
@@ -1207,35 +1230,66 @@ static const char* nsvg__getNextPathItem(const char* s, char* it)
|
||||
|
||||
static unsigned int nsvg__parseColorHex(const char* str)
|
||||
{
|
||||
unsigned int c = 0, r = 0, g = 0, b = 0;
|
||||
int n = 0;
|
||||
str++; // skip #
|
||||
// Calculate number of characters.
|
||||
while(str[n] && !nsvg__isspace(str[n]))
|
||||
n++;
|
||||
if (n == 6) {
|
||||
sscanf(str, "%x", &c);
|
||||
} else if (n == 3) {
|
||||
sscanf(str, "%x", &c);
|
||||
c = (c&0xf) | ((c&0xf0) << 4) | ((c&0xf00) << 8);
|
||||
c |= c<<4;
|
||||
}
|
||||
r = (c >> 16) & 0xff;
|
||||
g = (c >> 8) & 0xff;
|
||||
b = c & 0xff;
|
||||
return NSVG_RGB(r,g,b);
|
||||
unsigned int r=0, g=0, b=0;
|
||||
if (sscanf(str, "#%2x%2x%2x", &r, &g, &b) == 3 ) // 2 digit hex
|
||||
return NSVG_RGB(r, g, b);
|
||||
if (sscanf(str, "#%1x%1x%1x", &r, &g, &b) == 3 ) // 1 digit hex, e.g. #abc -> 0xccbbaa
|
||||
return NSVG_RGB(r*17, g*17, b*17); // same effect as (r<<4|r), (g<<4|g), ..
|
||||
return NSVG_RGB(128, 128, 128);
|
||||
}
|
||||
|
||||
// Parse rgb color. The pointer 'str' must point at "rgb(" (4+ characters).
|
||||
// This function returns gray (rgb(128, 128, 128) == '#808080') on parse errors
|
||||
// for backwards compatibility. Note: other image viewers return black instead.
|
||||
|
||||
static unsigned int nsvg__parseColorRGB(const char* str)
|
||||
{
|
||||
int r = -1, g = -1, b = -1;
|
||||
char s1[32]="", s2[32]="";
|
||||
sscanf(str + 4, "%d%[%%, \t]%d%[%%, \t]%d", &r, s1, &g, s2, &b);
|
||||
if (strchr(s1, '%')) {
|
||||
return NSVG_RGB((r*255)/100,(g*255)/100,(b*255)/100);
|
||||
} else {
|
||||
return NSVG_RGB(r,g,b);
|
||||
int i;
|
||||
unsigned int rgbi[3];
|
||||
float rgbf[3];
|
||||
// try decimal integers first
|
||||
if (sscanf(str, "rgb(%u, %u, %u)", &rgbi[0], &rgbi[1], &rgbi[2]) != 3) {
|
||||
// integers failed, try percent values (float, locale independent)
|
||||
const char delimiter[3] = {',', ',', ')'};
|
||||
str += 4; // skip "rgb("
|
||||
for (i = 0; i < 3; i++) {
|
||||
while (*str && (nsvg__isspace(*str))) str++; // skip leading spaces
|
||||
if (*str == '+') str++; // skip '+' (don't allow '-')
|
||||
if (!*str) break;
|
||||
rgbf[i] = nsvg__atof(str);
|
||||
|
||||
// Note 1: it would be great if nsvg__atof() returned how many
|
||||
// bytes it consumed but it doesn't. We need to skip the number,
|
||||
// the '%' character, spaces, and the delimiter ',' or ')'.
|
||||
|
||||
// Note 2: The following code does not allow values like "33.%",
|
||||
// i.e. a decimal point w/o fractional part, but this is consistent
|
||||
// with other image viewers, e.g. firefox, chrome, eog, gimp.
|
||||
|
||||
while (*str && nsvg__isdigit(*str)) str++; // skip integer part
|
||||
if (*str == '.') {
|
||||
str++;
|
||||
if (!nsvg__isdigit(*str)) break; // error: no digit after '.'
|
||||
while (*str && nsvg__isdigit(*str)) str++; // skip fractional part
|
||||
}
|
||||
if (*str == '%') str++; else break;
|
||||
while (nsvg__isspace(*str)) str++;
|
||||
if (*str == delimiter[i]) str++;
|
||||
else break;
|
||||
}
|
||||
if (i == 3) {
|
||||
rgbi[0] = roundf(rgbf[0] * 2.55f);
|
||||
rgbi[1] = roundf(rgbf[1] * 2.55f);
|
||||
rgbi[2] = roundf(rgbf[2] * 2.55f);
|
||||
} else {
|
||||
rgbi[0] = rgbi[1] = rgbi[2] = 128;
|
||||
}
|
||||
}
|
||||
// clip values as the CSS spec requires
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (rgbi[i] > 255) rgbi[i] = 255;
|
||||
}
|
||||
return NSVG_RGB(rgbi[0], rgbi[1], rgbi[2]);
|
||||
}
|
||||
|
||||
typedef struct NSVGNamedColor {
|
||||
@@ -1460,6 +1514,15 @@ static int nsvg__parseUnits(const char* units)
|
||||
return NSVG_UNITS_USER;
|
||||
}
|
||||
|
||||
static int nsvg__isCoordinate(const char* s)
|
||||
{
|
||||
// optional sign
|
||||
if (*s == '-' || *s == '+')
|
||||
s++;
|
||||
// must have at least one digit, or start by a dot
|
||||
return (nsvg__isdigit(*s) || *s == '.');
|
||||
}
|
||||
|
||||
static NSVGcoordinate nsvg__parseCoordinateRaw(const char* str)
|
||||
{
|
||||
NSVGcoordinate coord = {0, NSVG_UNITS_USER};
|
||||
@@ -1599,25 +1662,32 @@ static int nsvg__parseRotate(float* xform, const char* str)
|
||||
static void nsvg__parseTransform(float* xform, const char* str)
|
||||
{
|
||||
float t[6];
|
||||
int len;
|
||||
nsvg__xformIdentity(xform);
|
||||
while (*str)
|
||||
{
|
||||
if (strncmp(str, "matrix", 6) == 0)
|
||||
str += nsvg__parseMatrix(t, str);
|
||||
len = nsvg__parseMatrix(t, str);
|
||||
else if (strncmp(str, "translate", 9) == 0)
|
||||
str += nsvg__parseTranslate(t, str);
|
||||
len = nsvg__parseTranslate(t, str);
|
||||
else if (strncmp(str, "scale", 5) == 0)
|
||||
str += nsvg__parseScale(t, str);
|
||||
len = nsvg__parseScale(t, str);
|
||||
else if (strncmp(str, "rotate", 6) == 0)
|
||||
str += nsvg__parseRotate(t, str);
|
||||
len = nsvg__parseRotate(t, str);
|
||||
else if (strncmp(str, "skewX", 5) == 0)
|
||||
str += nsvg__parseSkewX(t, str);
|
||||
len = nsvg__parseSkewX(t, str);
|
||||
else if (strncmp(str, "skewY", 5) == 0)
|
||||
str += nsvg__parseSkewY(t, str);
|
||||
len = nsvg__parseSkewY(t, str);
|
||||
else{
|
||||
++str;
|
||||
continue;
|
||||
}
|
||||
if (len != 0) {
|
||||
str += len;
|
||||
} else {
|
||||
++str;
|
||||
continue;
|
||||
}
|
||||
|
||||
nsvg__xformPremultiply(xform, t);
|
||||
}
|
||||
@@ -1627,9 +1697,9 @@ static void nsvg__parseUrl(char* id, const char* str)
|
||||
{
|
||||
int i = 0;
|
||||
str += 4; // "url(";
|
||||
if (*str == '#')
|
||||
if (*str && *str == '#')
|
||||
str++;
|
||||
while (i < 63 && *str != ')') {
|
||||
while (i < 63 && *str && *str != ')') {
|
||||
id[i] = *str++;
|
||||
i++;
|
||||
}
|
||||
@@ -1878,8 +1948,11 @@ static int nsvg__getArgsPerElement(char cmd)
|
||||
case 'a':
|
||||
case 'A':
|
||||
return 7;
|
||||
case 'z':
|
||||
case 'Z':
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void nsvg__pathMoveTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel)
|
||||
@@ -2160,7 +2233,12 @@ static void nsvg__pathArcTo(NSVGparser* p, float* cpx, float* cpy, float* args,
|
||||
// The loop assumes an iteration per end point (including start and end), this +1.
|
||||
ndivs = (int)(fabsf(da) / (NSVG_PI*0.5f) + 1.0f);
|
||||
hda = (da / (float)ndivs) / 2.0f;
|
||||
kappa = fabsf(4.0f / 3.0f * (1.0f - cosf(hda)) / sinf(hda));
|
||||
// Fix for ticket #179: division by 0: avoid cotangens around 0 (infinite)
|
||||
if ((hda < 1e-3f) && (hda > -1e-3f))
|
||||
hda *= 0.5f;
|
||||
else
|
||||
hda = (1.0f - cosf(hda)) / sinf(hda);
|
||||
kappa = fabsf(4.0f / 3.0f * hda);
|
||||
if (da < 0.0f)
|
||||
kappa = -kappa;
|
||||
|
||||
@@ -2189,6 +2267,7 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr)
|
||||
float args[10];
|
||||
int nargs;
|
||||
int rargs = 0;
|
||||
char initPoint;
|
||||
float cpx, cpy, cpx2, cpy2;
|
||||
const char* tmp[4];
|
||||
char closedFlag;
|
||||
@@ -2211,13 +2290,18 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr)
|
||||
nsvg__resetPath(p);
|
||||
cpx = 0; cpy = 0;
|
||||
cpx2 = 0; cpy2 = 0;
|
||||
initPoint = 0;
|
||||
closedFlag = 0;
|
||||
nargs = 0;
|
||||
|
||||
while (*s) {
|
||||
s = nsvg__getNextPathItem(s, item);
|
||||
item[0] = '\0';
|
||||
if ((cmd == 'A' || cmd == 'a') && (nargs == 3 || nargs == 4))
|
||||
s = nsvg__getNextPathItemWhenArcFlag(s, item);
|
||||
if (!*item)
|
||||
s = nsvg__getNextPathItem(s, item);
|
||||
if (!*item) break;
|
||||
if (nsvg__isnum(item[0])) {
|
||||
if (cmd != '\0' && nsvg__isCoordinate(item)) {
|
||||
if (nargs < 10)
|
||||
args[nargs++] = (float)nsvg__atof(item);
|
||||
if (nargs >= rargs) {
|
||||
@@ -2230,6 +2314,7 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr)
|
||||
cmd = (cmd == 'm') ? 'l' : 'L';
|
||||
rargs = nsvg__getArgsPerElement(cmd);
|
||||
cpx2 = cpx; cpy2 = cpy;
|
||||
initPoint = 1;
|
||||
break;
|
||||
case 'l':
|
||||
case 'L':
|
||||
@@ -2279,7 +2364,6 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr)
|
||||
}
|
||||
} else {
|
||||
cmd = item[0];
|
||||
rargs = nsvg__getArgsPerElement(cmd);
|
||||
if (cmd == 'M' || cmd == 'm') {
|
||||
// Commit path.
|
||||
if (p->npts > 0)
|
||||
@@ -2288,7 +2372,11 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr)
|
||||
nsvg__resetPath(p);
|
||||
closedFlag = 0;
|
||||
nargs = 0;
|
||||
} else if (cmd == 'Z' || cmd == 'z') {
|
||||
} else if (initPoint == 0) {
|
||||
// Do not allow other commands until initial point has been set (moveTo called once).
|
||||
cmd = '\0';
|
||||
}
|
||||
if (cmd == 'Z' || cmd == 'z') {
|
||||
closedFlag = 1;
|
||||
// Commit path.
|
||||
if (p->npts > 0) {
|
||||
@@ -2304,6 +2392,12 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr)
|
||||
closedFlag = 0;
|
||||
nargs = 0;
|
||||
}
|
||||
rargs = nsvg__getArgsPerElement(cmd);
|
||||
if (rargs == -1) {
|
||||
// Command not recognized
|
||||
cmd = '\0';
|
||||
rargs = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Commit path.
|
||||
@@ -2550,7 +2644,7 @@ static void nsvg__parseSVG(NSVGparser* p, const char** attr)
|
||||
}
|
||||
}
|
||||
|
||||
static void nsvg__parseGradient(NSVGparser* p, const char** attr, char type)
|
||||
static void nsvg__parseGradient(NSVGparser* p, const char** attr, signed char type)
|
||||
{
|
||||
int i;
|
||||
NSVGgradientData* grad = (NSVGgradientData*)malloc(sizeof(NSVGgradientData));
|
||||
@@ -2875,6 +2969,36 @@ static void nsvg__scaleToViewbox(NSVGparser* p, const char* units)
|
||||
}
|
||||
}
|
||||
|
||||
static void nsvg__createGradients(NSVGparser* p)
|
||||
{
|
||||
NSVGshape* shape;
|
||||
|
||||
for (shape = p->image->shapes; shape != NULL; shape = shape->next) {
|
||||
if (shape->fill.type == NSVG_PAINT_UNDEF) {
|
||||
if (shape->fillGradient[0] != '\0') {
|
||||
float inv[6], localBounds[4];
|
||||
nsvg__xformInverse(inv, shape->xform);
|
||||
nsvg__getLocalBounds(localBounds, shape, inv);
|
||||
shape->fill.gradient = nsvg__createGradient(p, shape->fillGradient, localBounds, shape->xform, &shape->fill.type);
|
||||
}
|
||||
if (shape->fill.type == NSVG_PAINT_UNDEF) {
|
||||
shape->fill.type = NSVG_PAINT_NONE;
|
||||
}
|
||||
}
|
||||
if (shape->stroke.type == NSVG_PAINT_UNDEF) {
|
||||
if (shape->strokeGradient[0] != '\0') {
|
||||
float inv[6], localBounds[4];
|
||||
nsvg__xformInverse(inv, shape->xform);
|
||||
nsvg__getLocalBounds(localBounds, shape, inv);
|
||||
shape->stroke.gradient = nsvg__createGradient(p, shape->strokeGradient, localBounds, shape->xform, &shape->stroke.type);
|
||||
}
|
||||
if (shape->stroke.type == NSVG_PAINT_UNDEF) {
|
||||
shape->stroke.type = NSVG_PAINT_NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NSVGimage* nsvgParse(char* input, const char* units, float dpi)
|
||||
{
|
||||
NSVGparser* p;
|
||||
@@ -2888,6 +3012,9 @@ NSVGimage* nsvgParse(char* input, const char* units, float dpi)
|
||||
|
||||
nsvg__parseXML(input, nsvg__startElement, nsvg__endElement, nsvg__content, p);
|
||||
|
||||
// Create gradients after all definitions have been parsed
|
||||
nsvg__createGradients(p);
|
||||
|
||||
// Scale to viewBox
|
||||
nsvg__scaleToViewbox(p, units);
|
||||
|
||||
@@ -2899,8 +3026,6 @@ NSVGimage* nsvgParse(char* input, const char* units, float dpi)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#include <boost/nowide/cstdio.hpp>
|
||||
|
||||
NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi)
|
||||
{
|
||||
FILE* fp = NULL;
|
||||
@@ -2908,8 +3033,8 @@ NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi)
|
||||
char* data = NULL;
|
||||
NSVGimage* image = NULL;
|
||||
|
||||
fp = boost::nowide::fopen(filename, "rb");
|
||||
if (!fp) goto error;
|
||||
fp = fopen(filename, "rb");
|
||||
if (!fp) goto error;
|
||||
fseek(fp, 0, SEEK_END);
|
||||
size = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
@@ -2918,9 +3043,9 @@ NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi)
|
||||
if (fread(data, 1, size, fp) != size) goto error;
|
||||
data[size] = '\0'; // Must be null terminated.
|
||||
fclose(fp);
|
||||
|
||||
image = nsvgParse(data, units, dpi);
|
||||
free(data);
|
||||
|
||||
return image;
|
||||
|
||||
error:
|
||||
@@ -2976,4 +3101,6 @@ void nsvgDelete(NSVGimage* image)
|
||||
free(image);
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif // NANOSVG_IMPLEMENTATION
|
||||
|
||||
#endif // NANOSVG_H
|
||||
|
||||
@@ -22,9 +22,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/* Modified by FLTK to support non-square X,Y axes scaling.
|
||||
*
|
||||
* Added: nsvgRasterizeXY()
|
||||
*/
|
||||
|
||||
|
||||
#ifndef NANOSVGRAST_H
|
||||
#define NANOSVGRAST_H
|
||||
|
||||
#include "nanosvg.h"
|
||||
|
||||
#ifndef NANOSVGRAST_CPLUSPLUS
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -44,16 +52,19 @@ typedef struct NSVGrasterizer NSVGrasterizer;
|
||||
unsigned char* img = malloc(w*h*4);
|
||||
// Rasterize
|
||||
nsvgRasterize(rast, image, 0,0,1, img, w, h, w*4);
|
||||
|
||||
// For non-square X,Y scaling, use
|
||||
nsvgRasterizeXY(rast, image, 0,0,1,1, img, w, h, w*4);
|
||||
*/
|
||||
|
||||
// Allocated rasterizer context.
|
||||
NSVGrasterizer* nsvgCreateRasterizer();
|
||||
NSVGrasterizer* nsvgCreateRasterizer(void);
|
||||
|
||||
// Rasterizes SVG image, returns RGBA image (non-premultiplied alpha)
|
||||
// r - pointer to rasterizer context
|
||||
// image - pointer to image to rasterize
|
||||
// tx,ty - image offset (applied after scaling)
|
||||
// scale - image scale
|
||||
// scale - image scale (assumes square aspect ratio)
|
||||
// dst - pointer to destination image data, 4 bytes per pixel (RGBA)
|
||||
// w - width of the image to render
|
||||
// h - height of the image to render
|
||||
@@ -62,6 +73,12 @@ void nsvgRasterize(NSVGrasterizer* r,
|
||||
NSVGimage* image, float tx, float ty, float scale,
|
||||
unsigned char* dst, int w, int h, int stride);
|
||||
|
||||
// As above, but allow X and Y axes to scale independently for non-square aspects
|
||||
void nsvgRasterizeXY(NSVGrasterizer* r,
|
||||
NSVGimage* image, float tx, float ty,
|
||||
float sx, float sy,
|
||||
unsigned char* dst, int w, int h, int stride);
|
||||
|
||||
// Deletes rasterizer context.
|
||||
void nsvgDeleteRasterizer(NSVGrasterizer*);
|
||||
|
||||
@@ -72,11 +89,11 @@ void nsvgDeleteRasterizer(NSVGrasterizer*);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // NANOSVGRAST_H
|
||||
|
||||
#ifdef NANOSVGRAST_IMPLEMENTATION
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define NSVG__SUBSAMPLES 5
|
||||
#define NSVG__FIXSHIFT 10
|
||||
@@ -112,7 +129,7 @@ typedef struct NSVGmemPage {
|
||||
} NSVGmemPage;
|
||||
|
||||
typedef struct NSVGcachedPaint {
|
||||
char type;
|
||||
signed char type;
|
||||
char spread;
|
||||
float xform[6];
|
||||
unsigned int colors[256];
|
||||
@@ -148,7 +165,7 @@ struct NSVGrasterizer
|
||||
int width, height, stride;
|
||||
};
|
||||
|
||||
NSVGrasterizer* nsvgCreateRasterizer()
|
||||
NSVGrasterizer* nsvgCreateRasterizer(void)
|
||||
{
|
||||
NSVGrasterizer* r = (NSVGrasterizer*)malloc(sizeof(NSVGrasterizer));
|
||||
if (r == NULL) goto error;
|
||||
@@ -368,7 +385,7 @@ static void nsvg__flattenCubicBez(NSVGrasterizer* r,
|
||||
nsvg__flattenCubicBez(r, x1234,y1234, x234,y234, x34,y34, x4,y4, level+1, type);
|
||||
}
|
||||
|
||||
static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float scale)
|
||||
static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy)
|
||||
{
|
||||
int i, j;
|
||||
NSVGpath* path;
|
||||
@@ -376,13 +393,13 @@ static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float scale)
|
||||
for (path = shape->paths; path != NULL; path = path->next) {
|
||||
r->npoints = 0;
|
||||
// Flatten path
|
||||
nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0);
|
||||
nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0);
|
||||
for (i = 0; i < path->npts-1; i += 3) {
|
||||
float* p = &path->pts[i*2];
|
||||
nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, 0);
|
||||
nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, 0);
|
||||
}
|
||||
// Close path
|
||||
nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0);
|
||||
nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0);
|
||||
// Build edges
|
||||
for (i = 0, j = r->npoints-1; i < r->npoints; j = i++)
|
||||
nsvg__addEdge(r, r->points[j].x, r->points[j].y, r->points[i].x, r->points[i].y);
|
||||
@@ -732,7 +749,7 @@ static void nsvg__prepareStroke(NSVGrasterizer* r, float miterLimit, int lineJoi
|
||||
}
|
||||
}
|
||||
|
||||
static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float scale)
|
||||
static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy)
|
||||
{
|
||||
int i, j, closed;
|
||||
NSVGpath* path;
|
||||
@@ -740,15 +757,16 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float
|
||||
float miterLimit = shape->miterLimit;
|
||||
int lineJoin = shape->strokeLineJoin;
|
||||
int lineCap = shape->strokeLineCap;
|
||||
float lineWidth = shape->strokeWidth * scale;
|
||||
const float sw = (sx + sy) / 2; // average scaling factor
|
||||
const float lineWidth = shape->strokeWidth * sw; // FIXME (?)
|
||||
|
||||
for (path = shape->paths; path != NULL; path = path->next) {
|
||||
// Flatten path
|
||||
r->npoints = 0;
|
||||
nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, NSVG_PT_CORNER);
|
||||
nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, NSVG_PT_CORNER);
|
||||
for (i = 0; i < path->npts-1; i += 3) {
|
||||
float* p = &path->pts[i*2];
|
||||
nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, NSVG_PT_CORNER);
|
||||
nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, NSVG_PT_CORNER);
|
||||
}
|
||||
if (r->npoints < 2)
|
||||
continue;
|
||||
@@ -794,7 +812,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float
|
||||
dashOffset -= shape->strokeDashArray[idash];
|
||||
idash = (idash + 1) % shape->strokeDashCount;
|
||||
}
|
||||
dashLen = (shape->strokeDashArray[idash] - dashOffset) * scale;
|
||||
dashLen = (shape->strokeDashArray[idash] - dashOffset) * sw;
|
||||
|
||||
for (j = 1; j < r->npoints2; ) {
|
||||
float dx = r->points2[j].x - cur.x;
|
||||
@@ -816,7 +834,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float
|
||||
// Advance dash pattern
|
||||
dashState = !dashState;
|
||||
idash = (idash+1) % shape->strokeDashCount;
|
||||
dashLen = shape->strokeDashArray[idash] * scale;
|
||||
dashLen = shape->strokeDashArray[idash] * sw;
|
||||
// Restart
|
||||
cur.x = x;
|
||||
cur.y = y;
|
||||
@@ -956,7 +974,7 @@ static float nsvg__clampf(float a, float mn, float mx) { return a < mn ? mn : (a
|
||||
|
||||
static unsigned int nsvg__RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
|
||||
{
|
||||
return (r) | (g << 8) | (b << 16) | (a << 24);
|
||||
return ((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16) | ((unsigned int)a << 24);
|
||||
}
|
||||
|
||||
static unsigned int nsvg__lerpRGBA(unsigned int c0, unsigned int c1, float u)
|
||||
@@ -985,7 +1003,7 @@ static inline int nsvg__div255(int x)
|
||||
}
|
||||
|
||||
static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y,
|
||||
float tx, float ty, float scale, NSVGcachedPaint* cache)
|
||||
float tx, float ty, float sx, float sy, NSVGcachedPaint* cache)
|
||||
{
|
||||
|
||||
if (cache->type == NSVG_PAINT_COLOR) {
|
||||
@@ -1026,9 +1044,9 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co
|
||||
int i, cr, cg, cb, ca;
|
||||
unsigned int c;
|
||||
|
||||
fx = ((float)x - tx) / scale;
|
||||
fy = ((float)y - ty) / scale;
|
||||
dx = 1.0f / scale;
|
||||
fx = ((float)x - tx) / sx;
|
||||
fy = ((float)y - ty) / sy;
|
||||
dx = 1.0f / sx;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
int r,g,b,a,ia;
|
||||
@@ -1071,9 +1089,9 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co
|
||||
int i, cr, cg, cb, ca;
|
||||
unsigned int c;
|
||||
|
||||
fx = ((float)x - tx) / scale;
|
||||
fy = ((float)y - ty) / scale;
|
||||
dx = 1.0f / scale;
|
||||
fx = ((float)x - tx) / sx;
|
||||
fy = ((float)y - ty) / sy;
|
||||
dx = 1.0f / sx;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
int r,g,b,a,ia;
|
||||
@@ -1112,7 +1130,7 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co
|
||||
}
|
||||
}
|
||||
|
||||
static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float scale, NSVGcachedPaint* cache, char fillRule)
|
||||
static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float sx, float sy, NSVGcachedPaint* cache, char fillRule)
|
||||
{
|
||||
NSVGactiveEdge *active = NULL;
|
||||
int y, s;
|
||||
@@ -1194,7 +1212,7 @@ static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, fl
|
||||
if (xmin < 0) xmin = 0;
|
||||
if (xmax > r->width-1) xmax = r->width-1;
|
||||
if (xmin <= xmax) {
|
||||
nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, scale, cache);
|
||||
nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, sx, sy, cache);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1362,8 +1380,9 @@ static void dumpEdges(NSVGrasterizer* r, const char* name)
|
||||
}
|
||||
*/
|
||||
|
||||
void nsvgRasterize(NSVGrasterizer* r,
|
||||
NSVGimage* image, float tx, float ty, float scale,
|
||||
void nsvgRasterizeXY(NSVGrasterizer* r,
|
||||
NSVGimage* image, float tx, float ty,
|
||||
float sx, float sy,
|
||||
unsigned char* dst, int w, int h, int stride)
|
||||
{
|
||||
NSVGshape *shape = NULL;
|
||||
@@ -1394,7 +1413,7 @@ void nsvgRasterize(NSVGrasterizer* r,
|
||||
r->freelist = NULL;
|
||||
r->nedges = 0;
|
||||
|
||||
nsvg__flattenShape(r, shape, scale);
|
||||
nsvg__flattenShape(r, shape, sx, sy);
|
||||
|
||||
// Scale and translate edges
|
||||
for (i = 0; i < r->nedges; i++) {
|
||||
@@ -1406,19 +1425,20 @@ void nsvgRasterize(NSVGrasterizer* r,
|
||||
}
|
||||
|
||||
// Rasterize edges
|
||||
qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge);
|
||||
if (r->nedges != 0)
|
||||
qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge);
|
||||
|
||||
// now, traverse the scanlines and find the intersections on each scanline, use non-zero rule
|
||||
nsvg__initPaint(&cache, &shape->fill, shape->opacity);
|
||||
|
||||
nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, shape->fillRule);
|
||||
nsvg__rasterizeSortedEdges(r, tx,ty, sx, sy, &cache, shape->fillRule);
|
||||
}
|
||||
if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * scale) > 0.01f) {
|
||||
if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * sx) > 0.01f) {
|
||||
nsvg__resetPool(r);
|
||||
r->freelist = NULL;
|
||||
r->nedges = 0;
|
||||
|
||||
nsvg__flattenShapeStroke(r, shape, scale);
|
||||
nsvg__flattenShapeStroke(r, shape, sx, sy);
|
||||
|
||||
// dumpEdges(r, "edge.svg");
|
||||
|
||||
@@ -1432,12 +1452,13 @@ void nsvgRasterize(NSVGrasterizer* r,
|
||||
}
|
||||
|
||||
// Rasterize edges
|
||||
qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge);
|
||||
if (r->nedges != 0)
|
||||
qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge);
|
||||
|
||||
// now, traverse the scanlines and find the intersections on each scanline, use non-zero rule
|
||||
nsvg__initPaint(&cache, &shape->stroke, shape->opacity);
|
||||
|
||||
nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, NSVG_FILLRULE_NONZERO);
|
||||
nsvg__rasterizeSortedEdges(r, tx,ty,sx, sy, &cache, NSVG_FILLRULE_NONZERO);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1449,4 +1470,13 @@ void nsvgRasterize(NSVGrasterizer* r,
|
||||
r->stride = 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
void nsvgRasterize(NSVGrasterizer* r,
|
||||
NSVGimage* image, float tx, float ty, float scale,
|
||||
unsigned char* dst, int w, int h, int stride)
|
||||
{
|
||||
nsvgRasterizeXY(r,image, tx, ty, scale, scale, dst, w, h, stride);
|
||||
}
|
||||
|
||||
#endif // NANOSVGRAST_IMPLEMENTATION
|
||||
|
||||
#endif // NANOSVGRAST_H
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Lukáš Hejl @hejllukas, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral
|
||||
///|/
|
||||
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
|
||||
///|/
|
||||
//BBS:add i18n
|
||||
#include "I18N.hpp"
|
||||
//BBS: add fstream for debug output
|
||||
@@ -418,7 +422,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
|
||||
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
|
||||
glsafe(::glGenTextures(1, &m_id));
|
||||
glsafe(::glBindTexture(GL_TEXTURE_2D, m_id));
|
||||
if (compress && GLEW_EXT_texture_compression_s3tc)
|
||||
if (compress && OpenGLManager::are_compressed_textures_supported())
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
|
||||
else
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
|
||||
@@ -536,7 +540,7 @@ bool GLTexture::generate_from_text(const std::string &text_str, wxFont &font, wx
|
||||
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
|
||||
glsafe(::glGenTextures(1, &m_id));
|
||||
glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)m_id));
|
||||
if (GLEW_EXT_texture_compression_s3tc)
|
||||
if (OpenGLManager::are_compressed_textures_supported())
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
|
||||
else
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
|
||||
@@ -637,7 +641,7 @@ bool GLTexture::generate_texture_from_text(const std::string& text_str, wxFont&
|
||||
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
|
||||
glsafe(::glGenTextures(1, &m_id));
|
||||
glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)m_id));
|
||||
if (GLEW_EXT_texture_compression_s3tc)
|
||||
if (OpenGLManager::are_compressed_textures_supported())
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
|
||||
else
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
|
||||
@@ -677,9 +681,29 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right,
|
||||
glsafe(::glDisable(GL_BLEND));
|
||||
}
|
||||
|
||||
static bool to_squared_power_of_two(const std::string& filename, int max_size_px, int& w, int& h)
|
||||
{
|
||||
auto is_power_of_two = [](int v) { return v != 0 && (v & (v - 1)) == 0; };
|
||||
auto upper_power_of_two = [](int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; };
|
||||
|
||||
int new_w = std::max(w, h);
|
||||
if (!is_power_of_two(new_w))
|
||||
new_w = upper_power_of_two(new_w);
|
||||
|
||||
while (new_w > max_size_px) {
|
||||
new_w /= 2;
|
||||
}
|
||||
|
||||
const int new_h = new_w;
|
||||
const bool ret = (new_w != w || new_h != h);
|
||||
w = new_w;
|
||||
h = new_h;
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECompressionType compression_type, bool apply_anisotropy)
|
||||
{
|
||||
bool compression_enabled = (compression_type != None) && GLEW_EXT_texture_compression_s3tc;
|
||||
const bool compression_enabled = (compression_type != None) && OpenGLManager::are_compressed_textures_supported();
|
||||
|
||||
// Load a PNG with an alpha channel.
|
||||
wxImage image;
|
||||
@@ -693,6 +717,11 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
|
||||
|
||||
bool requires_rescale = false;
|
||||
|
||||
if (use_mipmaps && compression_enabled && OpenGLManager::force_power_of_two_textures()) {
|
||||
if (to_squared_power_of_two(boost::filesystem::path(filename).filename().string(), OpenGLManager::get_gl_info().get_max_tex_size(), m_width, m_height))
|
||||
requires_rescale = true;
|
||||
}
|
||||
|
||||
if (compression_enabled && compression_type == MultiThreaded) {
|
||||
// the stb_dxt compression library seems to like only texture sizes which are a multiple of 4
|
||||
int width_rem = m_width % 4;
|
||||
@@ -819,7 +848,7 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
|
||||
|
||||
m_source = filename;
|
||||
|
||||
if (compression_enabled && compression_type == MultiThreaded)
|
||||
if (compression_type == MultiThreaded)
|
||||
// start asynchronous compression
|
||||
m_compressor.start_compressing();
|
||||
|
||||
@@ -828,7 +857,7 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, ECo
|
||||
|
||||
bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, bool compress, bool apply_anisotropy, unsigned int max_size_px)
|
||||
{
|
||||
bool compression_enabled = compress && GLEW_EXT_texture_compression_s3tc;
|
||||
const bool compression_enabled = compress && OpenGLManager::are_compressed_textures_supported();
|
||||
|
||||
NSVGimage* image = nsvgParseFromFile(filename.c_str(), "px", 96.0f);
|
||||
if (image == nullptr) {
|
||||
@@ -836,11 +865,17 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
|
||||
return false;
|
||||
}
|
||||
|
||||
float scale = (float)max_size_px / std::max(image->width, image->height);
|
||||
const float scale = (float)max_size_px / std::max(image->width, image->height);
|
||||
|
||||
m_width = (int)(scale * image->width);
|
||||
m_height = (int)(scale * image->height);
|
||||
|
||||
if (use_mipmaps && compression_enabled && OpenGLManager::force_power_of_two_textures())
|
||||
to_squared_power_of_two(boost::filesystem::path(filename).filename().string(), max_size_px, m_width, m_height);
|
||||
|
||||
float scale_w = (float)m_width / image->width;
|
||||
float scale_h = (float)m_height / image->height;
|
||||
|
||||
if (compression_enabled) {
|
||||
// the stb_dxt compression library seems to like only texture sizes which are a multiple of 4
|
||||
int width_rem = m_width % 4;
|
||||
@@ -853,7 +888,7 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
|
||||
m_height += (4 - height_rem);
|
||||
}
|
||||
|
||||
int n_pixels = m_width * m_height;
|
||||
const int n_pixels = m_width * m_height;
|
||||
|
||||
if (n_pixels <= 0) {
|
||||
reset();
|
||||
@@ -870,7 +905,7 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
|
||||
|
||||
// creates the temporary buffer only once, with max size, and reuse it for all the levels, if generating mipmaps
|
||||
std::vector<unsigned char> data(n_pixels * 4, 0);
|
||||
nsvgRasterize(rast, image, 0, 0, scale, data.data(), m_width, m_height, m_width * 4);
|
||||
nsvgRasterizeXY(rast, image, 0, 0, scale_w, scale_h, data.data(), m_width, m_height, m_width * 4);
|
||||
|
||||
// sends data to gpu
|
||||
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
|
||||
@@ -892,7 +927,7 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
|
||||
else
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
|
||||
|
||||
if (use_mipmaps && OpenGLManager::use_manually_generated_mipmaps()) {
|
||||
if (use_mipmaps) {
|
||||
// we manually generate mipmaps because glGenerateMipmap() function is not reliable on all graphics cards
|
||||
int lod_w = m_width;
|
||||
int lod_h = m_height;
|
||||
@@ -902,11 +937,12 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
|
||||
|
||||
lod_w = std::max(lod_w / 2, 1);
|
||||
lod_h = std::max(lod_h / 2, 1);
|
||||
scale /= 2.0f;
|
||||
scale_w /= 2.0f;
|
||||
scale_h /= 2.0f;
|
||||
|
||||
data.resize(lod_w * lod_h * 4);
|
||||
|
||||
nsvgRasterize(rast, image, 0, 0, scale, data.data(), lod_w, lod_h, lod_w * 4);
|
||||
nsvgRasterizeXY(rast, image, 0, 0, scale_w, scale_h, data.data(), lod_w, lod_h, lod_w * 4);
|
||||
if (compression_enabled) {
|
||||
// initializes the texture on GPU
|
||||
glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
|
||||
@@ -921,9 +957,8 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo
|
||||
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level));
|
||||
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR));
|
||||
}
|
||||
} else if (use_mipmaps && !OpenGLManager::use_manually_generated_mipmaps()) {
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
||||
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0));
|
||||
}
|
||||
|
||||
@@ -304,6 +304,8 @@ ObjectList::ObjectList(wxWindow* parent) :
|
||||
|
||||
ObjectList::~ObjectList()
|
||||
{
|
||||
if (m_objects_model)
|
||||
m_objects_model->DecRef();
|
||||
}
|
||||
|
||||
void ObjectList::set_min_height()
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral
|
||||
///|/
|
||||
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
|
||||
///|/
|
||||
#include "libslic3r/libslic3r.h"
|
||||
#include "OpenGLManager.hpp"
|
||||
|
||||
@@ -207,7 +211,7 @@ std::string OpenGLManager::GLInfo::to_string(bool for_github) const
|
||||
|
||||
OpenGLManager::GLInfo OpenGLManager::s_gl_info;
|
||||
bool OpenGLManager::s_compressed_textures_supported = false;
|
||||
bool OpenGLManager::m_use_manually_generated_mipmaps = true;
|
||||
bool OpenGLManager::s_force_power_of_two_textures = false;
|
||||
OpenGLManager::EMultisampleState OpenGLManager::s_multisample = OpenGLManager::EMultisampleState::Unknown;
|
||||
OpenGLManager::EFramebufferType OpenGLManager::s_framebuffers_type = OpenGLManager::EFramebufferType::Unknown;
|
||||
|
||||
@@ -290,31 +294,22 @@ bool OpenGLManager::init_gl(bool popup_error)
|
||||
|
||||
#ifdef _WIN32
|
||||
// Since AMD driver version 22.7.1, there is probably some bug in the driver that causes the issue with the missing
|
||||
// texture of the bed. It seems that this issue only triggers when mipmaps are generated manually
|
||||
// (combined with a texture compression) and when mipmaps are generated through OpenGL glGenerateMipmap is working.
|
||||
// So, for newer drivers than 22.6.1, the last working driver version, we use mipmaps generated through OpenGL.
|
||||
if (const auto gl_info = OpenGLManager::get_gl_info(); boost::contains(gl_info.get_vendor(), "ATI Technologies Inc.")) {
|
||||
// WHQL drivers seem to have one more version number at the end besides non-WHQL drivers.
|
||||
// WHQL: 4.6.14800 Compatibility Profile Context 22.6.1 30.0.21023.1015
|
||||
// Non-WHQL: 4.6.0 Compatibility Profile Context 22.8.1.220810
|
||||
std::regex version_rgx(R"(Compatibility\sProfile\sContext\s(\d+)\.(\d+)\.(\d+))");
|
||||
if (std::smatch matches; std::regex_search(gl_info.get_version(), matches, version_rgx) && matches.size() == 4) {
|
||||
int version_major = std::stoi(matches[1].str());
|
||||
int version_minor = std::stoi(matches[2].str());
|
||||
int version_patch = std::stoi(matches[3].str());
|
||||
BOOST_LOG_TRIVIAL(debug) << "Found AMD driver version: " << version_major << "." << version_minor << "." << version_patch;
|
||||
|
||||
if (version_major > 22 || (version_major == 22 && version_minor > 6) || (version_major == 22 && version_minor == 6 && version_patch > 1)) {
|
||||
m_use_manually_generated_mipmaps = false;
|
||||
BOOST_LOG_TRIVIAL(debug) << "Mipmapping through OpenGL was enabled.";
|
||||
}
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(error) << "Not recognized format of version.";
|
||||
}
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "not AMD driver.";
|
||||
}
|
||||
#endif
|
||||
// texture of the bed (see: https://github.com/prusa3d/PrusaSlicer/issues/8417).
|
||||
// It seems that this issue only triggers when mipmaps are generated manually
|
||||
// (combined with a texture compression) with texture size not being power of two.
|
||||
// When mipmaps are generated through OpenGL function glGenerateMipmap() the driver works fine,
|
||||
// but the mipmap generation is quite slow on some machines.
|
||||
// There is no an easy way to detect the driver version without using Win32 API because the strings returned by OpenGL
|
||||
// have no standardized format, only some of them contain the driver version.
|
||||
// Until we do not know that driver will be fixed (if ever) we force the use of power of two textures on all cards
|
||||
// 1) containing the string 'Radeon' in the string returned by glGetString(GL_RENDERER)
|
||||
// 2) containing the string 'Custom' in the string returned by glGetString(GL_RENDERER)
|
||||
const auto& gl_info = OpenGLManager::get_gl_info();
|
||||
if (boost::contains(gl_info.get_vendor(), "ATI Technologies Inc.") &&
|
||||
(boost::contains(gl_info.get_renderer(), "Radeon") ||
|
||||
boost::contains(gl_info.get_renderer(), "Custom")))
|
||||
s_force_power_of_two_textures = true;
|
||||
#endif // _WIN32
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral
|
||||
///|/
|
||||
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
|
||||
///|/
|
||||
#ifndef slic3r_OpenGLManager_hpp_
|
||||
#define slic3r_OpenGLManager_hpp_
|
||||
|
||||
@@ -81,10 +85,11 @@ private:
|
||||
static OSInfo s_os_info;
|
||||
#endif //__APPLE__
|
||||
static bool s_compressed_textures_supported;
|
||||
static bool s_force_power_of_two_textures;
|
||||
|
||||
static EMultisampleState s_multisample;
|
||||
static EFramebufferType s_framebuffers_type;
|
||||
|
||||
static bool m_use_manually_generated_mipmaps;
|
||||
public:
|
||||
OpenGLManager() = default;
|
||||
~OpenGLManager();
|
||||
@@ -101,7 +106,7 @@ public:
|
||||
static EFramebufferType get_framebuffers_type() { return s_framebuffers_type; }
|
||||
static wxGLCanvas* create_wxglcanvas(wxWindow& parent);
|
||||
static const GLInfo& get_gl_info() { return s_gl_info; }
|
||||
static bool use_manually_generated_mipmaps() { return m_use_manually_generated_mipmaps; }
|
||||
static bool force_power_of_two_textures() { return s_force_power_of_two_textures; }
|
||||
|
||||
private:
|
||||
static void detect_multisample(int* attribList);
|
||||
|
||||
@@ -3174,36 +3174,38 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
|
||||
// Is there any modifier or advanced config data?
|
||||
for (ModelVolume *model_volume : model_object->volumes) model_volume->config.reset();
|
||||
}
|
||||
} else if (load_config && (file_version > app_version)) {
|
||||
if (config_substitutions.unrecogized_keys.size() > 0) {
|
||||
wxString text = wxString::Format(_L("The 3mf's version %s is newer than %s's version %s, Found following keys unrecognized:"),
|
||||
file_version.to_string(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string());
|
||||
text += "\n";
|
||||
bool first = true;
|
||||
// std::string context = into_u8(text);
|
||||
wxString context = text;
|
||||
for (auto &key : config_substitutions.unrecogized_keys) {
|
||||
context += " -";
|
||||
context += key;
|
||||
context += ";\n";
|
||||
first = false;
|
||||
}
|
||||
wxString append = _L("You'd better upgrade your software.\n");
|
||||
context += "\n\n";
|
||||
// context += into_u8(append);
|
||||
context += append;
|
||||
show_info(q, context, _L("Newer 3mf version"));
|
||||
}
|
||||
else {
|
||||
//if the minor version is not matched
|
||||
if (file_version.min() != app_version.min()) {
|
||||
wxString text = wxString::Format(_L("The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your software."),
|
||||
file_version.to_string(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string());
|
||||
text += "\n";
|
||||
show_info(q, text, _L("Newer 3mf version"));
|
||||
}
|
||||
}
|
||||
} else if (!load_config) {
|
||||
}
|
||||
// else if (load_config && (file_version > app_version)) {
|
||||
// if (config_substitutions.unrecogized_keys.size() > 0) {
|
||||
// wxString text = wxString::Format(_L("The 3mf's version %s is newer than %s's version %s, Found following keys unrecognized:"),
|
||||
// file_version.to_string(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string());
|
||||
// text += "\n";
|
||||
// bool first = true;
|
||||
// // std::string context = into_u8(text);
|
||||
// wxString context = text;
|
||||
// for (auto &key : config_substitutions.unrecogized_keys) {
|
||||
// context += " -";
|
||||
// context += key;
|
||||
// context += ";\n";
|
||||
// first = false;
|
||||
// }
|
||||
// wxString append = _L("You'd better upgrade your software.\n");
|
||||
// context += "\n\n";
|
||||
// // context += into_u8(append);
|
||||
// context += append;
|
||||
// show_info(q, context, _L("Newer 3mf version"));
|
||||
// }
|
||||
// else {
|
||||
// //if the minor version is not matched
|
||||
// if (file_version.min() != app_version.min()) {
|
||||
// wxString text = wxString::Format(_L("The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your software."),
|
||||
// file_version.to_string(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string());
|
||||
// text += "\n";
|
||||
// show_info(q, text, _L("Newer 3mf version"));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
else if (!load_config) {
|
||||
// reset config except color
|
||||
for (ModelObject *model_object : model.objects) {
|
||||
bool has_extruder = model_object->config.has("extruder");
|
||||
|
||||
@@ -1869,7 +1869,7 @@ void TabPrint::build()
|
||||
optgroup->append_single_option_line("xy_contour_compensation");
|
||||
optgroup->append_single_option_line("elefant_foot_compensation");
|
||||
optgroup->append_single_option_line("elefant_foot_compensation_layers");
|
||||
optgroup->append_single_option_line("precise_outer_wall");
|
||||
optgroup->append_single_option_line("precise_outer_wall", "Precise-wall");
|
||||
optgroup->append_single_option_line("hole_to_polyhole");
|
||||
optgroup->append_single_option_line("hole_to_polyhole_threshold");
|
||||
optgroup->append_single_option_line("hole_to_polyhole_twisted");
|
||||
@@ -1896,8 +1896,10 @@ void TabPrint::build()
|
||||
optgroup->append_single_option_line("wall_infill_order");
|
||||
optgroup->append_single_option_line("print_flow_ratio");
|
||||
optgroup->append_single_option_line("bridge_flow");
|
||||
optgroup->append_single_option_line("internal_bridge_flow");
|
||||
optgroup->append_single_option_line("bridge_density");
|
||||
optgroup->append_single_option_line("thick_bridges");
|
||||
optgroup->append_single_option_line("thick_internal_bridges");
|
||||
optgroup->append_single_option_line("top_solid_infill_flow_ratio");
|
||||
optgroup->append_single_option_line("bottom_solid_infill_flow_ratio");
|
||||
optgroup->append_single_option_line("only_one_wall_top");
|
||||
|
||||
@@ -10,7 +10,7 @@ endif()
|
||||
if(NOT DEFINED BBL_INTERNAL_TESTING)
|
||||
set(BBL_INTERNAL_TESTING "1")
|
||||
endif()
|
||||
set(SoftFever_VERSION "1.8.0")
|
||||
set(SoftFever_VERSION "1.8.1")
|
||||
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)"
|
||||
SoftFever_VERSION_MATCH ${SoftFever_VERSION})
|
||||
set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1})
|
||||
|
||||
Reference in New Issue
Block a user