mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 20:22:31 +00:00
bim.select_uri_attribute - simplify data_path eval
This commit is contained in:
@@ -125,7 +125,7 @@ def draw_attribute(
|
|||||||
|
|
||||||
if attribute.special_type == "URI":
|
if attribute.special_type == "URI":
|
||||||
op = layout.operator("bim.select_uri_attribute", text="", icon="FILE_FOLDER")
|
op = layout.operator("bim.select_uri_attribute", text="", icon="FILE_FOLDER")
|
||||||
op.data_path = attribute.path_from_id("string_value")
|
op.attribute_data_path = tool.Blender.get_full_data_path(attribute)
|
||||||
elif attribute.special_type in ("DATE", "DATETIME"):
|
elif attribute.special_type in ("DATE", "DATETIME"):
|
||||||
op = layout.operator("bim.datepicker", text="", icon="TIME")
|
op = layout.operator("bim.datepicker", text="", icon="TIME")
|
||||||
op.target_prop = attribute.path_from_id("string_value")
|
op.target_prop = attribute.path_from_id("string_value")
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ def draw_single_property(prop: IfcProperty, layout: bpy.types.UILayout, copy_ope
|
|||||||
)
|
)
|
||||||
if prop.metadata.special_type == "URI":
|
if prop.metadata.special_type == "URI":
|
||||||
op = layout.operator("bim.select_uri_attribute", text="", icon="FILE_FOLDER")
|
op = layout.operator("bim.select_uri_attribute", text="", icon="FILE_FOLDER")
|
||||||
op.data_path = prop.metadata.path_from_id("string_value")
|
op.attribute_data_path = tool.Blender.get_full_data_path(prop.metadata)
|
||||||
if prop.metadata.is_optional:
|
if prop.metadata.is_optional:
|
||||||
layout.prop(prop.metadata, "is_null", icon="RADIOBUT_OFF" if prop.metadata.is_null else "RADIOBUT_ON", text="")
|
layout.prop(prop.metadata, "is_null", icon="RADIOBUT_OFF" if prop.metadata.is_null else "RADIOBUT_ON", text="")
|
||||||
if copy_operator:
|
if copy_operator:
|
||||||
|
|||||||
@@ -156,26 +156,19 @@ class SelectURIAttribute(bpy.types.Operator, ImportHelper):
|
|||||||
bl_label = "Select URI Attribute"
|
bl_label = "Select URI Attribute"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
bl_description = "Select a local file"
|
bl_description = "Select a local file"
|
||||||
data_path: bpy.props.StringProperty(name="Data Path")
|
attribute_data_path: bpy.props.StringProperty(name="Data Path") # pyright: ignore[reportRedeclaration]
|
||||||
use_relative_path: bpy.props.BoolProperty(name="Use Relative Path", default=False)
|
"""Full data path to Attribute."""
|
||||||
|
use_relative_path: bpy.props.BoolProperty( # pyright: ignore[reportRedeclaration]
|
||||||
|
name="Use Relative Path",
|
||||||
|
default=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
attribute_data_path: str
|
||||||
|
use_relative_path: bool
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# data_path contains the latter half of the path to the string_value property
|
attribute: Attribute = eval(self.attribute_data_path)
|
||||||
# I have no idea how to find out the former half, so let's just use brute force.
|
|
||||||
data_path = self.data_path.replace(".string_value", "")
|
|
||||||
attribute = None
|
|
||||||
try:
|
|
||||||
attribute = eval(f"bpy.context.scene.{data_path}")
|
|
||||||
except:
|
|
||||||
try:
|
|
||||||
attribute = eval(f"bpy.context.active_object.{data_path}")
|
|
||||||
except:
|
|
||||||
try:
|
|
||||||
attribute = eval(f"bpy.context.active_object.active_material.{data_path}")
|
|
||||||
except:
|
|
||||||
# Do you know a better way?
|
|
||||||
pass
|
|
||||||
if attribute:
|
|
||||||
attribute.string_value = tool.Ifc.get_uri(self.filepath, use_relative_path=self.use_relative_path)
|
attribute.string_value = tool.Ifc.get_uri(self.filepath, use_relative_path=self.use_relative_path)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user