AnsweredAssumed Answered

Iterating with insertrefplane causes Solidworks Crash?

Question asked by Paige Reisman on Aug 10, 2015

I'm trying to iterate what (I thought) was a fairly simply process that needs to be repeated 100+ times.


The general goal is to first, sketch lines between a set of points and the midpoint. Then I need to create a reference plane, coincident to each point and perpendicular to each line.


Here is the code so far: For the record, before starting the code, I import points using an excel to point cloud macro that I someone else created.


Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim skSegment As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Dim sketchPointArray As Variant

Dim pointCount As Integer

Dim i As Integer

Dim strSketchName As String


Sub main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc


'Get 3dsketch with points via SelectByID2

boolstatus = swModel.Extension.SelectByID2("3DSketch1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)


Set the3Dsketch = swModel.GetActiveSketch2

swModel.SketchManager.InsertSketch True



'Get SketchPoints from within '3DSketch with points'

sketchPointArray = the3Dsketch.GetSketchPoints2

pointCount = UBound(sketchPointArray)


'create new 3DSketch to connect the points

' For each SketchPoint in the "3DSketch with points"

'Coords of Midpoint (pt 1)

x1Value = sketchPointArray(0).X

y1Value = sketchPointArray(0).Y

z1Value = sketchPointArray(0).Z


'Begin Loop

For i = 1 To pointCount

swModel.SketchManager.Insert3DSketch True


'Coords of Point on Head Cap (pt 2)

x2Value = sketchPointArray(i).X

y2Value = sketchPointArray(i).Y

z2Value = sketchPointArray(i).Z


'And create a line between them

Set skSegment = swModel.SketchManager.CreateLine(x1Value, y1Value, z1Value, x2Value, y2Value, z2Value)



swModel.SketchManager.InsertSketch True

swModel.ClearSelection2 True


Next i


'Make planes in the same code

For i = 1 To 2

    strSketchName = "Sketch" & i + 1

    boolstatus = swModel.Extension.SelectByID2("", "EXTSKETCHPOINT", sketchPointArray(i).X, sketchPointArray(i).Y, sketchPointArray(i).Z, False, 0, Nothing, 0)

    boolstatus = swModel.Extension.SelectByID2(strSketchName, "SKETCH", 0, 0, 0, True, 1, Nothing, 1)

    Dim myRefPlane As Object

    Set myRefPlane = swModel.FeatureManager.InsertRefPlane(4, 0, 2, 0, 0, 0)

    Part.ClearSelection2 True



Next i

End Sub


The code works perfectly until the part I bolded - in which the program doesn't give me any error messages nor does it even attempt to make a reference plane, it simply crashes all of solidworks entirely.

I cut the program down to only act between a few points, and it still crashes.


Does anyone know what I can do to fix this problem? Is there any other way I can iterate through different points/lines and create several reference planes?