03_calc
Интерфейс строительного калькулятора предоставляет базовые функции расчета
В нем доступны следующий функции:
- area - подсчет площади прямоугольной фигуры, заданной длинами сторон
- volume - подсчет объема параллелепипеда, заданной длинами сторон (ДЛИНАxШИРИНАxВЫСОТА)
- areaBox - подсчет площади поверхности стен прямоугольной комнаты, заданной длинами сторон и высотой
- volumeBox - подсчет объема стен коробки, заданной длинами сторон (по внешней стороне), высотой и толщиной стен
- located - метод определения вхождения одного элемента в область другого (GeometryElement space, GeometryElement obj)
- intersect - метод определения пересечения области одного элемента в область другого (GeometryElement space, GeometryElement obj)
- distance - определение расстояния между двумя элементами
- distanceFast - определение расстояния между двумя элементами
- getElementBounds - получение граничного бокса по элементу и по списку вершин
- length - получение расстояния между двумя точками в пространстве
- getOrientedBoundingBox - получение ориентированного, минимального, граничного бокса элемента
- getElementConvexHull - получение геометрии выпуклой оболочки элемента
- trunc - округление значение
- manhattanDistance - расчет расстояния Манхэттена между двумя геометрическими элементами
- deepInclusion - точная проверка того, что один элемент включен в другой элемент
- createOrientedBox - создание OBB на основе заданного элемента и в заданном направлении
- distance2D - расчёт двумерного расстояния между элементами в плоскости XY, 0 если пересекаются
- distance2DHorizontal - расчёт минимального двумерного расстояния между элементами в плоскости XY
- distance2DWithOffSet - расчет двумерного расстояния между элементами со смещением элементов
- isExtendedAABBIntersectNeighbours - проверка пересечения aabb элемента с его соседями + с учетом допустимого пространства length, width, height по направлению dir
- isValveBelongToPipe - проверка принадлежности одного элемента другому
- getOBBLongestAxis - возвращает индекс самой длинной стороны obb(X=1, Y=2, Z=3)
- calc.area(double length, double width)
Пример использования:
def area = calc.area(6,6)
// console.info(area) -> “INFO: 36.0”
- calc.volume(double length, double width, double height)
Пример использования:
def vol= calc.volume(6,0.5,3)
// console.info(vol) -> “INFO: 9.0”
- calc.areaBox(double length, double width, double height)
Пример использования:
def area = calc.areaBox(6,6,3)
// console.info(area) -> “INFO: 72.0”
- calc.volumeBox(double length, double width, double height, double widthWall)
Пример использования:
def vol= calc.volumeBox(6,6,3,0.5)
// console.info(vol) -> “INFO: 33.0”
- calc.located(GeometryElement space, GeometryElement obj) - метод определения вхождения одного элемента в область другого
Пример использования:
- calc.intersect(Bounds bounds1, Bounds bounds2) - определение пересечения 2 боксов по границам 1 и 2 бокса
- calc.intersect(double gap, Bounds bounds1, Bounds bounds2) - определение пересечения 2 боксов по границам 1 и 2 бокса с увеличением границ одного из элементов
- calc.intersect(double gapX, double gapY, double gapZ, Bounds bounds1, Bounds bounds2) - определение пересечения 2 боксов по границам 1 и 2 бокса с увеличением границ одного из элементов отдельно по осям
- calc.intersect(GeometryElement element1, GeometryElement element2) - метод определения пересечения 2 элементов через их граничных боксов
- calc.intersect(double gapX, double gapY, double gapZ, GeometryElement element1, GeometryElement element2) - определение пересечения 2 элементов через их граничных боксов
- calc.intersect(double gap, GeometryElement element1, GeometryElement element2) - определение пересечения 2 элементов через их граничных боксов
- calc.intersect(GeometryObject element1, GeometryObject element2) - определение пересечения 2 элементов
Пример использования:
- calc.distance(GeometryObject data1, GeometryObject data2)
Пример использования:
- calc.distanceFast(GeometryObject data1, GeometryObject data2)
Пример использования:
- calc.getElementBounds(GeometryObject geometry) - получение граничного бокса по элементу
- calc.getElementBounds(double vertices[]) - получение граничного бокса по списку вершин
Пример использования:
- calc.length(Vector3f p1, Vector3f p2)
Пример использования:
- calc.getOrientedBoundingBox(UUID elementUuid) - получение ориентированного, минимального, граничного бокса элемента по его идентификатору
- calc.getOrientedBoundingBox(GeometryElement element) - получение ориентированного, минимального, граничного бокса элемента по элементу
- calc.getOrientedBoundingBox(Element element) - получение ориентированного, минимального, граничного бокса элемента по элементу
Пример использования:
def orientedBox = calc.getOrientedBoundingBox(stair.getUuid())
//console.error(""+orientedBox)
// Превращаем бокс в набор вершин
def koeff = 1
koeff = orientedBox.getKoeff();
console.info("Коэффициент длины: "+koeff)
for (int i = 0; i < orientedBox.getVertices().length; i += 3) {
def corner = new Vector3f(orientedBox.getVertices()[i], orientedBox.getVertices()[i+1], orientedBox.getVertices()[i+2]);
listPoints.add(corner);
}
def point0 = listPoints.get(0)
def point3 = listPoints.get(3)
def point4 = listPoints.get(4)
def point5 = listPoints.get(5)
def point6 = listPoints.get(6)
// Вычисляем, какая сторона по x или по y длиннее
double lengthX = calc.trunc(calc.length(point3, point6))
double lengthY = calc.trunc(calc.length(point3, point5))
double lengthZ = calc.trunc(calc.length(point0, point3))

