iCAx开思网

标题: 自动工程图宏--自动建立带有6个标准视图和4个轴测视图的工程图文件 [打印本页]

作者: pyczt    时间: 2016-6-30 00:39
标题: 自动工程图宏--自动建立带有6个标准视图和4个轴测视图的工程图文件
'条件:当前开启零件或装配图
'结果:自动建立带有6个标准视图和4个轴测视图的工程图文件,并保存及另存为同名加后缀6+4的DWG文件
'注意:1工程图6+4.DRWDOT模板文件与宏文件同目录
        2.如在模型图中更新前视视图,则得到理想的主视图,得到理想的DWG

原理:根据工程图模板建立空白工程图文件,插入模型
       重新对齐和调整位置避免视图重叠
       保存工程图
       另存为DWG




作者: pyczt    时间: 2016-6-30 00:42
  1. ' ******************************************************************************
  2. ' autodraw.swp - By PYCZT, Copyright 2016-2018  writed on 06/28/16
  3. ' Notes: Templatesfile must be in same directory as macro file  注意:工程图6+4.DRWDOT模板文件与宏文件同目录

  4. '条件:当前开启零件或装配图
  5. '结果:自动建立带有6个标准视图和4个轴测视图的工程图文件,并保存和另存为同名加后缀6+4的DWG文件
  6. '如在模型图中更新前视视图,则得到理想的主视图,得到理想的DWG

  7. '******************************************************************************
  8. Dim swApp As Object
  9. Dim swModel As Object
  10. Dim swDraw As Object
  11. Dim swModelName As String
  12. Dim Templatesfile As String
  13. Dim boolstatus As Boolean
  14. Dim swView As Object
  15. Dim vOutline()    As Variant
  16. Dim vPos()        As Variant
  17. Dim nNumView      As Long
  18. Dim box(3)     As Single
  19. Dim longstatus As Long, longwarnings As Long

  20. Sub main()

  21. Set swApp = Application.SldWorks
  22. Set swModel = swApp.ActiveDoc
  23. swModelName = swModel.GetPathName      '读取当前SW模型文档名(含路径)

  24. Templatesfile = swApp.GetCurrentMacroPathName             ' Get macro path+filename 取得宏路径和名称
  25. Templatesfile = Left$(Templatesfile, Len(Templatesfile) - 12) + "工程图6+4.DRWDOT"    ' Set  Templates file name 设工程图模板名称
  26. Set swDraw = swApp.NewDocument(Templatesfile, 0, 0, 0)   '以模板建立工程图
  27. boolstatus = swDraw.InsertModelInPredefinedView(swModelName)  '在工程图中插入当前的模型

  28. '四个轴测图取消对齐关系(重新定位)
  29. boolstatus = swDraw.ActivateView("工程图视图7")
  30. boolstatus = swDraw.Extension.SelectByID2("工程图视图7", "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0)
  31. Set swView = swDraw.SelectionManager.GetSelectedObject5(1)
  32. boolstatus = swView.RemoveAlignment

  33. boolstatus = swDraw.ActivateView("工程图视图8")
  34. boolstatus = swDraw.Extension.SelectByID2("工程图视图8", "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0)
  35. Set swView = swDraw.SelectionManager.GetSelectedObject5(1)
  36. boolstatus = swView.RemoveAlignment

  37. boolstatus = swDraw.ActivateView("工程图视图9")
  38. boolstatus = swDraw.Extension.SelectByID2("工程图视图9", "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0)
  39. Set swView = swDraw.SelectionManager.GetSelectedObject5(1)
  40. boolstatus = swView.RemoveAlignment

  41. boolstatus = swDraw.Extension.SelectByID2("工程图视图10", "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0)
  42. Set swView = swDraw.SelectionManager.GetSelectedObject5(1)
  43. boolstatus = swView.RemoveAlignment

  44. swDraw.ClearSelection2 True

  45. 'Drawing views are repositioned so that none of them overlap.以下重新定位视图以免重叠

  46. nNumView = 0

  47. Set swView = swDraw.GetFirstView

  48.     Do While Not swView Is Nothing

  49.         ReDim Preserve vOutline(nNumView)
  50.         ReDim Preserve vPos(nNumView)

  51.         vOutline(nNumView) = swView.GetOutline
  52.         vPos(nNumView) = swView.Position

  53.         Debug.Print "View = " + swView.GetName2
  54.         Debug.Print "  Pos = (" & vPos(nNumView)(0) * 1000# & ", " & vPos(nNumView)(1) * 1000# & ") mm"
  55.         Debug.Print "  Min = (" & vOutline(nNumView)(0) * 1000# & ", " & vOutline(nNumView)(1) * 1000# & ") mm"
  56.         Debug.Print "  Max = (" & vOutline(nNumView)(2) * 1000# & ", " & vOutline(nNumView)(3) * 1000# & ") mm"

  57.         nNumView = nNumView + 1
  58.       
  59.         Set swView = swView.GetNextView
  60.     Loop
  61.    
  62.     ' sheet 图纸1
  63.     Set swView = swDraw.GetFirstView
  64.   
  65.     ' View 1 工程图视图1
  66.     Set swView = swView.GetNextView
  67.    
  68.     'View 2 - vertically aligned to view 1 工程图视图2 (俯视图)垂直对齐于工程图视图1
  69.     Set swView = swView.GetNextView
  70.     vPos(2)(1) = vPos(1)(1) - (vPos(1)(1) - vOutline(1)(1)) - (vOutline(2)(3) - vPos(2)(1))   'Y座标修改
  71.     swView.Position = vPos(2)
  72.     swDraw.GraphicsRedraw2
  73.     vPos(2) = swView.Position
  74.     vOutline(2) = swView.GetOutline
  75.    
  76.     'View 3 - horizontally aligned to view 1 工程图视图3 (左视图)水平对齐于工程图视图1
  77.     Set swView = swView.GetNextView
  78.     vPos(3)(0) = vPos(1)(0) + (vOutline(1)(2) - vPos(1)(0)) + (vPos(3)(0) - vOutline(3)(0))   'X座标修改
  79.     swView.Position = vPos(3)
  80.     swDraw.GraphicsRedraw2
  81.     vPos(3) = swView.Position
  82.     vOutline(3) = swView.GetOutline
  83.      
  84.     'View 4 - vertically aligned to view 1  工程图视图4 (仰视图)垂直对齐于工程图视图1
  85.     Set swView = swView.GetNextView
  86.     vPos(4)(1) = vPos(1)(1) + (vOutline(1)(3) - vPos(1)(1)) + (vPos(4)(1) - vOutline(4)(1)) 'Y座标修改
  87.     swView.Position = vPos(4)
  88.     swDraw.GraphicsRedraw2
  89.     vPos(4) = swView.Position
  90.     vOutline(4) = swView.GetOutline
  91.    
  92.     'View 5 - horizontally aligned to view 1 工程图视图5 (右视图)水平对齐于工程图视图1
  93.     Set swView = swView.GetNextView
  94.     vPos(5)(0) = vPos(1)(0) - (vPos(1)(0) - vOutline(1)(0)) - (vOutline(5)(2) - vPos(5)(0))   'X座标修改
  95.     swView.Position = vPos(5)
  96.     swDraw.GraphicsRedraw2
  97.      vPos(5) = swView.Position
  98.      vOutline(5) = swView.GetOutline
  99.    
  100.     'View 6 - horizontally aligned to view 3 工程图视图3 (后视图)水平对齐于工程图视图3
  101.     Set swView = swView.GetNextView
  102.     vPos(6)(0) = vPos(3)(0) + (vOutline(3)(2) - vPos(3)(0)) + (vPos(6)(0) - vOutline(6)(0))  'X座标修改
  103.     swView.Position = vPos(6)
  104.     swDraw.GraphicsRedraw2
  105.       vOutline(6) = swView.GetOutline
  106.    
  107.       
  108.       'View 7 - horizontally aligned to view 1 工程图视图7 (左下轴测视图)
  109.     Set swView = swView.GetNextView

  110.      vPos(7)(0) = vPos(1)(0) + (vOutline(1)(2) - vPos(1)(0)) + (vPos(7)(0) - vOutline(7)(0))  'X座标修改相对于工程图视图1
  111.     vPos(7)(1) = vPos(1)(1) - (vPos(1)(1) - vOutline(1)(1)) - (vOutline(7)(3) - vPos(7)(1))   'Y座标修改相对于工程图视图1
  112.     swView.Position = vPos(7)
  113.     swDraw.GraphicsRedraw2
  114.     vOutline(7) = swView.GetOutline

  115.     'View 8 - horizontally aligned to view 1 工程图视图8 (右下轴测视图)

  116.     Set swView = swView.GetNextView

  117.      vPos(8)(0) = vPos(1)(0) - (vPos(1)(0) - vOutline(1)(0)) - (vOutline(8)(2) - vPos(8)(0))  'X座标修改相对于工程图视图1
  118.    vPos(8)(1) = vPos(1)(1) - (vPos(1)(1) - vOutline(1)(1)) - (vOutline(8)(3) - vPos(8)(1))   'Y座标修改相对于工程图视图1
  119.    swView.Position = vPos(8)
  120.      swDraw.GraphicsRedraw2
  121.      vOutline(8) = swView.GetOutline
  122.    

  123.     'View 9 - horizontally aligned to view 1 工程图视图7 (左上轴测视图)

  124.     Set swView = swView.GetNextView

  125.      vPos(9)(0) = vPos(1)(0) + (vOutline(1)(2) - vPos(1)(0)) + (vPos(9)(0) - vOutline(9)(0))  'X座标修改相对于工程图视图1
  126.     vPos(9)(1) = vPos(1)(1) + (vOutline(1)(3) - vPos(1)(1)) + (vPos(9)(1) - vOutline(9)(1))   'Y座标修改相对于工程图视图1
  127.     swView.Position = vPos(9)
  128.      swDraw.GraphicsRedraw2
  129.      vOutline(9) = swView.GetOutline
  130.    

  131.     'View 10 - horizontally aligned to view 1 工程图视图8 (右上轴测视图)

  132.     Set swView = swView.GetNextView

  133.     vPos(10)(0) = vPos(1)(0) - (vPos(1)(0) - vOutline(1)(0)) - (vOutline(10)(2) - vPos(10)(0))  'X座标修改相对于工程图视图1
  134.     vPos(10)(1) = vPos(1)(1) + (vOutline(1)(3) - vPos(1)(1)) + (vPos(10)(1) - vOutline(10)(1))   'Y座标修改相对于工程图视图1
  135.     swView.Position = vPos(10)
  136.     swDraw.GraphicsRedraw2
  137.     vOutline(10) = swView.GetOutline
  138. swDraw.ViewZoomtofit2
  139. swDraw.ClearSelection2 (True)


  140. '以下删除视图中产生的中心线
  141. box(0) = vOutline(8)(0)
  142. If vOutline(5)(0) < box(0) Then box(0) = vOutline(5)(0)
  143. If vOutline(10)(0) < box(0) Then box(0) = vOutline(10)(0)

  144. box(1) = vOutline(8)(1)
  145. If vOutline(2)(1) < box(1) Then box(1) = vOutline(2)(1)
  146. If vOutline(7)(1) < box(1) Then box(1) = vOutline(7)(1)

  147. box(2) = vOutline(9)(2)
  148. If vOutline(6)(2) > box(2) Then box(2) = vOutline(6)(2)
  149. If vOutline(7)(2) > box(2) Then box(2) = vOutline(7)(2)

  150. box(3) = vOutline(9)(3)
  151. If vOutline(4)(3) > box(3) Then box(3) = vOutline(4)(3)
  152. If vOutline(10)(3) > box(3) Then box(3) = vOutline(10)(3)


  153. boolstatus = swApp.SetSelectionFilter(swSelCENTERLINES, True)    '过滤选择中心线
  154. boolstatus = swDraw.ActivateSheet("图纸1")
  155. boolstatus = swDraw.Extension.SketchBoxSelect(box(0), box(1), "0.000000", box(2), box(3), "0.000000")   '框选
  156. swDraw.EditDelete   '删除中心线

  157. boolstatus = swApp.SetSelectionFilter(swSelCENTERLINES, False)   '取消过滤选择中心线

  158. swModelName = Left(swModelName, Len(swModelName) - 7) + "(6+4).slddrw"  '定义工程图名

  159. longstatus = swDraw.SaveAs3(swModelName, 0, 0) '存为工程图文件

  160. swModelName = Left(swModelName, Len(swModelName) - 6) + "dwg"    '定义工程图名

  161. longstatus = swDraw.SaveAs3(swModelName, 0, 0) '存为DWG文件

  162. End Sub
复制代码


作者: xiabulai    时间: 2016-6-30 07:25
谢谢分享
作者: sonydvd    时间: 2016-7-5 22:20
多谢楼主
作者: 83038113    时间: 2016-8-15 15:37

多谢楼主
作者: gdzsh    时间: 2016-8-23 16:29
怎么替换工程图模板?

作者: gdzsh    时间: 2016-8-23 16:53
请问怎么替换工程图模板呢?

作者: yjm36    时间: 2016-12-14 10:02
先下载来,以后备用
作者: 口风琴    时间: 2017-5-1 15:43
谢谢分享,回帖学习
作者: 钱百万    时间: 2017-9-15 08:54
212312121111111111
作者: 钱百万    时间: 2017-9-15 13:48
9797979
作者: chaomogu    时间: 2018-7-30 22:19
膜拜大佬
作者: Trouble12138    时间: 2018-11-24 18:32
我的贡献值快没了
作者: yanhua8544    时间: 2018-11-27 11:05
感谢分享
作者: 18796891960    时间: 2020-4-27 23:04
谢谢分享
作者: FINDADAY    时间: 2020-5-2 21:52
下载来试用试用~~顶一个
作者: seamopan    时间: 2020-6-7 10:55
很实用的样子
作者: Debugg    时间: 2020-12-24 22:54
谢谢分享,学习学习
作者: deihc851209    时间: 2020-12-25 08:31
谢谢,这个很不错,顶起来
作者: 木棉    时间: 2021-4-4 12:16
谢谢楼主了
作者: Jiacai007    时间: 2021-10-19 11:11
顶一下,看看!

作者: hbhz520    时间: 2021-11-4 11:46
感谢分享
作者: fan03488    时间: 2021-11-9 16:39
感谢分享,如果能用当前视图为主来投影视图就很好了
作者: fan03488    时间: 2021-11-10 11:33
感谢分享,试试好不好用
作者: jaskey    时间: 2022-8-3 22:08
感谢分享
作者: youyouyangzi    时间: 2023-6-23 12:23
谢谢分享





欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3