PeriDyno 1.0.0
Loading...
Searching...
No Matches
VolumeHelper.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace dyno {
6
8 {
9 public:
10
11 DYN_FUNC PositionNode()
12 {
15 }
16 DYN_FUNC PositionNode(int surf, OcKey pos)
17 {
18 surface_index = surf;
19 position_index = pos;
20 }
21 DYN_FUNC bool operator> (const PositionNode& ug) const
22 {
24 }
25
28 };
30 {
31 DYN_FUNC bool operator()(const PositionNode& A, const PositionNode& B)
32 {
33 return A > B;
34 }
35 };
36
38 {
39 public:
40 DYN_FUNC IndexNode()
41 {
44 }
45
46 DYN_FUNC IndexNode(int xyz, int node)
47 {
48 node_index = node;
49 xyz_index = xyz;
50 }
51
52 DYN_FUNC bool operator< (const IndexNode& ug) const
53 {
54 return xyz_index < ug.xyz_index;
55 }
56
59 };
60 struct IndexCmp
61 {
62 DYN_FUNC bool operator()(const IndexNode& A, const IndexNode& B)
63 {
64 return A < B;
65 }
66 };
67
68 template<typename TDataType>
70 {
71 public:
72 typedef typename TDataType::Real Real;
73 typedef typename TDataType::Coord Coord;
74
76 DArray<Real>& grid0_value,
77 DArray<Coord>& grid0_object,
78 DArray<Coord>& grid0_normal,
79 std::shared_ptr<TriangleSet<TDataType>> triSet,
80 Coord m_origin,
81 int m_nx,
82 int m_ny,
83 int m_nz,
84 int padding,
85 int& m_level0,
86 Real m_dx);
87
89 DArray<Real>& grid1_value,
90 DArray<Coord>& grid1_object,
91 DArray<Coord>& grid1_normal,
93 DArray<Coord>& grid0_object,
94 DArray<Coord>& grid0_normal,
95 Coord m_origin,
96 Level multi_level,
97 int m_nx,
98 int m_ny,
99 int m_nz,
100 Real m_dx);
101
103 DArray<Real>& grid2_value,
104 DArray<Coord>& grid2_object,
105 DArray<Coord>& grid2_normal,
107 DArray<Coord>& grid1_object,
108 DArray<Coord>& grid1_normal,
109 Coord m_origin,
110 Level multi_level,
111 int m_nx,
112 int m_ny,
113 int m_nz,
114 Real m_dx);
115
117 DArray<Real>& grids_value,
118 DArray<Coord>& grids_object,
119 DArray<Coord>& grids_normal,
121 DArray<Real>& grid1_value,
122 DArray<Coord>& grid1_object,
123 DArray<Coord>& grid1_normal,
124 int uplevel_num);
125
127 DArray<VoxelOctreeNode<Coord>>& total_nodes,
128 DArray<Real>& total_value,
129 DArray<Coord>& total_object,
130 DArray<Coord>& total_normal,
131 DArray<VoxelOctreeNode<Coord>>& level0_nodes,
132 DArray<Real>& level0_value,
133 DArray<Coord>& level0_object,
134 DArray<Coord>& level0_normal,
135 DArray<VoxelOctreeNode<Coord>>& levelT_nodes,
136 DArray<Real>& levelT_value,
137 DArray<Coord>& levelT_object,
138 DArray<Coord>& levelT_normal,
139 int level0_num,
140 int grid_total_num);
141
143 DArray<VoxelOctreeNode<Coord>>& total_nodes,
144 DArray<Real>& total_value,
145 DArray<Coord>& total_object,
146 DArray<Coord>& total_normal,
147 DArray<VoxelOctreeNode<Coord>>& level0_nodes,
148 DArray<Real>& level0_value,
149 DArray<Coord>& level0_object,
150 DArray<Coord>& level0_normal,
151 DArray<VoxelOctreeNode<Coord>>& level1_nodes,
152 DArray<Real>& level1_value,
153 DArray<Coord>& level1_object,
154 DArray<Coord>& level1_normal,
155 DArray<VoxelOctreeNode<Coord>>& levelT_nodes,
156 DArray<Real>& levelT_value,
157 DArray<Coord>& levelT_object,
158 DArray<Coord>& levelT_normal,
159 int level0_num,
160 int level1_num,
161 int grid_total_num);
162
164 DArray<VoxelOctreeNode<Coord>>& total_nodes,
165 DArray<Real>& total_value,
166 DArray<Coord>& total_object,
167 DArray<Coord>& total_normal,
168 DArray<VoxelOctreeNode<Coord>>& level0_nodes,
169 DArray<Real>& level0_value,
170 DArray<Coord>& level0_object,
171 DArray<Coord>& level0_normal,
172 DArray<VoxelOctreeNode<Coord>>& level1_nodes,
173 DArray<Real>& level1_value,
174 DArray<Coord>& level1_object,
175 DArray<Coord>& level1_normal,
176 DArray<VoxelOctreeNode<Coord>>& level2_nodes,
177 DArray<Real>& level2_value,
178 DArray<Coord>& level2_object,
179 DArray<Coord>& level2_normal,
180 DArray<VoxelOctreeNode<Coord>>& levelT_nodes,
181 DArray<Real>& levelT_value,
182 DArray<Coord>& levelT_object,
183 DArray<Coord>& levelT_normal,
184 int level0_num,
185 int level1_num,
186 int level2_num,
187 int grid_total_num);
188
190 DArray<VoxelOctreeNode<Coord>>& total_nodes,
191 DArray<Real>& total_value,
192 DArray<Coord>& total_object,
193 DArray<Coord>& total_normal,
194 DArray<VoxelOctreeNode<Coord>>& level0_nodes,
195 DArray<Real>& level0_value,
196 DArray<Coord>& level0_object,
197 DArray<Coord>& level0_normal,
198 DArray<VoxelOctreeNode<Coord>>& level1_nodes,
199 DArray<Real>& level1_value,
200 DArray<Coord>& level1_object,
201 DArray<Coord>& level1_normal,
202 DArray<VoxelOctreeNode<Coord>>& level2_nodes,
203 DArray<Real>& level2_value,
204 DArray<Coord>& level2_object,
205 DArray<Coord>& level2_normal,
206 DArray<VoxelOctreeNode<Coord>>& level3_nodes,
207 DArray<Real>& level3_value,
208 DArray<Coord>& level3_object,
209 DArray<Coord>& level3_normal,
210 DArray<VoxelOctreeNode<Coord>>& levelT_nodes,
211 DArray<Real>& levelT_value,
212 DArray<Coord>& levelT_object,
213 DArray<Coord>& levelT_normal,
214 int level0_num,
215 int level1_num,
216 int level2_num,
217 int level3_num,
218 int grid_total_num);
219
222 DArray<Real>& grid0_value,
223 DArray<Coord>& grid0_object,
224 DArray<Coord>& grid0_normal,
225 DArray<VoxelOctreeNode<Coord>>& sdfOctreeNode_a,
226 DArray<Real>& sdfValue_a,
227 DArray<Coord>& object_a,
228 DArray<Coord>& normal_a,
229 DArray<VoxelOctreeNode<Coord>>& sdfOctreeNode_b,
230 DArray<Real>& sdfValue_b,
231 DArray<Coord>& object_b,
232 DArray<Coord>& normal_b,
233 std::shared_ptr<VoxelOctree<TDataType>> sdfOctree_a,
234 std::shared_ptr<VoxelOctree<TDataType>> sdfOctree_b,
235 int offset_ax,
236 int offset_ay,
237 int offset_az,
238 int offset_bx,
239 int offset_by,
240 int offset_bz,
241 int level0_a,
242 int level0_b,
243 int& m_level0,
244 Coord m_origin,
245 Real m_dx,
246 int m_nx,
247 int m_ny,
248 int m_nz,
249 int boolean);
250
252 DArray<PositionNode>& recon_node,
253 DArray<Real>& recon_sdf,
254 DArray<Coord>& recon_object,
255 DArray<Coord>& recon_normal,
257 DArray<Coord>& grid_object,
258 DArray<Coord>& grid_normal,
259 Coord m_origin,
260 Real m_dx,
261 int m_nx,
262 int m_ny,
263 int m_nz,
264 Real m_dx_old,
265 int level_0,
266 int& level_0_recon);
267
270 DArray<Real>& grid0_value,
271 DArray<Coord>& grid0_object,
272 DArray<Coord>& grid0_normal,
273 DArray<PositionNode>& recon_node,
274 DArray<Real>& recon_sdf,
275 DArray<Coord>& recon_object,
276 DArray<Coord>& recon_normal,
277 DArray<VoxelOctreeNode<Coord>>& sdfOctreeNode_2,
278 DArray<Real>& sdfValue_2,
279 DArray<Coord>& object_2,
280 DArray<Coord>& normal_2,
281 std::shared_ptr<VoxelOctree<TDataType>> sdfOctree_a,
282 std::shared_ptr<VoxelOctree<TDataType>> sdfOctree_b,
283 int level0_1,
284 int level0_2,
285 int& m_level0,
286 int offset_nx,
287 int offset_ny,
288 int offset_nz,
289 Coord m_origin,
290 Real m_dx,
291 int m_nx,
292 int m_ny,
293 int m_nz,
294 int boolean);
295
297 DArray<Real>& leaf_value,
298 DArray<int>& leaf_index,
299 DArray<Real>& leaf_value_a,
300 DArray<Real>& leaf_value_b,
301 int boolean);
302 };
303}
DYN_FUNC IndexNode(int xyz, int node)
DYN_FUNC IndexNode()
DYN_FUNC bool operator<(const IndexNode &ug) const
DYN_FUNC PositionNode(int surf, OcKey pos)
DYN_FUNC PositionNode()
DYN_FUNC bool operator>(const PositionNode &ug) const
static void levelBottom(DArray< VoxelOctreeNode< Coord > > &grid0, DArray< Real > &grid0_value, DArray< Coord > &grid0_object, DArray< Coord > &grid0_normal, std::shared_ptr< TriangleSet< TDataType > > triSet, Coord m_origin, int m_nx, int m_ny, int m_nz, int padding, int &m_level0, Real m_dx)
static void levelMiddle(DArray< VoxelOctreeNode< Coord > > &grid1, DArray< Real > &grid1_value, DArray< Coord > &grid1_object, DArray< Coord > &grid1_normal, DArray< VoxelOctreeNode< Coord > > &grid0, DArray< Coord > &grid0_object, DArray< Coord > &grid0_normal, Coord m_origin, Level multi_level, int m_nx, int m_ny, int m_nz, Real m_dx)
static void collectionGridsFour(DArray< VoxelOctreeNode< Coord > > &total_nodes, DArray< Real > &total_value, DArray< Coord > &total_object, DArray< Coord > &total_normal, DArray< VoxelOctreeNode< Coord > > &level0_nodes, DArray< Real > &level0_value, DArray< Coord > &level0_object, DArray< Coord > &level0_normal, DArray< VoxelOctreeNode< Coord > > &level1_nodes, DArray< Real > &level1_value, DArray< Coord > &level1_object, DArray< Coord > &level1_normal, DArray< VoxelOctreeNode< Coord > > &level2_nodes, DArray< Real > &level2_value, DArray< Coord > &level2_object, DArray< Coord > &level2_normal, DArray< VoxelOctreeNode< Coord > > &levelT_nodes, DArray< Real > &levelT_value, DArray< Coord > &levelT_object, DArray< Coord > &levelT_normal, int level0_num, int level1_num, int level2_num, int grid_total_num)
static void levelTop(DArray< VoxelOctreeNode< Coord > > &grid2, DArray< Real > &grid2_value, DArray< Coord > &grid2_object, DArray< Coord > &grid2_normal, DArray< VoxelOctreeNode< Coord > > &grid1, DArray< Coord > &grid1_object, DArray< Coord > &grid1_normal, Coord m_origin, Level multi_level, int m_nx, int m_ny, int m_nz, Real m_dx)
static void collectionGridsTwo(DArray< VoxelOctreeNode< Coord > > &total_nodes, DArray< Real > &total_value, DArray< Coord > &total_object, DArray< Coord > &total_normal, DArray< VoxelOctreeNode< Coord > > &level0_nodes, DArray< Real > &level0_value, DArray< Coord > &level0_object, DArray< Coord > &level0_normal, DArray< VoxelOctreeNode< Coord > > &levelT_nodes, DArray< Real > &levelT_value, DArray< Coord > &levelT_object, DArray< Coord > &levelT_normal, int level0_num, int grid_total_num)
static void finestLevelReconstBoolean(DArray< VoxelOctreeNode< Coord > > &grid0, DArray< Real > &grid0_value, DArray< Coord > &grid0_object, DArray< Coord > &grid0_normal, DArray< PositionNode > &recon_node, DArray< Real > &recon_sdf, DArray< Coord > &recon_object, DArray< Coord > &recon_normal, DArray< VoxelOctreeNode< Coord > > &sdfOctreeNode_2, DArray< Real > &sdfValue_2, DArray< Coord > &object_2, DArray< Coord > &normal_2, std::shared_ptr< VoxelOctree< TDataType > > sdfOctree_a, std::shared_ptr< VoxelOctree< TDataType > > sdfOctree_b, int level0_1, int level0_2, int &m_level0, int offset_nx, int offset_ny, int offset_nz, Coord m_origin, Real m_dx, int m_nx, int m_ny, int m_nz, int boolean)
static void finestLevelBoolean(DArray< VoxelOctreeNode< Coord > > &grid0, DArray< Real > &grid0_value, DArray< Coord > &grid0_object, DArray< Coord > &grid0_normal, DArray< VoxelOctreeNode< Coord > > &sdfOctreeNode_a, DArray< Real > &sdfValue_a, DArray< Coord > &object_a, DArray< Coord > &normal_a, DArray< VoxelOctreeNode< Coord > > &sdfOctreeNode_b, DArray< Real > &sdfValue_b, DArray< Coord > &object_b, DArray< Coord > &normal_b, std::shared_ptr< VoxelOctree< TDataType > > sdfOctree_a, std::shared_ptr< VoxelOctree< TDataType > > sdfOctree_b, int offset_ax, int offset_ay, int offset_az, int offset_bx, int offset_by, int offset_bz, int level0_a, int level0_b, int &m_level0, Coord m_origin, Real m_dx, int m_nx, int m_ny, int m_nz, int boolean)
static void collectionGridsFive(DArray< VoxelOctreeNode< Coord > > &total_nodes, DArray< Real > &total_value, DArray< Coord > &total_object, DArray< Coord > &total_normal, DArray< VoxelOctreeNode< Coord > > &level0_nodes, DArray< Real > &level0_value, DArray< Coord > &level0_object, DArray< Coord > &level0_normal, DArray< VoxelOctreeNode< Coord > > &level1_nodes, DArray< Real > &level1_value, DArray< Coord > &level1_object, DArray< Coord > &level1_normal, DArray< VoxelOctreeNode< Coord > > &level2_nodes, DArray< Real > &level2_value, DArray< Coord > &level2_object, DArray< Coord > &level2_normal, DArray< VoxelOctreeNode< Coord > > &level3_nodes, DArray< Real > &level3_value, DArray< Coord > &level3_object, DArray< Coord > &level3_normal, DArray< VoxelOctreeNode< Coord > > &levelT_nodes, DArray< Real > &levelT_value, DArray< Coord > &levelT_object, DArray< Coord > &levelT_normal, int level0_num, int level1_num, int level2_num, int level3_num, int grid_total_num)
TDataType::Coord Coord
static void updateBooleanSigned(DArray< Real > &leaf_value, DArray< int > &leaf_index, DArray< Real > &leaf_value_a, DArray< Real > &leaf_value_b, int boolean)
static void finestLevelReconstruction(DArray< PositionNode > &recon_node, DArray< Real > &recon_sdf, DArray< Coord > &recon_object, DArray< Coord > &recon_normal, DArray< VoxelOctreeNode< Coord > > &grid, DArray< Coord > &grid_object, DArray< Coord > &grid_normal, Coord m_origin, Real m_dx, int m_nx, int m_ny, int m_nz, Real m_dx_old, int level_0, int &level_0_recon)
TDataType::Real Real
static void collectionGridsThree(DArray< VoxelOctreeNode< Coord > > &total_nodes, DArray< Real > &total_value, DArray< Coord > &total_object, DArray< Coord > &total_normal, DArray< VoxelOctreeNode< Coord > > &level0_nodes, DArray< Real > &level0_value, DArray< Coord > &level0_object, DArray< Coord > &level0_normal, DArray< VoxelOctreeNode< Coord > > &level1_nodes, DArray< Real > &level1_value, DArray< Coord > &level1_object, DArray< Coord > &level1_normal, DArray< VoxelOctreeNode< Coord > > &levelT_nodes, DArray< Real > &levelT_value, DArray< Coord > &levelT_object, DArray< Coord > &levelT_normal, int level0_num, int level1_num, int grid_total_num)
static void levelCollection(DArray< VoxelOctreeNode< Coord > > &grids, DArray< Real > &grids_value, DArray< Coord > &grids_object, DArray< Coord > &grids_normal, DArray< VoxelOctreeNode< Coord > > &grid1, DArray< Real > &grid1_value, DArray< Coord > &grid1_object, DArray< Coord > &grid1_normal, int uplevel_num)
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Array< T, DeviceType::GPU > DArray
Definition Array.inl:89
constexpr int EMPTY
unsigned long long int OcKey
DYN_FUNC bool operator()(const IndexNode &A, const IndexNode &B)
DYN_FUNC bool operator()(const PositionNode &A, const PositionNode &B)