• 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自动化建模

    1. #导入win32com.client库,并将其简写为win32以方便后续使用
    2. import win32com.client as win32
    3. import pythoncom
    4. import numpy as np
    5. m=2/1000
    6. z=50
    7. a=20*np.pi/180
    8. d=m*z
    9. da= (z + 2)* m
    10. df= (z - 2.5 ) * m
    11. db= m*z* np.cos(a)
    12. rb= db / 2
    13. s= np.pi * m / 2
    14. B= 0.3 * d
    15. r= 0.38 * m
    16. #使用Dispatch函数创建一个SolidWorks应用程序的实例。这里,"sldworks.application"是SolidWorks应用程序的COM对象标识符
    17. swApp = win32.Dispatch("sldworks.application")
    18. #使得SolidWorks应用程序可见。
    19. swApp.Visible=True
    20. Nothing = win32.VARIANT(pythoncom.VT_DISPATCH, None)
    21. swSheetWidth = 0
    22. swSheetHeight = 0
    23. Part = swApp.NewDocument(r"C:\ProgramData\SolidWorks\SOLIDWORKS 2018\templates\gb_part.prtdot", 0, swSheetWidth, swSheetHeight)
    24. #sketch1 spline
    25. Part.ClearSelection2(True)
    26. boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    27. Part.SketchManager.InsertSketch(True)
    28. Part.ClearSelection2(True)
    29. 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)
    30. Part.SketchManager.InsertSketch(True)
    31. #sketch2 4circle
    32. Part.ClearSelection2(True)
    33. boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    34. Part.SketchManager.InsertSketch(True)
    35. skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*db)
    36. skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*df)
    37. skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*d)
    38. skSegment = Part.SketchManager.CreateCircleByRadius(0, 0, 0, 10*da)
    39. Part.ClearSelection2(True)
    40. boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", -4.17913430963818E-02, 4.06570904526804E-03, 0, False, 0, Nothing, 0)
    41. myDisplayDim = Part.AddDimension2(-0.129688100551224, 0, 4.06570904526804E-03)
    42. Part.ClearSelection2(True)
    43. boolstatus = Part.Extension.SelectByID2("Arc2", "SKETCHSEGMENT", -7.00577012206262E-02, 5.61455058632253E-03, 0, False, 0, Nothing, 0)
    44. myDisplayDim = Part.AddDimension2(-0.145176515961769, 0, 5.2273402010589E-03)
    45. Part.ClearSelection2(True)
    46. boolstatus = Part.Extension.SelectByID2("Arc3", "SKETCHSEGMENT", -8.74821685574891E-02, 4.84012981579529E-03, 0, False, 0, Nothing, 0)
    47. myDisplayDim = Part.AddDimension2(-0.160664931372314, 0, 9.09944405369512E-03)
    48. Part.ClearSelection2(True)
    49. boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", -0.108778739746988, 1.35523634842269E-03, 0, False, 0, Nothing, 0)
    50. myDisplayDim = Part.AddDimension2(-0.183123133717604, 0, 2.12965711894994E-03)
    51. Part.ClearSelection2(True)
    52. myDimension = Part.Parameter("D1@草图2")
    53. myDimension.SystemValue = db
    54. myDimension = Part.Parameter("D3@草图2")
    55. myDimension.SystemValue = df
    56. myDimension = Part.Parameter("D2@草图2")
    57. myDimension.SystemValue = d
    58. myDimension = Part.Parameter("D4@草图2")
    59. myDimension.SystemValue = da
    60. Part.SketchManager.InsertSketch(True)
    61. #sketch3
    62. Part.ClearSelection2(True)
    63. boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    64. Part.SketchManager.InsertSketch(True)
    65. Part.ClearSelection2(True)
    66. boolstatus = Part.Extension.SelectByID2("Spline2@草图1", "EXTSKETCHSEGMENT", 5.68109938451896E-02, 4.85306098373878E-03, 0, False, 0, Nothing, 0)
    67. boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
    68. Part.ClearSelection2(True)
    69. skSegment = Part.SketchManager.CreateCenterLine(0, 0, 0, 0.076976, 0.012754, 0)
    70. Part.ClearSelection2(True)
    71. boolstatus = Part.Extension.SelectByID2("Arc2@草图2", "EXTSKETCHSEGMENT", 4.98812101498907E-02, -3.44454263762836E-03, 0, False, 0, Nothing, 0)
    72. boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
    73. Part.ClearSelection2(True)
    74. boolstatus = Part.Extension.SelectByID2("Arc2", "SKETCHSEGMENT", 4.96566221826677E-02, 0, 5.84977550063237E-03, False, 2, Nothing, 0)
    75. boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
    76. boolstatus = Part.Extension.SelectByID2("Point9", "SKETCHPOINT", 4.93275253639167E-02, 8.17283558333082E-03, 0, False, 0, Nothing, 0)
    77. boolstatus = Part.Extension.SelectByID2("Point10", "SKETCHPOINT", 4.99944465783859E-02, 7.45192136917484E-04, 0, True, 0, Nothing, 0)
    78. myDisplayDim = Part.AddDimension2(7.32063894288394E-02, 0, -2.05367474294104E-03)
    79. Part.ClearSelection2(True)
    80. myDimension = Part.Parameter("D1@草图3")
    81. myDimension.SystemValue = s/2
    82. Part.ClearSelection2(True)
    83. boolstatus = Part.Extension.SelectByID2("Arc1@草图2", "EXTSKETCHSEGMENT", 4.69732428651685E-02, -1.05103745408897E-03, 0, False, 0, Nothing, 0)
    84. boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
    85. Part.ClearSelection2(True)
    86. boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.69719073506605E-02, 0, -1.09337721747326E-03, False, 2, Nothing, 0)
    87. boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
    88. Part.ClearSelection2(True)
    89. boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 4.79822046708633E-02, 3.17508241647045E-03, -6.01947737600295E-05, False, 0, Nothing, 0)
    90. boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.68002780288081E-02, 3.17508241647046E-03, 8.7549715120034E-04, True, 0, Nothing, 0)
    91. skSegment = Part.SketchManager.CreateFillet(r, 1)
    92. Part.ClearSelection2(True)
    93. boolstatus = Part.Extension.SelectByID2("Arc4@草图2", "EXTSKETCHSEGMENT", 5.19985313273173E-02, -3.90819398187038E-04, 0, False, 0, Nothing, 0)
    94. boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
    95. Part.ClearSelection2(True)
    96. boolstatus = Part.Extension.SelectByID2("Arc7", "SKETCHSEGMENT", 5.19429524769286E-02, 0, 2.43509506581086E-03, False, 2, Nothing, 0)
    97. boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
    98. boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 5.65326491634615E-02, 0, -4.6272000856053E-03, False, 2, Nothing, 0)
    99. boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
    100. boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 5.27616245715102E-02, 0, -2.05666338249153E-03, False, 2, Nothing, 0)
    101. boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
    102. boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 5.57072998941891E-02, 0.011, -2.62243109097623E-03, False, 0, Nothing, 0)
    103. boolstatus = Part.Extension.SelectByID2("Point22", "SKETCHPOINT", 5.19442248953657E-02, 2.40779982965117E-03, 0, True, 0, Nothing, 0)
    104. Part.SketchAddConstraints("sgFIXED")
    105. Part.ClearSelection2(True)
    106. boolstatus = Part.Extension.SelectByID2("Arc5", "SKETCHSEGMENT", 4.70597163100455E-02, 0.011, 3.38711166624456E-04, False, 0, Nothing, 0)
    107. boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 4.86320042344352E-02, 0.011, -3.16408801871271E-04, True, 0, Nothing, 0)
    108. boolstatus = Part.Extension.SelectByID2("Arc7", "SKETCHSEGMENT", 5.20648328693528E-02, 0.011, -1.83628712878136E-03, True, 0, Nothing, 0)
    109. boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 4.81079082596386E-02, 0.011, -2.25556390861863E-03, True, 0, Nothing, 0)
    110. Part.SketchMirror()
    111. Part.ClearSelection2(True)
    112. boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.66277826249411E-02, 0, -5.7797440583439E-03, False, 2, Nothing, 0)
    113. boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
    114. Part.ClearSelection2(True)
    115. boolstatus = Part.Extension.SelectByID2("Arc4", "SKETCHSEGMENT", 4.68500779201268E-02, 0.011, -3.43477985191093E-03, False, 0, Nothing, 0)
    116. boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 4.87106186306547E-02, 0.011, -2.30797350609828E-03, True, 0, Nothing, 0)
    117. Part.SketchMirror()
    118. Part.ClearSelection2(True)
    119. boolstatus = Part.Extension.SelectByID2("Arc2", "SKETCHSEGMENT", 4.99783574598799E-02, 0, -1.47098117339316E-03, False, 2, Nothing, 0)
    120. boolstatus = Part.SketchManager.SketchTrim(4, 0, 0, 0)
    121. Part.SketchManager.InsertSketch(True)
    122. #sketch4
    123. Part.ClearSelection2(True)
    124. boolstatus = Part.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    125. Part.SketchManager.InsertSketch(True)
    126. Part.ClearSelection2(True)
    127. boolstatus = Part.Extension.SelectByID2("Arc1@草图2", "EXTSKETCHSEGMENT", 4.69092540638955E-02, -2.66685360845074E-03, 0, False, 0, Nothing, 0)
    128. boolstatus = Part.SketchManager.SketchUseEdge3(False, False)
    129. Part.ClearSelection2(True)
    130. Part.SketchManager.InsertSketch(True)
    131. boolstatus = Part.Extension.SelectByID2("草图4", "SKETCH", 0, 0, 0, False, 4, Nothing, 0)
    132. 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)
    133. Part.SelectionManager.EnableContourSelection = False
    134. Part.ClearSelection2(True)
    135. boolstatus = Part.Extension.SelectByID2("草图3", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
    136. 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)
    137. Part.SelectionManager.EnableContourSelection = False
    138. Part.ClearSelection2(True)
    139. boolstatus = Part.Extension.SelectByID2("凸台-拉伸2", "BODYFEATURE", 0, 0, 0, False, 4, Nothing, 0)
    140. boolstatus = Part.Extension.SelectByID2("", "FACE", 1.00069959505049E-02, 2.39622182303378E-02, 4.59065963226521E-02, True, 1, Nothing, 0)
    141. myFeature = Part.FeatureManager.FeatureCircularPattern4(z, 6.2831853071796, False, "NULL", False, True, False)
    142. Part.ClearSelection2(True)
    143. Part.ShowNamedView2("*上下二等角轴测", 8)
    144. Part.ViewZoomtofit2()

    4、总结

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

  • 相关阅读:
    ElasticSearch学习(一)
    【数学知识】—— 快速幂 / 扩展欧几里得算法
    典型的数据仓库模型实施过程详解
    MMCV学习——基础篇2(Runner)| 九千字:含示例代码教程
    基于stm32单片机的光照检测智能台灯
    Android简易音乐重构MVVM Java版 -搭建项目(八)
    MPU进化,多核异构处理器有多强?A核与M核通信过程解析
    浅谈 RxJS: lodash for async、流式任务模型、函数式与响应式的结合
    《Eolink 征文活动- -RESTful接口全解测试-全方位了解Eolink-三神技超亮点》
    应急响应笔记
  • 原文地址:https://blog.csdn.net/T20151470/article/details/134024534