Расчёты по семантике выделенных объектов

Печать Предыдущая страница Стартовая страница Следующая страница

Программа предназначена для вычисления значений семантических характеристик выделенных объектов по формулам.

Формула представляет собой символьную строку до 256 символов, содержащую числа, математические операции, ссылки на значения семантик объекта, его площадь и периметр.  

Допустимые операции:  

+                     - сложить;

-                      - вычесть;

*                      - умножить;  

/                      - разделить;

max(... ,...,   ), - между значениями «,» (запятая);

min(... ,...,   ), - между значениями «,» (запятая);

arm(... ,...,   ) - среднее арифметическое;

sin(…)           -  sin от угла в градусах;

cos (…)          - cos от угла в градусах;

tg (…)             - tg от угла в градусах;

ctg(…)           - ctg от угла в градусах;

abs(...)          - абсолютная величина;

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.

По окончанию вычислений выдается сообщение о количестве успешно или неуспешно обновленных объектов.