在Python里应用Openscad实现3D建模(修改简化版)-3

–SolidPython学习笔记3

  • –form https://github.com/SolidCode/SolidPython

参考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 * Pdef thread_sec(Dmaj, P, length):#Dmaj:主径,P:螺距# 公式1c = P3([[0, 0, 0], [0, 0,P / 2], [Dmaj / 2 - 7/8 *H, 0, P / 2], [Dmaj / 2 - 7/8 *H, 0, P * 3 / 8], [Dmaj / 2, 0, 1 / 16 * H], [Dmaj / 2, 0, 0]], [[0, 1, 2, 3, 4, 5]])c += Mi([0,0,1])(c)s = 0for i in range(0, length//P):s += Tz(i*P)(c)return(s)
c = thread_sec(Dmaj, P, length)# scad_render_to_file(c,"hull.scad")
c

nutsnbolts 标准化解决方案

该方案主要包括:

  • 标准库data-metric_cyl_head_bolts.scad

  • 函数库data-access.scad

  • 主程序cyl_head_bolt.scad

  • 还有材料模块等

我们先Py一下thread:

from solid import *
from solid.utils import *
import viewscad
r = viewscad.Renderer()
def thread(P=1, #螺距,length=10, #螺丝的总长,Rmaj=5, #外径,sn = 36):angle = 2 * pi/snPo = []for i in range(0,sn):j = iif i > round(sn / 2):j = sn - ir = Rmaj - j / sn * Pp = [r * cos( i* angle), r * sin(i * angle)]Po.append(p)Fa = polygon(Po)p3 = linear_extrude(height = length, convexity = 10, twist = -360.0*length/P, center = True)(Fa)#     print(scad_render(c))# r.render(c)
#     print(Pt)return(p3)
c = thread()c

c = Pr()(Ry(90)(c))#截面
c

上面这个结果( 这段代码费了小白一周时间,小白就是小白呀。。。),和ISO标准比较,从轮廓上并不完全一致,所以只能算是个伪标准螺纹库,接下来我们做个真正的标准螺纹

方案二:糊出来 Solution Two: Hull from sectors

该方法来自OpenScad library. Threads for screws and nuts V1

  • 首先做出一侧的纵截面
  • 移动及旋转出螺纹的轮廓
  • 利用hull()形成螺纹
  • 最后,延长复制出整个螺纹。

当然了,我对原代码进行了优化并做了部分修改。

c = 0
for k in range(0,180+360//sn,360//sn):c += Tz(k*P/360)(Rz(k)(P3([[0,0,P/2],[Rmaj - 7/8*H,0,P/2],[Rmaj,0,P/16],[Rmaj,0,-P/16], [Rmaj - 7/8*H,0,-P/2],[0,0,-P/2]], [[0,1,2,3,4,5]])))#用自己做的截面,
c = hull()(c)
c += R(0,180,180)(Ty(.001)(c))
s = 0
for v in range(0,length//P+1):s += Tz(v*P)(c)
s += Cy(Rmaj-5/8*H, length)#内径
s *= Cy(2*Rmaj, length)s


s = Pr()(Ry(90)(s))
s

hull很慢呀。。。看上去,还行。。。以上

在Python里应用Openscad实现3D建模(修改简化版)之3D螺纹建模初探2相关推荐

  1. 在Python里应用Openscad实现3D建模(修改简化版)之3D螺纹建模初探1

    在Python里应用Openscad实现3D建模(修改简化版)-2 –SolidPython学习笔记2 –form https://github.com/SolidCode/SolidPython 参 ...

  2. python三维建模和cad比较_【3D建模】CAD与3D建模软件:有什么区别?

    当有人问以上问题时,每个论坛上都有数百个答案:我应该选择哪种3D软件?人们总是列出他们使用的3D软件,但要为你所zuo做的项目选择最佳软件其实并不容易. 首先,你需要知道3D软件分为两类:CAD和3D ...

  3. 3d游戏建模基础教程:3D建模应用领域和四种常用建模方法

    3D建模应用领域 影视动画表现 电影行业将它们用于活动的任务.物体以及现实电影:视频游戏产业将它们作为计算机与视频游戏中的资源,通过设计稿,建模,最终完成. 游戏美术表现 多用于游戏类建模,包括:角色 ...

  4. 中望3D Overdrive内核技术之“容差建模”

    一.引言: 现代社会人都向往美好,然而容颜没有十全十美的,这也是为什么众多女性朋友选择"美容化妆"出街:又或者通过手机美颜.视频滤镜等效果出镜.可见化妆术.美颜术的重要性. 同样的 ...

  5. 3D建模怎么学,3D游戏建模怎么学

    3D建模怎么学,3D游戏建模怎么学 第一 :学3d建模需要美术基础,但是不代表现在就需要美术基础. 很多朋友想学3d建模,但是遗憾的是,圈内人总是对他们说,学3d建模需要有美术基础,你们有吗?然后很多 ...

  6. 10个常用的3D建模软件,作为3D建模的软件东西很杂很碎,还需多练习才最重要

    很多人都会好奇,电脑是怎么将 手绘的2D图形变成3D的实际物品 的?究竟是什么神奇魔法能够瞬间将我们的想法变成现实的呢? 今天来和大家介绍下工业设计师经常会用到的10个3D建模软件. Solidwor ...

  7. Maya打造3D真实热带雨林场景模型-3D建模场景模型教程

    此教程仅供参考.(交流的是思路,初学者想了解更多参数含义) 最终效果,如图所示: 软.硬件配备: (01)软件:Maya8.5 3DSMAX PS AE (02)硬件:工作站 涉及技术点: (03)P ...

  8. 3D建模:0基础如何学习建模及行业应用范围

    最近很多人问我如何0基础学习3D建模,以及3D建模行业的前景如何. 今天统一给大家写一篇行业介绍,以及3D建模可以应用到哪些领域. 一.应用范围 先解释一下什么是3D建模: 总的来说,3D是一种视觉的 ...

  9. python如何多行输出_python换行输出 Python里具体怎么用\n换行输出一个数字?

    python里 如何把每打印10个数就换行的实现 print("每输出十个数字换行,共计输出100个:")for num in range(1,100):#循环一百次 print( ...

最新文章

  1. 【Python】挑战SQL:图解Pandas的数据合并merge
  2. 如何高效学习Java?本文给你一些建议!
  3. VNC怎么和宿主机共享粘贴板(整理)
  4. 51单片机之特殊功能寄存器SFR
  5. php注册登录模板,Phpcms V9 管理后台登陆及会员注册登录模板的修改方法
  6. 仿真器和模拟器的区别是什么?
  7. 【渝粤教育】国家开放大学2018年春季 0692-21T化工设备机械基础 参考试题
  8. Android画布和图形绘制---Canvas and Drawables
  9. 台达b2伺服modbus通讯_台达伺服ASDA-B2使用手册-简体最新.pdf
  10. 小胖月安卓版,随机选号、叫号功能,互动功能
  11. java实现时间轮定时器_基于侵入式链表的时间轮定时器实现
  12. 上帝掷骰子吗:量子物理史话
  13. 了解建模三大软件:3Dmax、Maya、zbrush
  14. Android捕获home按键 以及实体键捕获
  15. 用C语言写的学生管理系统,C语言实现简单的学生成绩管理系统
  16. 2021年安全生产模拟考试(全国特种作业操作证电工作业-电气试验模拟考试题库一)安考星
  17. YOLOV5各结构文件的功能作用
  18. C语言qsort快速排序函数详解
  19. 运行html后电脑不能上网了,路由器安装后电脑无法上网解决办法
  20. linux查找权限为755的文件,linux系统文件夹644、755、777权限设置详解

热门文章

  1. 两款网络分析工具Sniffer和Wireshark的比较
  2. 盘点现在黑客常用的十种技术
  3. Win系统 - 手动设置开机启动项
  4. python文件打开方式
  5. 用python写 祝你生日快乐英文_生日快乐 英文的祝福语
  6. Java常用方法 总结
  7. C++推箱子项目(带图带资料)
  8. 数论之求质数的几种方法
  9. Google hack常用搜索语法
  10. 关于盗版的简单法律知识