数据管理功能 > 管理部件结构 > Windchill 选项和变型功能 > 开发可配置模块的高级选择逻辑 > 定义高级选择的基本步骤 > 在高级逻辑中使用数字运算符和函数
  
在高级逻辑中使用数字运算符和函数
可为多种不同类型定义参数。本部分提供了在高级逻辑中对数值参数使用运算符和函数的示例。
数值参数的运算符
可为“整数”或“实数”数值类型定义参数。虽然这些类型对应于参数可映射到的 Windchill 类型定义,但这些参数分别从内部映射到 Java 基元类型 - 长整型和双精度型,因此这些参数可在任何有效的 Java 表达式中用作长整型和双精度型变量。
可从下列位置定义表达式:
参数的“表达式”字段,用于定义参数的实际值或默认值。有关在参数中使用表达式的其他信息,请参阅“编辑参数”窗口的“信息”选项卡
对于“表达式”类型的约束,表达式的计算结果必须为布尔型。有关表达式约束类型的其他信息,请参阅表达式编辑器
表达式也可以在高级案例表中使用。有关高级案例表的其他信息,请参阅案例表编辑器
算术运算符
算术运算符可与表达式中的数值参数一起使用。其中包括二进制加法 (+)、减法 (-)、乘法 (*) 和除法 (/) 运算符。例如,下面是有关表达式约束的示例:
2 * a – 3 * b == c / d + e / 3
A == 2.5 * B / C – D / 7.5
也可使用单个输入项或一元运算符 - 和 + (+A 等效于 A)。
A == -B + 2 * C
D = +A – (-C)
模数 (%) 运算符可用于计算第一个自变量除以第二个参数所得的余数:
A == B % 7
关系运算符
关系运算符用于比较表达式约束中计算结果必须为布尔型的数字子表达式。其中包括以下运算符:
等于 (==)
大于 (>)
小于 (<)
大于等于 (>=)
小于等于 (<=)
不等于 (!=)
* 
“等于”运算符必须写作 "==",而不能写作 "="。
如果带有 "==" 运算符的表达式左侧或右侧包含单个表达式,则会将此表达式视为赋值 (=) 表达式。例如,在下列表达式约束中:
A == 2 * B + 3 * C
B / 4 - C / 3 == A
如果参数 B 和 C 的值已知,则根据此公式计算参数 A 的值。在上述示例中,参数 A 应定义为非输入参数,以使其值可由公式计算得出,而不是先由用户输入,然后再由公式计算得出。这也表示输入顺序很重要,在此示例中,B 和 C 先于 A 定义。如果以任何其他顺序 (例如先于参数 B 和 C 为参数 A 赋值) 定义,则会将此表达式视为布尔表达式,在这种情况下,参数 A 的值会与根据 B 和 C 的值计算所得的公式值进行比较。
* 
当两侧都包含一个以上的参数时,所有参数都必须是已知的,然后才能计算表达式约束。
在函数中引用数值参数的方法或表达式片段
数值参数也用作预设函数、标准 Java 函数和用户定义函数中的自变量。以下各部分提供了参考方法或表达式片段的替代方案。
在下面的示例中,将 D_1、D_2、D_3、D_4、D_5 和 D_6 视为实数 (Java 双精度型) 参数,而将 P_1、P_2、P_3 和 P_4 视为整数 (Java 长整型) 参数。此外,GeomFunctions 也是 ext.geom 包中包含几何函数的用户定义类的名称。
使用方法的全类路径
可以使用完全限定的名称 (<package path>.<class name>.<method name>) 来指定将参数作为自变量传递的函数。以下示例将说明该方法:
D_1 == java.lang.Math.cos(D_2) + java.lang.Math.sin(D_3)
P_1 == java.lang.StrictMath.addExact(P_2, P_3)
D_4 == ext.geom.GeomFunctions.area(D_5, D_6)
使用导入声明
可在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 文件中指定要导入的类,如下所示:
exparser.import.1=java.lang.Math
exparser.import.2=java.lang.StrictMath
exparser.import.3=ext.geom.GeomFunctions
如果使用了上述导入声明,则在表达式中指定函数时可省略包路径:
D_1 == Math.exp(D_2)
P_1 == StrictMath.round(D_3)
D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
使用静态导入声明
静态导入声明可首先在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 文件中指定,如下所示:
exparser.static.import.1=java.lang.Math
exparser.static.import.2=ext.geom.GeomFunctions
当使用静态导入声明在表达式中指定函数时,可同时忽略包路径和类名称,而仅保留方法名称:
D_1 == exp(D_2)
P_1 == round(D_3)
D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
如果在静态导入中注册的多个类中存在具有同名的方法,则会显示异常错误。例如,java.lang.Mathjava.lang.StrictMath 具有许多公用的方法名称。在公式中使用此类常用方法时,将这两个类都注册为静态导入会导致错误条件。
为方法使用缩写 (别名)
方法的缩写与其完整路径之间的映射可在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 文件中定义,如下所示:
exparser.abbreviation.1=SURFACE_AREA=ext.geom.GeomFunctions.area
exparser.abbreviation.2=ARC_TAN=java.lang.StrictMath.atan
在定义方法的缩写与其完整路径之间的映射后,可使用这些别名来访问表达式中的函数:
D_1 == ARC_TAN(D_2)
D_3 == SURFACE_AREA(D_4, D_5)
如果要将某一方法从 Java 类重新定义为与其他应用程序 (如 Microsoft Excel) 中的函数同名,则此方法非常有用。如果在 WT_HOME/wt.properties 文件中设置 ato.expression.rendering.context=com.ptc.wpcfg.logic.XLSExpressionRenderingContext 特性,则系统会添加相应的别名,以便通过 Microsoft Excel 应用程序中所用的名称来访问大多数的数值、文本和逻辑函数。数值函数有 ABS、ACOS、ASIN、ATAN、CEILING、COS、DEGREES、FLOOR、INT、LN、LOG、MAX、MIN、MOD、POWER、RADIANS、ROUND、ROUNDDOWN、ROUNDUP、SIN、SQRT、TAN、ACOSH、ASINH、ATANH、COMBIN、COSH、EXP、FACT、LOG10、SIGN、SINH 和 TANH。
使用宏
尽管缩写为单个函数的完整函数路径提供了别名,但宏是表达式片段的别名。这在多个表达式中重复使用表达式片段时会十分有用。导入、静态导入和缩写声明会在解析表达式时得到即时解决。宏片段首先为表达式中的宏所替代,随后表达式被解析。作为其他解析器特性,宏映射将在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 文件中定义,如下所示:
exparser.macro.1=AREA=SURFACE_AREA(D_2, D_3)
exparser.macro.2=SUM=java.lang.StrictMath.addExact(P_2, P_3)
随后,您便可在以下表达式中使用宏:
D_1 == AREA + 10.2
P_1 == SUM + P_4