multiple members of iAssembly and Ipart into main Assembly
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello!
I need to insert n boxes (actually frame of boxes with 12 profiles and 8 corners) with different dimensions into main assembly. I created one box as iAssembly with couple of members. IAssembly of box is made by iParts of profiles and corners.
The problem is when I insert for example 3 boxes, I change the value of row member for iAssembly, but every box member inserted in main assembly containe SAME iParts (from last row). IParts should also change their dimensions.
Inside iAssembly I made three assembly param (Lenght, Height,Depth) and i used iLogic to change length of profile regarding current iAssemblly row:
Parameter("Profile_length:1", "Length") = Length - (75.7 * 2) Parameter("Profile_height:1", "Length") = Height -(75.7 *2) Parameter("Profile_depth:1", "Length") = Depth - (75.7 * 2)
This is how it should look like.
This is the code in C#:
//This Methode assemble main AHU Assembly. It add and position Boxes.
//Inventor Objects
AssemblyDocument oAssyDoc;
AssemblyComponentDefinition oACD;
ComponentOccurrences oCOs;
ComponentOccurrence oCO;
TransientGeometry oTG = m_inventorApplication.TransientGeometry;
Matrix oMatrix = oTG.CreateMatrix();
ASSY_Methodes oASSYAPI = new ASSY_Methodes(m_inventorApplication);
PART_Methodes oPartAPI = new PART_Methodes(m_inventorApplication);
//1. Make AHU Assembly
oAHU.FileName = oAHU.Paths.ProjectFolder + "AHU_" + oAHU.AhuID + ".iam";
oASSYAPI.Save_As_Copy(oAHU.Paths.Assembly_Template, oAHU.FileName);
//2. Open AHU Assembly and insert Boxes and position Boxes
oAssyDoc = (AssemblyDocument)m_inventorApplication.Documents.Open(oAHU.FileName);
oACD = oAssyDoc.ComponentDefinition;
oCOs = oACD.Occurrences;
//Make and insert Adapter Part
string strFileName = oAHU.Paths.ProjectFolder + "Adapter.ipt";
oPartAPI.Save_As_Copy(oAHU.Paths.Part_Template, strFileName);
oCO = oCOs.Add(strFileName, oMatrix);
AhuBox oBox = null;
for (int i = 0; i < oAHU.Boxes.Count; i++)
{
oBox = oAHU.Boxes[i];
if (oBox.Length > 1)
{
// Open the factory document invisible.
AssemblyDocument oFactoryDoc = (AssemblyDocument)m_inventorApplication.Documents.Open("C:\\Users\\darmin2\\Desktop\\iAsembly\\iAssembly_Box.iam", false);
// Set a reference to the component definition.
AssemblyComponentDefinition oCompDef = oFactoryDoc.ComponentDefinition;
// Make sure we have an iAssy factory.
if (!oCompDef.IsiAssemblyFactory)
{
System.Windows.Forms.MessageBox.Show("Chosen document is not a factory.", "Invalid document");
return;
}
// Set a reference to the factory.
iAssemblyFactory oiAssyFactory = oCompDef.iAssemblyFactory;
iAssemblyTableRows oRows = oiAssyFactory.TableRows;
iAssemblyTableRow oRow;
iAssemblyMember oMember;
oRow = oRows[i];
oRow[3].Value = Convert.ToString(oBox.Length);
oRow[4].Value = Convert.ToString(oBox.Depth);
oRow[5].Value = Convert.ToString(oBox.Height);
oiAssyFactory.CreateMember(oRow);
oCO = oCOs.AddiAssemblyMember("C:\\Users\\darmin2\\Desktop\\iAsembly\\iAssembly_Box.iam", oMatrix, oRow.Index);
This is what I get.
Probably it is because of link between the part names inside different boxes. I have profile_length, profile_depth and profile_height in each boxes and it should probably be related to boxes member name and different in each iAssembly.
Thanks!