找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 4568|回复: 88

[分享] 关于分割文件名,自动写入名称和图号属性的做法

[复制链接]

35

主题

1033

回帖

1万

积分

上校

积分
13886
发表于 2025-6-20 10:58:03 | 显示全部楼层 |阅读模式
关于日期自动写入属性的做法参考https://www.ugsnx.com/thread-353801-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
        {
           
        }
    }
}



这段代码效果与用表达式的方式相似
PixPin_2025-06-20_10-48-32.gif


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

评分

参与人数 3G币 +115 收起 理由
人生不等闲 + 10 牛的,这水平. 一对比觉得自己是小学生. ...
tongjiashan2 + 5 很给力!
3D世界网-零 + 100 分享加分!

查看全部评分

35

主题

1033

回帖

1万

积分

上校

积分
13886
 楼主| 发表于 2026-4-26 17:30:24 | 显示全部楼层
本帖最后由 夏季里那丝清凉 于 2026-4-26 17:32 编辑
思维空间 发表于 2026-4-25 08:58
大佬,能在文档中加一个显示路径吗?像这样

2026/04/26修改内容:
1,增加检查用户默认设置
检查用户默认设置“创建质量属性”与“创建累计质量属性”是否勾选。
2,增加写入文件路径到用户自定义属性
将部件文件路径写入默认属性DB_PART_PATH中,UI对话界面的自定义属性栏增加文件路径属性栏,可自定义写入文件路径的属性名。

该工具仅测试用,本人不对未知bug负责,使用前须知。

PixPin_2026-04-26_17-29-04.png

文件名分割并赋值属性-260426.rar

18.11 KB, 下载次数: 2, 下载积分: G币 -1

82

主题

919

回帖

5653

积分

上尉

积分
5653
发表于 2025-6-21 09:29:12 | 显示全部楼层
o1ojacko1o 发表于 2025-6-20 13:58
我知道 我这个要求有点过分,但是还是想问一句。
能否 写一个  在装配体下 遍历整个装配体  然后每个零件都 ...

记得好评!!!

装配文件批量分离图号.rar

21.86 KB, 下载次数: 80, 下载积分: G币 -1

35

主题

1033

回帖

1万

积分

上校

积分
13886
 楼主| 发表于 2025-11-19 17:10:36 | 显示全部楼层
本帖最后由 夏季里那丝清凉 于 2025-11-19 17:16 编辑
宁静星空 发表于 2025-11-19 15:19
哦,是的,请大神再优化、优化

1.这个“这个字体大小或空间”,调整一下,美观些

原来是你的文件已经存在同名但不同类型的weight属性导致写入属性失败,这才弹那个警报窗口。
我现在干脆简单粗暴的直接在写入属性值前先把同名的属性删掉。


你第二个问题,那个工作进行中的窗口不是更新质量才出来的,是我这个工具一使用就会出现,工具用完才结束,应为代码里时模态调用的窗口,就是只能等我这个窗口的操作结束才能继续操作NX软件。有试过改成非模态窗口,但是各种出错,所以就一直没弄。

NXOpenCSTemplate1_(解决缺失质量报警bug).rar

12 KB, 下载次数: 16, 下载积分: G币 -1

35

主题

1033

回帖

1万

积分

上校

积分
13886
 楼主| 发表于 2025-11-18 20:04:27 | 显示全部楼层
本帖最后由 夏季里那丝清凉 于 2025-11-19 00:05 编辑
宁静星空 发表于 2025-11-11 16:11
大神,你好,
这个工具应用后,发现2个问题

很抱歉出现这种情况~对这个工具做了部分修改,看看是否还有问题。
NXOpenCSTemplate1.rar (13.03 KB, 下载次数: 14)
该dll是基于NX2506做的,是否还有其它未知问题,我自己也不清楚。

82

主题

919

回帖

5653

积分

上尉

积分
5653
发表于 2025-6-20 16:21:07 | 显示全部楼层
夏季里那丝清凉 发表于 2025-6-20 14:18
不想装vs配置开发环境(因为不会,而且配置开发环境来编译对于小白来说太复杂),这种用操作记录文件的方 ...

帮你编译了 顺手做了个UI

图号分离插件.rar

8.43 KB, 下载次数: 106, 下载积分: G币 -1

1

主题

85

回帖

658

积分

三级士官

积分
658

可爱天使

发表于 2025-6-20 11:27:26 | 显示全部楼层
楼主 厉害   
+10086

33

主题

760

回帖

1万

积分

中校

积分
10178

二等奖

发表于 2025-6-20 12:00:19 | 显示全部楼层
牛!已收藏。
继续学习中……

谢谢。

53

主题

272

回帖

8867

积分

少校

积分
8867
发表于 2025-6-20 13:17:07 | 显示全部楼层
很专业,省了很多事,谢谢楼主分享。

1

主题

85

回帖

658

积分

三级士官

积分
658

可爱天使

发表于 2025-6-20 13:58:23 | 显示全部楼层
我知道 我这个要求有点过分,但是还是想问一句。
能否 写一个  在装配体下 遍历整个装配体  然后每个零件都做 执行一下这个程序呢?

82

主题

919

回帖

5653

积分

上尉

积分
5653
发表于 2025-6-20 14:08:07 | 显示全部楼层
你直接编译个DLL文件出来大家直接用

35

主题

1033

回帖

1万

积分

上校

积分
13886
 楼主| 发表于 2025-6-20 14:18:16 | 显示全部楼层
zwaiwo* 发表于 2025-6-20 14:08
你直接编译个DLL文件出来大家直接用

不想装vs配置开发环境(因为不会,而且配置开发环境来编译对于小白来说太复杂),这种用操作记录文件的方式适合会一点点,不需要太专业,知道几个关键函数就能做些简单的功能

119

主题

898

回帖

1万

积分

中校

积分
12840

论坛元老

发表于 2025-6-20 14:22:45 | 显示全部楼层
不错,相比表达式又多了一个方法

6

主题

1007

回帖

2707

积分

少尉

积分
2707
发表于 2025-6-20 15:09:26 | 显示全部楼层
牛!已收藏。

20

主题

450

回帖

9170

积分

少校

积分
9170
发表于 2025-6-20 15:33:12 | 显示全部楼层
谢谢楼主分享。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2026-5-9 13:58

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表