mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 17:57:02 +00:00
See #5972. You can now delete boolean operands in item editing mode.
This commit is contained in:
@@ -1261,12 +1261,28 @@ class Geometry(bonsai.core.tool.Geometry):
|
|||||||
[consider_inverses.append(colour := t) for t in getattr(representation_item, "HasColours", [])]
|
[consider_inverses.append(colour := t) for t in getattr(representation_item, "HasColours", [])]
|
||||||
[consider_inverses.append(texture := t) for t in getattr(representation_item, "HasTextures", [])]
|
[consider_inverses.append(texture := t) for t in getattr(representation_item, "HasTextures", [])]
|
||||||
|
|
||||||
|
representation = None
|
||||||
|
boolean_results_to_remove = set()
|
||||||
for inverse in ifc_file.get_inverse(representation_item):
|
for inverse in ifc_file.get_inverse(representation_item):
|
||||||
if inverse.is_a("IfcShapeRepresentation"):
|
if inverse.is_a("IfcShapeRepresentation"):
|
||||||
if inverse.OfShapeAspect:
|
if inverse.OfShapeAspect:
|
||||||
shape_aspects.append(inverse.OfShapeAspect[0])
|
shape_aspects.append(inverse.OfShapeAspect[0])
|
||||||
else:
|
else:
|
||||||
representation = inverse
|
representation = inverse
|
||||||
|
elif inverse.is_a("IfcBooleanResult"):
|
||||||
|
if inverse.SecondOperand == representation_item:
|
||||||
|
other_operand = inverse.FirstOperand
|
||||||
|
else:
|
||||||
|
other_operand = inverse.SecondOperand
|
||||||
|
for inverse2 in ifc_file.get_inverse(inverse):
|
||||||
|
if inverse2.is_a("IfcBooleanResult"):
|
||||||
|
if inverse2.FirstOperand == inverse:
|
||||||
|
inverse2.FirstOperand = other_operand
|
||||||
|
else:
|
||||||
|
inverse2.SecondOperand = other_operand
|
||||||
|
elif inverse2.is_a("IfcShapeRepresentation"):
|
||||||
|
inverse2.Items = tuple(set(inverse2.Items) - {inverse} | {other_operand})
|
||||||
|
boolean_results_to_remove.add(inverse)
|
||||||
|
|
||||||
if styled_item:
|
if styled_item:
|
||||||
consider_inverses.remove(styled_item)
|
consider_inverses.remove(styled_item)
|
||||||
@@ -1284,10 +1300,14 @@ class Geometry(bonsai.core.tool.Geometry):
|
|||||||
for shape_aspect in shape_aspects:
|
for shape_aspect in shape_aspects:
|
||||||
cls.remove_representation_items_from_shape_aspect([representation_item], shape_aspect)
|
cls.remove_representation_items_from_shape_aspect([representation_item], shape_aspect)
|
||||||
|
|
||||||
representation.Items = tuple(set(representation.Items) - {representation_item})
|
if representation:
|
||||||
|
representation.Items = tuple(set(representation.Items) - {representation_item})
|
||||||
also_consider = list(consider_inverses)
|
also_consider = list(consider_inverses)
|
||||||
ifcopenshell.util.element.remove_deep2(ifc_file, representation_item, also_consider=also_consider)
|
ifcopenshell.util.element.remove_deep2(ifc_file, representation_item, also_consider=also_consider)
|
||||||
|
|
||||||
|
for boolean_result in boolean_results_to_remove:
|
||||||
|
cls.remove_representation_item(boolean_result)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_shape_aspect(
|
def create_shape_aspect(
|
||||||
cls,
|
cls,
|
||||||
|
|||||||
Reference in New Issue
Block a user