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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1842|回复: 7
打印 上一主题 下一主题

宏代码——插入DXF文件和添加尺寸

[复制链接]

12

主题

223

帖子

35

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
264
QQ
跳转到指定楼层
楼主
发表于 2009-10-31 00:43:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   经典图书
Insert DXF File and Add Dimensions Example (VBA)
This example shows how to insert a DXF file on a pre-selected plane or face and how to then autodimension it.

'----------------------------------------------------
'
' Preconditions:
' (1) Part is open.
' (2) Plane or face on which to insert DXF file is selected.
'
' Postconditions:
' (1) DXF/DWG file is added as sketch.
' 2) Sketch is autodimensioned.
'
'----------------------------------------------------
Option Explicit

Const nTolerance As Double = 0.00000001

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.GetSketchPoints2
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

' 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

' Get 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

' 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

' Get first point
FindHorizontalOrigin = GetSketchPoint(swApp, swModel, swSketch, swSketchPtHoriz)
End Function

Function AutoDimensionSketch _
( _
swApp As SldWorks.SldWorks, _
swModel As SldWorks.ModelDoc2, _
swSketch As SldWorks.sketch, _
swSelData As SldWorks.SelectData _
) 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 with correct marks for auto-dimensioning
If Not swSketchSegVert Is Nothing Then
' Vertical line is for horizontal datum
bRet = swSketchSegVert.Select4(True, swSelData)
ElseIf Not swSketchPtHoriz Is Nothing Then
bRet = swSketchPtHoriz.Select4(True, swSelData)
ElseIf Not swSketchPtVert Is Nothing Then
' Use any sketch point for horizontal datum
bRet = swSketchPtVert.Select4(True, swSelData)
End If
Debug.Assert bRet

If Not swSketchSegHoriz Is Nothing Then
' Horizontal line is for vertical datum
bRet = swSketchSegHoriz.Select4(True, swSelData)
ElseIf Not swSketchPtVert Is Nothing Then
bRet = swSketchPtVert.Select4(True, swSelData)
ElseIf Not swSketchPtHoriz Is Nothing Then
' Use any sketch point for vertical datum
bRet = swSketchPtHoriz.Select4(True, swSelData)
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, swSelData)
ElseIf Not swSketchPtVert Is Nothing Then
bRet = swSketchPtVert.Select4(False, swSelData)
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()
Const sDwgFileName As String = "d:samplesrainbow.dxf"

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.modelDoc
Dim swFeatMgr As SldWorks.FeatureManager
Dim swFeat As SldWorks.feature
Dim swSketch As SldWorks.sketch
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSelData As SldWorks.SelectData
Dim nRetVal As Long
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatMgr = swModel.FeatureManager
Set swFeat = swFeatMgr.InsertDwgOrDxfFile(sDwgFileName)
Set swSketch = swFeat.GetSpecificFeature2
Set swSelMgr = swModel.SelectionManager
Set swSelData = swSelMgr.CreateSelectData

nRetVal = AutoDimensionSketch(swApp, swModel, swSketch, swSelData)

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

使用道具 举报

14

主题

233

帖子

48

金币

侠客

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

10

主题

215

帖子

27

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
262
QQ
板凳
发表于 2009-10-31 00:47:31 | 只看该作者

   经典图书
支持一下,好东西啊.
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

196

帖子

24

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
248
QQ
地板
发表于 2009-10-31 00:53:35 | 只看该作者
进来学习。。。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

95

主题

297

帖子

179

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
499
QQ
5#
发表于 2009-10-31 00:58:51 | 只看该作者

   经典案例图书
昏厥。。这是Api文档里,复制出来的。还不一定能用。。。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

219

帖子

28

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
263
QQ
6#
发表于 2009-10-31 01:08:41 | 只看该作者
席风图文设计工作室 [学生创业] LOGOVI平面广告宣传册产品包装等图文设计;活动策划书推广软文等写作
构思非凡 价格低廉 QQ:1362197329
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

19

主题

1086

帖子

1877

金币

禁止发言

积分
4713

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

7#
发表于 2022-4-7 21:44:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

618

帖子

18

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1870

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

8#
发表于 2024-3-15 18:37:54 | 只看该作者
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

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

手机版|小黑屋| GMT+8, 2024-9-29 17:38 , Processed in 0.208403 second(s), 25 queries , Memcache On.

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

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

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