Autodesk Inventor 2017 – iLogic – Identify Parts in Layout Drawings
Luke Davenport
28 February 2017
Inventor is fantastic at many things, but flexibility when tagging components in layout drawings is not a strong point in my view.
If you’re using Factory Design Utilities there are some handy tools for including identification tags for components, but if you’re using standard Inventor, you’ll probably be relying on the balloon tools. These allow any property to be included in the balloon (good), but don’t allow much flexibility for auto-positioning the balloons when placing them (for instance central to the component on the drawing view).
In comparison to a product like Revit, which is more focused on large layouts and tagging, there can be quite a lot of manual effort.
What to do?
Well a training delegate recently made the excellent suggestion of using a model sketch in the part templates for the layout, and then including the sketches in the drawing view. This allows great flexibility with positioning, as the position can be parametrically controlled in the part sketch, and also allows any parameter or iProperty value to be used in the sketch text (for instance).
The only missing link in the chain is how to quickly ‘include’ these sketches in a layout drawing to make them visible. iLogic to the rescue!
Check out the video for explanation, and see the iLogic code below.
Note: the below video was created by Excitech prior to becoming Symetri in January 2021, following its acquisition by Addnode Group. All Excitech products, services and solutions mentioned in this recording are available through Symetri.
' Start of iLogic code ======================================================================
Sub Main()
Dim Title As String = "Excitech iLogic" Dim Counter As Integer = 0 Dim SketchName As String = "
Try
Dim oDrawingDoc As DrawingDocument = Nothing If ThisApplication.ActiveDocument.DocumentType <> kDrawingDocumentObject Then MsgBox("This iLogic rule only works with drawing documents!", MsgBoxStyle.OkOnly, Title) Exit Sub End If
oDrawingDoc = ThisApplication.ActiveDocument
Dim oView As DrawingView = Nothing
oView = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kDrawingViewFilter, _ "Select a view to toggle sketch visibility, or hit ESC to cancel...")
If oView Is Nothing Then Exit Sub End If
' Get user input for the sketch name SketchName = InputBox("Please enter name of sketch to toggle visibility.",Title, "Sketch 1")
' Get the referenced document Dim oDoc As Document = oView.ReferencedDocumentDescriptor.ReferencedDocument
If oDoc.DocumentType <> kAssemblyDocumentObject Then MsgBox("The referenced document needs to be an assembly. Exiting", MsgBoxStyle.OkOnly, Title) Exit Sub End If
Dim oAssy As AssemblyDocument = oView.ReferencedDocumentDescriptor.ReferencedDocument Dim oOccs As ComponentOccurrences = oAssy.ComponentDefinition.Occurrences Dim oOcc As ComponentOccurrence = Nothing Dim TopLevelOcc As ComponentOccurrence = Nothing Dim Level As Integer = 0 Dim TopLevelAsmDef As AssemblyComponentDefinition = Nothing
If Counter = 0 Then MsgBox("No sketches called " & SketchName & " were found in this view.", MsgBoxStyle.OkOnly, Title) End If
End Sub
Sub LoopThroughSubOccurrences(ByRef oDrawView As DrawingView, _ ByRef oOccs As ComponentOccurrences, _ ByRef oOcc As ComponentOccurrence, _ ByRef Level As Integer, _ ByVal SketchName As String, _ ByRef Counter As Integer)
For Each oOcc In oOccs
If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
' Get the occurrences in this sub-assembly and loop recursively... oOccs = oOcc.SubOccurrences
ElseIf oOcc.DefinitionDocumentType = DocumentTypeEnum.kPartDocumentObject Then
' Loop through all sketches Dim oDef As PartComponentDefinition = oOcc.Definition Dim oSk As PlanarSketch = Nothing Dim oSks As PlanarSketches = oDef.Sketches
For Each oSk In oSks If oSk.Name = SketchName Then Counter += 1 Dim oSkProx As PlanarSketchProxy = Nothing Call oOcc.CreateGeometryProxy(oSk, oSkProx)
Sub IncludeSketch(ByRef oDrawView As DrawingView, ByVal oSketch As PlanarSketchProxy)
' Toggle inclusion of sketch in drawing view ' Current Dim Current As Boolean = oDrawView.GetIncludeStatus(oSketch) oDrawView.SetIncludeStatus(oSketch, Not Current)
End Sub
Sub VisibleSketch(ByRef oDrawView As DrawingView, ByVal oSketch As PlanarSketchProxy)
' Toggle visibility of sketch in drawing view Dim Current As Boolean = oDrawView.GetVisibility(oSketch) oDrawView.SetVisibility(oSketch, Not Current)
End Sub
' End of iLogic code ================================================================
Author
Luke Davenport
Luke started his career in automotive engine design before moving into consulting and software development. Now with 12 years’ experience working with Autodesk products, he is well placed to meet our customers automation needs with well-tailored .Net applications written with the end-user in mind. He enjoys a consultative approach to software creation – active listening to ensure the optimal solution. These days he is mostly found working on our Sovelia Fusion Manage solutions, serverless web functions, or well-crafted Inventor, Vault, AutoCAD, or Revit apps.
Have you ever wondered how many product titles Autodesk has in its design software portfolio? Well its 112 at this point in time, but with the continuous acquisitions this number is ever increasing. The design, Digital Prototyping, Building information modelling (BIM) etc……. tools created by Autodesk cover multiple industry sectors and are used by over 10 million users in more than 185 countries. That’s pretty incredible!
Today’s workspace goes beyond the physical boundaries of the office. Staff can now work and collaborate seamlessly from anywhere, whether it’s from their home, in a coffee shop or whilst travelling on a train.