• 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

    ' http://www.cadlinecommunity.co.uk/Blogs/LukeDavenport/Default.aspx

    ' 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 **********************