mirror of
https://github.com/yeicor-3d/yet-another-cad-viewer.git
synced 2025-12-19 22:24:17 +01:00
Clean up object naming
Honor the upstream names for objects if they've been given them, use the automatic variable magic as a fallback. And in the case of truly anonymous objects, give them a name based on their type (e.g. "Box3") vs. "_unknown_var99".
This commit is contained in:
@@ -382,19 +382,30 @@ def _preprocess_cad(obj: CADLike, **kwargs) -> CADCoreLike:
|
||||
return obj
|
||||
|
||||
|
||||
_find_var_name_count = 0
|
||||
|
||||
_obj_name_counts = {}
|
||||
|
||||
def _find_var_name(obj: any, avoid_levels: int = 2) -> str:
|
||||
"""A hacky way to get a stable name for an object that may change over time"""
|
||||
global _find_var_name_count
|
||||
|
||||
# Build123d objects have a "label" property, CadQuery Assembly's have "name"
|
||||
for f in ('label', 'name'):
|
||||
if hasattr(obj, f):
|
||||
v = getattr(obj, f)
|
||||
if v != '':
|
||||
return v;
|
||||
|
||||
# Otherwise walk up our stack to see if there's a local variable that points to it
|
||||
obj_shape = get_shape(obj, error=False) or obj
|
||||
for frame in inspect.stack()[avoid_levels:]:
|
||||
for key, value in frame.frame.f_locals.items():
|
||||
if get_shape(value, error=False) is obj_shape:
|
||||
return key
|
||||
_find_var_name_count += 1
|
||||
return 'unknown_var_' + str(_find_var_name_count)
|
||||
|
||||
# Last resort, name it for its type with a disambiguating number
|
||||
global _obj_name_counts
|
||||
t = obj.__class__.__name__
|
||||
_obj_name_counts[t] = 1 if t not in _obj_name_counts else _obj_name_counts[t] + 1
|
||||
return t + str(_obj_name_counts[t])
|
||||
|
||||
|
||||
def sizeof_fmt(num, suffix="B"):
|
||||
|
||||
Reference in New Issue
Block a user