1
+ import warnings
2
+
1
3
import dataclasses
2
4
import enum
3
5
import numpy as np
11
13
@dataclasses .dataclass
12
14
class Grid :
13
15
class GridTypes (enum .Flag ):
14
- OCTREE = 2 ** 0
15
- DENSE = 2 ** 1
16
- CUSTOM = 2 ** 2
17
- TOPOGRAPHY = 2 ** 3
18
- SECTIONS = 2 ** 4
19
- CENTERED = 2 ** 5
20
- NONE = 2 ** 10
16
+ OCTREE = 2 ** 0
17
+ DENSE = 2 ** 1
18
+ CUSTOM = 2 ** 2
19
+ TOPOGRAPHY = 2 ** 3
20
+ SECTIONS = 2 ** 4
21
+ CENTERED = 2 ** 5
22
+ NONE = 2 ** 10
21
23
22
24
# ? What should we do with the extent?
23
25
_extent : Optional [np .ndarray ] # * Model extent should be cross grid
@@ -31,11 +33,11 @@ class GridTypes(enum.Flag):
31
33
32
34
values : np .ndarray = np .empty ((0 , 3 ))
33
35
length : np .ndarray = np .empty (0 )
34
-
36
+
35
37
_active_grids = GridTypes .NONE
36
-
38
+
37
39
_octree_levels : int = - 1
38
-
40
+
39
41
def __init__ (self , extent = None , resolution = None ):
40
42
self .extent = extent
41
43
# Init basic grid empty
@@ -62,11 +64,11 @@ def extent(self):
62
64
raise AttributeError ('Extent is not defined' )
63
65
else :
64
66
return self ._extent
65
-
67
+
66
68
@extent .setter
67
69
def extent (self , value ):
68
70
self ._extent = value
69
-
71
+
70
72
@property
71
73
def bounding_box (self ):
72
74
extents = self .extent
@@ -80,81 +82,87 @@ def bounding_box(self):
80
82
[extents [1 ], extents [3 ], extents [4 ]], # max x, max y, min z
81
83
[extents [1 ], extents [3 ], extents [5 ]]]) # max x, max y, max z
82
84
return bounding_box_points
83
-
84
-
85
+
85
86
@property
86
87
def active_grids (self ):
87
88
return self ._active_grids
88
-
89
+
89
90
@active_grids .setter
90
91
def active_grids (self , value ):
91
92
self ._active_grids = value
92
93
self ._update_values ()
93
94
94
95
@property
95
- def dense_grid (self ):
96
+ def dense_grid (self ) -> RegularGrid :
96
97
return self ._dense_grid
97
-
98
+
98
99
@dense_grid .setter
99
100
def dense_grid (self , value ):
100
101
self ._dense_grid = value
101
102
self .active_grids |= self .GridTypes .DENSE
102
103
self ._update_values ()
103
-
104
+
104
105
@property
105
106
def octree_grid (self ):
106
107
return self ._octree_grid
107
-
108
+
108
109
@octree_grid .setter
109
110
def octree_grid (self , value ):
110
111
self ._octree_grid = value
111
112
self .active_grids |= self .GridTypes .OCTREE
112
113
self ._update_values ()
113
-
114
+
114
115
@property
115
116
def custom_grid (self ):
116
117
return self ._custom_grid
117
-
118
+
118
119
@custom_grid .setter
119
120
def custom_grid (self , value ):
120
121
self ._custom_grid = value
121
122
self .active_grids |= self .GridTypes .CUSTOM
122
123
self ._update_values ()
123
-
124
+
124
125
@property
125
126
def topography (self ):
126
127
return self ._topography
127
-
128
+
128
129
@topography .setter
129
130
def topography (self , value ):
130
131
self ._topography = value
131
132
self .active_grids |= self .GridTypes .TOPOGRAPHY
132
133
self ._update_values ()
133
-
134
+
134
135
@property
135
136
def sections (self ):
136
137
return self ._sections
137
-
138
+
138
139
@sections .setter
139
140
def sections (self , value ):
140
141
self ._sections = value
141
142
self .active_grids |= self .GridTypes .SECTIONS
142
143
self ._update_values ()
143
-
144
+
144
145
@property
145
146
def centered_grid (self ):
146
147
return self ._centered_grid
147
-
148
+
148
149
@centered_grid .setter
149
150
def centered_grid (self , value ):
150
151
self ._centered_grid = value
151
152
self .active_grids |= self .GridTypes .CENTERED
152
153
self ._update_values ()
153
-
154
-
154
+
155
155
@property
156
156
def regular_grid (self ):
157
- raise AttributeError ('This property is deprecated. Use the dense_grid or octree_grid instead' )
157
+ warnings .warn ('This property is deprecated. Use the dense_grid or octree_grid instead' , DeprecationWarning )
158
+ if self .dense_grid is not None and self .octree_grid is not None :
159
+ raise AttributeError ('Both dense_grid and octree_grid are active. This is not possible.' )
160
+ elif self .dense_grid is not None :
161
+ return self .dense_grid
162
+ elif self .octree_grid is not None :
163
+ return self .octree_grid
164
+ else :
165
+ return None
158
166
159
167
@regular_grid .setter
160
168
def regular_grid (self , value ):
@@ -164,6 +172,10 @@ def regular_grid(self, value):
164
172
def octree_levels (self ):
165
173
return self ._octree_levels
166
174
175
+ @property
176
+ def octree_levels (self ):
177
+ return self ._octree_levels
178
+
167
179
@octree_levels .setter
168
180
def octree_levels (self , value ):
169
181
self ._octree_levels = value
@@ -175,7 +187,7 @@ def octree_levels(self, value):
175
187
176
188
def _update_values (self ):
177
189
values = []
178
-
190
+
179
191
if self .GridTypes .OCTREE in self .active_grids :
180
192
values .append (self .octree_grid .values )
181
193
if self .GridTypes .DENSE in self .active_grids :
@@ -188,12 +200,11 @@ def _update_values(self):
188
200
values .append (self .sections .values )
189
201
if self .GridTypes .CENTERED in self .active_grids :
190
202
values .append (self .centered_grid .values )
191
-
203
+
192
204
self .values = np .concatenate (values )
193
205
194
206
return self .values
195
207
196
-
197
208
def get_section_args (self , section_name : str ):
198
209
# TODO: This method should be part of the sections
199
210
# assert type(section_name) is str, 'Only one section type can be retrieved'
0 commit comments