diff --git a/build.ps1 b/build.ps1 index a881534..d0faba3 100644 --- a/build.ps1 +++ b/build.ps1 @@ -70,7 +70,7 @@ New-Item -ItemType Directory -Force -Path docs | Out-Null Write-Host "Preparing documentation structure..." $dirsToCopy = @('images', 'calibration', 'developer-reference', 'general-settings', - 'material_settings', 'print_prepare', 'print_settings', 'printer_settings') + 'material_settings', 'print_prepare', 'print_settings', 'printer_settings') foreach ($dir in $dirsToCopy) { if (Test-Path $dir) { @@ -109,7 +109,7 @@ if ($DownloadSvg) { Write-Host "Downloading SVG icons from OrcaSlicer main repo..." $iconUrls = Select-String -Path docs\*.md -Pattern 'https://github.com/OrcaSlicer/OrcaSlicer/blob/main/resources/images/[^?)"]*' -AllMatches | - ForEach-Object { $_.Matches.Value } | Sort-Object -Unique + ForEach-Object { $_.Matches.Value } | Sort-Object -Unique foreach ($url in $iconUrls) { $filename = [System.IO.Path]::GetFileName($url) @@ -133,7 +133,8 @@ if ($DownloadSvg) { } } } -} else { +} +else { Write-Host "Skipping SVG icon download (use --download-svg or -d to enable)" } @@ -144,7 +145,7 @@ Get-ChildItem -Path docs -Filter *.md -Recurse | ForEach-Object { $docsFull = (Get-Item -Path docs -Force).FullName # Calculate relative path from docs to current file (as string) - $relPathFromDocs = $mdFile.Substring($docsFull.Length).TrimStart('\','/') + $relPathFromDocs = $mdFile.Substring($docsFull.Length).TrimStart('\', '/') # Count how many directory levels deep we are (number of \ or /) $depth = ($relPathFromDocs -split '[\\/]').Count - 1 # -1 because file itself doesn't count as level @@ -155,11 +156,11 @@ Get-ChildItem -Path docs -Filter *.md -Recurse | ForEach-Object { # Replace GitHub wiki image URLs $content = $content -replace 'https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/images/([^?)"]*)\?raw=true', - "${prefix}images/`$1" + "${prefix}images/`$1" # Replace OrcaSlicer repo icon URLs $content = $content -replace 'https://github.com/OrcaSlicer/OrcaSlicer/blob/main/resources/images/([^?)"]*)\?raw=true', - "${prefix}images/orcaslicer-icons/`$1" + "${prefix}images/orcaslicer-icons/`$1" Set-Content -Path $mdFile -Value $content -NoNewline } @@ -174,7 +175,7 @@ Get-ChildItem -Path wiki -Filter *.html -Recurse | Where-Object { $_.Name -ne 'i $wikiFull = (Get-Item -Path wiki -Force).FullName # Calculate relative path from wiki/ to the current HTML file - $relPath = $htmlFile.Substring($wikiFull.Length).TrimStart('\','/') + $relPath = $htmlFile.Substring($wikiFull.Length).TrimStart('\', '/') # Normalize path separators to forward slashes for URLs $relPath = $relPath -replace '\\', '/' @@ -234,7 +235,8 @@ New-Item -ItemType Directory -Path "wiki\assets\javascripts" -Force | Out-Null if (Test-Path "web_extras\extra.css") { Copy-Item "web_extras\extra.css" "wiki\assets\stylesheets\extra.css" -Force Write-Host "Copied extra.css" -} else { +} +else { Write-Host "Warning: web_extras\extra.css not found - skipping" -ForegroundColor Yellow } @@ -242,28 +244,32 @@ if (Test-Path "web_extras\extra.css") { if (Test-Path "web_extras\OrcaSlicer.ico") { Copy-Item "web_extras\OrcaSlicer.ico" "wiki\assets\images\OrcaSlicer.ico" -Force Write-Host "Copied OrcaSlicer.ico" -} else { +} +else { Write-Host "Warning: web_extras\OrcaSlicer.ico not found - skipping" -ForegroundColor Yellow } if (Test-Path "web_extras\OrcaSlicer.png") { Copy-Item "web_extras\OrcaSlicer.png" "wiki\assets\images\OrcaSlicer.png" -Force Write-Host "Copied OrcaSlicer.png" -} else { +} +else { Write-Host "Warning: web_extras\OrcaSlicer.png not found - skipping" -ForegroundColor Yellow } if (Test-Path "web_extras\icon-theme.js") { Copy-Item "web_extras\icon-theme.js" "wiki\assets\javascripts\icon-theme.js" -Force Write-Host "Copied icon-theme.js" -} else { +} +else { Write-Host "Warning: web_extras\icon-theme.js not found - skipping" -ForegroundColor Yellow } if (Test-Path "web_extras\katex.js") { Copy-Item "web_extras\katex.js" "wiki\assets\javascripts\katex.js" -Force Write-Host "Copied katex.js" -} else { +} +else { Write-Host "Warning: web_extras\katex.js not found - skipping" -ForegroundColor Yellow } @@ -271,7 +277,8 @@ if (Test-Path "web_extras") { New-Item -ItemType Directory -Path "wiki\web_extras" -Force | Out-Null Copy-Item -Path "web_extras\*" -Destination "wiki\web_extras" -Recurse -Force -ErrorAction SilentlyContinue Write-Host "Copied web_extras directory" -} else { +} +else { Write-Host "Warning: web_extras directory not found - skipping" -ForegroundColor Yellow } diff --git a/generate_nav.py b/generate_nav.py index 375faa4..7f0a21b 100644 --- a/generate_nav.py +++ b/generate_nav.py @@ -34,7 +34,7 @@ def folder_to_title(name: str) -> str: """Convert a folder name to a readable title.""" # Replace separators with spaces title = name.replace('_', ' ').replace('-', ' ') - + # Title case, preserving certain patterns words = title.split() result = [] @@ -74,11 +74,11 @@ def extract_title_from_md(filepath: Path) -> Optional[str]: def filename_to_title(filename: str) -> str: """Convert a filename to a readable title.""" name = filename - + # Remove common prefixes (settings files often have category prefixes) # This regex removes patterns like "printer_basic_information_", "quality_settings_", etc. name = re.sub(r'^[a-z]+_(?:[a-z]+_)*(?=\w)', '', name) - + return folder_to_title(name) @@ -115,65 +115,65 @@ def get_sort_key(path: Path) -> tuple: def scan_folder(folder: Path, base_path: Path) -> list: """Recursively scan a folder and build nav structure.""" nav_items = [] - + try: items = list(folder.iterdir()) except PermissionError: return nav_items - + # Separate and sort files and folders md_files = sorted( [f for f in items if f.is_file() and f.suffix == '.md'], key=get_sort_key ) subfolders = sorted( - [d for d in items if d.is_dir() - and not d.name.startswith('.') + [d for d in items if d.is_dir() + and not d.name.startswith('.') and d.name.lower() not in EXCLUDED_FOLDERS], key=get_sort_key ) - + # Process markdown files for md_file in md_files: title = get_file_title(md_file) rel_path = md_file.relative_to(base_path) nav_items.append((title, str(rel_path).replace('\\', '/'))) - + # Process subfolders recursively for subfolder in subfolders: sub_items = scan_folder(subfolder, base_path) if sub_items: folder_title = get_display_name(subfolder.name) nav_items.append((folder_title, sub_items)) - + return nav_items def generate_nav(base_path: Path) -> list: """Generate the complete navigation structure by scanning all folders.""" nav = [] - + # Check for Home.md -> becomes index.md if (base_path / 'Home.md').exists(): nav.append(("Home", "index.md")) - + # Scan all top-level folders that contain markdown files top_level_folders = sorted( - [d for d in base_path.iterdir() - if d.is_dir() + [d for d in base_path.iterdir() + if d.is_dir() and not d.name.startswith('.') and d.name.lower() not in EXCLUDED_FOLDERS and any(d.rglob('*.md'))], # Only include if has .md files key=get_sort_key ) - + # Build nav from each folder for folder in top_level_folders: items = scan_folder(folder, base_path) if items: section_title = get_display_name(folder.name) nav.append((section_title, items)) - + return nav @@ -192,14 +192,14 @@ def nav_to_yaml(nav: list, indent: int = 2) -> str: """Convert nav structure to YAML string.""" lines = [] base_indent = " " * indent - + def format_item(item, level): prefix = base_indent * level + "- " title, value = item - + # Escape title to handle special characters escaped_title = escape_yaml_string(title) - + if isinstance(value, list): lines.append(f"{prefix}{escaped_title}:") for sub_item in value: @@ -208,50 +208,40 @@ def nav_to_yaml(nav: list, indent: int = 2) -> str: # Escape path value escaped_value = escape_yaml_string(value) lines.append(f"{prefix}{escaped_title}: {escaped_value}") - + for item in nav: format_item(item, 0) - + return '\n'.join(lines) def update_mkdocs_yml(mkdocs_path: Path, nav_yaml: str) -> None: """Update the nav section in mkdocs.yml.""" content = mkdocs_path.read_text(encoding='utf-8') - + # Find and replace the nav section # Match nav: followed by lines starting with - or whitespace until next top-level key or EOF nav_pattern = re.compile( r'^nav:\s*\n((?:[ \t-].*\n)*)', re.MULTILINE ) - + match = nav_pattern.search(content) if match: new_content = content[:match.start()] + f"nav:\n{nav_yaml}\n" + content[match.end():] else: new_content = content.rstrip() + f"\n\nnav:\n{nav_yaml}\n" - + # Validate YAML before writing (basic check - try importing yaml if available) try: import yaml - - class _MkDocsSafeLoader(yaml.SafeLoader): - """SafeLoader that tolerates mkdocs Python tags.""" - - # Allow !!python/name:... tags used by MkDocs/pymdownx without executing code - _MkDocsSafeLoader.add_constructor( - 'tag:yaml.org,2002:python/name', - lambda loader, node: loader.construct_scalar(node) - ) - - yaml.load(new_content, Loader=_MkDocsSafeLoader) + yaml.safe_load(new_content) except ImportError: # yaml module not available, skip validation pass except yaml.YAMLError as e: raise ValueError(f"Generated YAML is invalid: {e}") from e - + mkdocs_path.write_text(new_content, encoding='utf-8') print(f"āœ… Updated {mkdocs_path}") @@ -280,7 +270,7 @@ def count_items(nav: list) -> int: def main(): import argparse - + parser = argparse.ArgumentParser( description='Generate mkdocs.yml navigation from folder structure (fully dynamic)' ) @@ -289,23 +279,23 @@ def main(): help='Update mkdocs.yml directly (default: preview only)' ) args = parser.parse_args() - + script_dir = Path(__file__).parent mkdocs_path = script_dir / 'mkdocs.yml' - + if not mkdocs_path.exists(): print(f"āŒ Error: {mkdocs_path} not found") return 1 - + print(f"šŸ“‚ Scanning: {script_dir}\n") nav = generate_nav(script_dir) nav_yaml = nav_to_yaml(nav) - + print("šŸ“‹ Navigation Structure:\n") print_nav_tree(nav) print(f"\nšŸ“Š Total pages: {count_items(nav)}") print(f"šŸ“ Total sections: {len(nav) - 1}") # -1 for Home - + if args.update: print() update_mkdocs_yml(mkdocs_path, nav_yaml) @@ -315,7 +305,7 @@ def main(): print("nav:") print(nav_yaml) print("=" * 60) - + return 0 diff --git a/images/Precision/PreciseWallOff.svg b/images/Precision/PreciseWallOff.svg index 99fe13f..f8ad44e 100644 --- a/images/Precision/PreciseWallOff.svg +++ b/images/Precision/PreciseWallOff.svg @@ -1,3 +1,3 @@ -
Inner wall
Inner wall
Inner wall
Inner wall
Outer wall
Outer wall
\ No newline at end of file +
Inner wall
Inner wall
Inner wall
Inner wall
Outer wall
Outer wall
diff --git a/images/Precision/PreciseWallOn.svg b/images/Precision/PreciseWallOn.svg index 48d1fca..b67c1db 100644 --- a/images/Precision/PreciseWallOn.svg +++ b/images/Precision/PreciseWallOn.svg @@ -1,3 +1,3 @@ -
Inner wall
Inner wall
Inner wall
Inner wall
Outer wall
Outer wall
\ No newline at end of file +
Inner wall
Inner wall
Inner wall
Inner wall
Outer wall
Outer wall
diff --git a/images/Precision/arc-fitting.svg b/images/Precision/arc-fitting.svg index acb997c..87d1209 100644 --- a/images/Precision/arc-fitting.svg +++ b/images/Precision/arc-fitting.svg @@ -1,3 +1,3 @@ -
Sliced GCode Path
Sliced GCode Path
New GCode Arc
New GCode Arc
\ No newline at end of file +
Sliced GCode Path
Sliced GCode Path
New GCode Arc
New GCode Arc
diff --git a/images/Precision/elephant-foot.svg b/images/Precision/elephant-foot.svg index c51403c..030f886 100644 --- a/images/Precision/elephant-foot.svg +++ b/images/Precision/elephant-foot.svg @@ -1,3 +1,3 @@ -
Inner wall
Inner wall
Inner wall
Inner wall
Outer Wall
Outer Wall
Outer Wall
Outer Wall
Inner wall
Inner wall
Inner wall
Inner wall
Outer Wall
Outer Wall
Outer Wall
Outer Wall
Inner wall
Inner wall
Inner wall
Inner wall
Outer Wall
Outer Wall
Outer Wall
Outer Wall
\ No newline at end of file +
Inner wall
Inner wall
Inner wall
Inner wall
Outer Wall
Outer Wall
Outer Wall
Outer Wall
Inner wall
Inner wall
Inner wall
Inner wall
Outer Wall
Outer Wall
Outer Wall
Outer Wall
Inner wall
Inner wall
Inner wall
Inner wall
Outer Wall
Outer Wall
Outer Wall
Outer Wall
diff --git a/images/Precision/layer-height.svg b/images/Precision/layer-height.svg index d86cfe8..b7f72cc 100644 --- a/images/Precision/layer-height.svg +++ b/images/Precision/layer-height.svg @@ -1,3 +1,3 @@ -
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
\ No newline at end of file +
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
diff --git a/images/STL-Transformation/stl-transformation-params.svg b/images/STL-Transformation/stl-transformation-params.svg index f5542f4..65a3fd8 100644 --- a/images/STL-Transformation/stl-transformation-params.svg +++ b/images/STL-Transformation/stl-transformation-params.svg @@ -1,3 +1,3 @@ -
Angular Deflection
Angular Deflection
Linear Deflection
Linear Deflection
\ No newline at end of file +
Angular Deflection
Angular Deflection
Linear Deflection
Linear Deflection
diff --git a/images/Tolerance/tolerance_hole.svg b/images/Tolerance/tolerance_hole.svg index 927be09..f3772a8 100644 --- a/images/Tolerance/tolerance_hole.svg +++ b/images/Tolerance/tolerance_hole.svg @@ -1,3 +1,3 @@ -
6,00mm
6,00mm
\ No newline at end of file +
6,00mm
6,00mm
diff --git a/images/brim/brim-use-efc-outline.svg b/images/brim/brim-use-efc-outline.svg index 740b4f2..762bfc2 100644 --- a/images/brim/brim-use-efc-outline.svg +++ b/images/brim/brim-use-efc-outline.svg @@ -1,3 +1,3 @@ -
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Normal Brim without gap or Elephant Foot Compensation
Normal Brim without gap or Elephant Foot Compensation
Sliced Preview BrimĀ with Elephant Foot Compensation and no gap
Sliced Preview BrimĀ with Elephant Foot Compensation and no gap
Actual print after squished first layer
Actual print after squished first layer
Brim using EFC Outline with no gap
Brim using EFC Outline with no gap
\ No newline at end of file +
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Inner wall
Inner wall
Outer wall
Outer wall
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Brim
Normal Brim without gap or Elephant Foot Compensation
Normal Brim without gap or Elephant Foot Compensation
Sliced Preview BrimĀ with Elephant Foot Compensation and no gap
Sliced Preview BrimĀ with Elephant Foot Compensation and no gap
Actual print after squished first layer
Actual print after squished first layer
Brim using EFC Outline with no gap
Brim using EFC Outline with no gap
diff --git a/images/fill/InfillWallOverlapOff.svg b/images/fill/InfillWallOverlapOff.svg index a524a6b..550dfdf 100644 --- a/images/fill/InfillWallOverlapOff.svg +++ b/images/fill/InfillWallOverlapOff.svg @@ -1,3 +1,3 @@ -
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Sparse infill
Sparse infill
\ No newline at end of file +
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Sparse infill
Sparse infill
diff --git a/images/fill/InfillWallOverlapOn.svg b/images/fill/InfillWallOverlapOn.svg index cc348c0..321c678 100644 --- a/images/fill/InfillWallOverlapOn.svg +++ b/images/fill/InfillWallOverlapOn.svg @@ -1,3 +1,3 @@ -
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Sparse infill
Sparse infill
\ No newline at end of file +
Inner wall
Inner wall
Outer wall
Outer wall
Inner wall
Inner wall
Sparse infill
Sparse infill
diff --git a/images/misc/level-to-better-0.svg b/images/misc/level-to-better-0.svg index 003c5e1..c22e199 100644 --- a/images/misc/level-to-better-0.svg +++ b/images/misc/level-to-better-0.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-1.svg b/images/misc/level-to-better-1.svg index 7c89cd8..7bc201a 100644 --- a/images/misc/level-to-better-1.svg +++ b/images/misc/level-to-better-1.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-2.svg b/images/misc/level-to-better-2.svg index f79ec80..00c3383 100644 --- a/images/misc/level-to-better-2.svg +++ b/images/misc/level-to-better-2.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-3.svg b/images/misc/level-to-better-3.svg index 6b6358c..ad86f06 100644 --- a/images/misc/level-to-better-3.svg +++ b/images/misc/level-to-better-3.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-4.svg b/images/misc/level-to-better-4.svg index 0de687b..8c49226 100644 --- a/images/misc/level-to-better-4.svg +++ b/images/misc/level-to-better-4.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-5.svg b/images/misc/level-to-better-5.svg index b3ddfa8..e79fadb 100644 --- a/images/misc/level-to-better-5.svg +++ b/images/misc/level-to-better-5.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-6.svg b/images/misc/level-to-better-6.svg index fd25e62..944477b 100644 --- a/images/misc/level-to-better-6.svg +++ b/images/misc/level-to-better-6.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-7.svg b/images/misc/level-to-better-7.svg index 274021b..01c9aa0 100644 --- a/images/misc/level-to-better-7.svg +++ b/images/misc/level-to-better-7.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-better-8.svg b/images/misc/level-to-better-8.svg index 280f401..380baf4 100644 --- a/images/misc/level-to-better-8.svg +++ b/images/misc/level-to-better-8.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-0.svg b/images/misc/level-to-worse-0.svg index 2845a52..80fb560 100644 --- a/images/misc/level-to-worse-0.svg +++ b/images/misc/level-to-worse-0.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-1.svg b/images/misc/level-to-worse-1.svg index d3f084c..7e64102 100644 --- a/images/misc/level-to-worse-1.svg +++ b/images/misc/level-to-worse-1.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-2.svg b/images/misc/level-to-worse-2.svg index 84610c8..310c6c6 100644 --- a/images/misc/level-to-worse-2.svg +++ b/images/misc/level-to-worse-2.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-3.svg b/images/misc/level-to-worse-3.svg index b95bdfc..906a5a6 100644 --- a/images/misc/level-to-worse-3.svg +++ b/images/misc/level-to-worse-3.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-4.svg b/images/misc/level-to-worse-4.svg index 0de687b..8c49226 100644 --- a/images/misc/level-to-worse-4.svg +++ b/images/misc/level-to-worse-4.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-5.svg b/images/misc/level-to-worse-5.svg index cae9864..9140a59 100644 --- a/images/misc/level-to-worse-5.svg +++ b/images/misc/level-to-worse-5.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-6.svg b/images/misc/level-to-worse-6.svg index 23f9016..7c91b98 100644 --- a/images/misc/level-to-worse-6.svg +++ b/images/misc/level-to-worse-6.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-7.svg b/images/misc/level-to-worse-7.svg index d2bd5d6..b1f515f 100644 --- a/images/misc/level-to-worse-7.svg +++ b/images/misc/level-to-worse-7.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/images/misc/level-to-worse-8.svg b/images/misc/level-to-worse-8.svg index 26d55f3..38e074c 100644 --- a/images/misc/level-to-worse-8.svg +++ b/images/misc/level-to-worse-8.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/print_settings/speed/speed_settings_other_layers_speed.md b/print_settings/speed/speed_settings_other_layers_speed.md index f142990..26f796c 100644 --- a/print_settings/speed/speed_settings_other_layers_speed.md +++ b/print_settings/speed/speed_settings_other_layers_speed.md @@ -51,7 +51,7 @@ $$ \frac{\text{Perimeter Length}}{2\pi} \leq \text{Threshold} $$ -For example, if the threshold is set to 5 mm, then the perimeter length must be less than or equal to 31.4 mm (2 * π * 5 mm) to be considered a small perimeter. +For example, if the threshold is set to 5 mm, then the perimeter length must be less than or equal to 31.4 mm `(2 * π * 5 mm)` to be considered a small perimeter. - A Circle with a diameter of 10 mm will have a perimeter length of approximately 31.4 mm, which is equal to the threshold, so it will be considered a small perimeter. - A Cube of 10mm x 10mm will have a perimeter length of 40 mm, which is greater than the threshold, so it will not be considered a small perimeter.