UG NX二次开发 创建表达式(无单位) C#

本文将介绍如何创建新表达式。本文中的代码将演示如何创建数字表达式(无单位)、引用公式中现有表达式的数字表达式、字符串表达式、布尔表达式、整数表达式、点表达式、向量表达式和列表表达式。此外,该代码还将演示如何查找和编辑现有表达式。

整个代码发布相当长。该代码是在 NX 9 上编写和测试的,可在 操作记录中直接运行。

using System;
using NXOpen;
 class NXJ_Exp_2
{
    public static void Main()
    {
        Session theSession = Session.GetSession();
        if (ReferenceEquals(theSession.Parts.BaseWork, null))
        {
            return;
        }

        Part workPart = theSession.Parts.Work;
        ListingWindow lw = theSession.ListingWindow;
        lw.Open();

        const string undoMarkName = "NXJ创建表达式"; 
        Session.UndoMarkId markId1;
        markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, undoMarkName);

        Expression exp_1 = null;
        double exp1Value = 2.7182;
        try
        {
            //创建数字表达式1(无单位)
            //.Create方法无法创建String类型的表达式
            exp_1 = workPart.Expressions.Create("NXJ_1 = " + exp1Value.ToString());

            //或者,让编译器将值转换为字符串
            //exp_1 = workPart.Expressions.Create("NXJ_1 = " & exp1Value)

            //或者,直接传入值
            //exp_1 = workPart.Expressions.Create("NXJ_1 = 2.7182")

        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {
                //表达式已存在
                exp_1 = workPart.Expressions.FindObject("NXJ_1");
            }
            else
            {
                //其他错误
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);
            }

        }

        
        Expression exp_2 = null;
        double exp2Value = 3.1415;
        try
        {
            //创建数字表达式2(无单位)
            exp_2 = workPart.Expressions.CreateExpression("Number", "NXJ_2 = " + exp2Value.ToString());
        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {   
                exp_2 = workPart.Expressions.FindObject("NXJ_2");
            }
            else
            {            
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);

            }

        }

       
        Expression exp_3 = null;
        try
        {
            //创建数字表达式3(无单位)
            //引用之前创建的2个表达式
            exp_3 = workPart.Expressions.CreateExpression("Number", "NXJ_3 = " + exp_1.Name + " + " + exp_2.Name);
        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {
                //表达式已存在
                exp_3 = workPart.Expressions.FindObject("NXJ_3");
                Session.UndoMarkId markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Expression edit");

                //将公式从加法改为乘法,并在表达式中添加注释
                exp_3.RightHandSide = exp_1.Name + " * " + exp_2.Name + "//加法改为乘法";

                int nErrs1 = System.Convert.ToInt32(theSession.UpdateManager.DoUpdate(markId2));
            }
            else
            {
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);
            }
        }


        Expression exp_4 = null;
        string exp4Value = "Hello, NX programmers!";
        try
        {
            //创建字符串表达式
            //在字符串值周围添加双引号
            exp_4 = workPart.Expressions.CreateExpression("String", "NXJ_4 = " + "\"" + exp4Value + "\"");

            //另一种选择:在inital字符串值中添加双引号
            //exp4Value = "\"Hello, NX programmers!\"";
            //exp_4 = workPart.Expressions.CreateExpression("String", "NXJ_4 = " + exp4Value);

            //或者,直接传入字符串文字
            // exp_4 = workPart.Expressions.CreateExpression("String", "NXJ_4 = \"Hello, NX programmers!\"");
            //exp_4 = workPart.Expressions.CreateExpression("String", "NXJ_4 = " + System.Convert.ToString((char)34) + "Hello, NX programmers!" + System.Convert.ToString((char)34));

            exp_4.EditComment("greetings"); //更改附注

        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {  
                exp_4 = workPart.Expressions.FindObject("NXJ_4");
            }
            else
            {   
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);

            }
        }


        Expression exp_5 = null;
        bool val_5 = true;
        try
        {
            //创建布尔型表达式
            //将表达式设置为变量的值
             exp_5 = workPart.Expressions.CreateExpression("Boolean", "NXJ_5 = " + val_5.ToString());
            //或者,直接设置值
            //exp_5 = workPart.Expressions.CreateExpression("Boolean", "NXJ_5 = True");
        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {  
                exp_5 = workPart.Expressions.FindObject("NXJ_5");

                Session.UndoMarkId markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Expression edit");

                if (exp_5.Type == "Boolean")
                {
                    exp_5.RightHandSide = (!exp_5.BooleanValue).ToString();
                    string comment = "value changed by journal: " + DateTime.Now.ToString();
                    exp_5.EditComment(comment);
                }
                int nErrs1;
                nErrs1 = System.Convert.ToInt32(theSession.UpdateManager.DoUpdate(markId2));
            }
            else
            {  
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);
            }
        }

        Expression exp_6 = null;
        int val_6 = 42;
        try
        {
            //创建整数表达式
            exp_6 = workPart.Expressions.CreateExpression("Integer", "NXJ_6 = " + val_6.ToString());
        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {
                
                exp_6 = workPart.Expressions.FindObject("NXJ_6");

                Session.UndoMarkId markId2  = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Expression edit");
                if (exp_6.Type == "Integer")
                {
                    string comment = "value was: " + exp_6.IntegerValue.ToString();
                    val_6 = System.Convert.ToInt32(exp_6.IntegerValue + 10);
                    exp_6.RightHandSide = val_6.ToString();
                    exp_6.EditComment(comment);
                }

                int nErrs1;
                nErrs1 = System.Convert.ToInt32(theSession.UpdateManager.DoUpdate(markId2));

            }
            else
            {   
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);

            }

        }


        Expression exp_7 = null;
        Point3d exp7Val = new Point3d(0, 0, 0);
        try
        {
            //创建点表达式
            exp_7 = workPart.Expressions.CreateExpression("Point", "NXJ_7 = Point(" + exp7Val.X.ToString() + "," + exp7Val.Y.ToString() + "," + exp7Val.Z.ToString() + ")");
        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {
                exp_7 = workPart.Expressions.FindObject("NXJ_7");

                Session.UndoMarkId markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Expression edit");

                //更改当前的X、Y、Z值
                Random r = new Random();
                if (exp_7.Type == "Point")
                {
                    Point3d thePoint = exp_7.PointValue;
                    string comment = "value was: " + thePoint.ToString();
                    exp_7.RightHandSide = "Point(" + System.Convert.ToString(r.Next(-10, 11)) + "," + System.Convert.ToString(r.Next(-10, 11)) + "," + System.Convert.ToString(r.Next(-10, 11)) + ")";
                    exp_7.EditComment(comment);
                }

                int nErrs1;
                nErrs1 = System.Convert.ToInt32(theSession.UpdateManager.DoUpdate(markId2));

            }
            else
            {
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);

            }

        }


        Expression exp_8 = null;
        Vector3d exp8Val = new Vector3d(0, 0, 1);
        try
        {
            //创建矢量表达式
            exp_8 = workPart.Expressions.CreateExpression("Vector", "NXJ_8 = Vector(" + exp8Val.X.ToString() + "," +
                exp8Val.Y.ToString() + "," + exp8Val.Z.ToString() + ")");
        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {
                exp_8 = workPart.Expressions.FindObject("NXJ_8");

                Session.UndoMarkId markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Expression edit");

                //否定当前的X、Y、Z值
                if (exp_8.Type == "Vector")
                {
                    Vector3d theVector = exp_8.VectorValue;
                    string comment = "value was: " + theVector.ToString();
                    exp_8.RightHandSide = "Vector(" + (-theVector.X) + "," + (-theVector.Y) + "," + (-theVector.Z) + ")";
                    exp_8.EditComment(comment);
                }

                int nErrs1;
                nErrs1 = System.Convert.ToInt32(theSession.UpdateManager.DoUpdate(markId2));

            }
            else
            {
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);

            }

        }


        Expression exp_9 = null;
        try
        {
            //创建列表表达式
            exp_9 = workPart.Expressions.CreateExpression("List", "NXJ_9 = {1, \"two\", Point(3,4,5)}");
        }
        catch (NXException ex)
        {
            if (ex.ErrorCode == 1050017)
            {     
                exp_9 = workPart.Expressions.FindObject("NXJ_9");
            }
            else
            {
                lw.WriteLine("NX exception: " + ex.ErrorCode + ", " + ex.Message);

            }

        }

        lw.Close();

    }

    public static int GetUnloadOption(string dummy)
    {
        //Unloads the image immediately after execution within NX
        return System.Convert.ToInt32(NXOpen.Session.LibraryUnloadOption.Immediately);
    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UG NXOpen学徒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值