mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Removes the style from all selected objects
This commit is contained in:
@@ -1909,7 +1909,7 @@ class RemoveRepresentationItem(bpy.types.Operator, tool.Ifc.Operator):
|
||||
bpy.ops.bim.enable_editing_representation_items()
|
||||
|
||||
|
||||
def poll_editing_representaiton_item_style(cls, context):
|
||||
def poll_editing_representation_item_style(cls, context):
|
||||
if not (obj := getattr(context, "active_object", None)):
|
||||
return False
|
||||
props = obj.BIMGeometryProperties
|
||||
@@ -1944,7 +1944,7 @@ class EnableEditingRepresentationItemStyle(bpy.types.Operator, tool.Ifc.Operator
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return poll_editing_representaiton_item_style(cls, context)
|
||||
return poll_editing_representation_item_style(cls, context)
|
||||
|
||||
def _execute(self, context):
|
||||
props = context.active_object.BIMGeometryProperties
|
||||
@@ -1994,30 +1994,76 @@ class DisableEditingRepresentationItemStyle(bpy.types.Operator, tool.Ifc.Operato
|
||||
class UnassignRepresentationItemStyle(bpy.types.Operator, tool.Ifc.Operator):
|
||||
bl_idname = "bim.unassign_representation_item_style"
|
||||
bl_label = "Unassign Representation Item Style"
|
||||
bl_description = "Will remove the style from all selected objects"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return poll_editing_representaiton_item_style(cls, context)
|
||||
return poll_editing_representation_item_style(cls, context)
|
||||
|
||||
def _execute(self, context):
|
||||
obj = context.active_object
|
||||
props = obj.BIMGeometryProperties
|
||||
props.is_editing_item_style = False
|
||||
active_obj = context.active_object
|
||||
active_props = active_obj.BIMGeometryProperties
|
||||
active_props.is_editing_item_style = False
|
||||
|
||||
# get active representation item
|
||||
representation_item_id = props.items[props.active_item_index].ifc_definition_id
|
||||
representation_item = tool.Ifc.get_entity_by_id(representation_item_id)
|
||||
if not representation_item:
|
||||
self.report({"ERROR"}, f"Couldn't find representation item by id {representation_item_id}.")
|
||||
# Get active representation item
|
||||
active_representation_item_id = active_props.items[active_props.active_item_index].ifc_definition_id
|
||||
active_representation_item = tool.Ifc.get_entity_by_id(active_representation_item_id)
|
||||
if not active_representation_item:
|
||||
self.report({"ERROR"}, f"Couldn't find representation item by id {active_representation_item_id}.")
|
||||
return {"CANCELLED"}
|
||||
|
||||
tool.Style.assign_style_to_representation_item(representation_item, None)
|
||||
tool.Geometry.reload_representation(obj)
|
||||
# reload items ui
|
||||
# Retrieve styles applied to the active representation item
|
||||
active_styles = set()
|
||||
if hasattr(active_representation_item, 'StyledByItem'):
|
||||
for styled_by_item in active_representation_item.StyledByItem:
|
||||
if hasattr(styled_by_item, 'Styles'):
|
||||
active_styles.update(styled_by_item.Styles)
|
||||
|
||||
if not active_styles:
|
||||
self.report({"ERROR"}, "Couldn't find any styles associated with the active representation item.")
|
||||
return {"CANCELLED"}
|
||||
|
||||
# Unassign matching styles from the active object itself
|
||||
for style in active_styles:
|
||||
tool.Style.assign_style_to_representation_item(active_representation_item, None)
|
||||
tool.Geometry.reload_representation(active_obj)
|
||||
break # No need to check further if one matching style is found
|
||||
|
||||
# Iterate over selected objects and unassign matching styles
|
||||
for obj in context.selected_objects:
|
||||
if obj == active_obj:
|
||||
continue # Skip the active object itself
|
||||
|
||||
# Get the IFC entity directly from the object
|
||||
element = tool.Ifc.get_entity(obj)
|
||||
if not element:
|
||||
continue # Skip if no IFC entity is found
|
||||
|
||||
representation_item_id = element.Representation.Representations[0].Items[0].id()
|
||||
representation_item = tool.Ifc.get_entity_by_id(representation_item_id)
|
||||
|
||||
if representation_item:
|
||||
# Retrieve styles for the current representation item
|
||||
styles = set()
|
||||
if hasattr(representation_item, 'StyledByItem'):
|
||||
for styled_by_item in representation_item.StyledByItem:
|
||||
if hasattr(styled_by_item, 'Styles'):
|
||||
styles.update(styled_by_item.Styles)
|
||||
|
||||
# Unassign matching styles
|
||||
for style in styles:
|
||||
if style in active_styles:
|
||||
tool.Style.assign_style_to_representation_item(representation_item, None)
|
||||
tool.Geometry.reload_representation(obj)
|
||||
break # No need to check further if one matching style is found
|
||||
|
||||
# Reload UI items
|
||||
bpy.ops.bim.disable_editing_representation_items()
|
||||
bpy.ops.bim.enable_editing_representation_items()
|
||||
|
||||
|
||||
|
||||
|
||||
class EnableEditingRepresentationItemShapeAspect(bpy.types.Operator, tool.Ifc.Operator):
|
||||
bl_idname = "bim.enable_editing_representation_item_shape_aspect"
|
||||
|
||||
Reference in New Issue
Block a user