Blog posts


by Luke Davenport

Hello again,


I’ve been spending a fair amount of time with some architectural CAD friends recently, and thinking about best practices for using Inventor in construction. Quite frequently there has been a need to create architectural gridlines that need to be referenced both in the model and the drawing environment. Work planes would be the obvious choice for this, but it can be a little tiresome to create and name dozens of workplanes, as well as the parameters that control their offsets.


Architects don’t always use regularly spaced gridlines you see, so a pattern/array of planes won’t do the job…..


So I thought I’d invest a happy hour to write a quick iLogic macro to automate this for anyone in the same boat.


Just click on the picture above to see a quick video of this in action. Here is the iLogic code:


(As always be careful not to add new lines when copying and pasting this code into a new iLogic rule)




' Start of iLogic code - remember to subscribe to Luke Davenport's blog


' And why not follow him on twitter @LukeCadline


Imports Inventor.SelectionFilterEnum


Sub Main


Dim Title As String = "Cadline iLogic"

Dim Cont As Boolean = True

Dim Counter As Integer = 1


oDoc = ThisDoc.Document

If oDoc.DocumentType = kAssemblyDocumentObject OrElse oDoc.DocumentType = kDrawingDocumentObject Then

    MessageBox.Show("This tool can only be used in a part file!", Title, _

    MessageBoxButtons.Ok,MessageBoxIcon.Exclamation, _



End If


Dim oPartCompDef As PartComponentDefinition = oDoc.ComponentDefinition

Dim oWorkPlanes As WorkPlanes = oPartCompDef.WorkPlanes

Dim oFilter As SelectionFilterEnum

oFilter = kWorkPlaneFilter


' Turn origin planes on

For a = 1 To 3

    oWorkPlanes.Item(a).Visible = True



' Get start plane from user

oStartPlane = ThisApplication.CommandManager.Pick(oFilter, "Select Start Plane")

GridlineName = InputBox("Enter Name of Grid Planes", Title, "GL")


If GridlineName = "" Then



End If


Call MakePlane(oStartPlane, oWorkPlanes, GridlineName, Counter, Title, False,1000)



End Sub


Sub MakePlane(ByVal oPlane As WorkPlane, _

              ByRef oWorkPlanes As WorkPlanes, _

              ByVal GridlineName As String, _

             ByRef Counter As Integer, _

              ByVal Title As String, _

              ByRef Finish As Boolean, _

              ByRef StartNo As Double)


Do While Finish = False

CountString = Counter.ToString("D4")


Offset = InputBox("Enter Plane Offset in mm (From Previous)" & vbLf & vbLf & _

"Hit cancel to finish", Title, StartNo)


If Offset = "" Then

    Exit Sub

    Else If Not IsNumeric(Offset) Then

    Exit Sub

End If


' Create work plane

Dim oNewWorkPlane As WorkPlane

oNewWorkPlane = oWorkPlanes.AddByPlaneAndOffset(oPlane, GridlineName & CountString & " = " & CDbl(Offset))


oNewWorkPlane.Name = GridlineName & CountString


End Try

' Increment counter

Counter += 1

MakePlane(oNewWorkPlane, oWorkPlanes, GridlineName, Counter, Title, False, Offset)





End Sub


Sub Cleanup(ByVal oWorkPlanes As WorkPlanes)

' Turn origin planes off

For a = 1 To 3

    oWorkPlanes.Item(a).Visible = False


End Sub


' ********************** End of iLogic code **********************