Обратите внимание!
На примере представлен приблизительный алгоритм получения длины, высоты, ширины.
Не гарантируется, какая сторона будет являться длиной, высотой или шириной.
Необходима проверка по точкам.
- calc.getElementConvexHull(UUID elementUuid) - получение геометрии выпуклой оболочки элемента по идентификатору
- calc.getElementConvexHull(GeometryElement element) - получение геометрии выпуклой оболочки элемента по элементу
- calc.getElementConvexHull(Element element) - получение геометрии выпуклой оболочки элемента по элементу
Поле | Тип данных поля | Описание поля | Метод взятия данных поля |
uuid | uuid | идентификатор элемента | getUuid() |
name | string | наименование элемента | getName() |
| indices | int[ ] | геометрические индексы, указывающие на позицию координат точки в массиве вершин (координаты вершин треугольника идут тройками: 1,2,3 вершина и т.д) | getIndices() |
| vertices | double[ ] | массив координат вершин (координаты идут тройками подряд X,Y,Z,X,Y,Z,...) | getVertices() |
| normals | float[ ] | массив нормалей вершин | getNormals() |
| colorsQuantized | int[ ] | индексы цветовой раскраски триангулированной геометрии | getColorsQuantized() |
| colors | float[ ] | массив цветов | getColors() |
| koeff | double | коэффициент трансформации координат (м в мм) | getKoeff() |
| метод получения длины массива индексов | getLength() | ||
| метод получения количества треугольников геометрии | getTrianglesCount() |
- calc.trunc(double value, int length) - округление значение
- calc.trunc(double value) - округление значение до 3го знака после запятой
Пример использования:
- calc.manhattanDistance(GeometryObject data1, GeometryObject data2) - расчет расстояния Манхэттена между двумя геометрическими элементами
Пример использования:
- calc.deepInclusion(GeometryElement elementContent, GeometryElement elementContainer) - точная проверка того, что один элемент включен в другой элемент
Пример использования:
- calc.createOrientedBox(Vector3f center, Vector3f direction, double width, double depth, double height) - создание OBB на основе заданного элемента и в заданном направлении
Пример использования:
- calc.distance2D(GeometryObject data1, GeometryObject data2) - расчёт двумерного расстояния между элементами в плоскости XY, 0 если пересекаются
Пример использования:
- calc.distance2DHorizontal(GeometryObject data1, GeometryObject data2) - расчёт минимального двумерного расстояния между элементами в плоскости XY
Пример использования:
- calc.distance2DWithOffSet(GeometryObject data1, GeometryObject data2, double offSetValue) - расчёт двумерного расстояния между элементами со смещением элементов
Пример использования:
- calc.isExtendedAABBIntersectNeighbours(GeometryElement element, Set<GeometryElement> neighbours, double[] dir, final double length, final double width, final double height) - проверка пересечения aabb элемента с его соседями + с учетом допустимого пространства length, width, height по направлению dir
Пример использования:
- calc.isValveBelongToPipe(GeometryElement valve, GeometryElement pipe) - проверка принадлежности одного элемента другому
Пример использования:
- calc.getOBBLongestAxis(GeometryElement element) - возвращает индекс самой длинной стороны obb(X=1, Y=2, Z=3)
Пример использования: