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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

孔标注

  [复制链接]

11

主题

22

帖子

142

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
404

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

跳转到指定楼层
楼主
 楼主| 发表于 2024-3-20 13:21:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


Sub main()

    Set swApp = Application.SldWorks

    Set swMathUtils = swApp.GetMathUtility

    Dim swModel As SldWorks.ModelDoc2

    Set swModel = swApp.ActiveDoc

    Dim swView As SldWorks.view

    Set swView = swModel.SelectionManager.GetSelectedObject6(1, -1)

    If swView Is Nothing Then
        Err.Raise vbError, "", "Please select view"
    End If

    Dim swOrigVertex As SldWorks.vertex
    Set swOrigVertex = FindOriginVertex(swView)

    Dim vHoles As Variant
    vHoles = FindHoles(swView)

    If IsEmpty(vHoles) Then
        Err.Raise vbError, "", "No holes found"
    End If

    Dim vOutline As Variant
    vOutline = swView.GetOutline

    Dim offset As Double
    offset = (vOutline(2) - vOutline(1)) * 0.1

    AddOrdinateDimensions swModel, swOrigVertex, vHoles, swAddOrdinateDims_e.swHorizontalOrdinate, 0, vOutline(1) - offset
    AddOrdinateDimensions swModel, swOrigVertex, vHoles, swAddOrdinateDims_e.swVerticalOrdinate, vOutline(0) - offset, 0

End Sub

Sub AddOrdinateDimensions(model As SldWorks.ModelDoc2, origVertex As SldWorks.vertex, holes As Variant, dimType As swAddOrdinateDims_e, x As Double, y As Double)

    Dim swSels() As SldWorks.Entity
    ReDim swSels(1 + UBound(holes))

    Set swSels(0) = origVertex

    Dim i As Integer

    For i = 0 To UBound(holes)
        Set swSels(i + 1) = holes(i)
    Next

    If model.Extension.MultiSelect2(swSels, False, Nothing) = UBound(swSels) + 1 Then
        Dim res As Long
        res = model.Extension.AddOrdinateDimension(dimType, x, y, 0)

        model.SetPickMode

        If res <> swCreateOrdDimError_e.swCreateOrdDimErr_Success Then
            Err.Raise vbError, "", "Failed to add ordinate dimension"
        End If
    Else
        Err.Raise vbError, "", "Failed to select entities"
    End If

End Sub


Function FindOriginVertex(view As SldWorks.view) As SldWorks.vertex

    Dim vComps As Variant

    vComps = view.GetVisibleComponents

    Dim swViewTransform As SldWorks.MathTransform
    Set swViewTransform = view.ModelToViewTransform

    Dim swOriginVertex As SldWorks.vertex

    If Not IsEmpty(vComps) Then

        Dim i As Integer

        For i = 0 To UBound(vComps)

            Dim swComp As SldWorks.Component2

            Set swComp = vComps(i)

            Dim vVisEnts As Variant
            vVisEnts = view.GetVisibleEntities2(swComp, swViewEntityType_e.swViewEntityType_Vertex)

            Dim j As Integer

            For j = 0 To UBound(vVisEnts)
                Dim swVertex As SldWorks.vertex
                Set swVertex = vVisEnts(j)

                If swOriginVertex Is Nothing Then
                    Set swOriginVertex = swVertex
                Else
                    Dim vCurOrigCoord As Variant
                    vCurOrigCoord = GetVertexCoordinate(swOriginVertex, swViewTransform)

                    Dim vCoord As Variant
                    vCoord = GetVertexCoordinate(swVertex, swViewTransform)

                    If vCoord(0) < vCurOrigCoord(0) And vCoord(1) < vCurOrigCoord(1) Then
                        Set swOriginVertex = swVertex
                    End If

                End If

            Next

        Next

    End If

    If swOriginVertex Is Nothing Then
        Err.Raise vbError, "", "Failed to find origin vertex"
    End If

    Set FindOriginVertex = swOriginVertex

