3 Replies Latest reply on Oct 18, 2016 8:58 PM by Omid Amir

    Determine if Sketch Contour or Sketch Region

    Omid Amir

      hello

      I got this macro from solidworks api help of the sketch region

       

      Determine if Sketch Contour or Sketch Region Example (VBA)

      This example shows how to determine if the object is a sketch contour or a sketch feature. It also shows how to use the TypeOf keyword to determine the type of object in a given position in an array.

       

      '---------------------------------------

      '

      ' Preconditions:

      '          (1) Part document is open.

      '          (2) Part contains a base sketch with multiple sketch regions or sketch

      '              contours or both.

      '          (3) Extrude1 feature was created using sketch regions or

      '              sketch contours of base sketch.

      '

      ' Postconditions: None

      '

      '--------------------------------------

      Option Explicit

       

      Dim swApp As SldWorks.SldWorks

      Dim Part As SldWorks.PartDoc

      Dim boolstatus As Boolean

       

      Sub main()

      Set swApp = Application.SldWorks

      Set Part = swApp.ActiveDoc

      boolstatus = Part.Extension.SelectByID2("Extrude1", "BODYFEATURE", 0, 0, 0, False, 0, Nothing, swSelectOptionDefault)

      'Extrude3 is an extruded feature that has a combination of multiple

      'contours and multiple regions selected in its base sketch.

       

      Dim Extrudefeature As SldWorks.feature

      Dim Extrudefeature_DEF As SldWorks.ExtrudeFeatureData2

      Dim SelMgr As SldWorks.SelectionMgr

      Dim ContourArray As Variant

       

      Set SelMgr = Part.SelectionManager

      Set Extrudefeature = SelMgr.GetSelectedObject5(1)

      Set Extrudefeature_DEF = Extrudefeature.GetDefinition

      Extrudefeature_DEF.AccessSelections Part, Nothing

          ContourArray = Extrudefeature_DEF.Contours

      Extrudefeature_DEF.ReleaseSelectionAccess

       

      Dim SR As SketchRegion

      Dim SC As SketchContour

       

      ContourArray(0).Select False, 0

      Debug.Print TypeName(ContourArray(0))

      If TypeOf ContourArray(0) Is SketchRegion Then

          Debug.Print "Object is SketchRegion"

          Set SR = ContourArray(0)

      Else

          Debug.Print "Object is SketchContour"

          Set SC = ContourArray(0)

      End If

      End Sub

       

      --------------------------------------------------------------------------------------

      first question :  Are we able to select variable of varient  ?? ( select that in red line)

      second question : when the macro arrives to " typeof  " ( the blue line ) gives Error 13 ( type mismatch) . WHY ?????

      thanks .

        • Re: Determine if Sketch Contour or Sketch Region
          Amen Allah Jlili

          First answer: No. A variant data type encapsulates another object of x type, hence the name "variant". The select method is a member of the object's type x, not the variant's.

          Second answer:  A mismatch error occurs when VBA fails to match a variable's type to another.

           

          My first question to you is are you sure to have fulfilled the pre-conditions of the macro?
          My second question: Can you please post one question per thread!

           

          And thank you

          • Re: Determine if Sketch Contour or Sketch Region
            Artem Taturevych

            As Amen said most likely you haven't met the preconditions:

            • You must have an extrusion named 'Extrude1' (which you most likely have as you would have different error in different line)

            • The extrusion must be created from contours or regions (you cannot use a sketch for extrusion). I.e. the following box should be filled:

            Most likely the last condition isn't met so your ContourArray is empty and you cannot access its elements by index (ContourArray(0))

             

            You can check whether the array is empty using IsEmpty function

            If Not IsEmpty(ContourArray) Then

                'Work with array

            End If