示例#1
0
        /// <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);
        }