Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7,017 changes: 0 additions & 7,017 deletions 3DPrintedMetric.xml

This file was deleted.

7,017 changes: 0 additions & 7,017 deletions 3DPrintedMetricV2.xml

This file was deleted.

7,017 changes: 0 additions & 7,017 deletions 3DPrintedMetricV3.xml

This file was deleted.

66 changes: 0 additions & 66 deletions Fusion360ThreadProfile.xsd

This file was deleted.

44 changes: 23 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,52 @@
# Fusion 360 Thread Profiles for 3D-Printed Threads

Fusion 360 comes with various thread standards, most of which are not a great fit for 3D printing because they are too fine to work well when printed.
This project defines thread profiles that are aimed at 3D printing so that they work, even when printed with lower detail settings (e.g. 0.30mm layer height).
This project defines thread profiles that are aimed at 3D printing so that they work, even when printed with lower detail settings.

## What's in the Box?

The provided `3DPrintedMetricV3.xml` file contains the thread profiles listed below.
The provided `3DPrintedMetricV4.xml` file contains the thread profiles listed below.
Additional profiles can be easily generated from the included Python script.

**Shape:** 60° trapezoidal
**Size (OD):** 8-50mm
**Pitch:** 3.5mm, 5mm
**Classes:** O.0, O.1, O.2, O.4, O.8
**Shape:** 60° trapezoidal
<br>
**Size (OD):** 1-50mm
<br>
**Pitch:** Various, based on the ISO standard
<br>
**Classes:** O.0, O.1, O.2, 0.3, O.4, 0.5, 0.6, 0.7, O.8, 0.9


The classes specify tolerances.
O.0 has the tightest tolerances which are loosely based on ISO M30x3.5 6g/6H.
O.0 has the tightest tolerances which are loosely based on ISO M30x3.5 6g/6H.
The number after the 'O.' specifies, in tenths of a millimeter, how much the major, minor and pitch diameters are offset compared to O.0.
For example, O.2 would have a 0.2mm looser tolerance than O.0.

`3DPrintedMetric.xml` contains old thread definitions and is provided for compatibility with older prints or models.
If your goal is to use real metal bolts in 3D printed threaded holes, I find that **0.6** works well.
<p align="center">
<img src="m4_thread_example_1.jpg" alt="M4 Thread Example 1" height="400">
<img src="m4_thread_example_2.jpg" alt="M4 Thread Example 2" height="400">
</p>

## Install and Use

If you just want to use the profiles with no customization, download the file `3DPrintedMetricV3.xml`, save it in the following directory and then restart Fusion 360.
If you just want to use the profiles with no customization, download the file `3DPrintedMetricV4.xml`, save it in the following directory and then restart Fusion 360.

**On Windows:**
```
%localappdata%\Autodesk\webdeploy\Production\<version ID>\Fusion\Server\Fusion\Configuration\ThreadData
```

**On Mac OS:**

*Macintosh HD> Users> [Username] > Library > Application Support > Autodesk > Webdeploy > production > [Version specific ID] > Then right click on "Autodesk Fusion 360" and choose Show Package Contents > Contents > Libraries > Applications > Fusion > Fusion > Server > Fusion > Configuration >ThreadData*
The easiest way to get to the ThreadData folder is to use the Terminal. Open a new Terminal window and paste in:
```
open ~/Library/Application\ Support/Autodesk/webdeploy/production/Autodesk\ Fusion.app/Contents/Libraries/Applications/Fusion/Fusion/Server/Fusion/Configuration/ThreadData
```
This will open the correct folder in the Finder

