本文将介绍如何创建新表达式。本文中的代码将演示如何创建数字表达式(无单位)、引用公式中现有表达式的数字表达式、字符串表达式、布尔表达式、整数表达式、点表达式、向量表达式和列表表达式。此外,该代码还将演示如何查找和编辑现有表达式。
整个代码发布相当长。该代码是在 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);
}
}