AnsweredAssumed Answered

Drawing Automation Macro

Question asked by Ryan Gaudreau on Sep 11, 2017
Latest reply on Sep 22, 2017 by 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

Outcomes