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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11894|回复: 27
打印 上一主题 下一主题

折弯标注宏

  [复制链接]

22

主题

155

帖子

601

金币

传奇

Rank: 8Rank: 8

积分
4167

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

跳转到指定楼层
楼主
 楼主| 发表于 2023-11-30 22:27:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

   经典图书
我抛砖,大家来完善!!!!!!!

QQ图片20231130222450.jpg

折弯标注宏.zip

(11.34 KB, 下载次数: 212

评分

参与人数 1威望 +5 金币 +52 贡献 +5 收起 理由
专门设计 + 5 + 52 + 5 牛得不行!

查看全部评分

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

使用道具 举报

22

主题

155

帖子

601

金币

传奇

Rank: 8Rank: 8

积分
4167

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

推荐
 楼主| 发表于 2023-12-2 20:53:05 | 只看该作者
ju01668112 发表于 2023-12-1 16:16
Dim swApp As SldWorks.SldWorks
Dim model As ModelDoc2
Dim swdrw As DrawingDoc

你这代码我研究了下,,标注效果比我的代码还差啊
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 1 反对 0

使用道具 举报

0

主题

17

帖子

111

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
436

最佳新人宣传达人

板凳
发表于 2023-12-1 10:28:14 | 只看该作者

   经典图书
感谢分享好工具,学习~
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

172

帖子

715

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2552

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

地板
发表于 2023-12-1 14:11:18 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

21

帖子

260

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1188

最佳新人宣传达人

5#
发表于 2023-12-1 16:16:46 | 只看该作者

   经典案例图书
Dim swApp As SldWorks.SldWorks
Dim model As ModelDoc2
Dim swdrw As DrawingDoc
Dim swselmgr As SelectionMgr
Dim swview As View
Public swEdge As Edge
Dim swentity As Entity
Dim swcurve As Curve
Dim swCurveParaData As SldWorks.CurveParamData
Dim swLoop As SldWorks.Loop2
Dim swSelData As SldWorks.SelectData
Dim swFace As SldWorks.Face2
Public loop_arr()
Public collect_count
Public goal_line_count
Dim temp_edge_box()

Sub SelectLoop(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swLoop As SldWorks.Loop2, swSelData As SldWorks.SelectData)
    Dim vEdgeArr As Variant
    Dim vEdge As Variant
    Dim swEdge As SldWorks.Edge
    Dim swEnt As SldWorks.Entity
    Dim bRet As Boolean
    vEdgeArr = swLoop.GetEdges
    Debug.Assert Not IsEmpty(vEdgeArr)
    For Each vEdge In vEdgeArr
        Set swEdge = vEdge
        Set swEnt = swEdge
        bRet = swEnt.Select4(True, swSelData)
    Next
End Sub

Function pop_array_item(arr, index)

    Dim temp_box()
    If Not UBound(arr) = 0 Then
        ReDim Preserve temp_box(UBound(arr) - 1)
        
        j = 0
        For i = 0 To UBound(arr)
            If i <> index Then
                Set temp_box(j) = arr(i)
                j = j + 1
            End If
        Next
        pop_array_item = temp_box
    End If
   
End Function
Function get_valid_index(k, ope, num)

    a = UBound(loop_arr) * 3 - 1
    ReDim new_arr(a)
    For i = 0 To UBound(loop_arr) - 1
       new_arr(i) = i
        new_arr(i + UBound(loop_arr)) = i
        new_arr(i + UBound(loop_arr) * 2) = i
   
    Next

    If ope = "+" Then
        get_valid_index = new_arr(UBound(loop_arr) + k + num)
    ElseIf ope = "-" Then
        get_valid_index = new_arr(UBound(loop_arr) + k - num)
    End If



End Function


Sub search_next_edge(cur_swCurveParaData, vEdges, searchtype)

    If searchtype = 1 Then
        a = cur_swCurveParaData.EndPoint
    Else
        a = cur_swCurveParaData.StartPoint
    End If
   
    ReDim Preserve temp_edge_box(0)
    For i = 0 To UBound(vEdges)
        Set swEdge = vEdges(i)
        Set swCurveParaData = swEdge.GetCurveParams3
        b = swCurveParaData.StartPoint
        c = swCurveParaData.EndPoint
        
        Dim d(2)
        'match at start point
        If a(0) = b(0) And a(1) = b(1) And a(2) = b(2) Then
            Debug.Print "match at start point"
            Set d(0) = swEdge
            d(1) = i
            d(2) = 1
            temp_edge_box(UBound(temp_edge_box)) = d
            ReDim Preserve temp_edge_box(UBound(temp_edge_box) + 1)
        'match at end point
        ElseIf a(0) = c(0) And a(1) = c(1) And a(2) = c(2) Then
            Debug.Print "match at end point"
            Set d(0) = swEdge
            d(1) = i
            d(2) = 2
            temp_edge_box(UBound(temp_edge_box)) = d
            ReDim Preserve temp_edge_box(UBound(temp_edge_box) + 1)
        End If
        
    Next

    ReDim Preserve temp_edge_box(UBound(temp_edge_box) - 1)
   
    ''''when the case there are intersection
    'this algorithm choose the longer line
    If UBound(temp_edge_box) = 1 Then
        index = 0
        cur_len = 0
        
        
        Set cur_curve = temp_edge_box(0)(0).GetCurve
        vCurveParam = temp_edge_box(0)(0).GetCurveParams2
        Set swCurveParaData1 = temp_edge_box(0)(0).GetCurveParams3
        len1 = cur_curve.GetLength2(vCurveParam(6), vCurveParam(7))
        Debug.Print len1
        
        Set cur_curve = temp_edge_box(1)(0).GetCurve
        vCurveParam = temp_edge_box(1)(0).GetCurveParams2
        Set swCurveParaData2 = temp_edge_box(1)(0).GetCurveParams3
        len2 = cur_curve.GetLength2(vCurveParam(6), vCurveParam(7))
        Debug.Print len2
        
        
        
        
        If len1 < len2 Then
            searchtype = temp_edge_box(1)(2)
            Set loop_arr(UBound(loop_arr)) = temp_edge_box(1)(0)
            ReDim Preserve loop_arr(UBound(loop_arr) + 1)
            vEdges = pop_array_item(vEdges, temp_edge_box(1)(1))
            vEdges = pop_array_item(vEdges, temp_edge_box(0)(1))
            Set swCurveParaData = swCurveParaData2
            GoTo next_line

        Else
            searchtype = temp_edge_box(0)(2)
            Set loop_arr(UBound(loop_arr)) = temp_edge_box(0)(0)
            ReDim Preserve loop_arr(UBound(loop_arr) + 1)
            vEdges = pop_array_item(vEdges, temp_edge_box(1)(1))
            vEdges = pop_array_item(vEdges, temp_edge_box(0)(1))
            Set swCurveParaData = swCurveParaData1
            GoTo next_line

        End If
    Else
   
        searchtype = temp_edge_box(0)(2)
        Set swCurveParaData = temp_edge_box(0)(0).GetCurveParams3
        Set loop_arr(UBound(loop_arr)) = temp_edge_box(0)(0)
        ReDim Preserve loop_arr(UBound(loop_arr) + 1)
        vEdges = pop_array_item(vEdges, temp_edge_box(0)(1))
        
  
next_line:

        Set swentity = loop_arr(UBound(loop_arr) - 1)
        swentity.Select False
        
        If Not goal_line_count = UBound(loop_arr) Then
            search_next_edge swCurveParaData, vEdges, searchtype
        End If
        Debug.Print "!!"
    End If
   
   
   
End Sub
Function select_loop()

    For i = 0 To UBound(loop_arr) - 1
        Set swentity = loop_arr(i)
        swentity.Select True
    Next
   
End Function

Sub main()

    Set swApp = Application.SldWorks
    Set model = swApp.ActiveDoc
    Set swdrw = model
    Set swselmgr = model.SelectionManager
    Set swview = swdrw.ActiveDrawingView
    If swview Is Nothing Then
        swApp.SendMsgToUser "Please select a view"
        End
    End If
   
   
    vComps = swview.GetVisibleComponents
    vEdges = swview.GetVisibleEntities2(vComps(0), swViewEntityType_Edge)
    vVertex = swview.GetVisibleEntities2(vComps(0), swViewEntityType_Vertex)
   
    'calculate bend parameters
    bend_Count = (UBound(vEdges) - UBound(vVertex)) / 2
    bend_line_count = bend_Count * 2
    goal_line_count = UBound(vEdges) - bend_line_count + 1

    'sort loop line
    ReDim Preserve loop_arr(0)
    For i = 0 To UBound(vEdges)
   
        Set swEdge = vEdges(i)
        Set swCurveParaData = swEdge.GetCurveParams3
        
        
        Debug.Print swCurveParaData.CurveType
        '3001 : LINE_TYPE
        '3002 : CIRCLE_TYPE
   
        
        
        Set swcurve = swEdge.GetCurve
        Set swentity = swEdge
        swentity.Select False
        
        
        If swCurveParaData.CurveType = "3002" Then
            If UBound(loop_arr) = 0 Then
                Set loop_arr(UBound(loop_arr)) = swEdge
                ReDim Preserve loop_arr(UBound(loop_arr) + 1)
                vEdges = pop_array_item(vEdges, i)
                search_next_edge swCurveParaData, vEdges, 1
                Exit For
            End If
        End If
        

    Next
   
    'pick key index
    k = 0
    len1 = 0
    For i = 0 To UBound(loop_arr) - 1
   
        Set swEdge = loop_arr(i)
        vCurveParam = swEdge.GetCurveParams2
        Set swCurveParaData = swEdge.GetCurveParams3

        Debug.Print swCurveParaData.CurveType
        Set swcurve = swEdge.GetCurve
        Set swentity = swEdge
        
        
        If swCurveParaData.CurveType = "3002" Then
            If len1 = 0 Then
                k = i
                len1 = swcurve.GetLength2(vCurveParam(6), vCurveParam(7))
            Else
                len2 = swcurve.GetLength2(vCurveParam(6), vCurveParam(7))
               
                If len2 > len1 Then
                    k = i
                End If
            End If
            
            
        End If
    Next
   
    'create point
    model.ClearSelection2 True
    Dim skPoint As SketchPoint
    Set skPoint = model.SketchManager.CreatePoint(0#, 0#, 0#)
    Set swentity = loop_arr(get_valid_index(k, "+", 1))
    swentity.Select True
    Set swentity = loop_arr(get_valid_index(k, "-", 1))
    swentity.Select True
    model.SketchAddConstraints "sgATINTERSECT"

    'dim1
    model.ClearSelection2 True
    skPoint.Select True
    Set swentity = loop_arr(get_valid_index(k, "-", 2))
    swentity.Select True
    Set myDisplayDim1 = model.AddDimension2(2.89904912802659E-02, 0.116787613208301, 0)
    Status = model.Extension.AlignDimensions(swAlignDimensionType_e.swAlignDimensionType_AutoArrange, 0.001)
   
    'dim2
    model.ClearSelection2 True
    skPoint.Select True
    Set swentity = loop_arr(get_valid_index(k, "+", 2))
    swentity.Select True
    Set myDisplayDim2 = model.AddDimension2(2.89904912802659E-02, 0.116787613208301, 0)
    Status = model.Extension.AlignDimensions(swAlignDimensionType_e.swAlignDimensionType_AutoArrange, 0.001)
   


'    Set swentity = loop_arr(k)
'    swentity.Select False
'Part.SketchAddConstraints ("sgATINTERSECT")
End Sub
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

362

帖子

47

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1101

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

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

使用道具 举报

15

主题

396

帖子

108

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1849

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

7#
发表于 2023-12-1 20:01:07 | 只看该作者

   经典案例图书
顶一下,坐等高手!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

28

主题

183

帖子

277

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1469

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

8#
发表于 2023-12-1 20:02:19 | 只看该作者
这样的就不行了。

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

使用道具 举报

10

主题

465

帖子

901

金币

传奇

Rank: 8Rank: 8

积分
5137

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

9#
发表于 2023-12-2 08:04:28 | 只看该作者
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

457

帖子

478

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2883

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

10#
发表于 2023-12-2 08:07:32 | 只看该作者

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

使用道具 举报

6

主题

296

帖子

1270

金币

传奇

Rank: 8Rank: 8

积分
4229

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

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

使用道具 举报

25

主题

555

帖子

306

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2251

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

12#
发表于 2023-12-2 20:07:44 来自手机 | 只看该作者
赞一个,这个宏越来越完善,现在标出来有点乱
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

13

帖子

16

金币

天使

Rank: 2Rank: 2

积分
57

最佳新人

13#
发表于 2024-1-15 10:11:23 | 只看该作者


好品数字
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

397

帖子

868

金币

传奇

Rank: 8Rank: 8

积分
4405

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

14#
发表于 2024-1-18 09:33:21 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

253

帖子

413

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1549

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

15#
发表于 2024-1-18 12:34:27 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

活到老学到老!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

618

帖子

18

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1870

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

16#
发表于 2024-1-24 13:53:40 | 只看该作者

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

使用道具 举报

17

主题

200

帖子

892

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2968

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

17#
发表于 2024-1-24 14:15:41 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

310

帖子

507

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2007

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

18#
发表于 2024-1-26 11:23:21 | 只看该作者

   经典案例图书

楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

157

帖子

91

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2610

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

19#
发表于 2024-1-28 22:01:27 | 只看该作者
谢谢分享!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

157

帖子

91

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2610

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

20#
发表于 2024-1-28 22:01:33 | 只看该作者
谢谢分享!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

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

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

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

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

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