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.rhkb.cn/news/172400.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白嫖在线云服务器,免费在 linux 服务器使用 docker 。 附视频+附文档

白嫖在线云服务器,免费在 linux 服务器使用 docker 。 附视频附文档 文章目录 前言启动 Nginx 案例最后 视频:https://www.bilibili.com/video/BV1WN411W79V/ 国内互联网经过多年发展,单体应用已经无法支持我们的互联网业务,分布…

Python---练习:有一物,不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何?

案例: 有一物,不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何? 人话: 有一个数字,不知道具体是多少,用3去除剩2,用5去除剩3&#…

Spring Boot进阶(93):体验式教程:手把手教你整合Spring Boot和Zipkin

📣前言 分布式系统开发中,服务治理是一个比较重要的问题。为了更好地实现服务治理,需要解决服务跟踪问题,即如何对分布式系统中的服务进行监控和追踪。本文将介绍如何使用Zipkin进行服务跟踪,并结合Spring Boot进行整合…

Spring Cloud之微服务

目录 微服务 微服务架构 微服务架构与单体架构 特点 框架 总结 SpringCloud 常用组件 与SpringBoot关系 版本 微服务 微服务:从字面上理解即:微小的服务; 微小:微服务体积小,复杂度低,一个微服…

小程序如何设置首选配送公司

小程序的一个重要环节就是配送服务。为了提供更好的发货体验,避免商家总是要在众多的配送公司中选择想要,小程序支持设置首选配送。下面将具体介绍一下小程序如何设置。 在小程序管理员后台->配送设置->首选配送处,指定需要设置的首选…

2.MySQL的调控按钮——启动选项和系统变量

2.MySQL的调控按钮——启动选项和系统变量 1.启动选项和配置文件1.1 在命令行上使用选项1.2 配置文件中使用选项1.2.1 配置文件路径1.2.2 配置文件的内容1.2.3 特定 MySQL 版本的专用选项组1.2.4 配置文件的优先级1.2.5 同一个配置文件中多个组的优先级1.2.6 defaults-file 的使…

基于5G工业CPE打造智慧煤矿无人巡检监测应用

煤炭是我国重要的能源资源,对于煤炭的开采和利用也是我国重要的工业产业部分。得益于5G物联网技术的发展普及,煤矿场景也迎来智能化升级,实现了包括智能采掘、智能调度、无人运输、无人巡检等新型应用,极大提升了煤矿采运产业的效…

【软考】10.1 算法特性/时间复杂度/递归/分治/动态规划

《算法》 《时间复杂度》 n 的最高次项 渐进符号 算法复杂度 线性级 O(n):顺序查找对数级 O(logn):对半查找、快速查找、归并算法 《递归》 时间复杂度 《分治法》 《动态规划法》 适用于求全局最优解构建…

【华为HCIP | 职业认证考试】821每日一刷

个人名片: 🐼作者简介:一名大三在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零…

听GPT 讲Rust源代码--library/std(7)

题图来自 Programming languages: How Google is using Rust to reduce memory safety vulnerabilities in Android[1] File: rust/library/std/src/sys/unix/kernel_copy.rs 在Rust的标准库中,kernel_copy.rs文件位于sys/unix目录下,其主要作用是实现特…

IP地址与代理ip在网络安全中的关键作用

目录 前言 一、IP地址在网络安全中的作用 1、网络流量监视和分析 2、网络安全事件响应 3、网络安全检测和防御 二、代理IP在网络安全中的作用 1、流量过滤和清洗 2、匿名访问和保护隐私 3、实现全球化业务 三、IP地址和代理IP在网络安全中的应用案例 1、DDoS攻击 2…

消息队列中间件面试笔记总结RabbitMQ,Kafka,RocketMQ

文章目录 (一) Rabbit MQRabbitMQ 核心概念消息队列的作用Exchange(交换器)Broker(消息中间件的服务节点)如何保证消息的可靠性如何保证 RabbitMQ 消息的顺序性如何保证 RabbitMQ 高可用的?如何解决消息队列的延时以及过期失效问题消息堆积问…

react-高阶组件

一、什么是高阶组件 高阶组件( Higher-Order Component,HOC )是一个以组件作为参数,返回一个新组件的函数。 高阶组件最大的特点就是复用组件逻辑高阶组件本身并不是 React 的 API,而是React组件的一种设计模式&…

js中HTMLCollection如何循环

//不带索引 let divCon document.getElementsByClassName("el-form-item__error"); if (divCon.length > 0) {for (var item of divCon) {console.log("打印:", item.innerText);} }//带有索引 let divCon document.getElementsByClassNam…

【JAVA学习笔记】46 - (43)第十一章作业

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/homework11 1.枚举类 1.创建一个Color枚举类 2.有RED,BLUE,BL ACK,YELLOW,GREEN这个五个枚举值/对象: 3. Color有三 个属性redValue, greenValue, blueValue, 4.创建构…

2023高频前端面试题-http

1. HTTP有哪些⽅法? HTTP 1.0 标准中,定义了3种请求⽅法:GET、POST、HEAD HTTP 1.1 标准中,新增了请求⽅法:PUT、PATCH、DELETE、OPTIONS、TRACE、CONNECT 2. 各个HTTP方法的具体作用是什么? 方法功能G…

fatfs对于exFAT的使用

f_mkfs的介绍 f_mkfs是FatFs库中的一个函数,用于在指定的磁盘上执行格式化操作。它可以用于创建新的文件系统或重新格式化已有的文件系统。 函数原型如下: FRESULT f_mkfs (const TCHAR* path, // 磁盘路径BYTE opt, // 格式化选项DWORD a…

Anaconda下载和安装

1.概述 1)包含conda:conda是一个环境管理器,其功能依靠conda包来实现,该环境管理器与pip类似。 2)安装大量工具包:Anaconda会自动安装一个基本的python,该python的版本Anaconda的版本有关。该…

ETL工具Kettle

1 Kettle的基本概念 一个数据抽取过程,主要包括创建一个作业(Job),每个作业由一个或多个作业项(Job Entry)和连接作业项的作业跳(Job Hop)组成。每个作业项可以是一个转换&#xff…

C语言 每日一题 PTA 10.27 day5

1.高速公路超速处罚 按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10 % 则处200元罚款; 若达到或超出50 % ,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。 输入格式 : 输入在一行中给出2个正…