python二次开发Solidworks:齿轮生成器

目录

1、参数

2、手动建模

2.1方程式驱动曲线画渐开线

2.2画基圆、齿根圆、分度圆和齿顶圆

2.3画单个齿廓

2.4以齿厚拉伸基圆草图

2.5以齿厚拉伸单齿廓草图

2.6阵列齿数个单齿

3、python自动化建模

4、总结


1、参数

模数 "m" = 2

齿数"z"= 50

压力角 "a"= 20

分度圆直径 "d"= "m" * "z"

齿顶圆直径 "da"= ( "z" + 2 ) * "m"

齿根圆直径 "df"= ( "z" - 2.5 ) * "m"

基圆直径 "db"= "m" * "z" * cos ( "a" )

基圆半径 "rb"= "db" / 2

分度圆齿厚 "s"= pi * "m" / 2

齿厚 "B"= 0.3 * "d"

齿根圆角 "r"= 0.38 * "m"

2、手动建模

2.1方程式驱动曲线画渐开线

在上视基准面构建草图1,画渐开线齿廓

xt="rb"*cos(t)+"rb"*t*sin(t)

yt="rb"*sin(t)-"rb"*t*cos(t)

t1=0

t2=pi/4

2.2画基圆、齿根圆、分度圆和齿顶圆

在上视基准面构建草图2,以构造线画基圆、齿根圆、分度圆和齿顶圆

2.3画单个齿廓

在上视基准面构建草图3,对草图1的渐开线转换实体引用,对草图2基圆、齿根圆、分度圆和齿顶圆转换实体引用,画出齿宽中心构造线进行约束,然后裁剪掉齿顶圆外的部分渐开线,再对齿根圆与渐开线作圆角,最后以齿宽中心构造线为对称轴对称另一侧并画出齿底圆部分。

2.4以齿厚拉伸基圆草图

在上视基准面构建草图4,以齿根圆尺寸画圆,约束后退出草图,以齿厚为尺寸拉伸凸台

2.5以齿厚拉伸单齿廓草图

选择草图3,以齿厚为尺寸拉伸凸台

2.6阵列齿数个单齿

3、python自动化建模

