diff --git a/pygeoapi/provider/speckle_utils/display_utils.py b/pygeoapi/provider/speckle_utils/display_utils.py index 9ae1a21..4fe3ad4 100644 --- a/pygeoapi/provider/speckle_utils/display_utils.py +++ b/pygeoapi/provider/speckle_utils/display_utils.py @@ -354,6 +354,17 @@ def assign_color(self: "SpeckleProvider", obj_display_tc: "TraversalContext", pr obj_display = obj_display_tc.current try: + # first, choose if get color from the parent obj or displayValue + if hasattr(obj_display, 'displayStyle') or hasattr(obj_display, '@displayStyle') or hasattr(obj_display, 'renderMaterial') or hasattr(obj_display, '@renderMaterial'): + obj_display = obj_display_tc.current + else: + # this option will be not very reliable: + # there could be different colors for diff displayValues in the list + if hasattr(obj_display, 'displayValue') and isinstance(obj_display['displayValue'], list) and len(obj_display['displayValue'])>0: + obj_display = obj_display['displayValue'][0] + elif hasattr(obj_display, '@displayValue') and isinstance(obj_display['@displayValue'], list) and len(obj_display['@displayValue'])>0: + obj_display = obj_display['@displayValue'][0] + # prioritize renderMaterials for Meshes & Brep if isinstance(obj_display, Mesh) or isinstance(obj_display, Brep): # print(obj_display.get_member_names()) diff --git a/pygeoapi/provider/speckle_utils/feature_utils.py b/pygeoapi/provider/speckle_utils/feature_utils.py index 1b704ce..f8a7233 100644 --- a/pygeoapi/provider/speckle_utils/feature_utils.py +++ b/pygeoapi/provider/speckle_utils/feature_utils.py @@ -79,7 +79,7 @@ def initialize_features(self: "SpeckleProvider", all_coords, all_coord_counts, d obj_get_color_tc = TraversalContext(obj_get_color, "", item) - assign_display_properties(self, feature, f_base, obj_get_color_tc) + assign_display_properties(self, feature, f_base, obj_get_color_tc) feature["max_height"] = max([c[2] for c in coords]) feature["bbox"] = get_feature_bbox(coords) data["features"].append(feature)