-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Add template metalanguage support for infill rotation template #9996
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add template metalanguage support for infill rotation template #9996
Conversation
I can't post the entire package of changes yet, but this is just the beginning. These features do not affect the latest changes to the pattern rotation system. They are merely adding new functionality.
In the further development of this idea, you can leave only one field defining the rotation of the infill. The template is a space or comma-separated instructions list of angles in degrees, e.g. '0, 90'. |
@SoftFever Ok. I have finished writing this code. At this stage, I have left 2 fields infill_direction и infill_template_direction. But they can be combined later, as they carry repetitive functionality. You also need to look at the labels of these input fields for the correctness of the presentation. I outlined a brief summary in this post #9996 (comment). I may have written too much in the code because I don't know all the features of C++ well. If possible, optimize this spelling. Thank you. |
need for clean code in future
@SoftFever |
@pi-squared-studio my initial test looks good! |
Yes, that's right. And Copilot was right. It's just that when I was making the code, I left a few points unoptimized for testing, not for fast execution. |
If you post this code, you will need to come up with the correct annotation for this algorithm. Look at this post #9996 (comment) - here I have collected all the commands in the latest edition. Another circumstance is the ability to enter both a complex command and a simple one when describing the insertion of layers with solid infill. You can write briefly, say +10S12, or you can +10S/12. Yes, in fact, this is the same command, and the additional "/" sign simply indicates how the rotation will be distributed among the solid layers. I have not yet decided how useful this knowledge will be to users, because such rotation will occur implicitly. And should these two definitions be left in this form, or need to reduced into one? |
@SoftFever |
…ction to float so that they are consistent with other infill direction parameters.
Hi @pi-squared-studio,
But I generally don't think the new top/bottom_surface_direction options make sense in most cases. |
Hi, @SoftFever |
@SoftFever |
I see. |
Ok. I think that after combining such details, it will be possible to work out based on the experience of a wide range of users. |
I will make the changes to remove these two options later |
@pi-squared-studio In the meantime, could you please update the Wiki to include the metalanguage rule? |
@SoftFever |
wow! |
* Add new machines * profils fixes * Update VS30ULTRA (0.4 nozzle).json * accelerations removing * Fixes * Acceleration fixes * Update .gitignore * EXO/SH profils updates * Update .gitignore * Updates VOLUMIC profils * VOLUMIC profils updates * VOLUMIC profils update (v0.36) * Delete Desactive.json * Create desactive.json * Add ironing fan speed control (SoftFever#9944) * Internal bridge fan speed should be applied only if overhang bridge fan control is enabled * Reduce duplicate code * Add ironing fan speed control * Add fuzzy skin painting (SoftFever#9979) * SPE-2486: Refactor function apply_mm_segmentation() to prepare support for fuzzy skin painting. (cherry picked from commit 2c06c81) * SPE-2585: Fix empty layers when multi-material painting and modifiers are used. (cherry picked from commit 4b3da02ec26d43bfad91897cb34779fb21419e3e) * Update project structure to match Prusa * SPE-2486: Add a new gizmo for fuzzy skin painting. (cherry picked from commit 886faac) * Fix render * Remove duplicated painting gizmo `render_triangles` code * SPE-2486: Extend multi-material segmentation to allow segmentation of any painted faces. (cherry picked from commit 519f5ee) --------- Co-authored-by: Lukáš Hejl <hejl.lukas@gmail.com> * SPE-2486: Implement segmentation of layers based on fuzzy skin painting. (cherry picked from commit 800b742) * SPE-2486: Separate fuzzy skin implementation into the separate file. (cherry picked from commit efd95c1) * Move more fuzzy code to separate file * Don't hide fuzzy skin option, so it can be applied to paint on fuzzy * Fix build * Add option group for fuzzy skin * Update icon color * Fix reset painting * Update UI style * Store fuzzy painting in bbs_3mf * Add missing fuzzy paint code * SPE-2486: Limit the depth of the painted fuzzy skin regions to make regions cover just external perimeters. This reduces the possibility of artifacts that could happen during regions merging. (cherry picked from commit fa2663f) * Update icons --------- Co-authored-by: yw4z <ywsyildiz@gmail.com> * Make the region compatible check a separate function * Only warn about multi-material if it's truly multi-perimeters * Improve gizmo UI & tooltips --------- Co-authored-by: Lukáš Hejl <hejl.lukas@gmail.com> Co-authored-by: yw4z <ywsyildiz@gmail.com> * Update 3mf key for fuzzy skin painting to match BBS (SoftFever#10169) * Update OrcaSlicer_pl.po (SoftFever#10186) * New Fill & Patterns Order (SoftFever#10055) * New Fill Order Co-Authored-By: Rodrigo <162915171+RF47@users.noreply.github.com> * Reorder Wiki * Support infills grouped * Update old rectilinear profiles into new ZigZag algorithm. Co-Authored-By: dewi-ny-je <2866139+dewi-ny-je@users.noreply.github.com> * Renaming compatibility fix + Rename Wiki Co-Authored-By: SoftFever <softfeverever@gmail.com> --------- Co-authored-by: Rodrigo <162915171+RF47@users.noreply.github.com> Co-authored-by: dewi-ny-je <2866139+dewi-ny-je@users.noreply.github.com> Co-authored-by: SoftFever <softfeverever@gmail.com> * Fix ubuntu build - Continous appimagetool (SoftFever#10190) Co-authored-by: Rodrigo <162915171+RF47@users.noreply.github.com> * Fix build issue caused by renamed fill pattern (SoftFever#10197) Fix issue caused by renamed fill pattern * InnovatiQ Vendor Addition (SoftFever#10163) * Added InnovatiQ Vendor Files * Cover image corrected * Corrected Texture Image * Support Interface Pattern modified * Fix file name casing --------- Co-authored-by: MohanS <sibi.mohan@innovatiq.com> Co-authored-by: Noisyfox <timemanager.rick@gmail.com> * Replace DEPS_BITS with DEPS_ARCH (SoftFever#10183) * Replace DEPS_BITS with DEPS_ARCH * Restore missing DEP_MSVC_GEN * STREQUAL * STREQUAL * Other cmakelists * webview2 rename * Disable resonance avoidance in calibration routines + Calibration Reorder (SoftFever#10174) * Disable resonance avoidance in calibration routines * Reorder Calibrations * Moved Tolerance to Handy Models * Feature: Fuzzy Skin Extrusion Mode (SoftFever#9878) * Feature: Fuzzy Skin Extrusion Mode This extension allows you to add new features to the fuzzy skin generator. * Add auto switch to Arachne mode * Move dialog to `update_print_fff_config` and update how `is_msg_dlg_already_exist` is used --------- Co-authored-by: Noisyfox <timemanager.rick@gmail.com> * Add template metalanguage support for infill rotation template (SoftFever#9996) * Add some new non-overlapping functions for rotation surfaces/infills I can't post the entire package of changes yet, but this is just the beginning. These features do not affect the latest changes to the pattern rotation system. They are merely adding new functionality. * Added relative rotation of the infill according to the template. * Update PrintConfig.cpp * Update PrintConfig.cpp * Update PrintConfig.cpp * Add height limitation * Both sparse and solid. +one-time instructions * implementation v3 need for clean code in future * + Multiply Instructions * Add solid layers into sparse infill * Update Layer.hpp * Update PrintObject.cpp * Update Tab.cpp * Remove some bugs and increase quality * rename apply_model_direction to align_infill_direction_to_model * Change the data type of top_surface_direction and bottom_surface_direction to float so that they are consistent with other infill direction parameters. * remove top_surface_direction and bottom surface_direction options * clean code --------- Co-authored-by: SoftFever <softfeverever@gmail.com> * Feature/add_snapmaker_u1_profiles (SoftFever#10225) * add snapmaker u1 profiles * tweak some parameters for U1 * Do not connect to default BBL device during app startup (SoftFever#10214) * Do not connect to default device during app startup * Connect to last selected machine automatically even if it's lan machine Simplify default machine connection logic * Select last machine automatically when available * Check for LAN connection state after updating combobox selection. This matches the logic of `SendPrint.cpp`. * Avoid showing same error message multiple times until next connection attempt. --------- Co-authored-by: SoftFever <softfeverever@gmail.com> * update readme * Adjust the CAUTION format to make it more visible, as there are more fake websites claim to be official (SoftFever#10230) Update README.md * add CLAUDE.md * udpate locale * include OrcaSlicer_profile_validator in nightly build (SoftFever#10233) * include OrcaSlicer_profile_validator in nightly build * build OrcaSlicer_profile_validator on Win * create dmg * fix / add de locale (SoftFever#10236) * fix many stings * fix * correct winget command --e (SoftFever#10198) winget seems to accept -e or --exact. Modified README.md to use --exact. * Bug fix: avoid crossing perimeters (SoftFever#10185) * avoid crossing perimeters avoid crossing perimeters Timelapse issue Update GCode.cpp Update GCode.cpp Update GCode.cpp Update GCode.cpp * Update GCode.cpp * Update GCode.cpp Update GCode.cpp * Update GCode.cpp Update GCode.cpp * Replace tab with space --------- Co-authored-by: Noisyfox <timemanager.rick@gmail.com> * Prevent collision: end load line at X(old+5) to avoid nozzle scratching (SoftFever#10193) End load line at X(old+5) top prevent drip collision * fix an issue that OrcaSlicer_profile_validator for Mac was not published to nightly build * Introduce a new seam alignment option: Aligned back (SoftFever#10255) * Introduce a new seam alignment option: spAlignedBack. * feat: add ABS, PLA, PETg filaments by NIT (SoftFever#10205) * feat: add ABS, PLA, PETg filaments by NIT * feat: Set value of default_filament_colour to empty string * Wiki Update 8 - Lorita (SoftFever#10094) * Wiki Home Fix process-others VFA test * Add wall GIFs and update documentation * Quality Overhangs Wiki Basic Update README.md Update Home.md * Better only one wall * Add infill ghosting image and update wall order * Updates process options * Fix calibration step numbering in documentation Corrected the step numbers in the calibration order list to maintain sequential order. * Update Calibration.md * Update wall and surface quality docs with images and details * Revise Linux build instructions and restructure sections Co-Authored-By: cefiar <cefiar@gmail.com> * APA Clarify compatibility notes Co-Authored-By: dewi-ny-je <2866139+dewi-ny-je@users.noreply.github.com> * Removed Tolerance test from calibration guide. Keeped as note Co-Authored-By: Noisyfox <timemanager.rick@gmail.com> * Copilot Review --------- Co-authored-by: cefiar <cefiar@gmail.com> Co-authored-by: dewi-ny-je <2866139+dewi-ny-je@users.noreply.github.com> Co-authored-by: Noisyfox <timemanager.rick@gmail.com> * Fix a bug where the maximum line width limit is inconsistent across different checks. Fixes SoftFever#10188 * Avoid cross perimeter improvements ported from BBS (SoftFever#10220) * FIX: fix avoid crossing perimeters not work[github issue SoftFever#6597] jira: STUDIO-11682 github: SoftFever#6597 Change-Id: Ib86fac93280504e0040f1cce44dad4d02f709c01 (cherry picked from commit 35afceb9a7f4e5a3baba97f054d0e6768e4f59cf) * FIX: optimize avoid crossing wall jira: STUDIO-11682 Change-Id: I49b6756a5d3aeb482c019813074d8f6f9cc3c6ef (cherry picked from commit e9b7006db994d78b9153dedfd0f89447c941cb76) * Sync with latest BBS code --------- Co-authored-by: huicong.li <huicong.li@bambulab.com> * Revert "Refactor stagger concentric seams (SoftFever#6432)" This reverts commit bd8c2ff. * Revert "Stagger concentric infill seams. (SoftFever#6184)" This reverts commit 0286c36. * Add 0.6/0.8 nozzle for tiertime printer. (SoftFever#10264) * Fix Ironing/Support patterns (SoftFever#10278) NoisyGoat Co-authored-by: Rodrigo <162915171+RF47@users.noreply.github.com> Co-authored-by: Noisyfox <timemanager.rick@gmail.com> * Fix broken freetype-2.12.1.tar.gz link * Remap filament for pre-colored models (SoftFever#10303) * Add a new feature to allow users to remap filament for a pre-painted model. * Fix the color issues to support the theme * clean up code * Fix broken freetype-2.12.1.tar.gz link * feat: support for multi heating zones * feat: Remove softfever reference from pipeline * feat: support for multi heating zones * feat: update repository references from SoftFever to gingeradditive in workflows and source files * Update translation catalog * fix: restore pot file --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * feat: migrate to GingerSlicer feat: Rename project to OrcaSlicer4pellet and update related configurations feat: Update SVG files to reflect Inkscape version 1.4 and enhance graphical elements feat: Comment out app signing and notary steps in macOS build workflow; update artifact names to reflect project rename feat: Update splash logo SVG and replace logo images fix: Correct app copy path in build_slicer function to match new project structure feat: Update project references to OrcaSlicer4pellet, including bundle identifier, executable names, and documentation links chore: Update various project files for consistency and maintainability feat: change color to #d72828 feat: change "Orca Slicer" to "Ginger Slicer" feat: change logo feat: change logo fix: update artifact paths to use GingerSlicer instead of OrcaSlicer fix: update build script to copy GingerSlicer.app instead of OrcaSlicer.app feat: Update SVG files for OrcaSlicer feat: add desktop entry for GingerSlicer wip: change brand colors wip: change brand colors feat: remove other profiles fix: update profile validator command in build workflow feat: update deployment configuration to use repository and tag for nightly builds feat: add GingerSlicer Flatpak manifest and metadata fix: update macOS bundle name from OrcaSlicer to GingerSlicer wip: change brand colors wip: delete wiki wip: change reference to GingerSlicer wip: change reference to GingerSlicer fix: pipeline release id wip: remove custom profile wip: remove BBL setup page feat: remove calibration and project tab feat: change preset for camera and gcode window fix: minor fix feat: update readme wip: change cmake project name fix: name into macosxbundleinfo fix: mac pipeline wip: fix missing cache reference feat: disable flatpack fix: dep with deps fix: try fix pipeline fix orcaslicer.rc fix: windows pipeline fix: mac pipeline fix: condition of Create DMG without notary pipeline try: fix orcaslicer Run fix: OrcaSlicer_dep fix: OrcaSlicer_deps feat: implement Orca Profile Validator with custom preset generation fix: typo Gingerslicer to GingerSlicer fix: Create DMG without notary mac * fix: image color * add script for conveting color * feat: update SoftFever version to 2.3.1.1 * Gingerslicer dev/change slicer field visibility * feat: change visibility of the fields * fix: some tab still visible witout parameter in * fix: minor image color fix * fix: change override visibility * Gingerslicer dev/update profiles 19 07 25 * feat: update profiles for Ginger Additive * feat: merge previous update * fix: errors using achab * fix: remove unused file and folder * fix: errors in profile * fix: comment out custom presets validation step * feat: add workflow to promote nightly builds to release * fix: update nightly artifacts download command in workflow * fix: correct JSON formatting in fdm_machine_common.json * fix: notification color * fix: thumbnail and metadata * fix: update version to 1.9.1.1 in fdm_machine_common.json * fix: update version to 2.3.1.1 * fix: temperature in the GcodePreview by parsing the PRINT_START values * fix: remove unused profiles * fix: remove unused doc * fix: SVG colors and merge errors * fix: CreatePresetsDialog.cpp --------- Co-authored-by: VOLUMIC <31067164+VOLUMIC@users.noreply.github.com> Co-authored-by: SoftFever <softfeverever@gmail.com> Co-authored-by: Noisyfox <timemanager.rick@gmail.com> Co-authored-by: Lukáš Hejl <hejl.lukas@gmail.com> Co-authored-by: yw4z <ywsyildiz@gmail.com> Co-authored-by: KrisMorr <154343071+KrisMorr@users.noreply.github.com> Co-authored-by: Ian Bassi <ian.bassi@outlook.com> Co-authored-by: Rodrigo <162915171+RF47@users.noreply.github.com> Co-authored-by: dewi-ny-je <2866139+dewi-ny-je@users.noreply.github.com> Co-authored-by: InnovatiQ <info@innovatiq.com> Co-authored-by: MohanS <sibi.mohan@innovatiq.com> Co-authored-by: Jack Boswell <boswelja@outlook.com> Co-authored-by: π² <pi.squared.studio@gmail.com> Co-authored-by: Heiko Liebscher <hliebscher@idn.de> Co-authored-by: Robert M Lugg <robert.lugg@gmail.com> Co-authored-by: Simon <ziehmon@smtpd.de> Co-authored-by: Kirill Ziuzin <kirill.zak@gmail.com> Co-authored-by: cefiar <cefiar@gmail.com> Co-authored-by: huicong.li <huicong.li@bambulab.com> Co-authored-by: GuoGeTiertime <97820723+GuoGeTiertime@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
I can't post the entire package of changes yet, but this is just the beginning. These features do not affect the latest changes to the pattern rotation system. They are merely adding new functionality.
This is the development of a branch #9954 (I'll close it myself later)
Description
At the moment, some functions have been implemented:
The template metalanguage:
[±]α[*ℤ or !][solid or joint sign, оr its combinations][-][ℕ, B or T][length modifier][* or !]
- full length template instruction for the sparse infill[±]α[*ℤ or !][joint sign][-][ℕ][* or !]
- full length template instruction for the solid infill[±]α*
- just setting an initial rotation angle[solid or joint sign]ℕ[!]
- putting the solid layers ℕ times without them rotating[B or T][!]
- putting the solid layers according to the number of bottom or top shell layers without them rotatingwhere:
[...]
- values in square brackets are optional[±]α
- command of setting of rotation infill angle (for joint infills at some height range, this angle is finite)α
- just set absolute angle 0...360+α
- set positive relative angle CCW-α
- set negative relative angle CW[*, *ℤ or !]
- runtime instructions*
- the mark of "dumb" instruction. Its need for setting an initial angle. No further action will be taken.*ℤ
- repeat the instruction ℤ times!
- the one-time running instruction[solid sign]
- mark for insert solid layerD
- insert native sparse patterned layer but with 100% densityS
- insert user-defined solid layerO
- insert Concentric solid layerM
- insert Monotonic solid layerR
- insert Rectilinear solid layer[joint sign]
- connection symbol for turning the infill/
- linear displacement of the infill#
- infill of multiple layers with vertical displacement at finish angle#-
- infill of multiple layers with vertical displacement at initial angle|
- infill of multiple layers with vertical displacement at middle angleN
- infill form by sinus function (vertical connection)n
- infill form by sinus function (vertical connection, lazy)Z
- infill form by sinus function (horizontal connection)z
- infill form by sinus function (horizontal connection, lazy)L
- infill form by quarter of circle (horizontal to vertical connection)l
- infill form by quarter of circle (vertical to horizontal connection)U
- infill form by squared functionu
- infill form by squared function (inverse)Q
- infill form by cubic functionq
- infill form by cubic function (inverse)$
- infill form by arcsinus method~
- infill form random angle^
- infill form pseudorandom angle[-]ℕ
- counting the distance at which the turn will take placeℕ
- the count will take place by ℕ layers-ℕ
- indicates that the joint form will be flipped upwardB
- the count will take place by next layers equals of bottom_shell_layers parameterT
- the count will take place by next layers equals of top_shell_layers parameterℕ[length modifier]
- the distance at which the specified turn will take placeℕmm
- the distance in millimetersℕcm
- the distance in centimetersℕm
- the distance in metersℕ'
- the distance in feetℕ"
- the distance in inchesℕ#
- the distance in range of standard height of ℕ layersℕ%
- the distance of model height in percentsExamples
Each instruction is written by combination of symbols and numbers and separated by a comma or a space.
For more complex instructions, an autoformat is used to make the template easier to read.
Simple absolute instructions
They include a simple definition of the angle for each layer. Note that the initial setting of this angle is also affected by the value in the sparse or solid infill angle field.
0
,15
,45.5
,256.5605
... - just fill at the existing angle. The initial direction starts at the X-axis one, and the acceptable range of values is from 0 to 3600%
,10%
,25%
,100%
... - the same as above, but in relative terms from a full turn of 360 degree rotation. Rotate by 0, 36, 90, and 0 degrees.0, 30
- is a simple alternation through each layer in the direction of 0 and 30 degrees.30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360
- a more complex command defines a turn every layer at 30 degrees. At the end of the template line, the next instruction is read first, and this process continues until the entire height of the model is filled in.Relative instructions
+30
- this is a short recording of the instruction set above.-30
- this is the same instruction, but with clockwise rotation. The equivalent of330, 300, 270, 240, 210, 180, 150, 120, 90, 60, 30, 0
...+150
- you can specify a different multiple of the irrational angle for better fill dispersion =150, 300, 90, 240, 30, 180, 330, 120, 270, 60, 210, 0
...+15%
- useful for dividing angles on a decimal basis =54, 108, 162, 270, 324, 18, 72, 126, 180, 234, 288, 342, 36, 90, 144, 196, 252, 306, 0
...+30, +90
- a complex instruction setting the rotation of each layer in these positions =30, 120, 150, 240, 270, 0
...0, +30, +90
- a complex instruction setting the rotation of each layer in these positions =0, 30, 120
...Repetitive, adjusting and one-time instructions
5, 10, +20
- simple instructions without modifiers. Sets the angles in sequence = 5, 10, 30, 5, 10, 30, 5, 10 ...5, 10*, +20
- the*
sign sets the initial angle without quantitative designation without the layer processing. It is useful for setting the orientation of a group of layers, which will be described below. Sets the angles in sequence = 5, 30, 5, 30, 5, 30, 5 ...5, 10!, +20
- the!
sign indicates that instruction will be executed only once for the entire height of the model. Sets the angles in sequence = 5, 10, 30, 5, 25, 5, 25, 5 ...5, 10*!, +20
- the combination*
and!
signs also usable = 5, 30, 5, 25, 5, 25, 5, 25 ...5, 10*3, +20
- if a number is written after the*
sign, it indicates the number of repetitions of this instruction. Sets the angles in sequence = 5, 10, 10, 10, 30, 5, 10, 10, 10, 30, 5, 10 ...Range instructions
A combined set of layers will be organized, where the rotation of one layer relative to the other will also be predetermined.
You can specify how many layers will be rotated by a certain angle, and according to which mathematical law this rotation will be performed. This law is determined by writing a certain symbol and specifying a numeric value after it.
The following signs are available that determine the shape of the turn:
/
#
#-
|
N
n
Z
z
L
l
U
u
Q
q
$
~
^
. For their purpose, see above.Also, after the digital value there is a range modifier, then this rotation will occur according to the described length.
The following modifiers are available that determine the range of turn:
mm
cm
m
'
"
#
%
. For their purpose, see above.If there is the
-
sign before the numeric value, then the initial fill angle changes with the final one. This is useful for joining the linear infills in some cases. Absolute values of the rotation angle using the range instructions have no effect.It is important to know that this will not be the exact length, but will be tied to the nearest layer from below.
Examples:
+45/100
- rotate the next 100 layers linearly at a 45 degree angle.+360~100%
- fill the model an infill with random direction at each layer.-50%Z1cm
- rotate one centimeter of infill by sinus function at a 180 degree CW.+30/-10#
- rotate the infill at height of 10 standard layers (if standard layer height is 0.2mm * 10 = 2mm) inverse linearly at a 30 degree angle.+10L25%, -10l25%, -10L25%, +10l25%
- fill the model with sine period with 10 degrees amplitudeConstant layer number instructions
There are 2 letter signs
T
andB
that can determine the number of shell layers on top and bottom of model. It is useful for calculating skipping this amount to align the fill, or inserting the required number of horizontal solid bulkheads.Examples:
B!, +30
- skip the first shell layers from rotate, then fill with 30 degrees turn each layer+30/1cm, T
- rotate one centimeter of infill linearity at a 30 degree, then skip the number of layers equal to the count of the upper shell layers without rotationSolid layers into sparse infill instructions
The following instructions allow you to embed solid layers in a sparse fill. The following commands are available
D
S
O
M
R
. For their purpose, see above. It is possible to combine them with the rotation method and layer number constant -DT
S/
M#
OB
...Examples:
+30M3
or+90M/3
- fill whole model by solid infill with 30 degree turn at each layerB!, 240M3, #25
- skip the first shell layers from rotate, fill model by 3 solid monotonic layers at 240 degree, then put 25 sparse layers by same angle#14, +15O
- put the 14 layers of sparse infill when put one concentric layer of solid infill with 15 degree turn+30/1cm, ST
- rotate one centimeter of infill linearity at 30 degree, then put solid layers equal to the count of the top shell layers