#导入win32com.client库,并将其简写为win32以方便后续使用
import win32com.client as win32
import pythoncom
import numpy as np
m=2/1000
z=50
a=20*np.pi/180
d=m*z
da= (z + 2)* m
df= (z - 2.5 ) * m
db= m*z* np.cos(a)
rb= db / 2
s= np.pi * m / 2
B= 0.3 * d
r= 0.38 * m
#使用Dispatch函数创建一个SolidWorks应用程序的实例。这里,"sldworks.application"是SolidWorks应用程序的COM对象标识符
swApp = win32.Dispatch("sldworks.application")
#使得SolidWorks应用程序可见。
swApp.Visible=True
Nothing = win32.VARIANT(pythoncom.VT_DISPATCH, None)
swSheetWidth = 0
swSheetHeight = 0
Part = swApp.NewDocument(r"C:\ProgramData\SolidWorks\SOLIDWORKS 2018\templates\gb_part.prtdot", 0, swSheetWidth, swSheetHeight)
#sketch1 spline
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch(True)
Part.ClearSelection2(True)
equationDriveCurve = Part.SketchManager.CreateEquationSpline2(f"{1000*rb}*cos(t)+{1000*rb}*t*sin(t)", f"{1000*rb}*sin(t)-{1000*rb}*t*cos(t)", "", "0", "pi/4", False, 0, 0, 0, True, True)
Part.SketchManager.InsertSketch(True)
#sketch2 4circle
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch(True)
skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*db)
skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*df)
skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*d)
skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*da)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", -4.17913430963818E-02, 4.06570904526804E-03, 0, False, 0, Nothing, 0)
myDisplayDim = Part.AddDimension2(-0.129688100551224, 0, 4.06570904526804E-03)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc2", "SKETCHSEGMENT", -7.00577012206262E-02, 5.61455058632253E-03, 0, False, 0, Nothing, 0)
myDisplayDim = Part.AddDimension2(-0.145176515961769, 0, 5.2273402010589E-03)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc3", "SKETCHSEGMENT", -8.74821685574891E-02, 4.84012981579529E-03, 0, False, 0, Nothing, 0)
myDisplayDim = Part.AddDimension2(-0.160664931372314, 0, 9.09944405369512E-03)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", -0.108778739746988, 1.35523634842269E-03, 0, False, 0, Nothing, 0)
myDisplayDim = Part.AddDimension2(-0.183123133717604, 0, 2.12965711894994E-03)
Part.ClearSelection2(True)
myDimension = Part.Parameter("D1@草图2")
myDimension.SystemValue = db
myDimension = Part.Parameter("D3@草图2")
myDimension.SystemValue = df
myDimension = Part.Parameter("D2@草图2")
myDimension.SystemValue = d
myDimension = Part.Parameter("D4@草图2")
myDimension.SystemValue = da
Part.SketchManager.InsertSketch(True)
#sketch3
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch(True)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Spline2@草图1", "EXTSKETCHSEGMENT", 5.68109938451896E-02, 4.85306098373878E-03, 0, False, 0, Nothing, 0)
boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
Part.ClearSelection2(True)
skSegment = Part.SketchManager.CreateCenterLine(0, 0, 0, 0.076976, 0.012754, 0)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc2@草图2", "EXTSKETCHSEGMENT", 4.98812101498907E-02, -3.44454263762836E-03, 0, False, 0, Nothing, 0)
boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc2", "SKETCHSEGMENT", 4.96566221826677E-02, 0, 5.84977550063237E-03, False, 2, Nothing, 0)
boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
boolstatus = Part.Extension.SelectByID2("Point9", "SKETCHPOINT", 4.93275253639167E-02, 8.17283558333082E-03, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Point10", "SKETCHPOINT", 4.99944465783859E-02, 7.45192136917484E-04, 0, True, 0, Nothing, 0)
myDisplayDim = Part.AddDimension2(7.32063894288394E-02, 0, -2.05367474294104E-03)
Part.ClearSelection2(True)
myDimension = Part.Parameter("D1@草图3")
myDimension.SystemValue = s/2
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc1@草图2", "EXTSKETCHSEGMENT", 4.69732428651685E-02, -1.05103745408897E-03, 0, False, 0, Nothing, 0)
boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.69719073506605E-02, 0, -1.09337721747326E-03, False, 2, Nothing, 0)
boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 4.79822046708633E-02, 3.17508241647045E-03, -6.01947737600295E-05, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.68002780288081E-02, 3.17508241647046E-03, 8.7549715120034E-04, True, 0, Nothing, 0)
skSegment = Part.SketchManager.CreateFillet(r, 1)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc4@草图2", "EXTSKETCHSEGMENT", 5.19985313273173E-02, -3.90819398187038E-04, 0, False, 0, Nothing, 0)
boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc7", "SKETCHSEGMENT", 5.19429524769286E-02, 0, 2.43509506581086E-03, False, 2, Nothing, 0)
boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 5.65326491634615E-02, 0, -4.6272000856053E-03, False, 2, Nothing, 0)
boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 5.27616245715102E-02, 0, -2.05666338249153E-03, False, 2, Nothing, 0)
boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 5.57072998941891E-02, 0.011, -2.62243109097623E-03, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Point22", "SKETCHPOINT", 5.19442248953657E-02, 2.40779982965117E-03, 0, True, 0, Nothing, 0)
Part.SketchAddConstraints("sgFIXED")
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc5", "SKETCHSEGMENT", 4.70597163100455E-02, 0.011, 3.38711166624456E-04, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 4.86320042344352E-02, 0.011, -3.16408801871271E-04, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Arc7", "SKETCHSEGMENT", 5.20648328693528E-02, 0.011, -1.83628712878136E-03, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 4.81079082596386E-02, 0.011, -2.25556390861863E-03, True, 0, Nothing, 0)
Part.SketchMirror()
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.66277826249411E-02, 0, -5.7797440583439E-03, False, 2, Nothing, 0)
boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.68500779201268E-02, 0.011, -3.43477985191093E-03, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 4.87106186306547E-02, 0.011, -2.30797350609828E-03, True, 0, Nothing, 0)
Part.SketchMirror()
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc2", "SKETCHSEGMENT", 4.99783574598799E-02, 0, -1.47098117339316E-03, False, 2, Nothing, 0)
boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
Part.SketchManager.InsertSketch(True)
#sketch4
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch(True)
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("Arc1@草图2", "EXTSKETCHSEGMENT", 4.69092540638955E-02, -2.66685360845074E-03, 0, False, 0, Nothing, 0)
boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
Part.ClearSelection2(True)
Part.SketchManager.InsertSketch(True)

