[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-70583":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":12,"compositeScore":18,"rankGlobal":8,"rankLanguage":8,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":8,"pushedAt":8,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":14,"starSnapshotCount":14,"syncStatus":15,"lastSyncTime":27,"discoverSource":28},70583,"2STEP-Converter","yaneony\u002F2STEP-Converter","yaneony",null,"Python",205,8,6,1,0,2,4,90,2.86,"MIT License",false,"main",true,[],"2026-06-12 02:02:35","# 2STEP-Converter\n\n> Converts **STL, 3MF, OBJ, AMF, and IGES** files to clean STEP solids using OpenCASCADE - the same engine that powers FreeCAD, CATIA, and other professional CAD tools.\n\n![2STEP-Converter terminal UI showing batch conversion progress with the read, sew, fix, refine, write, and preview steps for each file](docs\u002Fconverter.png)\n\n![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows%20%7C%20macOS%20%7C%20Linux-blue?style=for-the-badge)\n![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.12-blue?style=for-the-badge)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green?style=for-the-badge)\n\n![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fyaneony\u002F2STEP-Converter?style=for-the-badge)\n![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fyaneony\u002F2STEP-Converter?style=for-the-badge)\n![Last Commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fyaneony\u002F2STEP-Converter?style=for-the-badge)\n\nIf this project helps you, you can support development on Ko-fi:\n\n[![Support on Ko-fi](https:\u002F\u002Fko-fi.com\u002Fimg\u002Fgithubbutton_sm.svg)](https:\u002F\u002Fko-fi.com\u002Fyaneony)\n\n---\n\nThe name has a deliberate double meaning: **\"to STEP\"** - whatever format you throw at it, the output is always a clean STEP file - and **\"two steps\"** - drop your files into `models\u002F`, run the launcher. Unlike online converters that wrap the mesh as-is in a STEP container (leaving thousands of flat triangular faces), 2STEP-Converter sews the mesh into a proper solid, repairs it, and merges co-planar faces - the same pipeline FreeCAD uses internally.\n\n> [!TIP]\n> **Self-contained.** No system Python, no admin rights, no PATH changes. The launcher creates a portable environment that downloads everything it needs on first run.\n\n![Side-by-side comparison: typical online converter on the left showing thousands of triangle faces, vs 2STEP-Converter on the right showing a clean solid - same source file](docs\u002Fcompare.png)\n\n*Left: typical online converter. Right: 2STEP-Converter. Same source file.*\n\n![Four auto-generated PNG previews of the same model at 20%, 40%, 60%, and 80% reduction, output by the converter itself](docs\u002Fresult.png)\n\n*Auto-generated `.png` previews showing the same model at 20%, 40%, 60%, and 80% reduction.*\n\n---\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [First Run](#first-run)\n- [How It Works](#how-it-works)\n- [Configuration](#configuration)\n- [Troubleshooting](#troubleshooting)\n- [Limitations](#limitations)\n- [Requirements](#requirements)\n- [Project Structure](#project-structure)\n- [Credits](#credits)\n- [Disclaimer](#disclaimer)\n- [License](#license)\n\n---\n\n## Installation\n\nNo system Python required - the launcher creates a self-contained portable environment on first run.\n\n1. **Download** the project:\n   - Click the green **Code** button on the [repository page](https:\u002F\u002Fgithub.com\u002Fyaneony\u002F2STEP-Converter) and choose **Download ZIP**\n   - Or grab the latest tagged release from [Releases](https:\u002F\u002Fgithub.com\u002Fyaneony\u002F2STEP-Converter\u002Freleases)\n   - Or clone with git: `git clone https:\u002F\u002Fgithub.com\u002Fyaneony\u002F2STEP-Converter.git`\n\n2. **Extract** the archive to a folder of your choice. Keep the path short on Windows (e.g. `C:\\Tools\\2STEP-Converter`) to avoid the 260-character path limit - see [Windows 260-character path limit](#windows-260-character-path-limit).\n\n3. **Run the launcher.** First launch auto-installs micromamba and all dependencies (~7.5 GB on disk, 5-15 min depending on connection speed):\n   - **Windows** - double-click `2STEP-Converter.bat`\n   - **macOS \u002F Linux** - make executable once with `chmod +x 2STEP-Converter.sh`, then `.\u002F2STEP-Converter.sh`\n\n4. The launcher will ask once where to install the Python environment: **portable** (next to the script in `lib\u002F`) or **platform default** (under your user profile). See [Install location](#install-location) for the exact paths and trade-offs.\n\n5. Once the environment is built, drop input files into `models\u002F` and run the launcher again - or pass files on the command line. See [Usage](#usage).\n\n> [!TIP]\n> No admin rights are required unless you opt into enabling Windows long paths during install. See [First Run](#first-run) for what gets downloaded and where it lives on disk.\n\n---\n\n## Usage\n\n### Batch mode\n\n1. Drop files into the `models\u002F` folder\n2. Run the launcher:\n   - **Windows** - double-click `2STEP-Converter.bat`\n   - **macOS \u002F Linux** - `.\u002F2STEP-Converter.sh` (one-time `chmod +x 2STEP-Converter.sh`)\n3. Output `.stp` files appear in the same folder\n\n**Supported formats:** `.stl` `.3mf` `.obj` `.amf` `.igs` `.iges`\n\n### Single file\n\n**Windows**\n```bat\n2STEP-Converter.bat model.stl\n2STEP-Converter.bat model.stl -o out.stp\n```\n\n**macOS \u002F Linux**\n```sh\n.\u002F2STEP-Converter.sh model.stl\n.\u002F2STEP-Converter.sh model.stl -o out.stp\n```\n\n### Multiple files\n\nPass any number of files directly - no need to use the `models\u002F` folder:\n\n**Windows**\n```bat\n2STEP-Converter.bat a.stl b.obj c.3mf\n```\n\n**macOS \u002F Linux**\n```sh\n.\u002F2STEP-Converter.sh a.stl b.obj c.3mf\n```\n\n### Options\n\n| Option | Default | Description |\n|--------|:-------:|-------------|\n| `--tolerance` \u002F `-t` | `0.01` | Sewing tolerance in model units. Lower = tighter seams, slower. Increase if sewing fails on coarse meshes. |\n| `--reduce` \u002F `-r` | off | Reduce mesh by this % of triangles (e.g. `10` keeps 90%). Comma-separated values produce one output per value (e.g. `25,50,75` writes three `.stp` files). |\n| `--output` \u002F `-o` | - | Output file path (single-file mode only). |\n| `--output-dir` \u002F `-d` | - | Write all outputs to this directory instead of alongside the source. |\n| `--format` | `ap203` | STEP schema: `ap203`, `ap214`, or `ap242`. |\n| `--force` \u002F `-f` | off | Re-convert even if the output is already newer than the source. |\n| `--dry-run` \u002F `--dry` | off | Show what would be converted or skipped without doing anything. |\n| `--watch` \u002F `-w` | off | After the initial batch run, watch `models\u002F` and convert new files as they appear. Ctrl+C to stop. |\n| `--preview` \u002F `--no-preview` | from config | Force the `.png` preview on or off (overrides `GENERATE_PREVIEW`). |\n\n> [!NOTE]\n> Output files are named `\u003Csource> [N].stp` where `N` is the reduction percentage (`0` if no reduction was applied).\n\n**Windows**\n```bat\n2STEP-Converter.bat --reduce 25 model.stl\n2STEP-Converter.bat --reduce 25,50,75 model.stl\n2STEP-Converter.bat --format ap214 -d C:\\out model.stl\n2STEP-Converter.bat --no-preview --dry-run\n2STEP-Converter.bat --watch\n```\n\n**macOS \u002F Linux**\n```sh\n.\u002F2STEP-Converter.sh --reduce 25 model.stl\n.\u002F2STEP-Converter.sh --reduce 25,50,75 model.stl\n.\u002F2STEP-Converter.sh --format ap214 -d ~\u002Fout model.stl\n.\u002F2STEP-Converter.sh --no-preview --dry-run\n.\u002F2STEP-Converter.sh --watch\n```\n\n### Interactive reduction prompt\n\nWhen `REDUCE_INTERACTIVE` is enabled (default), each batch file pauses on a reduction prompt:\n\n| Input | Result |\n|-------|--------|\n| **Enter** | Accept the default (from `DEFAULT_REDUCE` or `--reduce`) |\n| `25` | Reduce this file by 25% |\n| `25,50,75` | Generate three outputs at 25%, 50%, and 75% reduction |\n| `!25` or `!25,50` | Lock the value for all remaining files in the batch |\n| `0` | No reduction for this file |\n\n---\n\n## First Run\n\nOn first launch the launcher downloads everything automatically:\n\n| Download | Size | Purpose |\n|----------|:----:|---------|\n| micromamba | ~10 MB | Portable Python environment manager |\n| Python 3.12 + pythonocc-core | ~500 MB | OpenCASCADE bindings (compressed download) |\n| trimesh + fast-simplification | ~10 MB | Mesh reduction fallbacks |\n| matplotlib | ~50 MB | Preview rendering |\n| open3d | ~150 MB | Mesh repair and primary reducer |\n\nTotal fresh install: ~**7.6 GB** on disk, split roughly in half between the live env and an extracted-package mirror:\n\n| Folder | Size | What it is |\n|--------|:----:|------------|\n| `lib\\env\\` | ~3.5 GB | The active Python environment (what gets used at runtime) |\n| `lib\\https\\` | ~4.1 GB | micromamba's **extracted-package mirror** - not compressed; one extracted copy of every package |\n| `lib\\micromamba.exe` + bookkeeping | ~15 MB | Env manager + small caches |\n\n### Why so large?\n\n**Inside `lib\\env\\` (~3.5 GB):**\n\n- ~1.6 GB in `Library\\bin\\` - native DLLs. Biggest: MKL (~280 MB across multiple kernels), Qt6 (~70 MB), libclang (~125 MB), VTK (~150 MB), Mesa\u002FVulkan software renderers (~110 MB), Open3D (~34 MB).\n- ~700 MB in `Lib\\site-packages\\` - Python packages. Biggest: `OCC` (308 MB), `open3d` (79 MB), `plotly` (57 MB), `vtkmodules` (43 MB), `PySide6` (38 MB), `numpy` (30 MB), `dash` (29 MB), `matplotlib` (26 MB).\n- Roughly **~170 MB** of that `site-packages` total is indirect visualization dependencies (`plotly`, `dash`, `PySide6`, `vtkmodules`) pulled in by Open3D's optional renderer code but not used by the converter.\n- ~1.2 GB in `Library\\lib\\`, `Library\\share\\`, and other support folders.\n- Open3D and Qt6 also bundle their own **copies** of native DLLs inside `site-packages` (e.g., `Open3D.dll` exists once in `Library\\bin\\` and once in `site-packages\\open3d\\cpu\\`), so some content is duplicated within the env itself.\n\n**`lib\\https\\` (~4.1 GB):**\n\nThis is **not** a compressed cache - it's micromamba's package directory. Every conda package is extracted in full here (e.g., `mkl` 425 MB, `qt6-main` 372 MB, `vtk-base` 346 MB, `pythonocc-core` 314 MB, `open3d` 210 MB) so that envs can be (re)built quickly by linking files out of this mirror. On filesystems where hardlinks across the directories aren't available - which is the common case on Windows - the contents end up as full copies, effectively doubling the disk usage.\n\n> [!WARNING]\n> Don't manually strip files inside `lib\\env\\`. Many Python packages import their bundled native libraries from a specific path inside `site-packages\\`, and removing or symlinking those copies silently breaks `import` - often only at runtime.\n>\n> The only safe cleanup is deleting `lib\\https\\` once the env is built. This recovers ~4 GB, but the launcher will re-download and re-extract every package if the env is ever rebuilt (e.g., after `--reinstall` or a manual delete of `lib\\env\\`).\n\n### Install location\n\nThe launcher checks for an existing environment in this order:\n\n1. `lib\u002F` next to the script - used if present (portable mode)\n2. Platform default - used if present\n3. Neither found - you are asked where to install\n\n| Platform | Default path |\n|----------|--------------|\n| Windows | `%LOCALAPPDATA%\\STLtoSTP` |\n| macOS | `~\u002FLibrary\u002FApplication Support\u002FSTLtoSTP` |\n| Linux | `~\u002F.local\u002Fshare\u002FSTLtoSTP` (respects `$XDG_DATA_HOME`) |\n\n### Windows 260-character path limit\n\n> [!IMPORTANT]\n> The Python environment contains deeply nested paths that can exceed Windows' default 260-character limit, causing silent failures. On startup the launcher detects this and offers two options.\n\n| Option | What it does |\n|--------|--------------|\n| **\\[1\\] Enable long paths + reboot** | Writes `LongPathsEnabled = 1` to the registry via a UAC prompt, then reboots in 10 seconds. |\n| **\\[2\\] Use %LOCALAPPDATA%\\STLtoSTP** | Installs under your user profile where paths are shorter. No reboot needed. |\n\nTo enable long paths manually in an elevated PowerShell:\n\n```powershell\nSet-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Control\\FileSystem\" -Name LongPathsEnabled -Value 1\n```\n\nThen reboot. This does not apply to macOS or Linux.\n\n---\n\n## How It Works\n\nReplicates the FreeCAD **Part workbench** conversion pipeline. Mesh inputs (STL\u002F3MF\u002FOBJ\u002FAMF) go through a mesh-cleanup stage first, then a CAD-kernel stage. IGES inputs skip straight to the CAD stage since they already contain B-Rep geometry.\n\n| Step | Operation | Library \u002F API |\n|:----:|-----------|---------------|\n| 1 | Parse input into vertex\u002Ftriangle arrays | Custom parsers for STL\u002F3MF\u002FOBJ\u002FAMF · `IGESControl_Reader` for IGES |\n| 2 | Clean mesh (dedup vertices, drop degenerate triangles) | `open3d` |\n| 3 | Reduce mesh (optional) | `open3d` (primary) · `trimesh` and `fast-simplification` (fallbacks) |\n| 4 | Build B-Rep shape from mesh | `StlAPI_Reader` (via a temporary STL file) |\n| 5 | Sew triangles into a watertight solid | `BRepBuilderAPI_Sewing` |\n| 6 | Repair invalid B-Rep geometry | `ShapeFix_Shape` |\n| 7 | Merge co-planar faces | `ShapeUpgrade_UnifySameDomain` |\n| 8 | Export STEP (AP203 \u002F AP214 \u002F AP242) | `STEPControl_Writer` |\n\nSteps 5-7 run in isolated subprocesses so a crash inside the CAD kernel doesn't take down the converter.\n\n---\n\n## Configuration\n\nAll settings live in `data\u002Fconfig.json`, created automatically on first run. Edit it with any text editor.\n\n```json\n{\n    \"DEFAULT_TOLERANCE\": 0.01,\n    \"DEFAULT_REDUCE\": 0,\n    \"REDUCE_INTERACTIVE\": true,\n    \"SKIP_EXISTING\": true,\n    \"ANGULAR_TOLERANCE\": 0.01,\n    \"SEW_TIMEOUT\": 1800,\n    \"DEFAULT_FORMAT\": \"ap203\",\n    \"GENERATE_PREVIEW\": true,\n    \"MODELS_DIR_NAME\": \"models\",\n    \"STL_EXT\": \".stl\",\n    \"TMF_EXT\": \".3mf\",\n    \"OBJ_EXT\": \".obj\",\n    \"IGS_EXT\": \".igs\",\n    \"AMF_EXT\": \".amf\",\n    \"STP_EXT\": \".stp\"\n}\n```\n\n| Key | Default | Description |\n|-----|:-------:|-------------|\n| `DEFAULT_TOLERANCE` | `0.01` | Sewing tolerance in model units. How far apart two edges can be and still be joined. |\n| `ANGULAR_TOLERANCE` | `0.01` | Angular tolerance (radians) for merging co-planar faces. ~0.57 deg - catches flat faces with small tessellation errors. |\n| `SEW_TIMEOUT` | `1800` | Maximum seconds the sewing subprocess is allowed to run. Increase for very dense meshes; decrease if you'd rather fail fast and retry with `--reduce`. |\n| `DEFAULT_REDUCE` | `0` | Default reduction percentage. `10` removes 10% of triangles, keeping 90%. `0` disables. Can also be a comma-separated string (e.g. `\"25,50,75\"`) to write one output per value. |\n| `DEFAULT_FORMAT` | `\"ap203\"` | Default STEP schema: `ap203`, `ap214`, or `ap242`. Overridden by `--format`. |\n| `GENERATE_PREVIEW` | `true` | Renders a `.png` preview alongside each exported `.stp` file. Overridden by `--preview` \u002F `--no-preview`. |\n| `REDUCE_INTERACTIVE` | `true` | Prompts for a reduction percentage per file. Prefix with `!` (e.g. `!25`) to lock the value for all remaining files. |\n| `SKIP_EXISTING` | `true` | Skip files whose output is already newer than the source. Overridden by `--force`. |\n| `MODELS_DIR_NAME` | `\"models\"` | Folder scanned for input files in batch mode. |\n| `STL_EXT` · `TMF_EXT` · `OBJ_EXT` · `IGS_EXT` · `AMF_EXT` · `STP_EXT` | `\".stl\"` etc. | Input and output file extensions. `.iges` is also accepted as IGES. |\n\nInvalid values are reported as warnings at startup and fall back to their defaults.\n\n---\n\n## Troubleshooting\n\nWhen a file fails, the red error line at the bottom of its box tells you what happened. Common messages and what to try:\n\n| Error | What it means | What to try |\n|-------|---------------|-------------|\n| `sewing failed: subprocess timed out after Ns` | The mesh is too dense for OCC's sewer to finish within `SEW_TIMEOUT`. The sewing algorithm has near-quadratic worst-case behavior on edge matching. | Raise `SEW_TIMEOUT` in `data\u002Fconfig.json`, **or** retry with a looser tolerance like `--tolerance 0.1` (often 10-100x faster), **or** reduce aggressively (`--reduce 75` or `--reduce 90`). Combining `--tolerance 0.1 --reduce 75` clears most stubborn meshes. |\n| `sewing failed: subprocess exited with code N` | The sewing subprocess crashed silently. Usually a segfault from pathological topology (self-intersections, non-manifold edges) or memory pressure. | Reduce aggressively first (`--reduce 75`), then increase tolerance (`--tolerance 0.1` or higher). |\n| `sewing failed: RuntimeError: ...` | OpenCASCADE raised an exception during sewing. The message after `RuntimeError:` names the specific OCC failure. | Loosen `--tolerance`. If the error mentions `BRep` or `IsDone`, the mesh has invalid edges - try `--reduce 50` first (it also runs Open3D mesh cleanup as a side effect). |\n| `input produced an empty shape` | The mesh parsed to zero triangles, or all triangles were rejected as degenerate during cleanup. | Open the file in a mesh viewer to confirm it isn't empty or completely degenerate. |\n| `reduced mesh produced an empty shape` | The reduction collapsed the mesh too far. | Use a smaller reduction percentage (e.g. `--reduce 50` instead of `--reduce 95`). |\n| `STEP writer failed` | OpenCASCADE rejected the geometry when writing the STEP file. Rare and usually transient. | Try a different schema: `--format ap214` or `--format ap242`. |\n| `output file is missing or empty` | The writer ran but produced nothing usable on disk. | Check disk space and that the output folder is writable. On Windows verify the path isn't blocked by an antivirus. |\n| `IGES reader failed with status N` | The IGES file is malformed or uses an entity the OCC reader doesn't support. | Open the file in FreeCAD first to see if it parses there. If it does, export it back out as STL and convert that. |\n| `unsupported format for reduction: ...` | You passed `--reduce` to an IGES file. IGES inputs already contain B-Rep geometry and can't be reduced as a mesh. | Drop `--reduce` for IGES files. |\n\n> [!TIP]\n> If you batch-convert and one file fails partway through, the converter continues to the next file. The summary at the end shows how many succeeded, were skipped, or failed.\n\n> [!NOTE]\n> When sewing succeeds but produces an \"open shell\" instead of a closed solid, the resulting STEP imports as a surface set rather than an editable solid. This is usually a hint that the source mesh isn't watertight (has tiny holes from the original export). The converter doesn't fill holes by design - it preserves your geometry as-is. Fix the source mesh in Blender\u002FMeshLab\u002Fetc. if you need a solid.\n\n---\n\n## Limitations\n\nThis is a mesh-to-STEP converter; it intentionally doesn't try to be everything.\n\n- **Holes are not filled.** Source mesh must be watertight or near-watertight. The converter preserves geometry as-is - if there are tiny gaps, sewing will produce an open shell instead of a solid. Fix holes in Blender\u002FMeshLab\u002Fetc. before converting.\n- **No color, materials, or textures.** STEP output is geometry only. Surface colors, vertex colors, and UV-mapped textures from the source mesh are discarded.\n- **No assembly hierarchy.** All resulting solids end up at the root of the STEP file. Sub-assemblies and named parts in 3MF \u002F OBJ sources are flattened.\n- **No automatic self-intersection repair.** If two parts of the mesh pass through each other, the sewer may crash or produce invalid geometry. Run a repair pass in a mesh tool first if you suspect this.\n- **IGES inputs are not reducible.** `.igs` \u002F `.iges` files already contain B-Rep geometry, not a triangle mesh - `--reduce` is silently ignored for them.\n- **STL color extensions are ignored.** The non-standard color attributes some slicers embed in binary STL aren't read.\n- **Animations and time-varying data are not supported.** Only static geometry is converted.\n\n---\n\n## Requirements\n\n- Windows 10\u002F11, macOS (Intel & Apple Silicon), or Linux (x86_64 & ARM64)\n- Internet connection on first run only\n- ~8 GB free disk space for the Python environment (~7.6 GB used)\n\nConverted STEP files have been tested in **Plasticity** and import correctly.\n\n---\n\n## Project Structure\n\n```\n2STEP-Converter.bat      - launcher for Windows: auto-setup + run\n2STEP-Converter.sh       - launcher for macOS \u002F Linux: auto-setup + run\nconverter.py             - the converter itself\nREADME.md                - this file\nLICENSE.md               - MIT license\nmodels\u002F                  - drop input files here (.stl .3mf .obj .amf .igs .iges)\ndata\u002F                    - persistent state (auto-created on first run)\n  config.json            - tunable constants\n  estimator.json         - conversion time history for ETA estimates\ndocs\u002F                    - screenshots and comparison images used in the README\nlib\u002F                     - portable Python environment (auto-created, ~7.5 GB)\n```\n\n---\n\n## Credits\n\nBuilt on these open-source projects:\n\n- **[OpenCASCADE](https:\u002F\u002Fwww.opencascade.com\u002F)** via **[pythonocc-core](https:\u002F\u002Fgithub.com\u002Ftpaviot\u002Fpythonocc-core)** - the CAD kernel that does the actual sewing, fixing, and STEP export.\n- **[FreeCAD](https:\u002F\u002Fwww.freecad.org\u002F)** - the inspiration for the Part workbench pipeline replicated here.\n- **[Open3D](https:\u002F\u002Fwww.open3d.org\u002F)** - mesh cleanup (dedup, degenerate-triangle removal) and the primary quadric-decimation reducer.\n- **[trimesh](https:\u002F\u002Ftrimesh.org\u002F)** and **[fast-simplification](https:\u002F\u002Fgithub.com\u002Fpyvista\u002Ffast-simplification)** - mesh reduction fallbacks when Open3D doesn't cope.\n- **[matplotlib](https:\u002F\u002Fmatplotlib.org\u002F)** + **[Pillow](https:\u002F\u002Fpython-pillow.org\u002F)** - the wireframe `.png` preview renderer.\n- **[micromamba](https:\u002F\u002Fmamba.readthedocs.io\u002F)** - portable conda-compatible environment manager that bootstraps the whole stack.\n\n---\n\n## Contributing\n\nContributions are welcome. Open a pull request, report issues, or fork and adapt the project to your own needs.\n\n## Disclaimer\n\nThis software is provided **\"as is\"**, without warranty of any kind. The converter itself has been written and tested in good faith, but it relies on a large set of third-party packages (OpenCASCADE, Open3D, Qt6, VTK, MKL, trimesh, fast-simplification, and others) that the launcher downloads automatically from the public conda-forge channel on first run. I have no control over those packages and cannot guarantee their correctness, stability, or that they will never ship a bug or harmful change in a future version.\n\nBy running the launcher you accept that:\n\n- Output STEP files may contain errors, invalid topology, or geometry that differs from the source. Always inspect critical results in your CAD tool before relying on them.\n- Third-party dependencies may change at any time. The launcher installs whatever conda-forge serves on the day you run it.\n- I am not responsible for any data loss, incorrect output, system instability, or other damages resulting from use of this software or its dependencies.\n\nThe full legal text is in [LICENSE.md](LICENSE.md).\n\n## License\n\n[MIT](LICENSE.md) © 2026 [YaneonY](https:\u002F\u002Fgithub.com\u002Fyaneony\u002F2STEP-Converter)\n","2STEP-Converter 是一个用于将 STL、3MF、OBJ、AMF 和 IGES 文件转换为干净的 STEP 实体的工具。它基于 OpenCASCADE 引擎，该引擎也支持 FreeCAD、CATIA 等专业 CAD 软件。核心功能包括自动缝合网格、修复模型以及合并共面以生成高质量的 STEP 文件，而非简单的三角形面封装。此外，该工具还提供自动生成预览图片的功能，并且无需系统级 Python 安装或管理员权限即可运行，极大地方便了用户的使用。适用于需要进行多格式 3D 模型文件标准化处理的场景，如工程设计、产品开发等。","2026-06-11 03:32:54","CREATED_QUERY"]