1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to
// this header file considered to be the "object code" form of the original source.
#ifndef _Voxel_ROctBoolDS_HeaderFile
#define _Voxel_ROctBoolDS_HeaderFile
#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif
#ifndef _Voxel_DS_HeaderFile
#include <Voxel_DS.hxx>
#endif
#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
//! A 3D voxel model keeping a boolean flag (1 or 0) <br>
//! value for each voxel, and having an opportunity to split each voxel <br>
//! into 8 sub-voxels recursively. <br>
class Voxel_ROctBoolDS : public Voxel_DS {
public:
void* operator new(size_t,void* anAddress)
{
return anAddress;
}
void* operator new(size_t size)
{
return Standard::Allocate(size);
}
void operator delete(void *anAddress)
{
if (anAddress) Standard::Free((Standard_Address&)anAddress);
}
//! An empty constructor. <br>
Standard_EXPORT Voxel_ROctBoolDS();
//! A constructor initializing the voxel model. <br>
//! (x, y, z) - the start point of the box. <br>
//! (x_len, y_len, z_len) - lengths in x, y and z directions along axes of a co-ordinate system. <br>
//! (nb_x, nb_y, nb_z) - number of splits (voxels) along x, y and z directions. <br>
Standard_EXPORT Voxel_ROctBoolDS(const Standard_Real x,const Standard_Real y,const Standard_Real z,const Standard_Real x_len,const Standard_Real y_len,const Standard_Real z_len,const Standard_Integer nb_x,const Standard_Integer nb_y,const Standard_Integer nb_z);
//! Initialization of the voxel model. <br>
//! (x, y, z) - the start point of the box. <br>
//! (x_len, y_len, z_len) - lengths in x, y and z directions along axes of a co-ordinate system. <br>
//! (nb_x, nb_y, nb_z) - number of splits (voxels) along x, y and z directions. <br>
Standard_EXPORT virtual void Init(const Standard_Real x,const Standard_Real y,const Standard_Real z,const Standard_Real x_len,const Standard_Real y_len,const Standard_Real z_len,const Standard_Integer nb_x,const Standard_Integer nb_y,const Standard_Integer nb_z) ;
//! A destructor of the voxel model. <br>
Standard_EXPORT void Destroy() ;
~Voxel_ROctBoolDS()
{
Destroy();
}
//! The method sets all values equal to 0 (false) and <br>
//! releases the memory. <br>
Standard_EXPORT void SetZero() ;
//! The method searches voxels with equal-value of sub-voxels <br>
//! and removes them (remaining the value for the voxel). <br>
Standard_EXPORT void OptimizeMemory() ;
//! Defines a value for voxel with co-ordinates (ix, iy, iz). <br>
//! If the voxel is split into 8 sub-voxels, the split disappears. <br>
//! Initial state of the model is so that all voxels have value 0 (false), <br>
//! and this data doesn't occupy memory. <br>
//! Memory for data is allocating during setting non-zero values (true). <br>
Standard_EXPORT void Set(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz,const Standard_Boolean data) ;
//! Defines a value for a sub-voxel of a voxel with co-ordinates (ix, iy, iz). <br>
//! If the voxel is not split into 8 sub-voxels yet, this method splits the voxel. <br>
//! Range of sub-voxels is 0 - 7. <br>
Standard_EXPORT void Set(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz,const Standard_Integer ioct1,const Standard_Boolean data) ;
//! Defines a value for a sub-voxel of a sub-voxel of a voxel with co-ordinates (ix, iy, iz). <br>
//! If the voxel is not split into 8 sub-voxels yet, this method splits the voxel. <br>
//! Range of sub-voxels is 0 - 7. <br>
Standard_EXPORT void Set(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz,const Standard_Integer ioct1,const Standard_Integer ioct2,const Standard_Boolean data) ;
//! Returns true if the voxel is split into 8 sub-voxels. <br>
Standard_EXPORT Standard_Boolean IsSplit(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz) const;
//! Returns the deepness of splits of a voxel. <br>
//! 0 - no splits (::IsSplit() being called would return false). <br>
//! 1 - the voxel is split into 8 sub-voxels. <br>
//! 2 - the voxels is split into 8 sub-voxels, <br>
//! and each of the sub-voxels is split into 8 sub-sub-voxels. <br>
//! 3 - ... <br>
Standard_EXPORT Standard_Integer Deepness(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz) const;
//! Returns the value of voxel with co-ordinates (ix, iy, iz). <br>
//! Warning!: the returned value may not coincide with the value of its 8 sub-voxels. <br>
//! Use the method ::IsSplit() to check whether a voxel has sub-voxels. <br>
Standard_EXPORT Standard_Boolean Get(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz) const;
//! Returns the value of a sub-voxel of a voxel with co-ordinates (ix, iy, iz). <br>
//! If the voxel is not split, it returns the value of the voxel. <br>
//! Range of sub-voxels is 0 - 7. <br>
Standard_EXPORT Standard_Boolean Get(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz,const Standard_Integer ioct1) const;
//! Returns the value of a sub-voxel of a sub-voxel of a voxel with co-ordinates (ix, iy, iz). <br>
//! If the voxel is not split, it returns the value of the voxel. <br>
//! Range of sub-voxels is 0 - 7. <br>
Standard_EXPORT Standard_Boolean Get(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz,const Standard_Integer ioct1,const Standard_Integer ioct2) const;
//! Returns the center point of a sub-voxel with co-ordinates (ix, iy, iz, i). <br>
Standard_EXPORT void GetCenter(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz,const Standard_Integer i,Standard_Real& xc,Standard_Real& yc,Standard_Real& zc) const;
//! Returns the center point of a sub-voxel with co-ordinates (ix, iy, iz, i, j). <br>
Standard_EXPORT void GetCenter(const Standard_Integer ix,const Standard_Integer iy,const Standard_Integer iz,const Standard_Integer i,const Standard_Integer j,Standard_Real& xc,Standard_Real& yc,Standard_Real& zc) const;
protected:
private:
};
// other Inline functions and methods (like "C++: function call" methods)
#endif
|