AnsweredAssumed Answered

Get Names of Sketch Segments Example (VBA)

Question asked by Frank Van Eygen on Dec 19, 2019

How to get the macro in SW help file to get each sketch segment for all structural members instead of a sheet metal bend?

2016 SOLIDWORKS API Help - Get Names of Sketch Segments Example (VBA) 

Sub main()
Dim swApp As SldWorks.SldWorks
Dim swMathUtil As SldWorks.MathUtility
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature
Dim swOneBend As SldWorks.OneBendFeatureData
Dim vSketchSegs As Variant
Dim swSketchSeg As SldWorks.SketchSegment
Dim swSketch As SldWorks.Sketch
Dim swSketchFeat As SldWorks.Feature
Dim swSketchLine As SldWorks.SketchLine
Dim swSkStartPt As SldWorks.SketchPoint
Dim swSkEndPt As SldWorks.SketchPoint
Dim swSelData As SldWorks.SelectData
Dim nPt(2) As Double
Dim vPt As Variant
Dim swStartPt As SldWorks.MathPoint
Dim swEndPt As SldWorks.MathPoint
Dim swSkXform As SldWorks.MathTransform
Dim vID As Variant
Dim i As Long

Dim swBody As SldWorks.Body2 '<-- new to get selected structural member body/item
Dim swStructuralMemberFD As StructuralMemberFeatureData

Set swApp = Application.SldWorks
Set swMathUtil = swApp.GetMathUtility

Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager

'Set swFeat = swSelMgr.GetSelectedObject6(1, -1) '<-- this is for selected feature but I need this for each seperatly selected structural member body/item
' ' so this will give error
Set swBody = swSelMgr.GetSelectedObject6(1, -1) '<-- this gets the selected structural member body/item

Set swSelData = swSelMgr.CreateSelectData

'Set swOneBend = swFeat.GetDefinition '<-- as swFeat is not set this gives error
Set swStructuralMemberFD = swBody.GetDefinition '<-- why does this not work? is it even necessary?

'this needs to change so it will work with the selected structural member body/item
'but how???
'(
'Debug.Print "Type of bend (swBendType_e): " & swOneBend.GetType()
'Debug.Print "Number of sketch segments: " & swOneBend.GetFlatPatternSketchSegmentCount2
'vSketchSegs = swOneBend.FlatPatternSketchSegments2
')

For i = 0 To UBound(vSketchSegs)
Set swSketchSeg = vSketchSegs(i)
Set swSketch = swSketchSeg.GetSketch
Set swSketchLine = swSketchSeg
Set swSkStartPt = swSketchLine.GetStartPoint2
Set swSkEndPt = swSketchLine.GetEndPoint2
vID = swSketchSeg.GetID

' Get sketch feature
Set swSketchFeat = swSketch
Set swSkXform = swSketch.ModelToSketchTransform
Set swSkXform = swSkXform.Inverse

nPt(0) = swSkStartPt.X
nPt(1) = swSkStartPt.Y
nPt(2) = swSkStartPt.Z
vPt = nPt
Set swStartPt = swMathUtil.CreatePoint(vPt)
Set swStartPt = swStartPt.MultiplyTransform(swSkXform)

nPt(0) = swSkEndPt.X
nPt(1) = swSkEndPt.Y
nPt(2) = swSkEndPt.Z
vPt = nPt
Set swEndPt = swMathUtil.CreatePoint(vPt)
Set swEndPt = swEndPt.MultiplyTransform(swSkXform)

Debug.Print "File = " & swModel.GetPathName
Debug.Print " Feature = " & swFeat.Name & " [" & swFeat.GetTypeName2 & "]"
Debug.Print " Sketch = " & swSketchFeat.Name
Debug.Print " SegID = [" & vID(0) & ", " & vID(1) & "]"
Debug.Print " Start with respect to sketch = (" & swSkStartPt.X * 1000# & ", " & swSkStartPt.Y * 1000# & ", " & swSkStartPt.Z * 1000# & ") mm"
Debug.Print " End with respect to sketch = (" & swSkEndPt.X * 1000# & ", " & swSkEndPt.Y * 1000# & ", " & swSkEndPt.Z * 1000# & ") mm"
Debug.Print " Start with respect to model = (" & swStartPt.ArrayData(0) * 1000# & ", " & swStartPt.ArrayData(1) * 1000# & ", " & swStartPt.ArrayData(2) * 1000# & ") mm"
Debug.Print " End with respect to model = (" & swEndPt.ArrayData(0) * 1000# & ", " & swEndPt.ArrayData(1) * 1000# & ", " & swEndPt.ArrayData(2) * 1000# & ") mm"
Next i
End Sub

Outcomes