|
2 | 2 | import os |
3 | 3 | import time |
4 | 4 | import shutil |
| 5 | +import math |
5 | 6 | from typing import Any |
6 | 7 |
|
7 | 8 | # Third party imports |
@@ -267,20 +268,30 @@ def texture_coordinates() -> flask.Response: |
267 | 268 |
|
268 | 269 | def attributes_metadata(manager: og.AttributeManager) -> dict[str, list[float]]: |
269 | 270 | metadata: dict[str, list[float]] = {} |
| 271 | + nb_elements = manager.nb_elements() |
270 | 272 | for name in manager.attribute_names(): |
271 | 273 | attribute = manager.find_generic_attribute(name) |
272 | 274 | if not attribute.is_genericable(): |
273 | 275 | metadata[name] = [-1.0, -1.0] |
274 | 276 | continue |
275 | 277 | min_value = None |
276 | 278 | max_value = None |
277 | | - nb_items = attribute.nb_items() |
278 | | - for i in range(nb_items): |
279 | | - generic_value = attribute.generic_value(i) |
280 | | - if min_value is None or generic_value < min_value: |
281 | | - min_value = generic_value |
282 | | - if max_value is None or generic_value > max_value: |
283 | | - max_value = generic_value |
| 279 | + for i in range(nb_elements): |
| 280 | + if hasattr(attribute, "value"): |
| 281 | + val = attribute.value(i) |
| 282 | + if isinstance(val, list): |
| 283 | + values_to_check = val |
| 284 | + else: |
| 285 | + values_to_check = [val] |
| 286 | + else: |
| 287 | + values_to_check = [attribute.generic_value(i)] |
| 288 | + |
| 289 | + for v in values_to_check: |
| 290 | + if v is not None and not math.isnan(v): |
| 291 | + if min_value is None or v < min_value: |
| 292 | + min_value = v |
| 293 | + if max_value is None or v > max_value: |
| 294 | + max_value = v |
284 | 295 | metadata[name] = ( |
285 | 296 | [min_value, max_value] |
286 | 297 | if min_value is not None and max_value is not None |
|
0 commit comments