End Function

Function GetVertexCoordinate(vertex As SldWorks.vertex, transform As SldWorks.MathTransform) As Variant

    Dim vCoordPt As Variant
    vCoordPt = vertex.GetPoint()

    Dim swMathPt As SldWorks.MathPoint
    Set swMathPt = swMathUtils.CreatePoint(vCoordPt)

    Set swMathPt = swMathPt.MultiplyTransform(transform)

    GetVertexCoordinate = swMathPt.ArrayData

End Function

Function FindHoles(view As SldWorks.view) As Variant

    Dim vComps As Variant

    vComps = view.GetVisibleComponents

    Dim swHoles() As SldWorks.Edge

    If Not IsEmpty(vComps) Then

        Dim i As Integer

        For i = 0 To UBound(vComps)

            Dim swComp As SldWorks.Component2

            Set swComp = vComps(i)

            Dim vVisEnts As Variant
            vVisEnts = view.GetVisibleEntities2(swComp, swViewEntityType_e.swViewEntityType_Edge)

            Dim j As Integer

            For j = 0 To UBound(vVisEnts)

                Dim swEdge As SldWorks.Edge
                Set swEdge = vVisEnts(j)

                Dim swCurve As SldWorks.Curve
                Set swCurve = swEdge.GetCurve

                If False <> swCurve.IsCircle() Then

                    Dim isClosed As Boolean
                    swCurve.GetEndParams -1, -1, isClosed, -1

                    If False <> isClosed Then

                        If (Not swHoles) = -1 Then
                            ReDim swHoles(0)
                        Else
                            ReDim Preserve swHoles(UBound(swHoles) + 1)
                        End If

                        Set swHoles(UBound(swHoles)) = swEdge

                    End If

                End If

            Next

        Next

    End If

    If (Not swHoles) = -1 Then
        FindHoles = Empty
    Else
        FindHoles = swHoles
    End If

End Function

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

使用道具 举报

0

主题

12

帖子

22

金币

混混

Rank: 1

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

使用道具 举报

1

主题

199

帖子

1366

金币

传奇

Rank: 8Rank: 8

积分
4344

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

板凳
发表于 2024-3-21 07:54:05 | 只看该作者
代码不错,顶起来下载收藏,谢谢分享
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

335

帖子

226

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2015

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

地板
发表于 2024-3-21 08:01:45 | 只看该作者
很不错,顶一下!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

430

帖子

838

金币

传奇

Rank: 8Rank: 8

积分
4571

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

5#
发表于 2024-3-21 08:44:18 | 只看该作者

   经典案例图书
感谢楼主分享
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

479

帖子

526

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2559

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

6#
发表于 2024-3-21 15:41:13 | 只看该作者
下载下来看看,应该会有用!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

150

帖子

254

金币

堂主

Rank: 4

积分
815

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

7#
发表于 2024-3-21 16:43:32 | 只看该作者

   经典案例图书
大神,发个图看看效果啊。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

424

帖子

785

金币

传奇

Rank: 8Rank: 8

积分
4495

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

8#
发表于 2024-3-22 07:58:51 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

566

帖子

48

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1592

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

9#
发表于 2024-3-24 17:43:16 | 只看该作者
楼主最好发张图片!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

27

主题

164

帖子

176

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1185

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

10#
发表于 2024-4-2 09:11:53 | 只看该作者
直接报错,无法创建点?  选或不选图形,运行宏,都报错。不知道怎么用

微信截图_20240402091054.png
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

18

帖子

37

金币

堂主

Rank: 4

积分
528

最佳新人宣传达人

11#
发表于 2024-4-11 19:12:24 来自手机 | 只看该作者
谢谢分享,点赞收藏备用
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-4-29 09:41 , Processed in 0.232857 second(s), 36 queries .

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

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

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