Расчёты по семантике выделенных объектов |
Программа предназначена для вычисления значений семантических характеристик выделенных объектов по формулам. Формула представляет собой символьную строку до 256 символов, содержащую числа, математические операции, ссылки на значения семантик объекта, его площадь и периметр. Допустимые операции: + - сложить, - - вычесть, * - умножить, / - разделить, max(... ,..., ), - между значениями «,» (запятая), min(... ,..., ), - между значениями «,» (запятая), arm(... ,..., ) - среднее арифметическое, sin(…) - sin от угла в градусах, cos (…) - cos от угла в градусах, tg (…) - tg от угла в градусах, ctg(…) - абсолютная величина, sqrt2(...) - корень квадратный, sqrt3(...) - корень кубический, pow2(...) - возведение в квадрат, pow3(...) - возведение в куб, P - периметр объекта, S - площадь объекта PI - число пи # - указывает, что дальше идет код семантики, в которой лежит значение, далее в скобках содержится значение по умолчанию. Допустимо использовать цифры от 0 до 9, с разделителем «.» (точка), круглые, квадратные и фигурные скобки («( )», «[]», «{}»).
Пример: #1(0) - взять значение семантики 1, при отсутствии семантики взять значение 0. Для операций: +, -, *, /, max, min, abs - количество операндов не более 10. Примеры формул: 1. Подсчет высоты люка. Высота люка складывается из отметки высоты самой глубокой прокладки и радиуса трубы. Семантика 213 (Высота прокладки) повторяемая. Возьмем минимальное значение (при отсутствии такой семантики, возьмем значение в скобках). По семантике 60(Диаметр трубы) – вычислим радиус. Окончательно получим. min(#213(0))+#60(2)/2 2. Вычисление примерного объема здания. Площадь S умножить на значение семантики 1(Относительная высота) (при отсутствии 3). S*#1(3) 3. Подсчет площади полотна дороги. Семантику 46(Ширину покрытия) умножим на Р – периметр. P * #46(4) 4. Приблизительный подсчет запаса древесины. Площадь леса P разделим на площадь, занимаемую одним деревом семантика 61 (Расстояние между деревьями) в квадрате и умножим на объем древесины дерева, полученный по семантикам 60(Толщина) и 1(Относительная высота). P/(#61(1)* #61(1) ) * PI * #60(0.5) * #60(0.5)/4 * #1(4) Список формул для вычисления запрашивается из ini- файла и классификатора. Пользователь может создавать свои формулы. Список допустимых операций предназначен для добавления операций в формулу. Операция вставляется в формулу в позицию курсора при двойном нажатии на выбранную строку. Код семантики, используемый в расчетах, вставляется в формулу в позицию курсора при двойном нажатии на выбранную строку в списке числовых семантик объекта (верхний список). В скобках пользователь должен указать значение используемое в вычислениях, при отсутствии в семантике объекта данной характеристики. Набранную формулу пользователь может записать в ini-файл. Если формула синтаксически неверна, ни запись, ни вычисления не проводятся. При этом выдается сообщение "Ошибочное задание формулы" с краткой расшифровкой возможной ошибки. Вычисленное значение, при нажатии кнопки Выполнить, записывается как числовое или символьное значение семантик, выделенных в нижнем списке во все выделенные объекты. Если "Журнал транзакций" включен, изменения в семантики объектов записаны в журнал транзакций. Список объектов, для которых вычисления по каким-то причинам не выполнились, заносится в LOG. По окончанию вычислений выдается сообщение о количестве успешно или неуспешно обновленных объектов.
|