I am working through Mike Spens' book "Automating Solidworks 2017 Using Macros" and one of the examples is consistently crashing out with a type mismatch, and I don't understand why. The complete code is at the bottom.
Where it is crashing is on this line:
'rollback to edit the feature retval = featureDef.AccessSelections(part, Nothing)
featureDef is defined as type Object. If I change it to type ExtrudeFeatureData2, the macro works as expected.
The earlier line that calls getdraftwhileextruding does not cause any problems when featureDef is defined as either type, so as near as I can tell the featureDef Object is being correctly populated by GetDefinition.
I would like to know:
What am I doing wrong? (I'm not a programmer, and trying to learn VB.NET at the same time as the Solidworks API, so I'm sure it's something silly that I've missed.)
How can I fix it?
I should also note that I'm using 2018 with VSTA 3.0 enabled, although the same problem happens if I disable VSTA 3.0.
Thanks in advance,
Imports SolidWorks.Interop.sldworks Imports SolidWorks.Interop.swconst Imports System.Runtime.InteropServices Imports System Partial Class SolidWorksMacro Public Sub main() Dim part As ModelDoc2 Dim MyFeature As Feature Dim featureDef As Object Dim retval As Object Dim message As String part = swApp.ActiveDoc MyFeature = part.FeatureByName("Cut-Extrude1") featureDef = MyFeature.GetDefinition 'get some settings from the feature If featureDef.getdraftwhileextruding(True) = False Then message = "The selected feature has no draft" & vbCr End If Select Case featureDef.getendcondition(True) Case swEndConditions_e.swEndCondBlind message = message & "Blind" Case swEndConditions_e.swEndCondThroughAll message = message & "Through all" Case swEndConditions_e.swEndCondThroughAllBoth message = message & "Through All Both" Case swEndConditions_e.swEndCondUpToSurface message = message & "Up to surface" Case swEndConditions_e.swEndCondMidPlane message = message & "Midplane" Case swEndConditions_e.swEndCondOffsetFromSurface message = message & "Offset from surface" Case swEndConditions_e.swEndCondThroughNext message = message & "Up to next" Case swEndConditions_e.swEndCondUpToBody message = message & "Up to body" End Select MsgBox(message & " end condition. ", MsgBoxStyle.Information) 'rollback to edit the feature retval = featureDef.AccessSelections(part, Nothing) 'modify some feature value featureDef.setendcondition(True, swEndConditions_e.swEndCondThroughAll) featureDef.setdraftwhileextruding(True, True) featureDef.setdraftangle(True, 2 * Math.PI / 180) 'complete the edit operation retval = MyFeature.ModifyDefinition(featureDef, part, Nothing) 'in case the modifications failed If retval = False Then featureDef.releaseselectionaccess() End If End Sub ''' <summary> ''' The SldWorks swApp variable is pre-assigned for you. ''' </summary> Public swApp As SldWorks End Class