SolidWorks机械工程师网——最大的SolidWorks学习平台

标题: 方圓孔圓周分佈-宏(方圆孔圆周分布宏)有找不到工程或库及属性的使用无效解释 [打印本页]

作者: ryouss    时间: 2018-5-31 09:22
标题: 方圓孔圓周分佈-宏(方圆孔圆周分布宏)有找不到工程或库及属性的使用无效解释
https://www.swbbsc.com/forum.php? ... 1208&extra=page%3D1

1. 這是如上的升級版,在 pyczt大大 的指導下改進了不管XY為正負值或是0皆可執行,
    並新增加打方孔.
2. 個人覺得的執行功能在应用上是較為其次,反而是給新入門有心學習的是不錯的範例.
3. 可能尚有其他未發現問題有興趣者試試了.

注意事項:
1.首圈半徑限制不能小於等於鉆孔直徑,也不能小於方孔邊長的1.5倍(避免破孔或是零厚度).
2.草圖上不要用網格,避免取點時被吸附至網點.


附SWP文件 Circle distribution_0530.rar (48.83 KB, 下载次数: 223, 售价: 30 金币)



  1. ' *************************************************************
  2. ' macro recorded on 05/28/18 by scliang
  3. '     功能:圓周分佈方圓孔,本範例因是用除料拉伸,所以鉆孔是平底.
  4. '     操作:1.在零件先選取要打孔之平面.
  5. '          2.執行 "main" .
  6. '          3.選取打孔類別,TextBox(文本框)鍵入相關參數值.
  7. '          4.首圈半徑近似於相鄰兩孔之中心(弧長)距離.
  8. '          5.方孔邊長=圓孔直徑.
  9. ' 注意事項:起始圓半徑限制不能小於等於鉆孔直徑,也不能小於方孔邊長的1.5倍
  10. '
  11. ' *************************************************************

  12. Dim A1X As Double 'TextBox1
  13. Dim A1Y As Double 'TextBox2
  14. Dim A2X As Double
  15. Dim A3X As Double
  16. Dim A3Y As Double
  17. Dim B1X As Double
  18. Dim B1Y As Double
  19. Dim B2X As Double
  20. Dim B2Y As Double
  21. Dim B3X As Double
  22. Dim B3Y As Double
  23. Dim D As Double 'TextBox3
  24. Dim R1 As Double 'TextBox4
  25. Dim Drill_depth As Double 'TextBox5
  26. Dim Circle_number As Integer 'TextBox6
  27. Dim i As Integer
  28. Dim Class_ As Integer
  29. Dim pi As Double
  30. Dim RN As Double
  31. Dim ArcRadius As Double
  32. Dim ArcAngle As Double

  33. Sub main()
  34. UserForm1.Show 0
  35. End Sub

  36. Sub Draw()
  37. With UserForm1
  38. .Label8.Caption = ""
  39. Class_ = .ComboBox1.ListIndex  '孔類代碼 0-->圓孔,1-->方孔
  40. '判定資料是否沒打入
  41. If .TextBox3.Value = "" Or .TextBox4.Value = "" Or .TextBox5.Value = "" Or .TextBox6.Value = "" Then
  42.       MsgBox ("Enter empty")
  43.       Exit Sub
  44. End If
  45. '判定資料是否是輸入錯誤(起始圓半徑限制不能小於等於鉆孔直徑,也不能小於方孔邊長的1.5倍)
  46. D = .TextBox3.Value / 1000 '孔直徑=方孔邊長
  47. R1 = .TextBox4.Value / 1000 '首圈中心半徑
  48. If (Class_ = 0 And D >= R1) Or (Class_ = 1 And R1 / D < 1.4999) Then
  49.       MsgBox ("Data error")
  50.       Exit Sub
  51. End If

  52. Set swApp = Application.SldWorks
  53. Set Part = swApp.ActiveDoc
  54. Set swSketchMgr = Part.SketchManager
  55. Part.SketchManager.InsertSketch True '依據選取面插入草圖
  56. Part.SketchManager.AddToDB True  '草圖實體直接添加到數據庫(否則 x<=0 會有問題)
  57. '中心圓之座標及作圖
  58. A1X = .TextBox1.Value / 1000 '圓周複製中心 X 座標
  59. A1Y = .TextBox2.Value / 1000 '圓周複製中心 Y 座標
  60. A2X = A1X + D / 2 '中心圓之半徑 X 座標
  61. pi = Atn(1) * 4
  62. Circle_number = .TextBox6.Value '複製圈數
  63. Drill_depth = .TextBox5.Value / 1000 '鉆孔深
  64. '判定孔類之圓周分佈打孔
  65. Select Case Class_
  66. Case 0  '打圓孔
  67. Set swSketchSegment = swSketchMgr.CreateCircle(A1X, A1Y, 0#, A2X, A1Y, 0#) '作中心圓
  68. For i = 1 To Circle_number
  69.       RN = i * R1 '分佈圓周之半徑
  70.       copy_number = Int(2 * RN * pi / R1 + 0.5) '分佈圓周之鉆孔數
  71.       Totle_drill_hole = Totle_drill_hole + copy_number '累加各圈孔數
  72. '分佈圓之基圓作圖
  73.       B1X = A1X + RN
  74.       B2X = B1X + D / 2
  75.       Set swSketchSegment = swSketchMgr.CreateCircle(B1X, A1Y, 0#, B2X, A1Y, 0#) '各圈基孔
  76. '分佈圓之複製孔數,圓周複製參數:圓弧半徑、圓弧角、複製數、孔間距(間隔弧度)、圖案旋轉、刪除實例
  77.       boolstatus = swSketchMgr.CreateCircularSketchStepAndRepeat(RN, pi, copy_number, 2 * pi, True, "", True, True, True)
  78. Next

  79. Case 1 '打方孔
  80. A3X = A1X - D / 2
  81. A3Y = A1Y + D / 2
  82. vSkLines = swSketchMgr.CreateCenterRectangle(A1X, A1Y, 0#, A3X, A3Y, 0#) '中心方孔
  83. '~~~ 約束共點之初值 ~~~
  84. Dim NamePoint As String
  85. Dim NumPoint As Integer
  86. If A1X = 0 And A1Y = 0 Then
  87. NumPoint = 6
  88. Else
  89. NumPoint = 5
  90. End If
  91. '~~~~~~~~~~~~~~~~~
  92. For i = 1 To Circle_number
  93. '中心圓之座標及作圖
  94.       RN = i * R1 '分佈圓周之半徑
  95.       B1X = A1X + RN
  96.       B1Y = A1Y
  97.       B3X = B1X - D / 2
  98.       B3Y = A3Y

  99.       vSkLines = swSketchMgr.CreateCenterRectangle(B1X, B1Y, 0, B3X, B3Y, 0) '各圈基準方孔
  100.       ArcAngle = pi - Atn(D / 2 / (RN - D / 2)) '圓周複製弧角
  101.       ArcRadius = Sqr((D / 2) ^ 2 + (RN - D / 2) ^ 2) '圓周複製半徑
  102.       copy_number = Int(2 * RN * pi / R1 + 0.5) '複製數
  103.       Debug.Print copy_number
  104.       NumPoint = NumPoint + 5 * copy_number + 1      '點計數
  105.       Totle_drill_hole = Totle_drill_hole + copy_number
  106.       boolstatus = swSketchMgr.CreateCircularSketchStepAndRepeat(ArcRadius, ArcAngle, copy_number, 2 * pi, False, "", False, False, False)
  107. NamePoint = "Point" & NumPoint
  108. 'Debug.Print NamePoint
  109. Part.Extension.SelectByID2 NamePoint, "SKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0 '圓周複製中心點
  110. Part.Extension.SelectByID2 "Point1", "SKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0 '輸入的XY座標點
  111. Part.SketchAddConstraints "sgCOINCIDENT" '取圓周複製中心點和輸入的XY座標點 "共點約束"
  112. Part.ClearSelection2 True
  113. Next
  114. End Select

  115. .Label8.Caption = 1 + Totle_drill_hole '總鉆孔數
  116. End With
  117. Part.SketchManager.AddToDB False
  118. '除料拉伸
  119. Dim myFeature As Object
  120. Set myFeature = Part.FeatureManager.FeatureCut3(True, False, False, 0, 0, Drill_depth, 0, False, False, False, False, 1.74532925199433E-02, _
  121. 1.74532925199433E-02, False, False, False, False, False, True, True, True, True, False, 0, 0, False)
  122. End Sub
复制代码






作者: hhww81    时间: 2018-6-1 10:41
很不错,感谢楼主
作者: asd4015053    时间: 2018-6-1 11:29
版大:

一开始运行时,是这样:






然后我加了如下三句:

Dim Part As SldWorks.ModelDoc2
Dim swModel  As SldWorks.ModelDoc2       '定义SW文档
Dim swSketchMgr  As SldWorks.SelectionMgr    '定义SW选择管理器


然后,再运行,还是不行:





求解决,谢谢!


作者: ryouss    时间: 2018-6-1 11:34
asd4015053 发表于 2018-6-1 11:29
版大:

一开始运行时,是这样:

謝謝測試,請告知使用版本.

作者: asd4015053    时间: 2018-6-1 11:57
ryouss 发表于 2018-6-1 11:34
謝謝測試,請告知使用版本.

感谢版大回复,我是2018版的,SP0
作者: asd4015053    时间: 2018-6-1 12:29
又试了一下,没有问题,是我引用的库丢失了
之前有两个丢失的2012引用





作者: asd4015053    时间: 2018-6-1 12:31
不过只能创建一个孔,没有阵列,奇怪


作者: asd4015053    时间: 2018-6-1 12:39
圆孔没有问题


作者: ryouss    时间: 2018-6-1 13:12
asd4015053 发表于 2018-6-1 12:39
圆孔没有问题

草圖上不要用網格,避免取點時被吸附至網點.

注意如上之提示,在 2012,2015,2017試過正常,就是手上沒2018可試.
再有問題在執行前,進入 工具-->選項, 禁用限制約束及磁性結合.





作者: ryouss    时间: 2018-6-1 14:56
VBA繁簡字的更改一键复制解繁简乱码!
試用看看 解繁简乱码.rar (778.48 KB, 下载次数: 196, 售价: 45 金币)

复制全部==>试试“Uni简”或是“B>G”按钮即可





作者: asd4015053    时间: 2018-6-1 14:57
感谢版大,不过不知道为什么出来是这样





作者: asd4015053    时间: 2018-6-1 14:59
另外,中心点,不知道为什么,无法位于草图中点
作者: ryouss    时间: 2018-6-1 15:01
asd4015053 发表于 2018-6-1 14:59
另外,中心点,不知道为什么,无法位于草图中点
謝謝大大用心測試

參看9#

作者: asd4015053    时间: 2018-6-1 15:08
ryouss 发表于 2018-6-1 15:01
謝謝大大用心測試

參看9#

感谢,刚才有一项忘记设置了,唯一的问题中心点,不能居中


作者: ryouss    时间: 2018-6-1 15:14
asd4015053 发表于 2018-6-1 15:08
感谢,刚才有一项忘记设置了,唯一的问题中心点,不能居中

圖形正確的,因設定為 X,Y=50,當然偏離原點了.

要對正原點應鍵入  X=0,Y=0
作者: asd4015053    时间: 2018-6-1 15:26
是,是我也是刚理解X、Y的意义,不过设置了0、0,后,是这样,第一个是对齐了,不知道为什么后续的不行



作者: asd4015053    时间: 2018-6-1 15:34
设为10、10,就是偏一点,就正常,设置为0、0,就不行




奇怪

作者: asd4015053    时间: 2018-6-1 15:44


作者: ryouss    时间: 2018-6-1 15:50
asd4015053 发表于 2018-6-1 15:34
设为10、10,就是偏一点,就正常,设置为0、0,就不行

試了,X,Y=0 時,  工具-->選項之 限制約束又要打勾了.
理解是XY座標點(0,0)必須要找原點共點約束吧!




作者: SHXIANG    时间: 2018-6-1 16:29
感谢楼主分享,很不错!
作者: jjkking    时间: 2018-6-1 16:37
很不错,顶一下!
作者: asd4015053    时间: 2018-6-1 16:41
非常不错,**,感谢版大指导,我将界面调整了一下,重新上传一下源代码:



Circle distribution_0530简体界面.rar (39.15 KB, 下载次数: 215, 售价: 80 金币)
零件1.rar (75.74 KB, 下载次数: 126, 售价: 45 金币)
零件2.rar (350.41 KB, 下载次数: 202, 售价: 45 金币)






作者: xiabutan    时间: 2018-6-1 17:27
asd4015053 发表于 2018-6-1 16:41
非常不错,**,感谢版大指导,我将界面调整了一下,重新上传一下源代码:

你这金币定的太低了,我都感觉没脸下载,不下了
作者: ryouss    时间: 2018-6-1 17:48
asd4015053 发表于 2018-6-1 16:41
非常不错,**,感谢版大指导,我将界面调整了一下,重新上传一下源代码:

謝謝轉換簡版造福大眾
作者: fanghl    时间: 2018-6-1 19:09
感谢楼主分享,很不错!
作者: design100    时间: 2018-6-8 15:31
很不错,顶一下!
作者: ryouss    时间: 2018-6-8 16:15
design100 发表于 2018-6-8 15:31
很不错,顶一下!

https://www.swbbsc.com/threadcon-281854.html

謝謝版主支持,如上有更新!
作者: Sylviee    时间: 2018-6-11 11:52
厉害了!!!

作者: gfzms2590    时间: 2018-6-11 14:23
謝謝測試,請告知使用版本
作者: mhk8888    时间: 2018-6-25 10:21
感谢楼主分享,很不错!
作者: smallroad    时间: 2018-9-25 17:59
楼主辛苦了!
作者: fushr    时间: 2021-1-8 15:31
然后我加了如下三句:
作者: 1215956038    时间: 2021-4-18 20:38
顶一下,坐等高手!
作者: lytxt12    时间: 2021-5-19 17:21
来学习啊 谢谢楼主的资料
作者: 沉默的人    时间: 2022-11-16 14:07
感谢楼主分享,很不错!
作者: zx1072945905    时间: 2023-1-5 10:11
感谢楼主分享,很不错!
作者: geliang112055    时间: 2023-3-1 11:08
好好学习,天天向上!




欢迎光临 SolidWorks机械工程师网——最大的SolidWorks学习平台 (https://www.swbbsc.com/) Powered by Discuz! X3.2