15 Replies Latest reply on Sep 22, 2017 3:27 PM by Ryan Gaudreau

    Drawing Automation Macro

    Ryan Gaudreau

      I've been working on a macro to automate drawings from an assembly.  The overall goal is for the macro to store the filepaths and names of all components in the assembly, and then start a new drawing, creating and populating the sheets with components in the three standard views.  I have it working where it will store all the filepaths and names, open a new drawing, and drop components into the first two sheets (the first two sheets are in the template), but fails at creating any new sheets.  I'm not too familiar with the drawing commands, and things seem to work differently for me than what is described in the API help. For example, "create3rdangleviews" command won't work with my drawingdoc instance but will with my modeldoc instance.  If anyone can help me with this it would be greatly appreciated.  I have my code posted below.  I really just need help with the new sheet creation and view insertion, I think once I get that working I will be able to figure out my other problems and goals that I have listed in the notes.  Sorry in advance for my code, it is probably sloppy and inefficient.

       

      Dim swApp As SldWorks.SldWorks

      Dim swModel As SldWorks.ModelDoc2

      Dim swAssy As SldWorks.AssemblyDoc

      Dim swComp As SldWorks.Component2

      Dim swCompModel As SldWorks.ModelDoc2

       

      Dim swDoc As SldWorks.ModelDoc2

      Dim swDraw As SldWorks.DrawingDoc

      Dim swSheet As SldWorks.sheet

       

      Dim boolstatus As Boolean

      Dim bRet As Boolean

       

      Dim i As Integer

      Dim h As Integer

      Dim j As Integer

      Dim k As Integer

       

      Dim mypaths(50) As String

      Dim mynames(50) As String

      Dim mysheet As String

      Dim myprops As Object

      Dim vComps As Variant

         

      Sub main()

          Set swApp = Application.SldWorks

          Set swModel = swApp.ActiveDoc

          Set swAssy = swModel

         

          h = 0

         

          vComps = swAssy.GetComponents(False)

         

          If IsEmpty(vComps) Then Exit Sub

         

          'TRAVERSES ASSEMBLY FOR PARTS/SUB ASSEMBLIES

          For i = 0 To UBound(vComps)

              Set swComp = vComps(i)

              Set swCompModel = swComp.GetModelDoc2

                       

                  'gets the full pathway for every component in an assembly (not the assembly itself)

                  Dim vConfigNames As String

                     vConfigNames = swComp.GetPathName

                 

                  'returns last 3 places in component title (ex 001, 200, ect) --- will be used to name sheets in drawing

                  Dim vTitleNames As String

                      vTitleNames = swCompModel.GetTitle

                          vTitleNames = Strings.Right(vTitleNames, 3)

                                     

                  'this stores new names only and skips over duplicate parts

                      For j = 0 To UBound(mypaths)

                      If vConfigNames = mypaths(j) Then

                      GoTo Skip

                                               

                      Exit For

                      End If

                      Next j

                                 

                  'STORES NEW PARTS, DUPLICATE PARTS SKIP OVER THIS SECTION FROM CODE ABOVE

                  mypaths(h) = vConfigNames

                  mynames(h) = vTitleNames

                  'MsgBox (mypaths(h))

                  'MsgBox (mynames(h))

                  h = h + 1

      Skip:

           

          Next i

         

          'closes assembly document

              'boolstatus = swApp.CloseAllDocuments(False)

       

      'CREATE NEW DRAWING DOCUMENT

       

          Set swDoc = swApp.NewDocument("C:\SOLIDWORKS Data\PSF-GN.DRWDOT", 1, 0.2794, 0.2159)

          Set swDoc = swApp.ActiveDoc

          'INSERT CURRENT OPEN ASSEMBLY

          'FIRST PAGE NAME IN TEMPLATE = "GN" SECOND PAGE NAME = "2"

         

          'INSERTS VIEW INTO FIRST TWO PAGES, THIS WILL BE LARGE ASSEMBLY

          boolstatus = swDoc.Create3rdAngleViews(mypaths(1))

         

          'ACTIVATE SHEET "2", INSERT MODEL VIEWS

          boolstatus = swDoc.ActivateSheet("2")

          boolstatus = swDoc.Create3rdAngleViews(mypaths(1))

            

          'GET TEMPLATE OF SHEET "2" TO BE USED IN NEWLY CREATED SHEET

          'mysheet = swSheet.GetTemplateName()

         

          'CREATE NEW Sheet, INSERT MODELS FROM MYPATHS(I)

              'trying to go through list of components, create a new sheet for each, and insert model views

              'For k = 0 To UBound(mynames)

        

      -----fails here       

                  boolstatus = swDraw.NewSheet4(mynames(k), "", 12, "", "", "", "c:\programdata\solidworks\solidworks 2016\lang\english\sheetformat\a0 - landscape.slddrt", "", "", "", "", "", "", "", "", "")

                  'boolstatus = swDoc.ActivateSheet(mynames(k))

                 

                  'boolstatus = swDoc.Create3rdAngleViews(mypaths(k))

                  'Next k

        

          'SORT SHEETS BASED ON NUMBERS, THIS WILL PUT ASSEMBLIES FIRST --> METAL PARTS --> WOOD PARTS ECT

            

          'POSSIBLY ADD A CHOICE FUNCTION, ENTER YES IF YOU WANT TO FIT ANOTHER MODEL ONTO SHEET

              ' ENTER NO IF YOU WANT TO CREATE NEW SHEET AND INSERT MODEL

                  ' THIS WOULD ALLOW PAGE BY PAGE CONTROL ON THE DRAWING, WOULD NEED TO SET UP ZONES

       

      End Sub