private void pullParents(string parentFileName) { // Set parent assembly do to parentFileName try { invApp.Documents.Open(parentFileName, false); } catch (Exception e) { throw; } finally { assemblyDoc = (AssemblyDocument)invApp.Documents.ItemByName[parentFileName]; parentAssembly = assemblyDoc.ComponentDefinition; assemblyParameters = parentAssembly.Parameters.UserParameters; } // Get User Parameters from parent file. ArrayList parentParameters = new ArrayList(); foreach (Parameter p in assemblyParameters) { // Store parameter in list if key if (p.IsKey) { parentParameters.Add(p); } } // Add all parameters from list to part file // Check if parameter already exists // Add all part parameters to list for comparision ArrayList partParameters = new ArrayList(); UserParameters childParameters = currentPartDef.Parameters.UserParameters; foreach (Parameter p in childParameters) { partParameters.Add(p.Name); } // Add parent parameters to part parameters foreach (Parameter p in parentParameters) { //Check if parameter already exists if (partParameters.Contains(p.Name)) { // Try to replace value with parent value try { childParameters[p.Name].Value = p._Value; } catch (Exception e) { MessageBox.Show("Error:\n" + e.Message); } } else { // Try to add the parameter by nominal value try { childParameters.AddByValue(p.Name, p.Value, p.get_Units()); } catch (Exception e) { MessageBox.Show("Error:\n" + e.Message); } } } }
public void pushChildren() { DocumentsEnumerator allRefDocs = assemblyDoc.AllReferencedDocuments; try { foreach (Document oDoc in allRefDocs) { if (oDoc.DocumentType.Equals(DocumentTypeEnum.kPartDocumentObject)) { // For Parts PartDocument partFile = (PartDocument)oDoc; PartComponentDefinition partFileDef = partFile.ComponentDefinition; UserParameters partParameters = partFileDef.Parameters.UserParameters; ArrayList paraList = new ArrayList(); foreach (Parameter parameter in partParameters) { paraList.Add(parameter.Name); } try { foreach (Parameter parameter in assemblyParameters) { if (parameter.IsKey && !paraList.Contains(parameter.Name)) { // Must use add by value to get parameters that are nonnumeric partParameters.AddByValue(parameter.Name, parameter.Value, parameter.get_Units()); // partParameters.AddByExpression(parameter.Name, parameter.Value, parameter.get_Units()); } } } catch (Exception) { throw; } } else if (oDoc.DocumentType.Equals(DocumentTypeEnum.kAssemblyDocumentObject)) { // For Subassemblies AssemblyDocument partFile = (AssemblyDocument)oDoc; AssemblyComponentDefinition subAssemblyDef = partFile.ComponentDefinition; UserParameters subAssemblyParameters = subAssemblyDef.Parameters.UserParameters; ArrayList paraList = new ArrayList(); try { foreach (Parameter parameter in subAssemblyParameters) { paraList.Add(parameter.Name); } foreach (Parameter parameter in assemblyParameters) { if (parameter.IsKey && !paraList.Contains(parameter.Name)) { subAssemblyParameters.AddByExpression(parameter.Name, "1", parameter.get_Units()); } } } catch (Exception) { throw; } } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } }