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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12648|回复: 42
打印 上一主题 下一主题

草图尺寸自动标注

  [复制链接]

12

主题

206

帖子

23

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
230
跳转到指定楼层
#
发表于 2011-10-21 12:36:56 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

   经典图书
  

图示尺寸标注是通过下面程序来实现的.
    Const swTnProfileFeature As String = "ProfileFeature"
    Const nTolerance As Double = 0.00000001
    Sub FindAllUnderConstrainedSketches _
    ( _
    swApp As SldWorks.SldWorks, _
    swModel As SldWorks.ModelDoc2, _
    sSketchNameArr() As String _
    )
    Dim swPart As SldWorks.PartDoc
    Dim swFeat As SldWorks.Feature
    Dim swSketch As SldWorks.Sketch
    Dim bRet As Boolean
    Set swPart = swModel
    Set swFeat = swPart.FirstFeature
    Do While Not swFeat Is Nothing
    If swTnProfileFeature = swFeat.GetTypeName Then
    Set swSketch = swFeat.GetSpecificFeature2
    If swUnderConstrained = swSketch.GetConstrainedStatus Then
    sSketchNameArr(UBound(sSketchNameArr)) = swFeat.Name
    ReDim Preserve sSketchNameArr(UBound(sSketchNameArr) + 1)
    End If
    End If
    Set swFeat = swFeat.GetNextFeature
    Loop
    ' Remove last empty sketch name
    ReDim Preserve sSketchNameArr(UBound(sSketchNameArr) - 1)
    End Sub
    Function GetAllSketchLines( _
    swApp As SldWorks.SldWorks, _
    swModel As SldWorks.ModelDoc2, _
    swSketch As SldWorks.Sketch) As Variant
    Dim vSketchSegArr As Variant
    Dim vSketchSeg As Variant
    Dim swSketchSeg As SldWorks.SketchSegment
    Dim swSketchCurrLine As SldWorks.SketchLine
    Dim swSketchLineArr() As SldWorks.SketchLine
    ReDim swSketchLineArr(0)
    vSketchSegArr = swSketch.GetSketchSegments
    If Not IsEmpty(vSketchSegArr) Then
    For Each vSketchSeg In vSketchSegArr
    Set swSketchSeg = vSketchSeg
    If swSketchLINE = swSketchSeg.GetType Then
    Set swSketchCurrLine = swSketchSeg
    Set swSketchLineArr(UBound(swSketchLineArr)) = swSketchCurrLine
    ReDim Preserve swSketchLineArr(UBound(swSketchLineArr) + 1)
    End If
    Next
    End If
    If 0 = UBound(swSketchLineArr) Then
    ' No straight lines in this sketch
    GetAllSketchLines = Empty
    Exit Function
    End If
    ' Remove last empty sketch line
    ReDim Preserve swSketchLineArr(UBound(swSketchLineArr) - 1)
    GetAllSketchLines = swSketchLineArr
    End Function
    Function GetSketchPoint( _
    swApp As SldWorks.SldWorks, _
    swModel As SldWorks.ModelDoc2, _
    swSketch As SldWorks.Sketch, _
    swSketchPt As SldWorks.SketchPoint) As Boolean
    Dim vSketchPtArr As Variant
    vSketchPtArr = swSketch.GetSketchPoints
    If Not IsEmpty(vSketchPtArr) Then
    ' Use first point
    Set swSketchPt = vSketchPtArr(0)
    GetSketchPoint = True
    Exit Function
    End If
    GetSketchPoint = False
    End Function
    Function FindVerticalOrigin( _
    swApp As SldWorks.SldWorks, _
    swModel As SldWorks.ModelDoc2, _
    swSketch As SldWorks.Sketch, _
    swSketchSegVert As SldWorks.SketchSegment, _
    swSketchPtVert As SldWorks.SketchPoint) As Boolean
    Dim vSketchLineArr As Variant
    Dim vSketchLine As Variant
    Dim swSketchCurrLine As SldWorks.SketchLine
    Dim swStartPt As SldWorks.SketchPoint
    Dim swEndPt As SldWorks.SketchPoint
    ' Try to get first vertical line
    vSketchLineArr = GetAllSketchLines(swApp, swModel, swSketch)
    If Not IsEmpty(vSketchLineArr) Then
    For Each vSketchLine In vSketchLineArr
    Set swSketchCurrLine = vSketchLine
    Set swStartPt = swSketchCurrLine.GetStartPoint2
    Set swEndPt = swSketchCurrLine.GetEndPoint2
    If Abs(swStartPt.X - swEndPt.X) < nTolerance Then
    Set swSketchSegVert = swSketchCurrLine
    FindVerticalOrigin = True
    Exit Function
    End If
    Next
    End If
    ' Try to get the first point
    FindVerticalOrigin = GetSketchPoint(swApp, swModel, swSketch, swSketchPtVert)
    End Function
    Function FindHorizontalOrigin( _
    swApp As SldWorks.SldWorks, _
    swModel As SldWorks.ModelDoc2, _
    swSketch As SldWorks.Sketch, _
    swSketchSegHoriz As SldWorks.SketchSegment, _
    swSketchPtHoriz As SldWorks.SketchPoint) As Boolean
    Dim vSketchLineArr As Variant
    Dim vSketchLine As Variant
    Dim swSketchCurrLine As SldWorks.SketchLine
    Dim swStartPt As SldWorks.SketchPoint
    Dim swEndPt As SldWorks.SketchPoint
    ' Try to get first horizontal line
    vSketchLineArr = GetAllSketchLines(swApp, swModel, swSketch)
    If Not IsEmpty(vSketchLineArr) Then
    For Each vSketchLine In vSketchLineArr
    Set swSketchCurrLine = vSketchLine
    Set swStartPt = swSketchCurrLine.GetStartPoint2
    Set swEndPt = swSketchCurrLine.GetEndPoint2
    If Abs(swStartPt.Y - swEndPt.Y) < nTolerance Then
    Set swSketchSegHoriz = swSketchCurrLine
    FindHorizontalOrigin = True
    Exit Function
    End If
    Next
    End If
    ' Try to get the first point
    FindHorizontalOrigin = GetSketchPoint(swApp, swModel, swSketch, swSketchPtHoriz)
    End Function
    Function AutoDimensionSketch( _
    swApp As SldWorks.SldWorks, _
    swModel As SldWorks.ModelDoc2, _
    swSketch As SldWorks.Sketch) As Long
    Dim swFeat As SldWorks.Feature
    Dim swSketchSegHoriz As SldWorks.SketchSegment
    Dim swSketchPtHoriz As SldWorks.SketchPoint
    Dim swSketchSegVert As SldWorks.SketchSegment
    Dim swSketchPtVert As SldWorks.SketchPoint
    Dim bRet As Boolean
    If False = FindHorizontalOrigin(swApp, swModel, swSketch, swSketchSegHoriz, swSketchPtHoriz) Then
    AutoDimensionSketch = swAutodimStatusDatumLineNotHorizontal
    Exit Function
    End If
    If False = FindVerticalOrigin(swApp, swModel, swSketch, swSketchSegVert, swSketchPtVert) Then
    AutoDimensionSketch = swAutodimStatusDatumLineNotVertical
    Exit Function
    End If
    Set swFeat = swSketch
    bRet = swFeat.Select2(False, 0)
    Debug.Assert bRet
    ' Editing sketch clears selections
    swModel.EditSketch
    ' Reselect sketch segments for autodimensioning
    If Not swSketchSegVert Is Nothing Then
    ' Vertical line is for horizontal datum
    bRet = swSketchSegVert.Select4(True, Nothing)
    ElseIf Not swSketchPtHoriz Is Nothing Then
    bRet = swSketchPtHoriz.Select4(True, Nothing)
    ElseIf Not swSketchPtVert Is Nothing Then
    ' Use any sketch point for horizontal datum
    bRet = swSketchPtVert.Select4(True, Nothing)
    End If
    Debug.Assert bRet
    If Not swSketchSegHoriz Is Nothing Then
    ' Horizontal line is for vertical datum
    bRet = swSketchSegHoriz.Select4(True, Nothing)
    ElseIf Not swSketchPtVert Is Nothing Then
    bRet = swSketchPtVert.Select4(True, Nothing)
    ElseIf Not swSketchPtHoriz Is Nothing Then
    ' Use any sketch point for vertical datum
    bRet = swSketchPtHoriz.Select4(True, Nothing)
    End If
    Debug.Assert bRet
    ' No straight lines, probably contains circles,
    ' so use sketch points for datums
    If IsEmpty(GetAllSketchLines(swApp, swModel, swSketch)) Then
    If Not swSketchPtHoriz Is Nothing Then
    bRet = swSketchPtHoriz.Select4(False, Nothing)
    ElseIf Not swSketchPtVert Is Nothing Then
    bRet = swSketchPtVert.Select4(False, Nothing)
    End If
    End If
    Debug.Assert bRet
    AutoDimensionSketch = swSketch.AutoDimension2(swAutodimEntitiesAll, _
    swAutodimSchemeBaseline, _
    swAutodimHorizontalPlacementBelow, _
    swAutodimSchemeBaseline, _
    swAutodimVerticalPlacementLeft)
    ' Redraw so dimensions are displayed immediately
    swModel.GraphicsRedraw2
    ' Exit sketch edit
    ' Leave rebuild to later
    swModel.InsertSketch2 False
    End Function
    Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swPart As SldWorks.PartDoc
    Dim sSketchNameArr() As String
    Dim sSketchName As Variant
    Dim swFeat As SldWorks.Feature
    Dim swSketch As SldWorks.Sketch
    Dim nRetVal As Long
    Dim i As Long
    Dim bRet As Boolean
    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swPart = swModel
    Debug.Print "File = " & swModel.GetPathName
    ReDim sSketchNameArr(0)
    FindAllUnderConstrainedSketches swApp, swModel, sSketchNameArr
    For Each sSketchName In sSketchNameArr
    Set swFeat = swPart.FeatureByName(sSketchName)
    Set swSketch = swFeat.GetSpecificFeature
    nRetVal = AutoDimensionSketch(swApp, swModel, swSketch)
    Debug.Print " " & sSketchName & " = " & nRetVal
    Next
    ' Rebuild after modifying sketches
    bRet = swModel.EditRebuild3
    Debug.Assert bRet
    End Sub

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

