UG 二开获取组件表达式是经常遇到的,这里列举2种获取表达式的方法:
1、有了组件文件路径,加载组件并获取表达式
2、有了组件的tag,获取组件表达式
/// <summary>
/// 获取组件的表达式的2种方式,修正表达式
/// </summary>
public static void GetExpressionDemo()
{
//1、有了组件了路径,加载组件并获取表达式
string fullPartFile = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Common\\3D\\block.prt";
string fullPartFile1 = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Common\\3D\\block1.prt";
BasePart basePart1;
Session theSession = Session.GetSession();
PartLoadStatus partLoadStatus1;
try
{
basePart1 = theSession.Parts.OpenBase(fullPartFile, out partLoadStatus1);
}
catch (Exception)
{
basePart1 = theSession.Parts.OpenBase(fullPartFile1, out partLoadStatus1);
}
ExpressionCollection expressionCollection = basePart1.Expressions;
foreach (var ex in expressionCollection.ToArray())
{
string name = ex.Name;
}
//2、有了组件的tag,获取组件表达式
NXOpen.UF.UFSession theUFSession;
theUFSession = UFSession.GetUFSession();
Tag tag = basePart1.Tag;
int num;
Tag[] tagArr;
theUFSession.Modl.AskExpsOfPart(tag, out num,out tagArr);
for (int i = 0; i < num; i++)
{
string expname = "";
theUFSession.Modl.AskExpTagString(tagArr[i], out expname);
}
ExpressionModel expModel = new ExpressionModel();
expModel.X = 100;
expModel.Y = 50;
expModel.Z = 50;
//修正表达式
ComponentTool.UpdateExpression(expressionCollection, expModel);
}