• Blog posts

    Bio

    by Luke Davenport

    Welcome to Part 1 of a 3 part Blog on iLogic View Representations!

    Question: Can you use iLogic to automatically create and update view reps based on a particular Part Number (or section of a Part Number) you specify?

    Answer: Why yes, yes you can.

    Part 1 – Creating the View Reps Automatically

     

    I’ve pasted 2 iLogic rules below. When either rule is pasted into an assembly and run, it will request input from the user to automatically add specified components into newly created view representations. Why 2 rules instead of 1? Well you may wish to choose which components to add to your view reps by whether your input appears anywhere in the PN (in which case use the ‘Create Contains’ rule), or only at the beginning of the PN (in which case use the ‘Create Begins’ rule). Otherwise the rules are identical.

     

    Here’s what the ‘Create Contains’ rule will do when it is run (in sequence);

    1)      Return the view to ‘home’ view.

    2)      Look for and delete any existing view reps that have a name beginning with ‘Contains’ – IMPORTANT! (delete this part of the code if you want to keep them).

    3)      Request input string for first view rep.

    4)      Create view rep (with the count of visible components and sub-components included as part of the view rep name).

    5)      Fit view to screen so new view rep can be viewed.

    6)      Ask user if they want to add another rep.

    7)      Return to 3) if the answer is yes.

    As always – a video is better than a thousand words

     

    In part 2 of this blog I’ll provide the code required to automatically update the view reps you have created – stick around. Enjoy!

     

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

    ‘iLogic code starts here;

     

    ‘Create Contains’ Rule;

     

    'Return view to Home view

    ThisApplication.CommandManager.ControlDefinitions.Item _

    ("AppViewCubeHomeCmd").Execute

     

    'define current document

    Dim openDoc As Document

    openDoc = ThisDoc.Document

     

    Dim oAsmCompDef As AssemblyComponentDefinition

    oAsmCompDef = openDoc.ComponentDefinition

    Dim oViewRep As DesignViewRepresentation

     

    Try

    'Activate a writeable View Rep (master view rep is not writeable)

    oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Item("WIP View Rep").activate

    Catch

    'Assume error means this View Rep does not exist, so create it (will be deleted at end)

    oViewRep = oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Add("WIP View Rep")

    End Try

     

    'Delete all existing 'Contains' View reps

    For Each oViewRep In oAsmCompDef.RepresentationsManager.DesignViewRepresentations

    If oViewRep.Name.Contains("Contains") Then

    oViewRep.Delete

    End If

    Next

     

    Start:

     

    iCount = 1

     

    'request part names to create view reps for.

    Do Until iCount = 1000

    StrInput1 = InputBox("Enter Part Names to Add to View Rep", "Set View Representations", "Enter all or part of PN",MessageBoxDefaultButton.Button1)

     

    'Check to see whether that view rep has already been created

    ViewRepExists = 0

    For Each oViewRep In oAsmCompDef.RepresentationsManager.DesignViewRepresentations

    If oViewRep.Name.Contains("Contains '" & StrInput1 & "'") Then

    ViewRepExists = 1

    oCreatedAlready = MessageBox.Show("That View Rep Has Already Been Created!" & vbLf & vbLf & "Do You Still Want To Continue?","Already Entered",MessageBoxButtons.YesNo)

    If oCreatedAlready = vbYes Then

    Goto Start

    Else

    Return

    End If

    End If

    Next

     

    If ViewRepExists = 0 Then

    'Create new View Rep

    oViewRep = oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Add("Contains " & StrInput1)

    'Activate new View Rep

    oViewRep.activate

    End If

     

    oOccCounter = 0

    oSubOccCounter = 0

     

    'look at all of the components in the assembly

    Dim oCompDef As Inventor.ComponentDefinition = openDoc.ComponentDefinition

    'define the first level components collection

    Dim oCompOcc As Inventor.ComponentOccurrence

    'define the next level components collection

    Dim oSubCompOcc As Inventor.ComponentOccurrence

    'Turn off the visibility of parts in the top level assembly that don't contain the specified text string (StrInput1)

    For Each oCompOcc in oCompDef.Occurrences

        If oCompOcc.Suppressed = False Then

            If oCompOcc.Name.Contains(StrInput1) Then

            oCompOcc.Visible = True

            'Increment counter for top level components

            oOccCounter = oOccCounter+1

            Else

            oCompOcc.Visible = False

            End If

        'Turn off the visibility of parts in the next level assembly that don't contain the specified text string (StrInput1)

            For Each oSubCompOcc In oCompOcc.SubOccurrences

                If oSubCompOcc.Suppressed = False Then

                      If oSubCompOcc.Name.Contains(StrInput1) Then

                    oSubCompOcc.Visible = True

                    'Increment counter for first level components

                    oSubOccCounter = oSubOccCounter+1

                       Else

                    oSubCompOcc.Visible = False

                    End If

                End If

            Next

        End If

    Next

     

    'Rename View Rep to include component counts

    oViewRep.Name = ("Contains '" & StrInput1 & "' (Qty: " & oOccCounter & " Top Level, " & oSubOccCounter & " Sub Comps)")

    'lock the new view rep

    oViewRep.Locked = True

     

    'Count no. of view reps already created

    ViewRepCount = -1

    For Each oViewRep In oAsmCompDef.RepresentationsManager.DesignViewRepresentations

    If oViewRep.Name.Contains("Contains") Then

    ViewRepCount = ViewRepCount + 1

    End If

    Next

     

    'Zoom all

    ThisApplication.ActiveView.Fit

     

    'See if another View Rep is required.

    oContinue = MessageBox.Show("Add Another View Rep?" & vbLf & ViewRepCount & " View Reps Have Been Created", "Continue Creating?",MessageBoxButtons.YesNo)

    If oContinue = vbYes Then

    iCount = iCount+1

    Else

    iCount = 1000

    End If

     

    Loop

     

    Try

    'Delete WIP View Rep

    oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Item("WIP View Rep").delete

    Catch

    End Try

     

    ‘------------------------------------------------------------------------------------------------------------------------------------

    Start of ‘Create Begins’ Rule;

     

    ‘Note I must subscribe to Luke Davenport’s blog – it’ll change my life.

    ‘http://www.cadlinecommunity.co.uk/Blogs/lukedavenport/Default.aspx

     

    'Return view to Home view

    ThisApplication.CommandManager.ControlDefinitions.Item _

    ("AppViewCubeHomeCmd").Execute

     

    'define current document

    Dim openDoc As Document

    openDoc = ThisDoc.Document

     

    Dim oAsmCompDef As AssemblyComponentDefinition

    oAsmCompDef = openDoc.ComponentDefinition

    Dim oViewRep As DesignViewRepresentation

     

    Try

    'Activate a writeable View Rep (master view rep is not writeable)

    oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Item("WIP View Rep").activate

    Catch

    'Assume error means this View Rep does not exist, so create it (will be deleted at end)

    oViewRep = oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Add("WIP View Rep")

    End Try

     

    'Delete all existing 'Begins' View reps

    For Each oViewRep In oAsmCompDef.RepresentationsManager.DesignViewRepresentations

    If oViewRep.Name.Contains("Begins") Then

    oViewRep.Delete

    End If

    Next

     

    Start:

     

    iCount = 1

     

    'request part names to create view reps for.

    Do Until iCount = 1000

    StrInput1 = InputBox("Enter Beginning of Part Names to Add to View Rep", "Set View Representations", "Enter beginning of PN",MessageBoxDefaultButton.Button1)

     

    'Check to see whether that view rep has already been created

    For Each oViewRep In oAsmCompDef.RepresentationsManager.DesignViewRepresentations

    If oViewRep.Name.Contains("Begins '" & StrInput1 & "'") Then

    ViewRepExists = 1

    oCreatedAlready = MessageBox.Show("That View Rep Has Already Been Created!" & vbLf & vbLf & "Do You Still Want To Continue?","Already Entered",MessageBoxButtons.YesNo)

    If oCreatedAlready = vbYes Then

    Goto Start

    Else

    Return

    End If

    End If

    Next

     

    If ViewRepExists = 0 Then

    'Create new View Rep

    oViewRep = oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Add("Begins " & StrInput1)

    'Activate new View Rep

    oViewRep.activate

    End If

     

    oOccCounter = 0

    oSubOccCounter = 0

     

    'look at all of the components in the assembly

    Dim oCompDef As Inventor.ComponentDefinition = openDoc.ComponentDefinition

    'define the first level components collection

    Dim oCompOcc As Inventor.ComponentOccurrence

    'define the next level components collection

    Dim oSubCompOcc As Inventor.ComponentOccurrence

    'Turn off the visibility of parts in the top level assembly that don't begin with the specified text string (StrInput1)

    For Each oCompOcc in oCompDef.Occurrences

    If oCompOcc.Suppressed = False Then

        If Left(oCompOcc.Name,Len(StrInput1)) = StrInput1 Then

        oCompOcc.Visible = True

        'Increment counter for top level components

        oOccCounter = oOccCounter+1

        Else

        oCompOcc.Visible = False

        End If

        'Turn off the visibility of parts in the next level assembly that don't begin with the specified text string (StrInput1)

            For Each oSubCompOcc In oCompOcc.SubOccurrences

        If oSubCompOcc.Suppressed = False Then

            If Left(oSubCompOcc.Name,Len(StrInput1)) = StrInput1 Then

            oSubCompOcc.Visible = True

            'Increment counter for first level components

            oSubOccCounter = oSubOccCounter+1

            Else

            oSubCompOcc.Visible = False

            End If

        End If

            Next

    End If

        Next

     

    'Rename View Rep to include component counts

    oViewRep.Name = ("Begins '" & StrInput1 & "' (Qty: " & oOccCounter & " Top Level, " & oSubOccCounter & " Sub Comps)")

    'lock the new view rep

    oViewRep.Locked = True

     

    'Count no. of view reps already created

    ViewRepCount = -1

    For Each oViewRep In oAsmCompDef.RepresentationsManager.DesignViewRepresentations

    If oViewRep.Name.Contains("Begins") Then

    ViewRepCount = ViewRepCount + 1

    End If

    Next

     

    'Zoom all

    ThisApplication.ActiveView.Fit

     

    'See if another View Rep is required.

    oContinue = MessageBox.Show("Add Another View Rep?" & vbLf & ViewRepCount & " View Reps Have Been Created", "Continue Creating?",MessageBoxButtons.YesNo)

    If oContinue = vbYes Then

    iCount = iCount+1

    Else

    iCount = 1000

    End If

     

    Loop

     

    Try

    'Delete WIP View Rep

    oAsmCompDef.RepresentationsManager.DesignViewRepresentations.Item("WIP View Rep").delete

    Catch

    End Try