Hello,
In a simple case I have an extrusion with some attached seals/weather stripping, all implemented as iParts having
their own LENGTH parameters.
RailPart.ipt, Seal_A.ipt, Seal_B.ipt
The goal is to encapsulate these IParts within an iAssembly: RailAssy.iam, where a LENGTH parameter can be input when the iAssembly is placed, causing RailPart and Seal_A to have their length parameters set to the LENGTH provided at that time and SEAL_B having Length set by an iLogic rule to LENGTH - 5.
Hopefully I'm missing something, but I've been unable to set up a Custom Parameter Column in an iAssembly table. Is this even permitted?
Any comments/recommendations about implementing this strategy will be appreciated!
---
Is it, or is it not, possible to create an iassembly with a custom parameter column?
This question has been asked on this forum, but never *directly* answered.
http://forums.autodesk.com/t5/Autodesk-Inventor/a-custom-iAssembly/td-p/2450728
http://forums.autodesk.com/t5/Autodesk-Inventor/Custom-iPart-parameters-in-an-iAssembly/td-p/2422384
Where is the Autodesk documentation that describes the capabilities and limitations of iParts/iAssemblies?
Why is "iPart" and "IAssembly" not in the forum's spell checking database?
Am I expecting too much?
Hi Dennis,
As far as I know, Inventor does not support custom iAssemblies directly.
If you want an assembly parameter can be input when it is placed, you may try “Place iLogic Component”. The component can be a normal assembly without iLogic rule, but cannot be an iAssembly. Once the assembly is placed, a new copy of the original component is generated. Please check the online help for details.
However, in your case, there is couple of iPart in the assembly. I didn’t find a way to set the Length parameter for iParts via iLogic rule in the assembly (RailAssy.iam). Though I know we can set parameter for normal part.
How about converting these iParts to normal parts, and using iLogic rule to set Length parameter from the assembly level? How do you think about it?
Thanks,
Nicolas
However, in your case, there is couple of iPart in the assembly. I didn’t find a way to set the Length parameter for iParts via iLogic rule in the assembly (RailAssy.iam). Though I know we can set parameter for normal part.
iPart.ChangeRow("PDC-059-O3:1", iPart.RowName("PDC-059-O3:1"), LENGTH)
iPart.ChangeRow("PDC-2-270-0-011:1", iPart.RowName("PDC-2-270-0-011:1"), LENGTH)
iPart.ChangeRow("2-407-5:1", iPart.RowName("2-407-5:1"), LENGTH)
iPart.ChangeRow("2-407-6:2", iPart.RowName("2-407-6:2"), LENGTH)
ThisDoc.Document.Update()
Hi Nicolas,
The above (in an assembly level rule) will set the length of the iParts, but it doesn't seem like a good approach for future reuse of the assemblies.
Thanks for the tip about Place iLogic Component. Since this will create a unique instance of a component, I think I can make the length of some of the parts to be adaptive and use constraints to drive them to the proper length.
For Future reuse, hope the below code is useful.
Note: Posting this late reply, hoping that it may be helpful for someone, who searches for the same.
These code has to be modified based on your ipart
i = iPart.FindRow(comp.Name,"noofelement","=","1 in")
rowstringvalue=iPart.CurrentRowStringValue("SIZE")
j = iPart.FindRow(comp.Name,"SIZE","=",sizelist1)
Example :http://grabcad.com/library/ilogic-ipart-and-imate-1
Dim comp = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter,"Select Component to change:")
'MsgBox(comp.Name)
DefaultRowNumber = iPart.RowNumber(comp.Name)
'rowName = iPart.RowName(comp.Name)
'rowstringvalue=iPart.CurrentRowStringValue("Member")
'MsgBox("Default Row No= " & GetDefaultRowNumber & " RowName==> " & rowName & " RowStringValue==> " & rowstringvalue)
i = iPart.FindRow(comp.Name,"noofelement","=","1 in")
'MsgBox("Row No= " & i)
j=1
Component.Visible(comp.Name)=False
Dim sizelist As New ArrayList
For j = 1 To i
iPart.ChangeRow(comp.Name,j)
rowstringvalue=iPart.CurrentRowStringValue("SIZE")
'MsgBox("Row String Value= " & rowstringvalue)
sizelist.Add(rowstringvalue)
'MsgBox("j= " & j)
Next j
'MsgBox("j= " & j)
iPart.ChangeRow(comp.Name,j-1)
'sizelist.Add(rowstringvalue)
iPart.ChangeRow(comp.Name,DefaultRowNumber)
Component.Visible(comp.Name)=True
sizelist1= InputListBox("Select sizelist ", sizelist, sizelist, Title := "Select Sizelist", ListName := "Select Sizelist")
j = iPart.FindRow(comp.Name,"SIZE","=",sizelist1)
ThisApplication.CommandManager.StartCommand(2344) ' kZoomAllCommand = 2344
ThisApplication.CommandManager.StartCommand(2353) ' kPanCommand = 2353
accept = InputRadioBox("Accept or Reject to change size", "Accept", "Reject", accept, Title := "Accept or Reject to change size")
'Run rule based On selection
While accept <> True
sizelist1= InputListBox("Select sizelist ", sizelist, sizelist, Title := "Select Sizelist", ListName := "Select Sizelist")
j = iPart.FindRow(comp.Name,"SIZE","=",sizelist1)
ThisApplication.CommandManager.StartCommand(2344) ' kZoomAllCommand = 2344
accept = InputRadioBox("Accept or Reject to change size", "Accept", "Reject", True, Title := "Accept or Reject to change size")
MsgBox(accept)
'yesorno=MessageBox.Show("Are you sure you want to use this size?","iLogic",MessageBoxButtons.YesNo)
If accept <> True 'Or yesorno= vbYes
iPart.ChangeRow(comp.Name,DefaultRowNumber)
End If
End While
'Dim Currentpartno= iPart.CurrentRowStringValue("Part Number")
'MsgBox("Current Part No= " & Currentpartno)
length = InputBox("Enter length", "length", "10")
'MsgBox("j= " & j)
iPart.ChangeRow(comp.Name,iPart.RowName(comp.Name),length)
ThisApplication.CommandManager.StartCommand(2344)
'ThisApplication.ActiveView.Fit
This is really bad.
In that way you can't automate the design of a simple air cylinder of similar using iParts
If you can't "Drive iPart custom param in iParts" I would say it is more or less unusable.
I hope there will come a solution soon for this.
Uffe