Example #1
0
        public static void Main()
        {
            object obj = Marshal.GetActiveObject("FeatureCAM.Application");

            if (obj == null)
            {
                return;
            }

            fc = (FeatureCAM.Application)obj;

            FeatureCAMToVericut();
        }
        public static bool SaveNCCode(FeatureCAM.Application app, FeatureCAM.FMDocument doc,
                                      string fname_no_ext, string ext, string output_dirpath,
                                      List <SetupInfo> setups_info, List <bool> save_nc_for_all_setups,
                                      bool is_single_program, int combine_setups)
        {
            int    nc_files_num;
            object nc_file_names;
            string err_msg;
            bool   is_op_error = false;
            int    nc_file_id;

            /* Set output units, so they match document units */
            app.PostOptionsMill.SetIsInchOutputUnits(!doc.Metric);
            app.PostOptionsTurn.SetIsInchOutputUnits(!doc.Metric);

            if (!is_single_program && combine_setups == 0)
            {
                for (int i = 0; i < setups_info.Count; i++)
                {
                    if (save_nc_for_all_setups[i] && setups_info[i].enabled && setups_info[i].num_features > 0)
                    {
                        SaveNCForSetup(doc, doc.Setups.Item(i + 1), fname_no_ext, ext, output_dirpath, out nc_files_num, out nc_file_names, out err_msg, ref is_op_error);

                        if ((int)nc_files_num > 0)
                        {
                            nc_file_id = 1;
                            foreach (string nc_fpath in (Array)nc_file_names)
                            {
                                setups_info[i].nc_fpaths.Add((string)nc_fpath);
                            }
                            LogFile.Write(String.Format("List of created files: {0}",
                                                        String.Join("\n", setups_info[i].nc_fpaths.ToArray())));
                            nc_file_id++;
                        }
                    }
                    else
                    {
                        LogFile.Write(String.Format("Skip saving nc code for setup {0}. User selected not to export it, setup isn't enabled or there are no features in the setup", setups_info[i].name));
                    }
                }
            }
            else if (!is_single_program && combine_setups == 1)
            {
                for (int i = 0; i < doc.Setups.Count; i++)
                {
                    if (doc.Setups.Item(i + 1).Enabled&& doc.Setups.Item(i + 1).Features.Count > 0)
                    {
                        SaveNCForSetup(doc, doc.Setups.Item(i + 1), fname_no_ext, ext, output_dirpath, out nc_files_num, out nc_file_names, out err_msg, ref is_op_error);

                        if ((int)nc_files_num > 0)
                        {
                            nc_file_id = 1;
                            if (setups_info[0].nc_fpaths == null)
                            {
                                setups_info[0].nc_fpaths = new List <string>();
                            }
                            foreach (string nc_fpath in (Array)nc_file_names)
                            {
                                if (!setups_info[0].nc_fpaths.Contains((string)nc_fpath))
                                {
                                    setups_info[0].nc_fpaths.Add((string)nc_fpath);
                                }
                            }
                            nc_file_id++;
                        }
                    }
                    else
                    {
                        LogFile.Write(String.Format("Skip saving nc code for setup {0}. User selected not to export it, setup isn't enabled or there are no features in the setup", setups_info[i].name));
                    }
                }
                LogFile.Write(String.Format("List of created files: {0}",
                                            String.Join("\n", setups_info[0].nc_fpaths.ToArray())));
            }
            else
            {
                bool save_nc = true;
                foreach (bool save_nc_for_setup in save_nc_for_all_setups)
                {
                    save_nc &= save_nc_for_setup;
                }
                if (save_nc)
                {
                    if (SaveOneNCProgForAllSetups(doc, fname_no_ext, ext, output_dirpath, setups_info, ref is_op_error))
                    {
                        LogFile.Write(String.Format("List of created files: {0}",
                                                    String.Join("\n", setups_info[0].nc_fpaths.ToArray())));
                    }
                }
                else
                {
                    LogFile.Write("Skip saving nc code. User selected not to export it");
                }
            }
            return(!is_op_error);
        }
        public static void ToolsToList(FeatureCAM.Application app, FMDocument doc,
                                       List <SetupInfo> setups_info, List <bool> save_tools_for_all_setups,
                                       bool is_single_program, string output_dir, bool is_doc_metric)
        {
            List <string> setup_tools = new List <string>();
            //string unsupported_tool_names;
            string            tool_name;
            FMTool            tool;
            FMToolMap2        toolmap;
            tagFMTurretIDType turret_id;
            bool temp;


            for (int i = 1; i <= doc.Setups.Count; i++)
            {
                if (doc.Setups.Item(i).Enabled)
                {
                    doc.Setups.Item(i).Activate();
                    if (!is_single_program)
                    {
                        if (save_tools_for_all_setups[i - 1])
                        {
                            setup_tools.Add(GetToolsInSetups(doc.Setups.Item(i)));
                        }
                        else
                        {
                            setup_tools.Add("");
                        }
                    }
                    else
                    {
                        setup_tools.Add(GetToolsInSetups(doc.Setups.Item(i)));
                    }
                }
            }

            /* If we need to create separate tls file for each setup, write tools for each setup to a separate file */
            doc.InvalidateToolpaths();
            if (!is_single_program)
            {
                for (int si = 1; si <= doc.Setups.Count && doc.Setups.Item(si).Enabled; si++)
                {
                    ((FMSetup)doc.Setups.Item(si)).Activate(); //Need this line for A-038162 VERICUT: If option Combine setups isn't turned on and exporting 2 milling setups, we get tool export error.
                    if (save_tools_for_all_setups[si - 1])
                    {
                        LogFile.Write(String.Format("Construct tool list for setup {0}", doc.Setups.Item(si).Name));
                        for (int i = 1; i <= doc.ToolMaps.Count; i++)
                        {
                            toolmap = doc.ToolMaps.Item(i);
                            if (toolmap.Operations.Count > 0)
                            {
                                tool       = (FMTool)toolmap.Tool;
                                tool_name  = "";
                                tool_name += tool.Name;
                                if (setup_tools[si - 1].IndexOf(tool_name) >= 0)
                                {
                                    app.GetTurnTurretInfo(toolmap.turret, out temp, out turret_id, out temp, out temp, out temp, out temp);
                                    FeatureCAMTool fc_tool = new FeatureCAMTool(toolmap, tool, turret_id, app.TurningInputMode, output_dir, is_doc_metric);
                                    if (setups_info[si - 1].tools == null)
                                    {
                                        setups_info[si - 1].tools = new List <FeatureCAMTool>();
                                    }
                                    setups_info[si - 1].tools.Add(fc_tool);
                                }
                            }
                        }
                    }
                    else
                    {
                        LogFile.Write(String.Format("Skip setup {0}. User chose not to export tools for it", doc.Setups.Item(si).Name));
                    }
                }
            }
            else
            {
                string all_tools;
                all_tools = String.Join(";", setup_tools);

                bool save_tools = true;
                foreach (bool save_tools_for_setup in save_tools_for_all_setups)
                {
                    save_tools &= save_tools_for_setup;
                }
                if (save_tools)
                {
                    LogFile.Write("Construct tool list for all features in the part");
                    for (int i = 1; i <= doc.ToolMaps.Count; i++)
                    {
                        toolmap = doc.ToolMaps.Item(i);
                        /* Doing below check, because toolmap.Operations.Count didn't seem to work every time */
                        if (all_tools.Contains(toolmap.Tool.Name + ";"))
                        {
                            tool = (FMTool)toolmap.Tool;
                            app.GetTurnTurretInfo(toolmap.turret, out temp, out turret_id, out temp, out temp, out temp, out temp);
                            FeatureCAMTool fc_tool = new FeatureCAMTool(toolmap, tool, turret_id, app.TurningInputMode, output_dir, is_doc_metric);
                            if (setups_info[0].tools == null)
                            {
                                setups_info[0].tools = new List <FeatureCAMTool>();
                            }
                            setups_info[0].tools.Add(fc_tool);
                        }
                    }
                }
            }
        }
        private static void ExportTools(FeatureCAM.Application app, FMDocument doc)
        {
            StringBuilder tool_info    = new StringBuilder(),
                          tls_fcontent = new StringBuilder(),
                          tool_list    = new StringBuilder();
            int nc_prog          = 1,
                init_num         = 1;
            string crib_pos      = "",
                   nc_prog_fpath = "";

            try
            {
                /* At the moment we construct full tool list, which can be time consuming.
                 * So if we have a lot of setups that don't get exported, we do have a pointless delay
                 */
                FCExporter.ToolsToList(app, doc, Variables.setups_info, Variables.GetSaveToolsForAllSetups(),
                                       (Variables.doc_options.combine_setups == 1), Variables.doc_options.output_dirpath, Variables.doc.Metric);
                if (Variables.doc_options.combine_setups == 0)
                {
                    for (int si = 0; si < Variables.setups_info.Count; si++)
                    {
                        if (Variables.setups_info[si].options.is_export_tools)
                        {
                            Variables.setups_info[si].tool_fpath = Path.Combine(Variables.doc_options.output_dirpath,
                                                                                Variables.fname_no_ext + "_" + (string)Variables.setups_info[si].name + ".tls");
                            tool_info    = new StringBuilder();
                            tls_fcontent = new StringBuilder();
                            tool_list    = new StringBuilder();
                            for (int i = 0; i < Variables.setups_info[si].tools.Count; i++)
                            {
                                if (Variables.setups_info[si].tools[i].cutter_geom.Count == 0)
                                {
                                    continue;
                                }
                                if (tool_info.Length > 0)
                                {
                                    tool_info.AppendLine("");
                                }
                                tool_info.Append(
                                    VericutTool.ToXML(Variables.setups_info[si].tools[i], doc.Metric));
                                nc_prog       = Convert.ToInt32(Convert.ToString(Variables.setups_info[si].tools[i].turr_type).Replace("eTT_TURRET", ""));
                                nc_prog_fpath = Variables.setups_info[si].nc_fpaths[nc_prog - 1];
                                crib_pos      = String.Format("{0}:{1}",
                                                              Convert.ToString(Variables.setups_info[si].tools[i].turr_type).Replace("eTT_TURRET", ""),
                                                              Convert.ToInt32(Variables.setups_info[si].tools[i].id));
                                AppendToToolList(tool_list, nc_prog, init_num, crib_pos, nc_prog_fpath, Variables.setups_info[si].tools[i].optional_id);
                            }
                            Variables.setups_info[si].tool_list = "<ToolChange>" + Environment.NewLine +
                                                                  Utilities.Indent(tool_list.ToString(), 1) +
                                                                  "</ToolChange>";
                            tls_fcontent.AppendLine("<?xml version=\"1.0\"?>");
                            tls_fcontent.AppendLine("<CGTechToolLibrary>");
                            tls_fcontent.AppendLine(Utilities.Indent("<Tools>", 1));
                            tls_fcontent.AppendLine(Utilities.Indent(tool_info.ToString(), 2));
                            tls_fcontent.AppendLine(Utilities.Indent("</Tools>", 1));
                            tls_fcontent.Append("</CGTechToolLibrary>");
                            File.WriteAllText(Variables.setups_info[si].tool_fpath, tls_fcontent.ToString());
                            LogFile.Write(String.Format("Tool info was written to {0}", Variables.setups_info[si].tool_fpath));
                        }
                    }
                }
                else
                {
                    if (Variables.setups_info[0].options.is_export_tools)
                    {
                        for (int si = 0; si < Variables.setups_info.Count; si++)
                        {
                            if (Variables.setups_info[si].options.is_export_tools)
                            {
                                Variables.setups_info[si].tool_fpath = Path.Combine(Variables.doc_options.output_dirpath,
                                                                                    Variables.fname_no_ext + ".tls");
                            }
                        }
                        for (int i = 0; i < Variables.setups_info[0].tools.Count; i++)
                        {
                            if (Variables.setups_info[0].tools[i].cutter_geom.Count == 0)
                            {
                                continue;
                            }
                            tool_info.Append(tool_info.Length > 0 ? "\n" : "");
                            tool_info.Append(
                                VericutTool.ToXML(Variables.setups_info[0].tools[i], Variables.doc.Metric));
                            nc_prog       = Convert.ToInt32(Convert.ToString(Variables.setups_info[0].tools[i].turr_type).Replace("eTT_TURRET", ""));
                            nc_prog_fpath = Variables.setups_info[0].nc_fpaths[nc_prog - 1];
                            crib_pos      = String.Format("{0}:{1}",
                                                          Convert.ToString(Variables.setups_info[0].tools[i].turr_type).Replace("eTT_TURRET", ""),
                                                          Convert.ToInt32(Variables.setups_info[0].tools[i].id));
                            AppendToToolList(tool_list, nc_prog, init_num, crib_pos, nc_prog_fpath, Variables.setups_info[0].tools[i].optional_id);
                        }
                        Variables.setups_info[0].tool_list = "<ToolChange>" + Environment.NewLine +
                                                             Utilities.Indent(tool_list.ToString(), 1) +
                                                             "</ToolChange>";
                        tls_fcontent.AppendLine("<?xml version=\"1.0\"?>");
                        tls_fcontent.AppendLine("<CGTechToolLibrary>");
                        tls_fcontent.AppendLine(Utilities.Indent("<Tools>", 1));
                        tls_fcontent.AppendLine(Utilities.Indent(tool_info.ToString(), 2));
                        tls_fcontent.AppendLine(Utilities.Indent("</Tools>", 1));
                        tls_fcontent.Append("</CGTechToolLibrary>");
                        File.WriteAllText(Variables.setups_info[0].tool_fpath, tls_fcontent.ToString());
                        LogFile.Write(String.Format("Tool info was written to {0}", Variables.setups_info[0].tool_fpath));
                    }
                }
            }
            catch (Exception Ex)
            {
                LogFile.Write(String.Format("Exception occured during tool export. Exception details: {0}\n", Ex.Message));
                MessageDisplay.ShowError(
                    LanguageSupport.Translate("Failed to export tools"));
            }
        }