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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

好品数字
好品数字
查看: 5556|回复: 36
打印 上一主题 下一主题

方圓孔圓周分佈-宏(方圆孔圆周分布宏)有找不到工程或库及属性的使用无效解释

  [复制链接]

97

主题

332

帖子

2976

金币

传奇

Rank: 8Rank: 8

积分
7916

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

跳转到指定楼层
楼主
发表于 2018-5-31 09:22:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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
复制代码





本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享教程|习题|模型|技巧1 点赞点赞 拍砖拍砖
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

0

主题

21

帖子

29

金币

天使

Rank: 2Rank: 2

积分
95
QQ
沙发
发表于 2018-6-1 10:41:24 | 只看该作者
很不错,感谢楼主
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
板凳
发表于 2018-6-1 11:29:11 | 只看该作者
版大:

一开始运行时,是这样:






然后我加了如下三句:

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


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





求解决,谢谢!

SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

97

主题

332

帖子

2976

金币

传奇

Rank: 8Rank: 8

积分
7916

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

地板
 楼主| 发表于 2018-6-1 11:34:26 | 只看该作者
asd4015053 发表于 2018-6-1 11:29
版大:

一开始运行时,是这样:

謝謝測試,請告知使用版本.
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
5#
发表于 2018-6-1 11:57:20 | 只看该作者

   经典案例图书
ryouss 发表于 2018-6-1 11:34
謝謝測試,請告知使用版本.

感谢版大回复,我是2018版的,SP0
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
6#
发表于 2018-6-1 12:29:59 | 只看该作者
又试了一下,没有问题,是我引用的库丢失了
之前有两个丢失的2012引用




SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
7#
发表于 2018-6-1 12:31:48 | 只看该作者

   经典案例图书
不过只能创建一个孔,没有阵列,奇怪

SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
8#
发表于 2018-6-1 12:39:56 | 只看该作者
圆孔没有问题

SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

97

主题

332

帖子

2976

金币

传奇

Rank: 8Rank: 8

积分
7916

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

9#
 楼主| 发表于 2018-6-1 13:12:44 | 只看该作者

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

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




SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

97

主题

332

帖子

2976

金币

传奇

Rank: 8Rank: 8

积分
7916

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

10#
 楼主| 发表于 2018-6-1 14:56:11 | 只看该作者
VBA繁簡字的更改一键复制解繁简乱码!
試用看看 解繁简乱码.rar (778.48 KB, 下载次数: 196, 售价: 45 金币)

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




SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
11#
发表于 2018-6-1 14:57:14 | 只看该作者
感谢版大,不过不知道为什么出来是这样




SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
12#
发表于 2018-6-1 14:59:28 | 只看该作者
另外,中心点,不知道为什么,无法位于草图中点
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

97

主题

332

帖子

2976

金币

传奇

Rank: 8Rank: 8

积分
7916

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

13#
 楼主| 发表于 2018-6-1 15:01:16 | 只看该作者
asd4015053 发表于 2018-6-1 14:59
另外,中心点,不知道为什么,无法位于草图中点
謝謝大大用心測試

參看9#
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
14#
发表于 2018-6-1 15:08:18 | 只看该作者
ryouss 发表于 2018-6-1 15:01
謝謝大大用心測試

參看9#

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

SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

97

主题

332

帖子

2976

金币

传奇

Rank: 8Rank: 8

积分
7916

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

15#
 楼主| 发表于 2018-6-1 15:14:17 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

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

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

要對正原點應鍵入  X=0,Y=0
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
16#
发表于 2018-6-1 15:26:37 | 只看该作者

   经典案例图书
是,是我也是刚理解X、Y的意义,不过设置了0、0,后,是这样,第一个是对齐了,不知道为什么后续的不行


SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
17#
发表于 2018-6-1 15:34:13 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

设为10、10,就是偏一点,就正常,设置为0、0,就不行




奇怪
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

146

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404
QQ
18#
发表于 2018-6-1 15:44:53 | 只看该作者

   经典案例图书

SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

97

主题

332

帖子

2976

金币

传奇

Rank: 8Rank: 8

积分
7916

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

19#
 楼主| 发表于 2018-6-1 15:50:54 | 只看该作者
asd4015053 发表于 2018-6-1 15:34
设为10、10,就是偏一点,就正常,设置为0、0,就不行

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



SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

92

帖子

233

金币

堂主

Rank: 4

积分
520
QQ
20#
发表于 2018-6-1 16:29:00 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-4-20 11:46 , Processed in 0.202637 second(s), 39 queries .

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

快速回复 返回顶部 返回列表