Hi,
I would like to constrain any parts in an assembly, that are not currently constrained, to an assembly UCS labeled UCS1.
I currently manually constrain parts (part UCS to assembly UCS) and it is extremely repetitive. Can anyone help me out with iLogic to check and see if a part is constrained, and if not it is not constrained, then constrain the part UCS to assmebly UCS.
Thanks,
Paul
Hi Paul,
I had a look and this is what I could come up with:
http://adndevblog.typepad.com/manufacturing/2014/07/create-ucs-constraints.html
Cheers,
Hi Adam,
Can you please provide insight on how to apply the code? I tried to drop it into iLogic in Inventor 2015, but received errors (cannot compile rule).
Hi,
You just have to work through those errors.
1) First you'll get:
So you rename CheckUcsConstraints function to Main and move that whole function to the beginning of the rule.
2) Then you'll get:
So you remove all the Set keywords and when wpp is used for a second time in the code (inside CreateGeometryProxy), you declare a separate variable for that (e.g. wpp2)
And here is the end result that works:
Sub Main() ' Check if occurrences have a UCS1 and if it's constrained already Dim asm As AssemblyDocument asm = ThisApplication.ActiveDocument ' Using error handling in case ' not all components have a UCS1 On Error Resume Next Dim asmUcs1 As UserCoordinateSystem asmUcs1 = _ asm.ComponentDefinition.UserCoordinateSystems("UCS1") ' Each WorkPlane of the UCS must be constrained Call CreateFlushConstraints(asmUcs1.XYPlane, 0) Call CreateFlushConstraints(asmUcs1.XZPlane, 1) Call CreateFlushConstraints(asmUcs1.YZPlane, 2) On Error Goto 0 End Sub Function GetAllOccurrences(ByVal cd As AssemblyComponentDefinition) As ObjectCollection Dim coll As ObjectCollection coll = ThisApplication.TransientObjects.CreateObjectCollection Dim occ As ComponentOccurrence For Each occ In cd.Occurrences Call coll.Add(occ) Next GetAllOccurrences = coll End Function Sub CreateFlushConstraints(wp As WorkPlane, plane As Integer) Dim acd As AssemblyComponentDefinition acd = wp.Parent Dim coll As ObjectCollection coll = GetAllOccurrences(acd) Dim obj As Object For Each obj In wp.Dependents If TypeOf obj Is FlushConstraint Then Dim f As FlushConstraint f = obj ' Get other entity Dim other As Object If f.EntityOne Is wp Then other = f.EntityTwo Else other = f.EntityOne End If ' If it's a WorkPlane proxy ' then it's from an occurrence If TypeOf other Is WorkPlaneProxy Then Dim wpp As WorkPlaneProxy wpp = other Call coll.RemoveByObject(wpp.ContainingOccurrence) End If End If Next ' Create Flush Constraint for the remaining occurrences Dim occ As ComponentOccurrence For Each occ In coll Dim ucs As UserCoordinateSystem ucs = occ.Definition.UserCoordinateSystems("UCS1") Dim occWp As WorkPlane Select Case plane Case 0 occWp = ucs.XYPlane Case 1 occWp = ucs.XZPlane Case 2 occWp = ucs.YZPlane End Select Dim wpp2 As WorkPlaneProxy Call occ.CreateGeometryProxy(occWp, wpp2) Call acd.Constraints.AddFlushConstraint(wp, wpp2, 0) Next End Sub
Cheers,
Can't find what you're looking for? Ask the community or share your knowledge.