在Python里应用Openscad实现3D建模(修改简化版)-3
–SolidPython学习笔记3
参考Parkinbotshortcuts.scad做了部分修改使得代码更为简洁易读
以下是对solidpython的readme的学习笔记(其中的部分code进行了简化):
3D螺纹建模初探2
絮絮叨叨
-
在初探1中我们初步实现了螺纹的3D建模
-
还通过fig动态演示了建模过程,代码有点啰嗦,还需要优化
-
接下来,我们的任务是实现标准化定制,和非标准化定制
-
先从标准化定制开始吧,首先学习基础知识
ISO261基础知识
–from ISO metric screw thread
基本轮廓
-
所有ISO公制螺纹的轮廓
-
ISO通用公制螺纹(“M”系列螺纹)的设计原则在国际标准ISO 68-1中定义。[2]每个线程的特征在于其主径_D_(图中的_D_maj)及其螺距_P_。ISO公制螺纹由对称的V形螺纹组成。在螺纹轴的平面中,V的侧面彼此具有60°的角度。螺纹深度为0.614×螺距。从型材上切下V形高度_H_的最外1/8和最内1/4。
-
高度H和螺距P之间的关系使用以下等式求出,其中θ是线程的夹角的一半,即30度:
\begin{aligned}H = \frac {1}{2\tan\theta} \cdot P = \frac {\sqrt 3}{2}\cdot P \approx 0.866 \cdot P\end{aligned}
<公式1>
\begin{aligned}P = 2\tan\theta\cdot H = \frac{2}{\sqrt 3} \cdot H \approx 1.155 \cdot H\end{aligned}
<公式2>
-
在外(阳)螺纹(例如,在螺栓上),大直径Dmaj和小直径Dmin限定螺纹的最大尺寸。这意味着外螺纹必须在Dmaj处平坦,但可以在小直径Dmin以下圆整。相反,在内(阴)螺纹(例如,在螺母中)中,主要和次要直径是最小尺寸;因此,螺纹轮廓必须在Dmin处平坦,但可能会超出Dmaj。
-
小直径Dmin和有效节圆直径Dp来自大直径和螺距
\begin{aligned}D_{\text{min}}=D_{\text{maj}}-2\cdot {\frac {5}{8}}\cdot H=D_{\text{maj}}-{\frac {5{\sqrt {3}}}{8}}\cdot P\approx D_{\text{maj}}-1.082532\cdot P\end{aligned}
<公式3>
\begin{aligned}D_{\text{p}}=D_{\text{maj}}-2\cdot {\frac {3}{8}}\cdot H=D_{\text{maj}}-{\frac {3{\sqrt {3}}}{8}}\cdot P\approx D_{\text{maj}}-0.649519\cdot P\end{aligned}
<公式4>
术语
- 公制ISO螺纹用字母M表示,后跟公称直径D的值(外螺纹的最大螺纹直径和内螺纹的最小直径)和螺距P,均以毫米表示,用连字符分隔标志, - (例如,M8-1.25)。如果螺距是ISO 261或ISO 262中列出的通常使用的“粗略”螺距,则可以省略它(例如,M8)。机器螺钉或螺栓的长度由以下x表示,长度以毫米表示(例如,M8-1.25×30或M8×30)。如果需要,ISO 965-1中定义的公差等级可以附加到这些名称(例如,外部线程中的M500-6g)。外部线程由小写字母g或h指定。内部线程由大写字母G或H指定。
标准截面
# 先做个截面
from solid import *
from solid.utils import *
import viewscad
import os
import sys
import numpy as np
import pandas as pd
from decimal import *
r = viewscad.Renderer(openscad_exec='/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD')
Dmaj = 10
Rmaj = Dmaj / 2
P = 1
length = 10
#螺丝的总长
sn = 36 #圆段
H = .866 * P
def thread_sec(Dmaj, P, length):#Dmaj:主径,P:螺距