UG/NX 二次开发(C#) 通过反射原理修正表达式的方法

 UG二次开发,难免会有大量的修正表达式的需求,因为二开人员大都是设计人员半路出家,所以C#语言的精华大多不会用。

这里通过C#的反射原理实现一个通用的修正表达式的方法。

1、我想很多开发人员修正表达式的方法都是这样的:

        /// <summary>
        /// 修正表达式,硬编码
        /// </summary>
        /// <param name="expCol"></param>
        /// <param name="expModel"></param>
        public static void UpdateExp(ExpressionCollection expCol, ExpressionModel expModel)
        {
            Expression[] expressions = expCol.ToArray();
            foreach (var ex in expressions)
            {
                if (ex.Name == "A")
                {
                    ex.Value = expModel.A == 0.0 ? ex.Value : expModel.A;
                }
                if (ex.Name == "B")
                {
                    ex.Value = expModel.B == 0.0 ? ex.Value : expModel.B;
                }
                if (ex.Name == "C")
                {
                    ex.Value = expModel.C == 0.0 ? ex.Value : expModel.C;
                }
                if (ex.Name == "D")
                {
                    ex.Value = expModel.D == 0.0 ? ex.Value : expModel.D;
                }
                if (ex.Name == "E")
                {
                    ex.Value = expModel.E == 0.0 ? ex.Value : expModel.E;
                }
                if (ex.Name == "F")
                {
                    ex.Value = expModel.F == 0.0 ? ex.Value : expModel.F;
                }
                if (ex.Name == "G")
                {
                    ex.Value = expModel.G == 0.0 ? ex.Value : expModel.G;
                }

                if (ex.Name == "RD2")
                {
                    ex.Value = expModel.RD2 == 0.0 ? ex.Value : expModel.RD2;
                }
                if (ex.Name == "RD3")
                {
                    ex.Value = expModel.RD3 == 0.0 ? ex.Value : expModel.RD3;
                }
                if (ex.Name == "RD4")
                {
                    ex.Value = expModel.RD4 == 0.0 ? ex.Value : expModel.RD4;
                }
                if (ex.Name == "RP1")
                {
                    ex.Value = expModel.RP1 == 0.0 ? ex.Value : expModel.RP1;
                }
                if (ex.Name == "RP2")
                {
                    ex.Value = expModel.RP2 == 0.0 ? ex.Value : expModel.RP2;
                }
                if (ex.Name == "RP3")
                {
                    ex.Value = expModel.RP3 == 0.0 ? ex.Value : expModel.RP3;
                }
                if (ex.Name == "RP4")
                {
                    ex.Value = expModel.RP4 == 0.0 ? ex.Value : expModel.RP4;
                }
                if (ex.Name == "X")
                {
                    ex.Value = expModel.X == 0.0 ? ex.Value : expModel.X;
                }
                if (ex.Name == "Y")
                {
                    ex.Value = expModel.Y == 0.0 ? ex.Value : expModel.Y;
                }
                if (ex.Name == "Z")
                {
                    ex.Value = expModel.Z == 0.0 ? ex.Value : expModel.Z;
                }
            }
            uFModl = theUFSession.Modl;
            uFModl.Update();
        }

2、通过反射修正表达式,是这样的:

     第一步:定义表达式实体

public class ExpressionModel
    {
        public double A { get; set; }
        public double B { get; set; }
        public double C { get; set; }
        public double D { get; set; }
        public double E { get; set; }
        public double F { get; set; }
        public double G { get; set; }

        public double RD2 { get; set; }
        public double RD3 { get; set; }
        public double RD4 { get; set; }
        public double RP1 { get; set; }
        public double RP2 { get; set; }
        public double RP3 { get; set; }
        public double RP4 { get; set; }

        public double X { get; set; }
        public double Y { get; set; }
        public double Z { get; set; }
    }

     第二步:利用反射原理修正表达式,自动完全匹配

        /// <summary>
        /// 修正表达式,自动完全匹配
        /// </summary>
        /// <param name="expCol"></param>
        /// <param name="expModel"></param>
        public static void UpdateExpression(ExpressionCollection expCol, ExpressionModel expModel)
        {
            Expression[] expressions = expCol.ToArray();
            foreach (var ex in expressions)
            {
                foreach (PropertyInfo pi in expModel.GetType().GetProperties())
                {
                    double value = 0.0;
                    var name = pi.Name;
                    string strVal = pi.GetValue(expModel, null).ToString();
                    if (!string.IsNullOrEmpty(strVal))
                    {
                        value = double.Parse(strVal);
                    }

                    if (ex.Name == name)
                    {
                        ex.Value = value == 0.0 ? ex.Value : value;
                    }
                }
            }
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MarcoPro

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

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

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

打赏作者

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

抵扣说明:

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

余额充值