3 Replies Latest reply on Aug 9, 2017 3:03 PM by Ivana Kolin

    Macro-insert more than 1000 parts

    Cynthia Jin

      I am doing a project to explore an automatic method to build the multi-electrode CAD model using SolidWorks. I try to use macro to insert more than one thousand electrode models to a head model. I have already calculated all the coordinates and normal vectors of each electrode. But when I insert the points, some points are missed. I have tried a lot of methods, it still doesn't work. How to write the macro?

      Here is my codes:

      ' ******************************************************************************

      ' Function: automation electrode placement

      ' The line with a '*' should be changed if necessary

      ' There are some lines should never be changed

      ' ******************************************************************************

      Dim swApp As Object

      Dim Part As Object

      Dim boolstatus As Boolean

      Dim longstatus As Long, longwarnings As Long

      Dim SelMgr As Object

      Dim Feature As Object

      Dim filepath As String

      Dim myMate As Object

      Dim i As Integer

      Dim instance As IPartDoc

      Dim Xholder, Yholder, Zholder As Double

      Dim aisname As String

      Dim elename As String

       

      Sub main()

       

      Set swApp = Application.SldWorks

      Set Part = swApp.ActiveDoc

      Set SelMgr = Part.SelectionManager

      Dim swSelData As SldWorks.SelectData

       

      '*change the number according to how many electrode you have already insert. MAke sure the number of axis and electrode are the same

      i = 2

       

      '*add path and change name is necessary

      '1--the position of the electrode

      '2--the normal vector of the electrode

      Open "10-10systembyJWL.txt" For Input As #1

      Open "normalv10-10sysbyJWL.txt" For Input As #2

      Do While Not EOF(1)

       

      ' *Change the name of Axis, it can be different according to the language

      axisname = "Axis" + Trim(Str(i))

       

      ' *do remeber to change the assem name "@Assem6" can be different in different project

      elename = "Point1@Origin@electrode_with_gel_on_z_4mm_diameter-" + Trim(Str(i)) + "@Assem6"

       

      ' Add electrode

      Set Part = swApp.ActiveDoc

      '*add the path and change name if necessary

      boolstatus = Part.AddComponent("electrode_with_gel_on_z_4mm_diameter.SLDPRT", 0#, 0#, 0#)

       

      Input #2, X, Y, Z

      'Add axis

      boolstatus = Part.Extension.SelectByID2("", "EXTSKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0)

      boolstatus = Part.Extension.SelectByID2("", "EXTSKETCHPOINT", X / 1000, Y / 1000, Z / 1000, True, 0, Nothing, 0)

      boolstatus = Part.InsertAxis2(True)

       

      ' set the direction

      'change the axis name

      boolstatus = Part.Extension.SelectByID2(axisname, "AXIS", 0, 0, 0, False, 0, Nothing, 0)

      boolstatus = Part.Extension.SelectByID2("", "FACE", 0, 0, 0.002, True, 1, Nothing, 0)

      Dim myMate As Object

      'never change the following line

      Set myMate = Part.AddMate4(2, -1, False, 8.38952298466863E-03, 0, 0, 0.001, 0.001, 0.5235987755983, 0.5235987755983, 0.5235987755983, False, False, longstatus)

      Part.ClearSelection2 True

      Part.EditRebuild3

       

      Input #1, X, Y, Z

      ' move to position

      boolstatus = Part.Extension.SelectByID2(elename, "EXTSKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0)

      boolstatus = Part.Extension.SelectByID2("", "EXTSKETCHPOINT", X / 1000, Y / 1000, Z / 1000, True, 0, Nothing, 0)

      'never change the following line

      Set myMate = Part.AddMate4(0, -1, False, 0.114412498475579, 0, 0, 0.001, 0.001, 0.5235987755983, 0.5235987755983, 0.5235987755983, False, False, longstatus)

      Part.ClearSelection2 True

      Part.EditRebuild3

       

      i = i + 1

      Loop

      Close #1

      Close #2

       

       

      End Sub


      The points have already insert. The problem is that some points are missed, and it is a huge disaster.

      Explore an automatic method to build the multi-electrode CAD model using SolidWorks.

       

       

        • Re: Macro-insert more than 1000 parts
          Ivana Kolin

          can you post the macro which inserts points?

            • Re: Macro-insert more than 1000 parts
              Cynthia Jin

              ' ******************************************************************************

              ' Function: add position of electrode points

              ' change the line with '*'

              ' ******************************************************************************

              Dim swApp As Object

               

              Sub main()

              Set swApp = Application.SldWorks

              Set Part = swApp.ActiveDoc

              swApp.ActiveDoc.ActiveView.FrameState = 1

              Dim skPoint As Object

               

              ' *change name and add path if necessary

              Open "10-10systembyJWL.txt" For Input As #1

               

              Part.SketchManager.Insert3DSketch True

              Set skPoint = Part.SketchManager.CreatePoint(0#, 0#, 0#)

               

              Do While Not EOF(1)

              Input #1, X, Y, Z

              Set skPoint = Part.SketchManager.CreatePoint(X / 1000, Y / 1000, Z / 1000)

              Loop

              Close #1

               

              Part.ShowNamedView2 "*Isometric", 7

              Part.ViewZoomtofit2

               

              End Sub

               

              There are two .txt files should be read.   Inserting coordinates and the normal vector use the same code. Actually 10-10systembyJWL.txt contains within 100 points, there are still some points not inserted.

                • Re: Macro-insert more than 1000 parts
                  Ivana Kolin

                  I told you that you missed AddToDb

                   

                  Part.SketchManager.Insert3DSketch True

                  Part.SketchManager.AddToDb = True

                  Set skPoint = Part.SketchManager.CreatePoint(0#, 0#, 0#)

                   

                  Do While Not EOF(1)

                  Input #1, X, Y, Z

                  Set skPoint = Part.SketchManager.CreatePoint(X / 1000, Y / 1000, Z / 1000)

                  Loop

                  Close #1

                  Part.SketchManager.AddToDb = False

                  Part.ShowNamedView2 "*Isometric", 7

                  Part.ViewZoomtofit2