Использование числовых операторов и функций в расширенной логике
Параметры можно определить для нескольких различных типов. В этом разделе представлены примеры использования операторов и функций с числовыми параметрами в расширенной логике.
Операторы для числовых параметров
Параметры можно определить для целых или действительных числовых типов. Хотя эти типы соответствуют определениям типов Windchill, с которыми можно сопоставить параметр, они внутренне сопоставляются с примитивными Java-типами Long и Double соответственно, что позволяет использовать их в любом допустимом Java-выражении как переменные Long и Double.
Выражения можно определить следующими способами:
Поле Выражение параметра, определяющее фактическое или стандартное значение параметра. Дополнительные сведения об использовании выражений в параметрах см. в разделе Вкладка информации окна правки параметра.
Ограничение типа Выражение требует, чтобы результатом вычисления выражения было логическое значение. Дополнительные сведения о типах ограничений выражений см. в разделе Редактор выражений.
Выражения также можно использовать в расширенной таблице вариантов. Дополнительные сведения о расширенных таблицах вариантов см. в разделе Редактор таблицы вариантов.
Арифметические операторы
Арифметические операторы можно использовать с числовыми параметрами в выражениях. К ним относятся бинарные операторы сложения (+), вычитания (-), умножения (*) и деления (/). Например, ниже приведены примеры ограничений выражения.
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. Если определение выполняется в любом другом порядке и параметру A присваивается значение перед параметрами B и C, то выражение обрабатывается как логическое выражение, в котором значение параметра A сравнивается со значением формулы, вычисленным с учетом значений B и C.
* 
Если обе стороны содержат больше одного параметра, все параметры должны быть известны прежде, чем можно будет вычислить ограничения выражения.
Ссылка на методы или фрагменты выражений для числовых параметров в функциях
Числовые параметры можно использовать и как аргументы в готовых, стандартных Java и пользовательских функциях. В следующих разделах представлены альтернативные способы привязки к методу или фрагменту выражения.
В приведенных ниже примерах рассматривайте параметры D_1, D_2, D_3, D_4, D_5 и D_6 как вещественные (Java double) параметры, а P_1, P_2, P_3 и P_4 - как целые (Java long). Кроме того, 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.Math и java.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. Если задать свойство ato.expression.rendering.context=com.ptc.wpcfg.logic.XLSExpressionRenderingContext в файле WT_HOME/wt.properties, система добавит подходящие псевдонимы для предоставления доступа к большинству числовых, текстовых и логических функций по именам, используемым в приложении 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
Было ли это полезно?