Announcements

The Autodesk Community Forums has a new look. Read more about what's changed on the Community Announcements board.

Placing part in context of main assembly

Anonymous

Placing part in context of main assembly

Anonymous
Not applicable

Hi.

 

I have a problem with placing component into assembly using API in VB.NET. Below you can see a sample hierarchy in my assembly file:qKXVp2A

 

There is a main assembly file (MainAssembly.iam), which has a component (SubAssembly:1), and this component has another component (sub-component Part:1) with construction plane called "PL1". Into main assembly I need to insert another component (PartToInsert:1) which has created construction plane "PL_Insert" in it. After inserting this component I want to add Mate Constraint using "PL1" plane and "PL_Insert" plane. So the path to these planes in context of my main assembly is:

MainAssembly.iam -> SubAssembly:1 -> Part:1 -> PL1

MainAssembly.iam -> PL_Insert

 

I have biggest problem with getting access to PL1 plane in context of main assembly because this plane is nested into another components. I've developed a solution which works but it is too simple:

 Private Sub btnTEST_Click(sender As Object, e As EventArgs) Handles btnTEST.Click

        ' insert part (PartToInsert:1)
        Dim partPath As String
        Dim partToInsert As ComponentOccurrence
        Dim positionMatrix As Matrix = GlobalVariables._invApp.TransientGeometry.CreateMatrix
        partPath = <path_to_PartToInsert.ipt>
        partToInsert = GlobalVariables.assemblyCurrentDef.Occurrences.Add(partPath, positionMatrix)
        Dim partToInsDef As PartComponentDefinition
        partToInsDef = partToInsert.Definition

        ' parent (SubAssembly:1)
        Dim subPartParent As ComponentOccurrence
        subPartParent = GlobalVariables.assemblyCurrentDef.Occurrences.ItemByName("SubAssembly:1")
        Dim subPartParentDef As AssemblyComponentDefinition
        subPartParentDef = subPartParent.Definition

        ' fixed part (Part:1)
        Dim subPart As ComponentOccurrence
        subPart = subPartParentDef.Occurrences.ItemByName("Part:1")
        Dim subPartDef As PartComponentDefinition
        subPartDef = subPart.Definition

        ' create workplanes and proxies
        Dim planeP As WorkPlane
        Dim planePProxy As WorkPlaneProxy
        planeP = partToInsDef.WorkPlanes.Item("PL_Insert")
        'partToInsert.CreateGeometryProxy(planeP, planePProxy)
        GlobalVariables.assemblyCurrentDef.Occurrences.Item(2).CreateGeometryProxy(planeP, planePProxy)

        Dim subPartPlane As WorkPlane
        subPartPlane = subPartDef.WorkPlanes.Item("PL1")
        Dim subPartPlaneProxy As WorkPlaneProxy
        'subPart.CreateGeometryProxy(subPartPlane, subPartPlaneProxy)
        GlobalVariables.assemblyCurrentDef.Occurrences.Item(1).SubOccurrences.Item(1).CreateGeometryProxy(subPartPlane, subPartPlaneProxy)

        ' add constraint
        Dim mateConstr As AssemblyConstraint
        mateConstr = GlobalVariables.assemblyCurrentDef.Constraints.AddMateConstraint(planePproxy, subPartPlaneproxy, 0)

    End Sub

 

    

In orange color  I want to emphasize code which I was need to comment because it didn't work. I was getting an exception error and the workaround is:

GlobalVariables.assemblyCurrentDef.Occurrences.Item(1).SubOccurrences.Item(1).CreateGeometryProxy(subPartPlane, subPartPlaneProxy)

 

It isn't a good solution for me because I must rely on the index in Item properties and if I had more than one component in my main assembly it will be hard for me to obtain which index is correct. It also do not provide a solution when there is more complicated sub-component, which has another sub component, because I strictly defined a connection to Item to which proxy is created.

 

Could you tell me how should I create proxies to plane in component Part:1 in context of main assembly in more convenient way? And why orange code is not working? It will help me a lot if I could create these proxies using ComponentOccurrence object directly, just like in the orange commented lines of code.

0 Likes
Reply
Accepted solutions (1)
462 Views
1 Reply
Reply (1)

Anonymous
Not applicable
Accepted solution

I've found a solution for my problem. In this post there is everything we should know about placing parts in context of multi-level assembly:

http://adndevblog.typepad.com/manufacturing/2016/02/include-sketch-from-a-part-multi-level-deep.html

0 Likes