Пример #1
0
    //------------------------------------------------------------------------------
    //Callback Name: update_cb
    //------------------------------------------------------------------------------
    public int update_cb(NXOpen.BlockStyler.UIBlock block)
    {
        try
        {
            if (block == list_postName)
            {
                //---------Enter your code here-----------
            }
            else if (block == nativeFileBrowser_post)
            {
                //---------Enter your code here-----------

                string env_path      = Environment.GetEnvironmentVariable("UGII_BASE_DIR"); //读取环境变量中NX的安装目录
                string env_post_path = env_path + "\\MACH\\resource\\postprocessor\\";      //进一步寻找后处理文件所在位置
                //theUfSession.Ui.DisplayMessage("测试环境变量的路径: " + env_post_path , 1);
                string post_template = env_post_path + "template_post.dat";
                //theUfSession.Ui.DisplayMessage(post_template, 1);



                string   using_path       = nativeFileBrowser_post.Path; //输出整个选择的绝对路径
                string[] post_all         = using_path.Split('\\');      //通过‘\’将绝对路径进行分割
                int      co               = post_all.Length;             //  取得分割后字符串数组的个数
                string   post_usr_all     = post_all[co - 1];            //去最后一个字符数组中的字符
                string[] post_usr_all_cut = post_usr_all.Split('.');     //用'.'进行最后文件名的分割
                string   post_usr_name    = post_usr_all_cut[0];         //去'.'分割的第一部分,即为我们要用的文件名

                string[] add_post_name = new string[1];
                add_post_name[0] = post_usr_name;
                list_postName.SetListItems(add_post_name);
                listPostNames.Add(post_usr_name);
                string[] temparray = (string[])listPostNames.ToArray(typeof(string));
                list_postName.SetListItems(temparray);



                //先读取模板文件,按条读取,然后查重
                //theUfSession.Ui.DisplayMessage(post_template, 1);
                StreamReader sr      = new StreamReader(post_template, System.Text.Encoding.Default);
                int          findstr = 0;

                while (sr.Peek() > -1)
                {
                    string sk = sr.ReadLine();

                    //theUfSession.Ui.DisplayMessage(sk, 1);
                    //st.WriteLine(sk);
                    int indexofcoma = sk.IndexOf(","); //加入判断,只有该举有“,”存在才进行分割,并对findstr++;
                    if (indexofcoma > -1)
                    {
                        string[] splitstr = sk.Split(',');
                        if (splitstr[0] == post_usr_name)
                        {
                            findstr++;
                        }
                        else
                        {
                            continue;
                        }
                    }

                    //theUfSession.Ui.DisplayMessage(splitstr[0], 1);
                    //theUfSession.Ui.DisplayMessage((post_usr_name, 1);
                }
                sr.Close();

                //theUfSession.Ui.DisplayMessage(findstr.ToString(), 1);
                StreamWriter sw = new StreamWriter(post_template, true, System.Text.Encoding.UTF8);
                if (findstr == 0)
                {
                    sw.WriteLine(post_usr_name + "," + "${UGII_CAM_POST_DIR}" + post_usr_name + ".tcl" + "," + "${UGII_CAM_POST_DIR}" + post_usr_name + ".def");
                }

                sw.Close();


                //向模板文件写入
                //using (StreamWriter sw = new StreamWriter(post_template, true, System.Text.Encoding.UTF8))
                //{
                //    //先进行判断是否有重复的项,有重复的部需要重写

                //    sw.WriteLine(post_usr_name + "," + "${UGII_CAM_POST_DIR}" + post_usr_name + ".tcl" + "," + "${UGII_CAM_POST_DIR}" + post_usr_name + ".def");
                //    sw.Close();
                //}

                //复制后处理相关文件到NX后处理默认目录
                string post_file_path = nativeFileBrowser_post.Path; //后处理文件所在位置
                //theUfSession.Ui.DisplayMessage("后处理所在位置: " + post_file_path, 1);
                int    laindex         = post_file_path.LastIndexOf(post_usr_name + "." + "pui");
                string using_post_path = post_file_path.Substring(0, laindex);
                //theUfSession.Ui.DisplayMessage("用来复制的路径" + using_post_path, 1);

                string sc1 = using_post_path + post_usr_name + ".tcl";
                string sc2 = using_post_path + post_usr_name + ".def";
                string sc3 = using_post_path + post_usr_name + ".pui";

                string aim_path = env_post_path;  //要复制到的路径
                string ncf1     = aim_path + post_usr_name + ".tcl";
                string ncf2     = aim_path + post_usr_name + ".def";
                string ncf3     = aim_path + post_usr_name + ".pui";
                //合成复制文件路径
                var ncf1_path = Path.Combine(ncf1);
                var ncf2_path = Path.Combine(ncf2);
                var ncf3_path = Path.Combine(ncf3);

                //复制文件
                File.Copy(sc1, ncf1_path, true);
                File.Copy(sc2, ncf2_path, true);
                File.Copy(sc3, ncf3_path, true);
            }
            else if (block == string_outfile)
            {
                //---------Enter your code here-----------
            }
            else if (block == string_lastName)
            {
                //---------Enter your code here-----------
            }
            else if (block == nativeFolderBrowser_outpath)
            {
                //---------Enter your code here-----------

                string_outfile.Value = nativeFolderBrowser_outpath.Path;
            }
            else if (block == string_Unit)
            {
                //---------Enter your code here-----------
            }
            else if (block == toggle_showIt)
            {
                //---------Enter your code here-----------
            }
            else if (block == list_ncfiles)
            {
                //---------Enter your code here-----------
            }
            else if (block == button_output)
            {
                //---------Enter your code here-----------

                //增加一个选项,当选取输出目录不为null时,后处理好的文件的输出目录为选取目录中的目录,当为null时,默认为打开文件的目录为输出目录

                //输出后处理
                //将选中的节点的数量及tag返回
                int   selectNodeCount;
                Tag[] selTags;
                theUfSession.UiOnt.AskSelectedNodes(out selectNodeCount, out selTags);
                string[] postlistName = new string[selectNodeCount];

                NXOpen.CAM.CAMObject[] camObjects = new NXOpen.CAM.CAMObject[selectNodeCount];

                //取得当前工作部件的目录,并将其设置在输出目录里
                string wholepath   = workPart.FullPath;
                string part_name   = workPart.Name;
                int    indexofName = wholepath.LastIndexOf(part_name);
                string workpath    = nativeFolderBrowser_outpath.Path;
                //theUfSession.Ui.DisplayMessage(workpath, 1);  //测试工作目录是否正确


                //返回选中的后处理器的名称

                string[] usingpostname = list_postName.GetSelectedItemStrings();  //获取选中的后处理器的名称,用于后处理设置中给定的machine name,每次后处理只允许选取一个后处理器,不允许多选,因此取“0”个元素
                                                                                  //theUfSession.Ui.DisplayMessage("选中的列的文本: " + usingpostname[0], 1);

                string[] all_postmachin_name = list_postName.GetListItems();
                post_machine_name = usingpostname[0];


                //开始设置循环,进行多个程序文件的后处理
                for (int i = 0; i < selectNodeCount; i++)
                {
                    camObjects[i]   = (NXOpen.CAM.CAMObject)NXObjectManager.Get(selTags[i]);
                    postlistName[i] = camObjects[i].Name + "." + string_lastName.Value;
                    //theUfSession.Ui.DisplayMessage("选中的后处理器名称" + post_machine_name, 1);
                    string testpath = string_outfile.Value + @"\" + postlistName[i];
                    //theUfSession.Ui.DisplayMessage("路径是: " + testpath, 1);
                    NXOpen.CAM.CAMObject[] tempObj = new NXOpen.CAM.CAMObject[1];
                    tempObj[0] = camObjects[i];
                    //nativeFolderBrowser_outpath.Path = string_outfile.Value + "\\" + camObjects[i].Name;
                    //theUfSession.Ui.DisplayMessage("输出文件路径: " + nativeFile_outfilepath.Path, 1);
                    //workPart.CAMSetup.OutputClsf(tempObj, enum_clsf.ValueAsString, nativeFolderBrowser_Path.Path + camObjects[i].Name, NXOpen.CAM.CAMSetup.OutputUnits.Metric);
                    if (File.Exists(string_outfile.Value + postlistName[i]))
                    {
                        //theUfSession.Ui.DisplayMessage("文件已经存在了", 1);
                        File.Delete(string_outfile.Value + postlistName[i]);
                    }
                    //theUfSession.Ui.DisplayMessage(string_outfile.Value + postlistName[i], 1);
                    workPart.CAMSetup.PostprocessWithSetting(tempObj, post_machine_name, string_outfile.Value + "\\" + postlistName[i], NXOpen.CAM.CAMSetup.OutputUnits.Metric, NXOpen.CAM.CAMSetup.PostprocessSettingsOutputWarning.PostDefined, NXOpen.CAM.CAMSetup.PostprocessSettingsReviewTool.PostDefined);
                }

                //添加选中的要后处理的程序文件到列表框中,并进行输出
                int   selpostcount;
                Tag[] selpostTags;


                //将选中的节点的数量及tag返回
                theUfSession.UiOnt.AskSelectedNodes(out selpostcount, out selpostTags);
                string[] listpostName_sec = new string[selpostcount];

                NXOpen.CAM.CAMObject[] postObjects = new NXOpen.CAM.CAMObject[selpostcount];
                for (int k = 0; k < selpostcount; k++)
                {
                    postObjects[k]      = (NXOpen.CAM.CAMObject)NXObjectManager.Get(selpostTags[k]);
                    listpostName_sec[k] = postObjects[k].Name + "." + string_lastName.Value;
                }
                list_ncfiles.SetListItems(listpostName_sec);
                //将导出文件名称转存到公共字符串数组,方便窗口显示文件调用
                posted_name_list = listpostName_sec;


                //当勾选,显示输出后置处理好的文件
                if (toggle_showIt.Value == true)
                {
                    string[] temp_output_posts = posted_name_list;
                    //string wholepath = workPart.FullPath;
                    //string part_name = workPart.Name;
                    //int indexofName = wholepath.LastIndexOf(part_name);
                    //string workpath = wholepath.Substring(0, indexofName);


                    theUfSession.Ui.OpenListingWindow();
                    for (int i = 0; i < temp_output_posts.Length; i++)
                    {
                        //打开列表窗口,只能打开一个信息窗口,因此会在一个窗口中循环显示,已经后处理的文件

                        string       using_workpath = workpath + "\\" + temp_output_posts[i];
                        StreamReader sw             = new StreamReader(using_workpath);
                        string       temp_outfile   = sw.ReadToEnd();

                        theUfSession.Ui.WriteListingWindow("已经后处理的程序文件:" + temp_output_posts[i] + "\n");
                        theUfSession.Ui.WriteListingWindow(temp_outfile + "\n");
                        sw.Close();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            //---- Enter your exception handling code here -----
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());
        }
        return(0);
    }
Пример #2
0
    //------------------------------------------------------------------------------
    //Callback Name: apply_cb
    //------------------------------------------------------------------------------
    public int apply_cb()
    {
        int errorCode = 0;

        try
        {
            //---- Enter your callback code here -----

            //输出后处理
            //将选中的节点的数量及tag返回
            int   selectNodeCount;
            Tag[] selTags;
            theUfSession.UiOnt.AskSelectedNodes(out selectNodeCount, out selTags);
            string[] postlistName = new string[selectNodeCount];

            NXOpen.CAM.CAMObject[] camObjects = new NXOpen.CAM.CAMObject[selectNodeCount];

            //取得当前工作部件的目录,并将其设置在输出目录里
            string wholepath   = workPart.FullPath;
            string part_name   = workPart.Name;
            int    indexofName = wholepath.LastIndexOf(part_name);
            string workpath    = wholepath.Substring(0, indexofName);
            //string tempworkpath = "E:\\Work\\2018-9-19-1823-228-3";
            theUfSession.Ui.DisplayMessage(workpath, 1);

            string_outfile.Value = workpath;
            //theUfSession.Ui.DisplayMessage(list_postName.SelectedItemString, 1);



            //返回选中的后处理器的名称

            int[]    ind          = list_postName.GetSelectedItemBooleans();
            string[] temppostname = list_postName.GetSelectedItemStrings();
            theUfSession.Ui.DisplayMessage("选中的列的文本: " + temppostname[0], 1);
            string[] instr = list_postName.GetListItems();
            theUfSession.Ui.DisplayMessage("当前选中序号: " + ind.Length, 1);
            //theUfSession.Ui.DisplayMessage("当前选中序号文本: " + instr[11], 1);
            string[] all_postmachin_name = list_postName.GetListItems();
            post_machine_name = temppostname[0];
            //theUfSession.Ui.DisplayMessage("当前选中序号: " + ind, 1);
            theUfSession.Ui.DisplayMessage(post_machine_name, 1);
            string teststring = post_machine_name; //"MILL_3_AXIS";


            //开始设置循环,进行多个程序文件的后处理
            for (int i = 0; i < selectNodeCount; i++)
            {
                camObjects[i]   = (NXOpen.CAM.CAMObject)NXObjectManager.Get(selTags[i]);
                postlistName[i] = camObjects[i].Name + "." + string_lastName.Value;
                //theUfSession.Ui.DisplayMessage("选中的后处理器名称" + post_machine_name, 1);
                NXOpen.CAM.CAMObject[] tempObj = new NXOpen.CAM.CAMObject[1];
                tempObj[0] = camObjects[i];
                nativeFile_outfilepath.Path = string_outfile.Value + "\\" + camObjects[i].Name;
                string ttt = string_outfile.Value + camObjects[i].Name;
                //theUfSession.Ui.DisplayMessage("输出文件路径: " + nativeFile_outfilepath.Path, 1);
                //workPart.CAMSetup.OutputClsf(tempObj, enum_clsf.ValueAsString, nativeFolderBrowser_Path.Path + camObjects[i].Name, NXOpen.CAM.CAMSetup.OutputUnits.Metric);
                workPart.CAMSetup.PostprocessWithSetting(tempObj, teststring, string_outfile.Value + "\\" + postlistName[i], NXOpen.CAM.CAMSetup.OutputUnits.Metric, NXOpen.CAM.CAMSetup.PostprocessSettingsOutputWarning.PostDefined, NXOpen.CAM.CAMSetup.PostprocessSettingsReviewTool.PostDefined);
            }
        }
        catch (Exception ex)
        {
            //---- Enter your exception handling code here -----
            errorCode = 1;
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());
        }
        return(errorCode);
    }