UG/NX 二开开发(C#) Tag,Handle在不同场景下的分析(二)

上一篇介绍了Tag,TaggedObject,Handle在装配前后的差别,这一篇来介绍一下这三个对象在制图模式和建模模式的应用:UG/NX 二开开发 Tag,TaggedObject,Handle在不同场景下的分析(一)

在制图模式下,目前我还没有发现直接获取组件和部件的方法,后续会持续更新,目前是用了唐康林老师的通过手动命名,然后根据name通过ufun来获取tag,theUFSession.Obj.CycleByName。

直接看源码:

 public static void Main(string[] args)
    {
        try
        {
            theSession = Session.GetSession();
            displayPart = theSession.Parts.Display;
            theUFSession = UFSession.GetUFSession();
            workPart = theSession.Parts.Work;
            theUI = UI.GetUI();

            List<Component> compList = new List<Component>();
            List<Body> bodyList = new List<Body>();
            Dictionary<string, Component> dicComp = new Dictionary<string, Component>();
            Dictionary<string, Body> dicBody = new Dictionary<string, Body>();
            ComponentTool.GetBodyListFromComponet(ref compList, ref bodyList);
            Body bodyblock = bodyList[0];
            Auto_Init.BodyInit init = new Auto_Init.BodyInit(bodyblock);
            BodyModel model = init.ProcBody();

            FaceModel topFace = model.DicFace[model.faceFlag.faceTop];
            EdgeModel edge1 = topFace.EdgeList[0];
            EdgeModel edge2 = topFace.EdgeList[2];
            string a = theUFSession.Tag.AskHandleOfTag(edge1.Tag);
            string b = theUFSession.Tag.AskHandleOfTag(edge2.Tag);
            Debug.WriteLine(string.Format("edgeStart Name:{0}, edgeEnd Name:{1}", edge1.Name, edge2.Name));
            Debug.WriteLine(string.Format("edgeStart Tag:{0}, edgeEnd Tag:{1}", edge1.Tag, edge2.Tag));
            Debug.WriteLine(string.Format("edgeStart Hand:{0}, edgeEnd Hand:{1}", a, b));
            Debug.WriteLine("-------");

            Tag edgeStart = Tag.Null;
            Tag edgeEnd = Tag.Null;
            theUFSession.Obj.CycleByName("EDGESTART", ref edgeStart);
            theUFSession.Obj.CycleByName("EDGEEND", ref edgeEnd);
            a = theUFSession.Tag.AskHandleOfTag(edgeStart);
            b = theUFSession.Tag.AskHandleOfTag(edgeEnd);
            Debug.WriteLine(string.Format("edgeStart Tag:{0}, edgeEnd Tag:{1}", edgeStart, edgeEnd));
            Debug.WriteLine(string.Format("edgeStart Hand:{0}, edgeEnd Hand:{1}", a, b));
            
        }
        catch (NXOpen.NXException ex)
        {
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());
        }
    }

建模模式下,运行结果如下:

 从运行结果来看,同样的两条边:EDGESTART、EDGEEND

他们有2个Tag,2个Hand,个人验证过,通过theUFSession.Obj.CycleByName获取的tag在制图模式可以正常使用,相反另外一套tag在制图模式下无法正常使用。

结论: 在制图模块,暂时可以通过theUFSession.Obj.SetName的方式标记对象的name,然后在制图模式下通过CycleByName的方式获取对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarcoPro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值