Пример #1
0
    /// <summary>
    /// Set parameter data in the provided variant.
    /// </summary>
    /// <param name="VarList">Parameter data.</param>
    /// <param name="VarName">Name of variant to modify.</param>
    /// <param name="Force">Force alternate variants to fitted.</param>
    void SetVariant(Var_Type VarList, string VarName, bool Force)
    {
        try
        {
            IProject            project = DXP.GlobalVars.DXPWorkSpace.DM_FocusedProject() as IProject;
            IProjectVariant     Variant;
            IComponentVariation CompVariant;
            IParameterVariation ParamVariant;
            if (project == null)
            {
                return;
            }
            project.DM_BeginUpdate();

            string RefDes;

            for (int i = 0; i < project.DM_ProjectVariantCount(); i++)
            {
                Variant = project.DM_ProjectVariants(i);
                //Find variant that matches the one provided.
                if (project.DM_ProjectVariants(i).DM_Description().ToUpper() == VarName)
                {
                    Progress.Maximum = (Variant.DM_VariationCount() + VarList.Components.Count);
                    Progress.Value   = 0;
                    UpdateLabel("Updating " + VarName + " Variants");
                    for (int j = 0; j < Variant.DM_VariationCount(); j++)
                    {
                        //Remove alternate variants  if Force is true.
                        if (Variant.DM_Variations(j).DM_VariationKind() == TVariationKind.eVariation_Alternate && Force)
                        {
                            Variant.DM_RemoveComponentVariation(j);
                            j--;
                        }
                        else
                        {
                            CompVariant = Variant.DM_Variations(j);
                            RefDes      = CompVariant.DM_PhysicalDesignator();
                            //Make sure there is parameter data for this component variant.
                            if (VarList.Components.ContainsKey(CompVariant.DM_PhysicalDesignator()))
                            {
                                for (int k = 0; k < CompVariant.DM_VariationCount(); k++)
                                {
                                    if (CompVariant.DM_VariationKind() != TVariationKind.eVariation_NotFitted)
                                    {
                                        ParamVariant = CompVariant.DM_Variations(k);
                                        //Update parameter data.
                                        if ("PE_ENG" == ParamVariant.DM_ParameterName().ToUpper() || ParamVariant.DM_ParameterName().ToUpper() == "PE_FLT")
                                        {
                                            if (VarList.Components[CompVariant.DM_PhysicalDesignator()].ContainsKey(ParamVariant.DM_ParameterName().ToUpper()))
                                            {
                                                if (VarList.Components[CompVariant.DM_PhysicalDesignator()][ParamVariant.DM_ParameterName().ToUpper()] != CompVariant.DM_PhysicalDesignator())
                                                {
                                                    if (OverwriteValue(ParamVariant.DM_VariedValue(), VarList.Components[CompVariant.DM_PhysicalDesignator()][ParamVariant.DM_ParameterName().ToUpper()], CompVariant.DM_PhysicalDesignator(), ParamVariant.DM_ParameterName().ToUpper()))
                                                    {
                                                        ParamVariant.DM_SetVariedValue(VarList.Components[CompVariant.DM_PhysicalDesignator()][ParamVariant.DM_ParameterName().ToUpper()] + "_$");
                                                        VarList.Components[CompVariant.DM_PhysicalDesignator()].Saved = true;
                                                    }
                                                }
                                            }
                                        }
                                        //else
                                        //{
                                        //    ParamVariant.DM_SetVariedValue(VarList.Components[CompVariant.DM_PhysicalDesignator()][ParamVariant.DM_ParameterName().ToUpper()] + "_$");
                                        //    VarList.Components[CompVariant.DM_PhysicalDesignator()].Saved = true;
                                        //}
                                    }
                                }
                                if (!VarList.Components[CompVariant.DM_PhysicalDesignator()].Saved)
                                {
                                    CreateCompVar(ref CompVariant, VarList.Components[CompVariant.DM_PhysicalDesignator()]);
                                    VarList.Components[CompVariant.DM_PhysicalDesignator()].Saved = true;
                                }
                            }
                        }
                        Progress.Value += 1;
                    }
                    IComponentVariation tmpCompVar;
                    foreach (string CompRef in VarList.Components.Keys)
                    {
                        //Add component variants that havent already been modified.
                        if (!VarList.Components[CompRef].Saved)
                        {
                            tmpCompVar = null;
                            tmpCompVar = project.DM_ProjectVariants(i).DM_AddComponentVariation();
                            tmpCompVar.DM_SetVariationKind(TVariationKind.eVariation_None);
                            CreateCompVar(ref tmpCompVar, VarList.Components[CompRef], CompRef);

                            VarList.Components[CompRef].Saved = true;
                        }
                        Progress.Value += 1;
                        UpdateLabel("Updating " + VarName + " Variants");
                    }
                }
            }
            project.DM_EndUpdate();
        }
        catch (Exception ex)
        {
            ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex);
            return;
        }
    }