Blender  V3.3
FastGrid.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
8 #include <cstdlib>
9 
10 #include "FastGrid.h"
11 
12 #include "BKE_global.h"
13 #include "BLI_utildefines.h"
14 
15 namespace Freestyle {
16 
18 {
19  if (!_cells) {
20  return;
21  }
22 
23  for (unsigned int i = 0; i < _cells_size; i++) {
24  if (_cells[i]) {
25  delete _cells[i];
26  }
27  }
28  delete[] _cells;
29  _cells = nullptr;
30  _cells_size = 0;
31 
32  Grid::clear();
33 }
34 
35 void FastGrid::configure(const Vec3r &orig, const Vec3r &size, unsigned nb)
36 {
37  Grid::configure(orig, size, nb);
39  _cells = new Cell *[_cells_size];
40  memset(_cells, 0, _cells_size * sizeof(*_cells));
41 }
42 
44 {
45 #if 0
46  if (G.debug & G_DEBUG_FREESTYLE) {
47  cout << _cells << " " << p << " " << _cells_nb[0] << "-" << _cells_nb[1] << "-" << _cells_nb[2]
48  << " " << _cells_size << endl;
49  }
50 #endif
51  BLI_assert_msg(_cells, "_cells is a null pointer");
52  BLI_assert((_cells_nb[0] * (p[2] * _cells_nb[1] + p[1]) + p[0]) < _cells_size);
53  BLI_assert(p[0] < _cells_nb[0]);
54  BLI_assert(p[1] < _cells_nb[1]);
55  BLI_assert(p[2] < _cells_nb[2]);
56  return _cells[_cells_nb[0] * (p[2] * _cells_nb[1] + p[1]) + p[0]];
57 }
58 
59 void FastGrid::fillCell(const Vec3u &p, Cell &cell)
60 {
61  BLI_assert_msg(_cells, "_cells is a null pointer");
62  BLI_assert((_cells_nb[0] * (p[2] * _cells_nb[1] + p[1]) + p[0]) < _cells_size);
63  BLI_assert(p[0] < _cells_nb[0]);
64  BLI_assert(p[1] < _cells_nb[1]);
65  BLI_assert(p[2] < _cells_nb[2]);
66  _cells[_cells_nb[0] * (p[2] * _cells_nb[1] + p[1]) + p[0]] = &cell;
67 }
68 
69 } /* namespace Freestyle */
@ G_DEBUG_FREESTYLE
Definition: BKE_global.h:181
#define BLI_assert(a)
Definition: BLI_assert.h:46
#define BLI_assert_msg(a, msg)
Definition: BLI_assert.h:53
Class to define a cell grid surrounding the bounding box of the scene.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
Cell * getCell(const Vec3u &p)
Definition: FastGrid.cpp:43
unsigned _cells_size
Definition: FastGrid.h:56
virtual void configure(const Vec3r &orig, const Vec3r &size, unsigned nb)
Definition: FastGrid.cpp:35
virtual void fillCell(const Vec3u &p, Cell &cell)
Definition: FastGrid.cpp:59
virtual void clear()
Definition: FastGrid.cpp:17
virtual void configure(const Vec3r &orig, const Vec3r &size, unsigned nb)
Definition: Grid.cpp:96
virtual void clear()
Definition: Grid.cpp:80
Vec3u _cells_nb
Definition: Grid.h:377
#define G(x, y, z)
inherits from class Rep
Definition: AppCanvas.cpp:18