使用道具 举报

0

主题

204

帖子

155

金币

堂主

Rank: 4

积分
854

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

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

使用道具 举报

0

主题

4

帖子

0

金币

混混

Rank: 1

积分
11

最佳新人

41#
发表于 2023-8-19 10:33:21 | 只看该作者

   经典图书
原来如此!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

146

帖子

606

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1930

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

40#
发表于 2023-8-11 19:19:22 | 只看该作者
楼主太有才了,膜拜中……
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

8

帖子

5

金币

混混

Rank: 1

积分
30

最佳新人

39#
发表于 2023-8-11 11:43:53 | 只看该作者

   经典案例图书
好复杂呀,头看晕了
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

170

帖子

479

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1659

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

38#
发表于 2023-8-10 15:19:22 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

95

主题

181

帖子

8265

金币

版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
13763

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

37#
发表于 2023-8-3 09:30:17 | 只看该作者

   经典案例图书
其实就是完全定义草图而已
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

97

帖子

135

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
489

最佳新人活跃会员热心会员宣传达人

36#
发表于 2023-1-1 22:37:32 | 只看该作者
楼主太有才了,膜拜中……
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

4

帖子

26

金币

天使

Rank: 2Rank: 2

积分
68

最佳新人

35#
发表于 2022-12-30 16:40:31 | 只看该作者
怎么把程序弄到SW中使用呢?
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

