• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    Autodesk Inventor

    Reply
    Contributor
    Posts: 15
    Registered: ‎04-30-2009
    Accepted Solution

    Printing drawing sheet sets from assembly BOM Parts list

    638 Views, 3 Replies
    11-27-2012 10:58 AM

    Here is my question,

    I have created an assembly that has a parts list, and in this parts list I have up to 100 mono detail drawings. I would like to know if there is a way to print all of these drawing from that list in a massive plot.

    At my previous company we had something like this in AutoCAD where a script was created to look at the drawings and print all drawings mentioned in the assembly BOM and subsequent sub-assemblies, it worked beautifully.

    I find that I have to print all drawings to paper or PDF individually.

    It would be fantastic If someone would comes up with an App to solve this problem.

     

    Cheers.

    Please use plain text.
    *Expert Elite*
    Curtis_Waguespack
    Posts: 1,988
    Registered: ‎03-08-2006

    Batch output component PDF files from an assembly file

    11-28-2012 11:07 AM in reply to: Adrian010

    Hi Adrian010,

     

    There is a VBA example for batch printing from the assembly here:

    http://forums.autodesk.com/t5/Autodesk-Inventor-Customization/Printing-all-drawings-of-an-assembly-f...

     

     

    And here is an ilogic rule to batch output PDF files for each component in the assembly. This rule assumes that the component drawings share the same name and location of the component.

     

    For example: C:\Temp\widget-450.ipt has a drawing: C:\Temp\widget-450.idw

    If the drawing file is not found, then it simply moves on and looks at the next component.

     

    I've not tested this rule very extensively, so it might contain flaws.

     

    This rule may not work for everyone, but it should provide a starting point from which it can be modified as needed.

     

    You can refer to this link to see how a basic rule is created, if iLogic is new to you:

    http://inventortrenches.blogspot.com/2012/01/creating-basic-ilogic-rule-with-event.html

     

    I hope this helps.
    Best of luck to you in all of your Inventor pursuits,
    Curtis
    http://inventortrenches.blogspot.com

     

    If you get errors from copying the code below, you can use the attached *.txt file instead.

     

    'define the active document as an assembly file
    Dim oAsmDoc As AssemblyDocument
    oAsmDoc = ThisApplication.ActiveDocument
    oAsmName = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)

    'check that the active document is an assembly file
    If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
    MessageBox.Show("Please run this rule from the assembly file.", "iLogic")
    Exit Sub
    End If

    'get user input
    RUsure = MessageBox.Show ( _
    "This will create a PDF file for all of the asembly components that have drawings files." _
    & vblf & "This rule expects that the drawing file shares the same name and location as the component." _
    & vblf & " " _
    & vblf & "Are you sure you want to create PDF Drawings for all of the assembly components?" _
    & vblf & "This could take a while.", "iLogic  - Batch Output PDFs ",MessageBoxButtons.YesNo)

    If RUsure = vbNo Then
    Return
    Else
    End If

    '- - - - - - - - - - - - -PDF setup - - - - - - - - - - - -
    oPath = ThisDoc.Path
    PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
    oContext = ThisApplication.TransientObjects.CreateTranslationContext
    oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
    oOptions = ThisApplication.TransientObjects.CreateNameValueMap
    oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

    If PDFAddIn.HasSaveCopyAsOptions(oDataMedium, oContext, oOptions) Then
    'oOptions.Value("All_Color_AS_Black") = 0
    oOptions.Value("Remove_Line_Weights") = 1
    oOptions.Value("Vector_Resolution") = 400
    oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
    'oOptions.Value("Custom_Begin_Sheet") = 2
    'oOptions.Value("Custom_End_Sheet") = 4
    End If

    'get PDF target folder path
    oFolder = oPath & "\" & oAsmName & " PDF Files"

    'Check for the PDF folder and create it if it does not exist
    If Not System.IO.Directory.Exists(oFolder) Then
        System.IO.Directory.CreateDirectory(oFolder)
    End If
    '- - - - - - - - - - - - -

    '- - - - - - - - - - - - -Component Drawings - - - - - - - - - - - -
    'look at the files referenced by the assembly
    Dim oRefDocs As DocumentsEnumerator
    oRefDocs = oAsmDoc.AllReferencedDocuments
    Dim oRefDoc As Document

    'work the the drawing files for the referenced models
    'this expects that the model has a drawing of the same path and name
    For Each oRefDoc In oRefDocs
    idwPathName = Left(oRefDoc.FullDocumentName, Len(oRefDoc.FullDocumentName) - 3) & "idw"
    'check to see that the model has a drawing of the same path and name
    If(System.IO.File.Exists(idwPathName)) Then
            Dim oDrawDoc As DrawingDocument
        oDrawDoc = ThisApplication.Documents.Open(idwPathName, True)
        oFileName = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName) -3)

        On error Resume Next ' if PDF exists and is open or read only, resume next
         'Set the PDF target file name
        oDataMedium.FileName = oFolder & "\" & oFileName & "pdf"
        'Write out the PDF
        Call PDFAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
        'close the file
        oDrawDoc.Close
    Else
    'If the model has no drawing of the same path and name - do nothing
    End If
    Next
    '- - - - - - - - - - - - -

    '- - - - - - - - - - - - -Top Level Drawing - - - - - - - - - - - -
    oAsmDrawing = ThisDoc.ChangeExtension(".idw")
    oAsmDrawingDoc = ThisApplication.Documents.Open(oAsmDrawing, True)
    oAsmDrawingName = Left(oAsmDrawingDoc.DisplayName, Len(oAsmDrawingDoc.DisplayName) -3)
    'write out the PDF for the Top Level Assembly Drawing file
    On error Resume Next ' if PDF exists and is open or read only, resume next
     'Set the PDF target file name
    oDataMedium.FileName = oFolder & "\" & oAsmDrawingName & "pdf"
    'Write out the PDF
    Call PDFAddIn.SaveCopyAs(oAsmDrawingDoc, oContext, oOptions, oDataMedium)
    'Close the top level drawing
    oAsmDrawingDoc.Close
    '- - - - - - - - - - - - -

    MessageBox.Show("New Files Created in: " & vblf & oFolder, "iLogic")
    'open the folder where the new ffiles are saved
    Shell("explorer.exe " & oFolder,vbNormalFocus)

     

     



      solution.png  Did you find this reply helpful ? If so please use the Accept as Solution or  Kudos button below.

    Please use plain text.
    Contributor
    danny
    Posts: 17
    Registered: ‎02-16-2012

    Re: Batch output component PDF files from an assembly file

    11-29-2012 01:43 AM in reply to: Curtis_Waguespack

    Hi Curtis,

     

    Like this, it is the next step after using your code for creating the PDF's to a subfolder.

     

    I tried to use it on my Assembly, but  it gave the next error:

    System.ArgumentException: De parameter is onjuist. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))
       at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
       at Inventor.Documents.Open(String FullDocumentName, Boolean OpenVisible)
       at LmiRuleScript.Main()
       at Autodesk.iLogic.Exec.AppDomExec.ExecRuleInAssembly(Assembly assem)
       at iLogic.RuleEvalContainer.ExecRuleEval(String execRule)

     

    Is that because my drawings are of the type .dwg?

    Regards
    Danny

    Inventor 2014 | Vault basic 2014 | HP Elitebook 8670W | win7 64b | 8Gb | GMT +1
    Please use plain text.
    Contributor
    danny
    Posts: 17
    Registered: ‎02-16-2012

    Re: Batch output component PDF files from an assembly file

    11-29-2012 01:46 AM in reply to: danny

    Hi Again,

     

    I changed the .idw in the code to .dwg and it works like a charm...

     

     

    Regards
    Danny

    Inventor 2014 | Vault basic 2014 | HP Elitebook 8670W | win7 64b | 8Gb | GMT +1
    Please use plain text.