(see also [here](https://knowledge.autodesk.com/support/fusion-360/learn-explore/caas/sfdcarticles/sfdcarticles/Custom-Threads-in-Fusion-360.html))

When you now create or edit a *Thread* feature, you should be able to select the Thread Type *"3D-printed Metric Threads"*.
When you now create or edit a *Thread* feature, you should be able to select the Thread Type *"3D-printed Metric Threads V4"*.

![Select Thread Type in Fusion 360](ss_fusion.png)

Expand All @@ -54,12 +65,3 @@ python main.py
This will create a file named `output.xml` in the working directory which you can then rename and install in Fusion as described above.

To customize the generated profiles, simply edit the values defined at the top of `main.py`.

```python
NAME = "3D-printed Metric Threads V3"
UNIT = "mm"
ANGLE = 60.0
SIZES = list(range(8, 51))
PITCHES = [3.5, 5.0]
OFFSETS = [.0, .1, .2, .4, .8]
```
Binary file added m4_thread_example_1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added m4_thread_example_2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
67 changes: 61 additions & 6 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,65 @@
import xml.etree.ElementTree as ET
from abc import ABC, abstractmethod

NAME = "3D-printed Metric Threads V3"
NAME = "3D-printed Metric Threads V4"
UNIT = "mm"
ANGLE = 60.0
SIZES = list(range(8, 51))
PITCHES = [3.5, 5.0]
OFFSETS = [.0, .1, .2, .4, .8]
SIZES = list(range(1, 51))
# Standard ISO metric thread pitches for each size
# Format: {size: [coarse_pitch, fine_pitch1, fine_pitch2, ...]}
ISO_PITCHES = {
1: [0.25, 0.2],
2: [0.4, 0.25],
3: [0.5, 0.35],
4: [0.7, 0.5],
5: [0.8, 0.5],
6: [1.0, 0.75],
7: [1.0], # Less common
8: [1.25, 1.0, 0.75],
9: [1.25], # Less common
10: [1.5, 1.25, 1.0],
11: [1.5], # Less common
12: [1.75, 1.5, 1.25],
13: [1.75], # Less common
14: [2.0, 1.5],
15: [2.0], # Less common
16: [2.0, 1.5],
17: [2.0], # Less common
18: [2.5, 2.0, 1.5],
19: [2.5], # Less common
20: [2.5, 2.0, 1.5],
21: [2.5], # Less common
22: [2.5, 2.0, 1.5],
23: [2.5], # Less common
24: [3.0, 2.0, 1.5],
25: [3.0], # Less common
26: [3.0], # Less common
27: [3.0, 2.0, 1.5],
28: [3.0], # Less common
29: [3.0], # Less common
30: [3.5, 2.0, 1.5],
31: [3.5], # Less common
32: [3.5], # Less common
33: [3.5, 2.0],
34: [3.5], # Less common
35: [3.5], # Less common
36: [4.0, 3.0],
37: [4.0], # Less common
38: [4.0], # Less common
39: [4.0, 3.0],
40: [4.0], # Less common
41: [4.0], # Less common
42: [4.5, 3.0],
43: [4.5], # Less common
44: [4.5], # Less common
45: [4.5, 3.0],
46: [4.5], # Less common
47: [4.5], # Less common
48: [5.0, 3.0],
49: [5.0], # Less common
50: [5.0, 3.0]
}
OFFSETS = [.0, .1, .2, .3, .4, .5, .6, .7, .8, .9]


def designator(val: float):
Expand Down Expand Up @@ -55,7 +108,9 @@ def sizes(self):
return SIZES

def designations(self, size):
return [Metric3Dprinted.Designation(size, pitch) for pitch in PITCHES]
# Get pitches for this size, default to [0.5] if not defined
pitches = ISO_PITCHES.get(size, [0.5])
return [Metric3Dprinted.Designation(size, pitch) for pitch in pitches]

def threads(self, designation):
ts = []
Expand Down Expand Up @@ -119,7 +174,7 @@ def generate():
ET.SubElement(thread_element, "TapDrill").text = "{:.4g}".format(thread.tapDrill)

ET.indent(tree)
tree.write('3DPrintedMetricV3.xml', encoding='UTF-8', xml_declaration=True)
tree.write('3DPrintedMetricV4.xml', encoding='UTF-8', xml_declaration=True)


generate()
Binary file modified ss_fusion.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.