public static List <UCS> InitializeAllUCS(FMUcss fm_ucss)
        {
            List <UCS> ucss;

            try
            {
                LogFile.Write("Initialize UCSs");
                if (fm_ucss == null)
                {
                    return(null);
                }
                if (fm_ucss.Count == 0)
                {
                    return(null);
                }

                ucss = new List <UCS>();
                foreach (FeatureCAM.FMUcs ucs in fm_ucss)
                {
                    ucss.Add(new UCS(ucs));
                }
                return(ucss);
            }
            catch
            {
                return(null);
            }
            finally
            {
                fm_ucss = null;
            }
        }
        public static List <SetupInfo> InitializeAllSetups(FMSetups fm_setups, FMSolids fm_solids, FMUcss fm_ucss,
                                                           List <UCS> doc_ucss, List <SetupOptions> all_options,
                                                           int combine_setups,
                                                           ref bool are_all_setups_milling)
        {
            List <SetupInfo> setups;
            SetupOptions     options;

            try
            {
                if (fm_setups == null)
                {
                    return(null);
                }
                if (fm_setups.Count == 0)
                {
                    return(null);
                }

                are_all_setups_milling = true;

                foreach (FMSetup setup in fm_setups)
                {
                    if (setup.Type != FeatureCAM.tagFMSetupType.eST_Milling)
                    {
                        are_all_setups_milling = false;
                    }
                }

                setups = new List <SetupInfo>();
                if (combine_setups == 1 && all_options != null)
                {
                    SetupInfo setup = new SetupInfo();
                    setup.name         = "Combined";
                    setup.options      = all_options[0];
                    setup.work_offsets = setup.options.offsets;
                    setup.part         = setup.options.parts;
                    if (setup.options.clamps != null)
                    {
                        foreach (SolidInfo clamp in setup.options.clamps)
                        {
                            if (fm_solids.Item(clamp.name) != null)
                            {
                                if (setup.clamps == null)
                                {
                                    setup.clamps = new List <SolidInfo>();
                                }
                                setup.clamps.Add(clamp);
                            }
                        }
                    }
                    //setup.clamps = setup.options.clamps;
                    setup.stock                      = new SolidInfo("", setup.options.attach_stock_to);
                    setup.sub_spindle                = setup.options.is_subspindle;
                    setup.attach_stock_to            = setup.options.attach_stock_to;
                    setup.attach_stock_to_subspindle = setup.options.attach_stock_to_subspindle;
                    if (setup.options.ucs_attach != "" && fm_ucss.Item(setup.options.ucs_attach) != null)
                    {
                        setup.attach_ucs = setup.options.ucs_attach;
                    }
                    if (setup.options.ucs_attach_subspindle != "" && fm_ucss.Item(setup.options.ucs_attach_subspindle) != null)
                    {
                        setup.attach_ucs_subspindle = setup.options.ucs_attach_subspindle;
                    }
                    setup.attach_ucss_to            = setup.options.attach_ucss_to;
                    setup.attach_ucss_to_subspindle = setup.options.attach_ucss_to_subspindle;
                    setup.enabled = true;
                    setup.ucss    = new List <UCS>();
                    foreach (FMUcs fm_ucs in fm_ucss)
                    {
                        setup.ucss.Add(new UCS(fm_ucs));
                    }

                    setups.Add(setup);
                }
                else
                {
                    foreach (FeatureCAM.FMSetup setup in fm_setups)
                    {
                        if (setup.Enabled)
                        {
                            LogFile.Write(String.Format("Initialize setup {0}", setup.Name));

                            options = FindSetupOptions(all_options, setup.Name);
                            setups.Add(new SetupInfo(options, setup, fm_solids, doc_ucss));
                        }
                        else
                        {
                            LogFile.Write(String.Format("Skip disabled setup {0}", setup.Name));
                        }
                    }
                    if (combine_setups == 1)
                    {
                        return(InitalizeCombinedSetup(setups));
                    }
                }
                return(setups);
            }
            catch
            {
                return(null);
            }
            finally
            {
                fm_setups   = null;
                fm_solids   = null;
                all_options = null;
            }
        }