26

帖子

2

金币

天使

Rank: 2Rank: 2

积分
78

最佳新人活跃会员宣传达人

34#
发表于 2022-12-27 13:55:33 | 只看该作者

   经典图书
谢谢分享,收下学习!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

21

帖子

1

金币

天使

Rank: 2Rank: 2

积分
55

最佳新人

33#
发表于 2022-12-17 20:16:42 | 只看该作者
我是刚开始学的,这个不是本来就可以标注的吗?鼠标右键上移那个。。。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

17

帖子

26

金币

天使

Rank: 2Rank: 2

积分
75

最佳新人

32#
发表于 2022-12-17 10:26:56 | 只看该作者
高人啊,只能是看看了
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

1万

帖子

7151

金币

实习版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
37904

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

31#
发表于 2022-10-1 10:47:53 | 只看该作者
活到老学到老!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

2

主题

205

帖子

45

金币

堂主

Rank: 4

积分
647

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

QQ
30#
发表于 2022-9-30 09:28:47 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

220

帖子

165

金币

堂主

Rank: 4

积分
899

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

29#
发表于 2022-9-27 10:41:01 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

下载下来看看,应该会有用!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

4119

帖子

3

金币

传奇

Rank: 8Rank: 8

积分
8452

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

28#
发表于 2019-8-6 11:34:05 | 只看该作者

   经典案例图书
SolidWorks机械工程师网,顶一下。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

4238

帖子

4

金币

传奇

Rank: 8Rank: 8

积分
8671

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

27#
发表于 2019-8-6 09:26:24 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

好好学习,天天向上!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

13

主题

228

帖子

55

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
310
QQ
26#
发表于 2011-10-21 13:03:15 | 只看该作者

   经典案例图书
不错不错   很好
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

14

主题

205

帖子

78

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
315
QQ
25#
发表于 2011-10-21 13:02:55 | 只看该作者
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

245

帖子

27

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
284
QQ
24#
发表于 2011-10-21 13:02:11 | 只看该作者
厉害
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

227

帖子

82

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
334
QQ
23#
发表于 2011-10-21 13:01:46 | 只看该作者
,来过
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2024-10-18 16:35 , Processed in 0.504466 second(s), 27 queries , Memcache On.

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

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

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