Bootstrap
mdo 云课精选 发表于:06-08 10:33   阅读(46)   回复(0)

来源: https://www.ugsnx.com/thread-353832-1-1.html

大神(夏季里那丝清凉)分享:

分割文件名并写入属性的方式,论坛里以前有使用表达式的方式。同日期自动写入属性一样,再次尝试使用自定义用户命令调用C#操作记录文件的方式来做。

文件名的命名我个人以前是"图号"+空格+"名称"的方式(例如:"Jix25060701 测试零件");或者直接文件名就是零件名,图号手动在制图里写。

分割文件名就是以文件名里的第一个空格将文件名分成两个,第一个空格前的字符作为图号,第一个空格后的字符作为零件名,如果文件名里没有空格,则文件名就是零件名。了解这个逻辑后就可以写代码了。

代码1:

using System;
using NXOpen;
public class SetDateAttribute
{
    public static void Main(string[] args)
    {
        // 获取当前会话和工作部件
        Session theSession = Session.GetSession();
        Part workPart = theSession.Parts.Work;
        // 获取当前日期
        string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
       //获取工作部件文件名
        string partName = workPart.Name;
       //将文件名以第一个空格分割,此处单引号里有一个空格,如果是用其它字符分割文件名,将里面空格替换成对应字符
        int firstSpaceIndex = partName.IndexOf(' ');
       //定义图号变量并赋值空
        string partNamePrefix = "";
       //定义零件名变量并赋值空
        string partNameSuffix = "";
        //判断文件名是否被分割
         if (firstSpaceIndex >= 0)
            {
                // 找到空格,分割名称
                partNameSuffix = partName.Substring(0, firstSpaceIndex);
                partNamePrefix = partName.Substring(firstSpaceIndex + 1);
            }
            else
            {
                // 没有空格,整个名称作为零件名
                partNamePrefix = partName;
            }
        try
        {
            workPart.SetUserAttribute(
                "RELEASE_DATE",                //将日期写入属性RELEASE_DATE,可更改为实际要写入的属性名
                -1,              
                currentDate,     
                Update.Option.Now
            );
            workPart.SetUserAttribute(
                "DB_PART_NAME",              //写入零件名属性DB_PART_NAME,可更改为实际要写入的属性名
                -1,
                partNamePrefix,
                Update.Option.Now
            );
            // 设置第二个属性:部件名后缀
            workPart.SetUserAttribute(
                "DB_PART_NO",              //写入图号属性DB_PART_NO,可更改为实际要写入的属性名
                -1,
                partNameSuffix,
                Update.Option.Now
            );
               theSession.UpdateManager.DoUpdate(0);
        }
        catch
        {
        }
    }
}

这段代码效果与用表达式的方式相似

事实上是可以继续优化的,比如先判断部件属性是否有值,有就不用写入属性,没有才将分割的文件名写入,也可以设置弹窗来确认是否将分割文件名写入属性,甚至指派材料等等~~~