Wiki source code of 03_calc

Last modified by Bimit Administrator on 12.05.2026, 15:22

Hide last authors
Bimit Administrator 4.1 1 Интерфейс строительного калькулятора предоставляет базовые функции расчета
2 В нем доступны следующий функции:
3
Bimit Administrator 11.2 4 * [[area>>path:#_Toc1]] - подсчет площади прямоугольной фигуры, заданной длинами сторон
5 * [[volume>>path:#_Toc2]] - подсчет объема параллелепипеда, заданной длинами сторон (ДЛИНАxШИРИНАxВЫСОТА)
6 * [[areaBox>>path:#_Toc3]] - подсчет площади поверхности стен прямоугольной комнаты, заданной длинами сторон и высотой
7 * [[volumeBox>>path:#_Toc4]] - подсчет объема стен коробки, заданной длинами сторон (по внешней стороне), высотой и толщиной стен
8 * [[located>>path:#_Toc5]] - метод определения вхождения одного элемента в область другого ([[GeometryElement>>https://wiki.bimit.ru/bin/view/API/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%20API/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%20bim/#_Toc10]] space, [[GeometryElement>>https://wiki.bimit.ru/bin/view/API/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%20API/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%20bim/#_Toc10GeometryElement]] obj)
9 * [[intersect>>path:#_Toc6]] - метод определения пересечения области одного элемента в область другого ([[GeometryElement>>GeometryElhttps://wiki.bimit.ru/bin/view/API/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%20API/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%20bim/#_Toc10ement]] space, [[GeometryElement>>GeometryElementhttps://wiki.bimit.ru/bin/view/API/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%20API/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%20bim/#_Toc10]] obj)
Bimit Administrator 11.4 10 * [[distance>>path:#_Toc7]] - определение расстояния между двумя элементами
Bimit Administrator 11.18 11 * [[distanceFast>>path:#_Toc12]] - определение расстояния между двумя элементами
Bimit Administrator 11.4 12 * [[getElementBounds>>path:#_Toc8]] - получение граничного бокса по элементу и по списку вершин
13 * [[length>>path:#_Toc9]] - получение расстояния между двумя точками в пространстве
14 * [[getOrientedBoundingBox>>path:#_Toc10]] - получение ориентированного, минимального, граничного бокса элемента
15 * [[getElementConvexHull>>path:#_Toc11]] - получение геометрии выпуклой оболочки элемента
Bimit Administrator 11.21 16 * [[trunc>>path:#_Toc13]] - округление значение
17 * [[manhattanDistance>>path:#_Toc14]] - расчет расстояния Манхэттена между двумя геометрическими элементами
18 * [[deepInclusion>>path:#_Toc15]] - точная проверка того, что один элемент включен в другой элемент
19 * [[createOrientedBox>>path:#_Toc16]] - создание OBB на основе заданного элемента и в заданном направлении
20 * [[distance2D>>path:#_Toc17]] - расчёт двумерного расстояния между элементами в плоскости XY, 0 если пересекаются
21 * [[distance2DHorizontal>>path:#_Toc18]] - расчёт минимального двумерного расстояния между элементами в плоскости XY
22 * [[distance2DWithOffSet>>path:#_Toc19]] - расчет двумерного расстояния между элементами со смещением элементов
23 * [[isExtendedAABBIntersectNeighbours>>path:#_Toc20]] - проверка пересечения aabb элемента с его соседями + с учетом допустимого пространства length, width, height по направлению dir
24 * [[isValveBelongToPipe>>path:#_Toc21]] - проверка принадлежности одного элемента другому
25 * [[getOBBLongestAxis>>path:#_Toc22]] - возвращает индекс самой длинной стороны obb(X=1, Y=2, Z=3)
Bimit Administrator 4.1 26
Bimit Administrator 11.2 27 (% class="box infomessage" %)
28 (((
29 **{{id name="_Toc1"/}}area** - подсчет площади прямоугольной фигуры, заданной длинами сторон
30 )))
Bimit Administrator 6.1 31
Bimit Administrator 11.2 32 * **calc.area(double length, double width) **
33
34 **Пример использования:**
35
Bimit Administrator 4.1 36 {{code language="java"}}
Bimit Administrator 9.1 37 // area
Bimit Administrator 4.1 38 def area = calc.area(6,6)
39
40 // console.info(area) -> “INFO: 36.0”
41 {{/code}}
42
Bimit Administrator 11.2 43 (% class="box infomessage" %)
44 (((
45 **{{id name="_Toc2"/}}volume** - подсчет объема параллелепипеда, заданной длинами сторон (ДЛИНАxШИРИНАxВЫСОТА)
46 )))
47
48 * **calc.volume(double length, double width, double height) **
49
50 **Пример использования:**
51
Bimit Administrator 5.1 52 {{code language="java"}}
Bimit Administrator 8.1 53 // volume
Bimit Administrator 5.1 54 def vol= calc.volume(6,0.5,3)
55
56 // console.info(vol) -> “INFO: 9.0”
57 {{/code}}
58
Bimit Administrator 11.2 59 (% class="box infomessage" %)
60 (((
61 **{{id name="_Toc3"/}}areaBox** - подсчет площади поверхности стен прямоугольной комнаты, заданной длинами сторон и высотой
62 )))
63
64 * **calc.areaBox(double length, double width, double height) **
65
66 **Пример использования:**
67
Bimit Administrator 5.1 68 {{code language="java"}}
Bimit Administrator 9.1 69 // areaBox
Bimit Administrator 5.1 70 def area = calc.areaBox(6,6,3)
71
72 // console.info(area) -> “INFO: 72.0”
73 {{/code}}
74
Bimit Administrator 11.2 75 (% class="box infomessage" %)
76 (((
77 **{{id name="_Toc4"/}}volumeBox** - подсчет объема стен коробки, заданной длинами сторон (по внешней стороне), высотой и толщиной стен
78 )))
79
80 * **calc.volumeBox(double length, double width, double height, double widthWall) **
81
82 **Пример использования:**
83
Bimit Administrator 5.1 84 {{code language="java"}}
Bimit Administrator 9.1 85 // volumeBox
Bimit Administrator 5.1 86 def vol= calc.volumeBox(6,6,3,0.5)
87
88 // console.info(vol) -> “INFO: 33.0”
89 {{/code}}
Bimit Administrator 11.3 90
91 (% class="box infomessage" %)
92 (((
Bimit Administrator 11.18 93 **{{id name="_Toc5"/}}located** - метод определения вхождения одного элемента в область другого
Bimit Administrator 11.17 94 )))
95
96 * **calc.located(GeometryElement space, GeometryElement obj) ** - метод определения вхождения одного элемента в область другого
97
98 **Пример использования:**
99
100 {{code language="java"}}{{/code}}
101
102 (% class="box infomessage" %)
103 (((
Bimit Administrator 11.3 104 **{{id name="_Toc6"/}}intersect** - метод определения пересечения области одного элемента в область другого
105 )))
106
Bimit Administrator 11.17 107 * **calc.intersect(Bounds bounds1, Bounds bounds2) ** - определение пересечения 2 боксов по границам 1 и 2 бокса
108 * **calc.intersect(double gap, Bounds bounds1, Bounds bounds2) ** - определение пересечения 2 боксов по границам 1 и 2 бокса с увеличением границ одного из элементов
109 * **calc.intersect(double gapX, double gapY, double gapZ, Bounds bounds1, Bounds bounds2) ** - определение пересечения 2 боксов по границам 1 и 2 бокса с увеличением границ одного из элементов отдельно по осям
Bimit Administrator 11.3 110 * **calc.intersect(GeometryElement element1, GeometryElement element2) ** - метод определения пересечения 2 элементов через их граничных боксов
Bimit Administrator 11.17 111 * **calc.intersect(double gapX, double gapY, double gapZ, GeometryElement element1, GeometryElement element2) ** - определение пересечения 2 элементов через их граничных боксов
112 * **calc.intersect(double gap, GeometryElement element1, GeometryElement element2) ** - определение пересечения 2 элементов через их граничных боксов
113 * **calc.intersect(GeometryObject element1, GeometryObject element2) ** - определение пересечения 2 элементов
Bimit Administrator 11.3 114
115 **Пример использования:**
116
Bimit Administrator 11.15 117 {{code language="java"}}{{/code}}
Bimit Administrator 11.4 118
119 (% class="box infomessage" %)
120 (((
121 **{{id name="_Toc7"/}}distance** - определение расстояния между двумя элементами
122 )))
123
124 * **calc.distance(GeometryObject data1, GeometryObject data2) **
125
126 **Пример использования:**
127
Bimit Administrator 11.15 128 {{code language="java"}}{{/code}}
Bimit Administrator 11.4 129
130 (% class="box infomessage" %)
131 (((
Bimit Administrator 11.15 132 **{{id name="_Toc12"/}}distanceFast** - определение расстояния между двумя элементами
133 )))
134
Bimit Administrator 11.16 135 * **calc.distanceFast(GeometryObject data1, GeometryObject data2) **
Bimit Administrator 11.15 136
137 **Пример использования:**
138
139 {{code language="java"}}{{/code}}
140
141 (% class="box infomessage" %)
142 (((
Bimit Administrator 11.4 143 **{{id name="_Toc8"/}}getElementBounds** - получение граничного бокса по элементу и по списку вершин
144 )))
145
146 * **calc.getElementBounds(GeometryObject geometry) ** - получение граничного бокса по элементу
147 * **calc.getElementBounds(double vertices[]) ** - получение граничного бокса по списку вершин
148
149 **Пример использования:**
150
Bimit Administrator 11.15 151 {{code language="java"}}{{/code}}
Bimit Administrator 11.4 152
153 (% class="box infomessage" %)
154 (((
155 **{{id name="_Toc9"/}}length** - получение расстояния между двумя точками в пространстве
156 )))
157
158 * **calc.length(Vector3f p1, Vector3f p2) **
159
160 **Пример использования:**
161
Bimit Administrator 11.15 162 {{code language="java"}}{{/code}}
Bimit Administrator 11.4 163
164 (% class="box infomessage" %)
165 (((
166 **{{id name="_Toc10"/}}getOrientedBoundingBox** - получение ориентированного, минимального, граничного бокса элемента
167 )))
168
169 * **calc.getOrientedBoundingBox(UUID elementUuid) ** - получение ориентированного, минимального, граничного бокса элемента по его идентификатору
170 * **calc.getOrientedBoundingBox(GeometryElement element) ** - получение ориентированного, минимального, граничного бокса элемента по элементу
171 * **calc.getOrientedBoundingBox(Element element) ** - получение ориентированного, минимального, граничного бокса элемента по элементу
172
173 **Пример использования:**
174
Bimit Administrator 11.23 175 {{code language="java"}}
176 def listPoints = new ArrayList<Vector3f>()
Bimit Administrator 13.2 177 def orientedBox = calc.getOrientedBoundingBox(Uuid элемента())
Bimit Administrator 11.23 178 //console.error(""+orientedBox)
179 // Превращаем бокс в набор вершин
180 def koeff = 1
181 koeff = orientedBox.getKoeff();
182 console.info("Коэффициент длины: "+koeff)
183 for (int i = 0; i < orientedBox.getVertices().length; i += 3) {
184 def corner = new Vector3f(orientedBox.getVertices()[i], orientedBox.getVertices()[i+1], orientedBox.getVertices()[i+2]);
185 listPoints.add(corner);
186 }
187
188 def point0 = listPoints.get(0)
189 def point3 = listPoints.get(3)
190 def point4 = listPoints.get(4)
191 def point5 = listPoints.get(5)
192 def point6 = listPoints.get(6)
193
194 // Вычисляем, какая сторона по x или по y длиннее
195 double lengthX = calc.trunc(calc.length(point3, point6))
196 double lengthY = calc.trunc(calc.length(point3, point5))
197 double lengthZ = calc.trunc(calc.length(point0, point3))
198 {{/code}}
Bimit Administrator 11.4 199
Bimit Administrator 11.23 200 [[image:1778581793377-813.png||data-xwiki-image-style-border="true"]]
201
202 **Обратите внимание!**
203
204 На примере представлен приблизительный алгоритм получения длины, высоты, ширины.
Bimit Administrator 12.2 205 Не гарантируется какая сторона будет являться длиной, высотой или шириной.
Bimit Administrator 11.23 206 Необходима проверка по точкам.
207
Bimit Administrator 11.4 208 (% class="box infomessage" %)
209 (((
210 **{{id name="_Toc11"/}}getElementConvexHull** - получение геометрии выпуклой оболочки элемента
211 )))
212
213 * **calc.getElementConvexHull(UUID elementUuid) ** - получение геометрии выпуклой оболочки элемента по идентификатору
214 * **calc.getElementConvexHull(GeometryElement element) ** - получение геометрии выпуклой оболочки элемента по элементу
215 * **calc.getElementConvexHull(Element element) ** - получение геометрии выпуклой оболочки элемента по элементу
216
Bimit Administrator 12.2 217 Данный метод возвращает объект GeometryObject - триангулированная геометрия элемента.
Bimit Administrator 11.4 218
Bimit Administrator 12.2 219 **Пример использования:**
Bimit Administrator 11.20 220
Bimit Administrator 13.2 221 {{code language="java"}}{{/code}}
Bimit Administrator 12.2 222
Bimit Administrator 11.20 223 (% class="box infomessage" %)
224 (((
225 **{{id name="_Toc13"/}}trunc** - округление значение
226 )))
227
228 * **calc.trunc(double value, int length) ** - округление значение
229 * **calc.trunc(double value) ** - округление значение до 3го знака после запятой
230
231 **Пример использования:**
232
233 {{code language="java"}}{{/code}}
234
235 (% class="box infomessage" %)
236 (((
237 **{{id name="_Toc14"/}}manhattanDistance** - расчет расстояния Манхэттена между двумя геометрическими элементами
238 )))
239
240 * **calc.manhattanDistance(GeometryObject data1, GeometryObject data2) ** - расчет расстояния Манхэттена между двумя геометрическими элементами
241
242 **Пример использования:**
243
244 {{code language="java"}}{{/code}}
245
246 (% class="box infomessage" %)
247 (((
248 **{{id name="_Toc15"/}}deepInclusion** - точная проверка того, что один элемент включен в другой элемент
249 )))
250
251 * **calc.deepInclusion(GeometryElement elementContent, GeometryElement elementContainer) ** - точная проверка того, что один элемент включен в другой элемент
252
253 **Пример использования:**
254
255 {{code language="java"}}{{/code}}
256
257 (% class="box infomessage" %)
258 (((
259 **{{id name="_Toc16"/}}createOrientedBox** - создание OBB на основе заданного элемента и в заданном направлении
260 )))
261
262 * **calc.createOrientedBox(Vector3f center, Vector3f direction, double width, double depth, double height) ** - создание OBB на основе заданного элемента и в заданном направлении
263
264 **Пример использования:**
265
266 {{code language="java"}}{{/code}}
267
268 (% class="box infomessage" %)
269 (((
270 **{{id name="_Toc17"/}}distance2D** - расчёт двумерного расстояния между элементами в плоскости XY, 0 если пересекаются
271 )))
272
273 * **calc.distance2D(GeometryObject data1, GeometryObject data2) ** - расчёт двумерного расстояния между элементами в плоскости XY, 0 если пересекаются
274
275 **Пример использования:**
276
277 {{code language="java"}}{{/code}}
278
279 (% class="box infomessage" %)
280 (((
281 **{{id name="_Toc18"/}}distance2DHorizontal** - расчёт минимального двумерного расстояния между элементами в плоскости XY
282 )))
283
284 * **calc.distance2DHorizontal(GeometryObject data1, GeometryObject data2) ** - расчёт минимального двумерного расстояния между элементами в плоскости XY
285
286 **Пример использования:**
287
288 {{code language="java"}}{{/code}}
289
290 (% class="box infomessage" %)
291 (((
292 **{{id name="_Toc19"/}}distance2DWithOffSet** - расчёт двумерного расстояния между элементами со смещением элементов
293 )))
294
295 * **calc.distance2DWithOffSet(GeometryObject data1, GeometryObject data2, double offSetValue) ** - расчёт двумерного расстояния между элементами со смещением элементов
296
297 **Пример использования:**
298
299 {{code language="java"}}{{/code}}
300
301 (% class="box infomessage" %)
302 (((
303 **{{id name="_Toc20"/}}isExtendedAABBIntersectNeighbours** - проверка пересечения aabb элемента с его соседями + с учетом допустимого пространства length, width, height по направлению dir
304 )))
305
306 * **calc.isExtendedAABBIntersectNeighbours(GeometryElement element, Set<GeometryElement> neighbours, double[] dir, final double length, final double width, final double height) ** - проверка пересечения aabb элемента с его соседями + с учетом допустимого пространства length, width, height по направлению dir
307
308 **Пример использования:**
309
310 {{code language="java"}}{{/code}}
311
312 (% class="box infomessage" %)
313 (((
314 **{{id name="_Toc21"/}}isValveBelongToPipe** - проверка принадлежности одного элемента другому
315 )))
316
317 * **calc.isValveBelongToPipe(GeometryElement valve, GeometryElement pipe) ** - проверка принадлежности одного элемента другому
318
319 **Пример использования:**
320
321 {{code language="java"}}{{/code}}
322
323 (% class="box infomessage" %)
324 (((
325 **{{id name="_Toc22"/}}getOBBLongestAxis** - возвращает индекс самой длинной стороны obb(X=1, Y=2, Z=3)
326 )))
327
328 * **calc.getOBBLongestAxis(GeometryElement element) ** - возвращает индекс самой длинной стороны obb(X=1, Y=2, Z=3)
329
330 **Пример использования:**
331
332 {{code language="java"}}{{/code}}