boolstatus = Part.Extension.SelectByID2("草图4", "SKETCH", 0, 0, 0, False, 4, Nothing, 0)
myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0,B, 0.01, False, False, False, False, 1.74532925199433E-02, 1.74532925199433E-02, False, False, False, False, True, True, True, 0, 0, False)
Part.SelectionManager.EnableContourSelection = False
Part.ClearSelection2(True)

boolstatus = Part.Extension.SelectByID2("草图3", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, B, 0.01, False, False, False, False, 1.74532925199433E-02, 1.74532925199433E-02, False, False, False, False, True, True, True, 0, 0, False)
Part.SelectionManager.EnableContourSelection = False
Part.ClearSelection2(True)
boolstatus = Part.Extension.SelectByID2("凸台-拉伸2", "BODYFEATURE", 0, 0, 0, False, 4, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("", "FACE", 1.00069959505049E-02, 2.39622182303378E-02, 4.59065963226521E-02, True, 1, Nothing, 0)
myFeature = Part.FeatureManager.FeatureCircularPattern4(z, 6.2831853071796, False, "NULL", False, True, False)
Part.ClearSelection2(True)
Part.ShowNamedView2("*上下二等角轴测", 8)
Part.ViewZoomtofit2()

4、总结

自动化建模只需要两个参数,即模数m和齿数z,但是更改这两个参数后无法成功,原因是有些API受到尺寸的影响而失效,需要解决这个问题才能实现任意更改参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/106522.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三代自动驾驶系统及主流科技公司自动驾驶技术方案简介

截止目前,按技术特点,自动驾驶技术大致经历了三代发展:第一代自动驾驶技术以后融合感知技术,高精度地图,基于惯导、GPS定位系统,预测模块,基于优化、搜索的规控等组成。第一代比较成熟的自动驾驶…

易基因: Nature Biotech:番茄细菌性青枯病的噬菌体联合治疗|国人佳作

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 生物防治是利用细菌接种剂来改变植物根际微生物群落的组成,但在以往研究中存在有接种的细菌在根际建立不良,与本地微生物组争夺资源,干扰本地微生物的…

微信小程序设计之主体文件app-ts/js

一、新建一个项目 首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

Spring Boot中RedisTemplate的使用

当前Spring Boot的版本为2.7.6&#xff0c;在使用RedisTemplate之前我们需要在pom.xml中引入下述依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><vers…

ToLua使用原生C#List和Dictionary

ToLua是使用原生C#List 介绍Lua中使用原生ListC#调用luaLua中操作打印测试如下 Lua中使用原生DictionaryC#调用luaLua中操作打印测试如下 介绍 当你用ToLua时C#和Lua之间肯定是会互相调用的&#xff0c;那么lua里面使用List和Dictionary肯定是必然的&#xff0c;在C#中可以调用…

最优秀的完整的数字音频工作站水果音乐FL Studio21.1.1.3750中文解锁版

FL Studio21.1.1.3750中文解锁版简称 FL 21&#xff0c;全称 Fruity Loops Studio 21&#xff0c;因此国人习惯叫它"水果"。目前最新版本是FL Studio21.1.1.3750中文解锁版版本&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先…

【代码随想录】算法训练计划03

1、203. 移除链表元素 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 思路&#xf…

分组卷积的思想神了

大家好啊&#xff0c;我是董董灿。 最近&#xff0c;分组卷积帮我解决了一个大忙&#xff0c;事情是这样的。 这几天遇到一个头疼的问题&#xff0c;就是要在某一芯片上完成一个神经网络的适配&#xff0c;这个神经网络中卷积居多&#xff0c;并且有一些卷积的通道数很大&…

2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛B题

赛道B&#xff1a;电商零售商家需求预测及库存优化问题 电商平台存在着上千个商家&#xff0c;他们会将商品货物放在电商配套的仓库&#xff0c;电商平台会对这些货物进行统一管理。通过科学的管理手段和智能决策&#xff0c;大数据智能驱动的供应链可以显著降低库存成本&…

贪心算法学习——加油站

目录 一&#xff0c;题目 二&#xff0c;题目接口 三&#xff0c;解题思路及其代码 一&#xff0c;题目 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油…

算法通关村第二关-黄金挑战K个一组反转

大家好我是苏麟 , 今天带来K个一组反转 , K个一组反转 可以说是链表中最难的一个问题了&#xff0c;每k 个节点一组进行翻转&#xff0c;请你返回翻转后的链表。k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后…

【备考网络工程师】如何备考2023年网络工程师之上午常见考点篇(上)

目录 写在前面涉及知识点一、香农定理与奈奎斯特定理问题1.1 香农定理1.2 尼奎斯特定理 二、E1与T1问题三、数据传输延迟问题3.1 对于电缆3.2 对于卫星 四、数字化技术PCM计算问题五、CSMA/CD以太帧最小帧长计算问题六、CSMA/CD考点汇总七、CSMA/CA考点汇总八、各协议注意事项总…

KV STUDIO的安装与实践(一)

目录 什么是KV STUDIO&#xff1f; 如何安装KV STUDIO&#xff1f; 如何学习与使用KV STUDIO&#xff08;在现实中的应用&#xff09;&#xff1f; 应用一&#xff08;在现实生活中机器内部plc的读取与替换&#xff09; 读取 KV STUDIO实现显示器的检测&#xff01;&#…

WebGL笔记:矩阵的变换之平移的实现

矩阵的变换 变换 变换有三种状态&#xff1a;平移、旋转、缩放。当我们变换一个图形时&#xff0c;实际上就是在移动这个图形的所有顶点。解释 webgl 要绘图的话&#xff0c;它是先定顶点的&#xff0c;就比如说我要画个三角形&#xff0c;那它会先把这三角形的三个顶点定出来…

c++ deque 的使用

目录 1. deque 的介绍 2. deque 底层原理 3. deque 的迭代器 4. deque 的接口使用 5. deque 和 vector&#xff0c;list 的比较 1. deque 的介绍 下面是 deque 的介绍&#xff0c;来自于&#xff1a;deque - C Reference (cplusplus.com) 的翻译&#xff0c;您可以不用…

【C++初阶】类和对象——构造函数析构函数拷贝构造函数

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C头疼记 目录 前言 类的6个默认成员函数 构造函数 概念 构造函数的特性 析构函数 概念 析构函数特性 拷贝构造函数 概念 拷贝构造函数特性 总结 前言 上篇文章我们对于C中的类有了初步的认识和…

QGIS 捕捉

QGIS 捕捉 0 前言1 捕捉工具的用法 0 前言 在进行矢量编辑的时候&#xff0c;需要直接编辑各个折点&#xff0c;为了方便我们的鼠标能顺利选中我们需要的节点&#xff0c;需要启动捕捉工具。 而捕捉工具的单位为像素&#xff0c;这个可以理解为捕捉工具的灵敏度。捕捉也可以被…

【C++初阶】类与对象(一)

目录 1、初识面向对象思想2、类 struct2.1 C中的struct及使用 3、类 class3.1 类的定义3.2 类的访问限定符3.2.1 访问限定符是什么3.2.2 访问限定符的使用3.2.3 访问限定符的使用规范3.2.4 访问限定符与封装 3.3 类做声明和定义分离3.3.1 声明和定义分离3.3.2 在函数声明的地方…

升级 Xcode 15模拟器 iOS 17.0 Simulator(21A328) 下载失败

升级 IDE Xcode 15 后本地模拟器 Simulator 全被清空,反复重新尝试 Get 下载频频因网络异常断开而导致失败 ... 注:通过 Get 方式下载一定要保证当前网络环境足够平稳,网络环境不好的情况下该方法几乎成不了 解决办法 Get 方式行不通可以尝试通过 官网 途径先下载 模拟器安装包…

移动端之Unity嵌入Android项目开发

目录 前言1 搭建开发环境2 创建Unity项目 2.1 新建项目2.2 Unity构建配置2.3 Android环境相关配置2.4 导出Unity库文件3 创建Android项目 3.1 新建Android项目3.2 Android环境相关配置3.2 导入Unity相关的库3.3 Android中跳转到Unity视图4 进阶扩展 4.1 包体积优化 4.1.1 mono…