/// <summary> /// Returns the unit quantity of a specified part. /// </summary> /// <param name="assemblyDocument"> /// The <see cref="AssemblyDocument"/> instance that this extension method affects.</param> /// <param name="part">The part.</param> /// <param name="displayWarnings">A value which indicates wheter to display warnings, if they occur.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="assembly"/> or <paramref name="part"/>is <c>null</c>.</exception> public static int GetPartQuantity(this AssemblyDocument assembly, PartDocument part, bool displayWarnings) { if (assembly == null) { throw new ArgumentNullException(nameof(assembly)); } if (part == null) { throw new ArgumentNullException(nameof(part)); } var bom = assembly.ComponentDefinition.BOM; if (bom == null) { return(0); } if (displayWarnings && bom.RequiresUpdate) { AddIn.ShowWarningMessageBox( AssemblyInfo.Name, $"The BOM of assembly '{assembly.DisplayName}' requires an update. " + "Quantities displayed in the generated drawing might be incorrect." ); } try { bom.PartsOnlyViewEnabled = true; } catch (ArgumentException) { return(0); } BOMView partsOnlyView; if (bom.BOMViews.TryGetValue("Parts Only", out partsOnlyView)) { foreach (BOMRow row in partsOnlyView.BOMRows) { if (row.ComponentDefinitions.Count == 0) { continue; } var componentDefinition = row.PrimaryComponentDefinition(); if (componentDefinition == null) { continue; } var document = componentDefinition.Document as Document; if (document == null) { continue; } if (document.FullFileName == part.FullFileName) { return(row.ItemQuantity); } } } return(0); }