Тема создана для обсуждения потенциально возможных функций редактора переменных T-FLEX CAD-Next; рассмотрение предложений от пользователей по улучшению существующих или добавление новых возможностей редактора переменных.
1. Обработка ввода пользователя Предложение добавить свойство в параметрах переменной для обработки ввода пользователя посредством возврата значения по умолчанию.
Описание процедуры Допустим, переменная p1 содержит константное значение параметра модели, с условно определенным диапазоном значений 1...5. Если пользователь вводит значение, которое выходит за пределы диапазона, программа должна отреагировать возвратом значения, установленного по умолчанию.
Описание функции В параметрах переменной необходимо добавить параметры минимальных и максимальных границ диапазона возможных значений, и параметр возвращаемого значения по умолчанию. Если значение свойства возврата определено как NULL, то никаких действий не потребуется.
Свойство возврата должно принимать либо константное значение, либо имя пользовательской функции обработчика.
Преимущества Данная возможность позволит обрабатывать исключения, приводящие к вырождению геометрии модели.
Поддерживаю. В Крео ,например, реализован механизм ограничений параметров с выбором диапазонов допустимых значений и с выбором типа границы диапазона (входит или не входит). Так же есть общая настройка системы restricted_val_definition она ссылается на текстовый файл, в котором перечислены имена параметров и допустимые для них значения. Там же реализован и список. {Name=<name> Type=<type>[quantity_type] [Default=<value>] [Range=<range> I Enum=<enum>] [Access=<access>] }
FRei написал: Поддерживаю. В Крео ,например, реализован механизм ограничений параметров с выбором диапазонов допустимых значений и с выбором типа границы диапазона (входит или не входит). Так же есть общая настройка системы restricted_val_definition она ссылается на текстовый файл, в котором перечислены имена параметров и допустимые для них значения. Там же реализован и список. {Name=<name> Type=<type>[quantity_type] [Default=<value>] [Range=<range> I Enum=<enum>] [Access=<access>] }
Алексей написал: то то же самое, что в следующих двух примерах? B = (A > 1 && A 5 ? 5) : A Второе точнее. Это ближайшая граница диапазона.Или о другом речь?
А должна быть одна переменная В, без всяких там А - это раз. Во-вторых, в данных примерах нельзя вписать значение напрямую в В, нужно вписывать значение в А. В-третьих, никто не запрещает в А вписать любое значение, а нужно только в диапазоне. В-четвёртых, у переменных нет значений по дефолту. В-пятых, не отслеживается изменения значений внешних переменных в сборках. Т.е. если я не менял значения внешних переменных в сборке, то при смене значений этих переменных во фрагменте, значения в сборке также должны поменяться, но если я их поменял в сборке, то должны остаться значения пользовательские(а Компас умеет....).
Алексей, в предложении я затронул только значение вещественного типа, хотя переменная в T-FLEX CAD является объектом универсального типа. Понятно, что для обработки ввода текста параметры диапазона значений не потребуются. В этом случае, по видимому, лучшим решением может быть либо выражение с использованием символа # для обозначения себя, например:
Код
#<1 ? 1 : (#>5 ? 5 : #)
либо вписать имя пользовательской функции обработчика.
Вложенные тернарные операторы это зло! Нельзя простым инженерам такую реализацию показывать, и все задачи это не решает. Хочется видеть вот такой интерфейс:
vite написал: либо вписать имя пользовательской функции обработчика.
Если без переделки интерфейса, то от пользователя требуется вписать выражение вида (min_value:max_value),[min_value:max_value], или смешанное (min_value:max_value], [min_value:max_value), тогда математически корректно и понятно. Функцию warn() вызывать автоматом если значение не в диапазоне. Хотя тут могут быть проблемы с перегрузкой скобок. Или втюхать это выражение в первый элемент списка, но это весьма неявно будет для пользователя.
Еще один момент по переменным, хочу обсудить. В Крео есть фича чтобы вычисления параметров проходили как "До регенерации" модели, так и "После регенерации". Может быть предусмотреть такой сценарий- значение переменной вычисляется после регенерации модели и несет в себе типа "справочную" информацию. Например, пригодится с функциями get(),tget(), так же поможет от рекурсии - по этому поводу даже тема была на форуме.