UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
cell.hh
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2// Modified version of Voro++'s source file
3
4// Voro++, a 3D cell-based Voronoi library
5//
6// Author : Chris H. Rycroft (LBL / UC Berkeley)
7// Email : chr@alum.mit.edu
8// Date : August 30th 2011
9
13#ifndef VOROPP_CELL_HH
14#define VOROPP_CELL_HH
15
16#include <vector>
17#include "CoreMinimal.h"
18
19#include "config.hh"
20#include "common.hh"
21
22namespace voro {
23
38 public:
56 int p;
64 int up;
82 int **ed;
86 int *nu;
89 double *pts;
91 virtual ~voronoicell_base();
92 void init_base(double xmin,double xmax,double ymin,double ymax,double zmin,double zmax);
93 void init_octahedron_base(double l);
94 void init_tetrahedron_base(double x0,double y0,double z0,double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3);
95 void translate(double x,double y,double z);
96 double volume();
97 double max_radius_squared();
98 double total_edge_distance();
99 double surface_area();
100 void centroid(double &cx,double &cy,double &cz);
101 int number_of_faces();
102 int number_of_edges();
103 void vertex_orders(std::vector<int> &v);
104 void vertices(std::vector<double> &v);
105 void vertices(double x,double y,double z,std::vector<double> &v);
106 void face_areas(std::vector<double> &v);
107 void face_orders(std::vector<int> &v);
108 void face_freq_table(std::vector<int> &v);
109 void face_vertices(std::vector<int> &v);
110 void face_perimeters(std::vector<double> &v);
111 void normals(std::vector<double> &v);
112 template<class vc_class>
113 bool nplane(vc_class &vc,double x,double y,double z,double rsq,int p_id);
114 bool plane_intersects(double x,double y,double z,double rsq);
115 bool plane_intersects_guess(double x,double y,double z,double rsq);
116 void construct_relations();
117 void check_relations();
118 void check_duplicates();
119 void print_edges();
125 virtual void neighbors(std::vector<int> &v) {v.clear();}
131 virtual void print_edges_neighbors(int i) {};
137 inline int cycle_up(int a,int vertexIndex) {return a==nu[vertexIndex]-1?0:a+1;}
143 inline int cycle_down(int a,int vertexIndex) {return a==0?nu[vertexIndex]-1:a-1;}
144 protected:
147 int *mem;
151 int *mec;
159 int **mep;
160 inline void reset_edges();
161 template<class vc_class>
163 void copy(voronoicell_base* vb);
164 private:
168 int *ds,*stacke;
171 int *ds2,*stacke2;
174 int current_marginal;
177 int n_marg;
180 int *marg;
182 double px;
184 double py;
186 double pz;
188 double prsq;
189 template<class vc_class>
190 void add_memory(vc_class &vc,int i,int *stackp2);
191 template<class vc_class>
192 void add_memory_vertices(vc_class &vc);
193 template<class vc_class>
194 void add_memory_vorder(vc_class &vc);
195 void add_memory_ds(int *&stackp);
196 void add_memory_ds2(int *&stackp2);
197 template<class vc_class>
198 inline bool collapse_order1(vc_class &vc);
199 template<class vc_class>
200 inline bool collapse_order2(vc_class &vc);
201 template<class vc_class>
202 inline bool delete_connection(vc_class &vc,int j,int k,bool hand);
203 template<class vc_class>
204 inline bool search_for_outside_edge(vc_class &vc,int &upRef);
205 template<class vc_class>
206 inline void add_to_stack(vc_class &vc,int lp,int *&stackp2);
207 inline bool plane_intersects_track(double x,double y,double z,double rs,double g);
208 inline void normals_search(std::vector<double> &v,int i,int j,int k);
209 inline bool search_edge(int l,int &m,int &k);
210 inline int m_test(int n,double &ans);
211 int check_marginal(int n,double &ans);
212 friend class voronoicell;
214};
215
223 public:
228 inline void operator=(voronoicell &c) {
231 }
240 inline bool nplane(double x,double y,double z,double rsq,int p_id) {
241 return nplane(*this,x,y,z,rsq,0);
242 }
250 inline bool nplane(double x,double y,double z,int p_id) {
251 double rsq=x*x+y*y+z*z;
252 return nplane(*this,x,y,z,rsq,0);
253 }
260 inline bool plane(double x,double y,double z,double rsq) {
261 return nplane(*this,x,y,z,rsq,0);
262 }
268 inline bool plane(double x,double y,double z) {
269 double rsq=x*x+y*y+z*z;
270 return nplane(*this,x,y,z,rsq,0);
271 }
277 inline void init(double xmin,double xmax,double ymin,double ymax,double zmin,double zmax) {
278 init_base(xmin,xmax,ymin,ymax,zmin,zmax);
279 }
284 inline void init_octahedron(double l) {
286 }
293 inline void init_tetrahedron(double x0,double y0,double z0,double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3) {
295 }
296 // extract cell info in to Unreal arrays
298 private:
299 inline void n_allocate(int i,int m) {};
300 inline void n_add_memory_vertices(int i) {};
301 inline void n_add_memory_vorder(int i) {};
302 inline void n_set_pointer(int neIndex,int n) {};
303 inline void n_copy(int a,int b,int c,int d) {};
304 inline void n_set(int a,int b,int c) {};
305 inline void n_set_aux1(int k) {};
306 inline void n_copy_aux1(int a,int b) {};
307 inline void n_copy_aux1_shift(int a,int b) {};
308 inline void n_set_aux2_copy(int a,int b) {};
309 inline void n_copy_pointer(int a,int b) {};
310 inline void n_set_to_aux1(int j) {};
311 inline void n_set_to_aux2(int j) {};
312 inline void n_allocate_aux1(int i) {};
313 inline void n_switch_to_aux1(int i) {};
314 inline void n_copy_to_aux1(int i,int m) {};
315 inline void n_set_to_aux1_offset(int k,int m) {};
316 inline void n_neighbors(std::vector<int> &v) {v.clear();};
317 friend class voronoicell_base;
318};
319
328 public:
334 int **mne;
341 int **ne;
343 virtual ~voronoicell_neighbor();
344 void operator=(voronoicell &c);
354 inline bool nplane(double x,double y,double z,double rsq,int p_id) {
355 return nplane(*this,x,y,z,rsq,p_id);
356 }
364 inline bool nplane(double x,double y,double z,int p_id) {
365 double rsq=x*x+y*y+z*z;
366 return nplane(*this,x,y,z,rsq,p_id);
367 }
375 inline bool plane(double x,double y,double z,double rsq) {
376 return nplane(*this,x,y,z,rsq,0);
377 }
386 inline bool plane(double x,double y,double z) {
387 double rsq=x*x+y*y+z*z;
388 return nplane(*this,x,y,z,rsq,0);
389 }
390 void init(double xmin,double xmax,double ymin,double ymax,double zmin,double zmax);
391 void init_octahedron(double l);
392 void init_tetrahedron(double x0,double y0,double z0,double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3);
393 void check_facets();
394 virtual void neighbors(std::vector<int> &v);
397 virtual void print_edges_neighbors(int i);
398 private:
399 int *paux1;
400 int *paux2;
401 inline void n_allocate(int i,int m) {mne[i]=new int[m*i];}
402 inline void n_add_memory_vertices(int i) {
403 int **pp=new int*[i];
405 for(int j=0;j<current_vertices;j++) pp[j]=ne[j];
406 delete [] ne;ne=pp;
407 }
408 inline void n_add_memory_vorder(int i) {
409 int **p2=new int*[i];
411 for(int j=0;j<current_vertex_order;j++) p2[j]=mne[j];
412 delete [] mne;mne=p2;
413 }
414 inline void n_set_pointer(int neIndex,int n) {
415 ne[neIndex]=mne[n]+n*mec[n];
416 }
417 inline void n_copy(int a,int b,int c,int d) {ne[a][b]=ne[c][d];}
418 inline void n_set(int a,int b,int c) {ne[a][b]=c;}
419 inline void n_set_aux1(int k) {paux1=mne[k]+k*mec[k];}
420 inline void n_copy_aux1(int a,int b) {paux1[b]=ne[a][b];}
421 inline void n_copy_aux1_shift(int a,int b) {paux1[b]=ne[a][b+1];}
422 inline void n_set_aux2_copy(int a,int b) {
423 paux2=mne[b]+b*mec[b];
424 for(int i=0;i<b;i++) ne[a][i]=paux2[i];
425 }
426 inline void n_copy_pointer(int a,int b) {ne[a]=ne[b];}
427 inline void n_set_to_aux1(int j) {ne[j]=paux1;}
428 inline void n_set_to_aux2(int j) {ne[j]=paux2;}
429 inline void n_allocate_aux1(int i) {paux1=new int[i*mem[i]];}
430 inline void n_switch_to_aux1(int i) {delete [] mne[i];mne[i]=paux1;}
431 inline void n_copy_to_aux1(int i,int m) {paux1[m]=mne[i][m];}
432 inline void n_set_to_aux1_offset(int k,int m) {ne[k]=paux1+m;}
433 friend class voronoicell_base;
434};
435
436}
437
438#endif
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition Array.h:670
A class representing a single Voronoi cell.
Definition cell.hh:37
int current_vertex_order
Definition cell.hh:49
int current_delete2_size
Definition cell.hh:53
int ** mep
Definition cell.hh:159
bool nplane(vc_class &vc, double x, double y, double z, double rsq, int p_id)
Definition cell.cc:413
void face_perimeters(std::vector< double > &v)
Definition cell.cc:1724
void check_duplicates()
Definition cell.cc:350
void copy(voronoicell_base *vb)
Definition cell.cc:72
void init_base(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
Definition cell.cc:265
void face_areas(std::vector< double > &v)
Definition cell.cc:1357
int number_of_faces()
Definition cell.cc:1667
virtual void neighbors(std::vector< int > &v)
Definition cell.hh:125
void reset_edges()
Definition cell.cc:1518
int number_of_edges()
Definition cell.cc:1925
double max_radius_squared()
Definition cell.cc:1475
int cycle_up(int a, int vertexIndex)
Definition cell.hh:137
int up
Definition cell.hh:64
int current_delete_size
Definition cell.hh:51
int p
Definition cell.hh:56
void centroid(double &cx, double &cy, double &cz)
Definition cell.cc:1429
int cycle_down(int a, int vertexIndex)
Definition cell.hh:143
voronoicell_base()
Definition cell.cc:27
void face_vertices(std::vector< int > &v)
Definition cell.cc:1756
int ** ed
Definition cell.hh:82
void print_edges()
Definition cell.cc:2196
double volume()
Definition cell.cc:1320
double total_edge_distance()
Definition cell.cc:1489
void face_freq_table(std::vector< int > &v)
Definition cell.cc:1808
double * pts
Definition cell.hh:89
void init_octahedron_base(double l)
Definition cell.cc:294
int * mem
Definition cell.hh:147
int current_vertices
Definition cell.hh:43
void translate(double x, double y, double z)
Definition cell.cc:112
void vertices(std::vector< double > &v)
Definition cell.cc:1697
int * nu
Definition cell.hh:86
virtual void print_edges_neighbors(int i)
Definition cell.hh:131
virtual ~voronoicell_base()
Definition cell.cc:50
int * mec
Definition cell.hh:151
void vertex_orders(std::vector< int > &v)
Definition cell.cc:1690
void init_tetrahedron_base(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
Definition cell.cc:320
void check_relations()
Definition cell.cc:339
void normals(std::vector< double > &v)
Definition cell.cc:1585
double surface_area()
Definition cell.cc:1393
void check_memory_for_copy(vc_class &vc, voronoicell_base *vb)
Definition cell.cc:63
void construct_relations()
Definition cell.cc:357
bool plane_intersects(double x, double y, double z, double rsq)
Definition cell.cc:1837
void face_orders(std::vector< int > &v)
Definition cell.cc:1783
bool plane_intersects_guess(double x, double y, double z, double rsq)
Definition cell.cc:1850
Extension of the voronoicell_base class to represent a Voronoi cell with neighbor information.
Definition cell.hh:327
virtual ~voronoicell_neighbor()
Definition cell.cc:2025
virtual void neighbors(std::vector< int > &v)
Definition cell.cc:2032
bool nplane(double x, double y, double z, double rsq, int p_id)
Definition cell.hh:354
void init_octahedron(double l)
Definition cell.cc:1960
void neighborsTArray(TArray< int > &nbrs, bool excludeBounds)
Definition cell.cc:2052
voronoicell_neighbor()
Definition cell.cc:2013
void init_tetrahedron(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
Definition cell.cc:1980
int ** ne
Definition cell.hh:341
virtual void print_edges_neighbors(int i)
Definition cell.cc:2213
bool plane(double x, double y, double z)
Definition cell.hh:386
void check_facets()
Definition cell.cc:1992
bool nplane(double x, double y, double z, int p_id)
Definition cell.hh:364
int ** mne
Definition cell.hh:334
bool plane(double x, double y, double z, double rsq)
Definition cell.hh:375
void init(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
Definition cell.cc:1938
void operator=(voronoicell &c)
Definition cell.cc:87
void extractCellInfo(const FVector &CellPosition, TArray< FVector > &Vertices, TArray< int32 > &FaceVertexIndices, TArray< int32 > &Nbrs, TArray< FVector > &Normals)
Definition cell.cc:2074
Extension of the voronoicell_base class to represent a Voronoi cell without neighbor information.
Definition cell.hh:222
void operator=(voronoicell &c)
Definition cell.hh:228
void init_octahedron(double l)
Definition cell.hh:284
bool nplane(double x, double y, double z, int p_id)
Definition cell.hh:250
void init(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
Definition cell.hh:277
void init_tetrahedron(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
Definition cell.hh:293
bool plane(double x, double y, double z, double rsq)
Definition cell.hh:260
bool nplane(double x, double y, double z, double rsq, int p_id)
Definition cell.hh:240
bool plane(double x, double y, double z)
Definition cell.hh:268
void extractCellInfo(const FVector &CellPosition, TArray< FVector > &Vertices, TArray< int32 > &FaceVertexIndices)
Definition cell.cc:2154
Header file for the small helper functions.
Master configuration file for setting various compile-time options.
Definition c_loops.cc:15
float v
Definition radaudio_mdct.cpp:62