Skip to content

Commit 2d40563

Browse files
committed
fix: Adding colours to surfaces
1 parent 82e4c0e commit 2d40563

File tree

4 files changed

+12
-6
lines changed

4 files changed

+12
-6
lines changed

LoopStructural/datatypes/_surface.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dataclasses import dataclass, field
2-
from typing import Optional
2+
from typing import Optional,Union
33
import numpy as np
44
import io
55
from LoopStructural.utils import getLogger
@@ -11,12 +11,13 @@
1111
class Surface:
1212
vertices: np.ndarray = field(default_factory=lambda: np.array([[0, 0, 0]]))
1313
triangles: np.ndarray = field(default_factory=lambda: np.array([[0, 0, 0]]))
14+
colour: Optional[Union[str,np.ndarray]] = field(default_factory=lambda: None)
15+
1416
normals: Optional[np.ndarray] = None
1517
name: str = 'surface'
1618
values: Optional[np.ndarray] = None
1719
properties: Optional[dict] = None
1820
cell_properties: Optional[dict] = None
19-
2021
@property
2122
def triangle_area(self):
2223
"""_summary_

LoopStructural/modelling/core/geological_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1798,7 +1798,7 @@ def get_stratigraphic_surfaces(self, units: List[str] = [], bottoms: bool = True
17981798
values = values.loc[~np.logical_or(values == np.inf, values == -np.inf)]
17991799
surfaces.extend(
18001800
self.get_feature_by_name(u).surfaces(
1801-
values.to_list(), self.bounding_box, name=names.loc[values.index].to_list()
1801+
values.to_list(), self.bounding_box, name=names.loc[values.index].to_list(), colours=unit_table.loc[unit_table['feature_name'] == u, 'colour'].tolist()
18021802
)
18031803
)
18041804

LoopStructural/modelling/features/_base_geological_feature.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ def surfaces(
274274
value: Union[float, int, List[Union[float, int]]],
275275
bounding_box=None,
276276
name: Optional[Union[List[str], str]] = None,
277+
colours:Optional[Union[str,np.ndarray]]=None,
277278
) -> surface_list:
278279
"""Find the surfaces of the geological feature at a given value
279280
@@ -305,14 +306,14 @@ def surfaces(
305306
isosurfacer = LoopIsosurfacer(bounding_box, callable=callable)
306307
if name is None and self.name is not None:
307308
name = self.name
308-
surfaces = isosurfacer.fit(value, name)
309+
surfaces = isosurfacer.fit(value, name,colours=colours)
309310
except Exception as e:
310311
logger.error(f"Failed to create surface for {self.name} at value {value}")
311312
logger.error(e)
312313
surfaces = []
313314
finally:
314315
self.regions = regions
315-
316+
316317
return surfaces
317318

318319
def scalar_field(self, bounding_box=None):

LoopStructural/utils/_surface.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def fit(
6464
values: Optional[Union[list, int, float]],
6565
name: Optional[Union[List[str], str]] = None,
6666
local=False,
67+
colours: Optional[List]=None,
6768
) -> surface_list:
6869
"""Extract isosurfaces from the interpolator
6970
@@ -120,7 +121,9 @@ def fit(
120121
names = [name] * len(isovalues)
121122
if isinstance(name, list):
122123
names = name
123-
for name, isovalue in zip(names, isovalues):
124+
if colours is None:
125+
colours = [None]*len(isovalues)
126+
for name, isovalue,colour in zip(names, isovalues,colours):
124127
try:
125128
step_vector = (self.bounding_box.maximum - self.bounding_box.origin) / (
126129
np.array(self.bounding_box.nsteps) - 1
@@ -150,6 +153,7 @@ def fit(
150153
normals=normals,
151154
name=f"{name}_{isovalue}",
152155
values=values,
156+
colour=colour,
153157
)
154158
)
155159
return surfaces

0 commit comments

Comments
 (0)