mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 13:46:54 +00:00
Save last active context editing doors/windows, solves #3735
previously - https://imgur.com/a/gri6zMk now - https://imgur.com/a/GIwZP6c
This commit is contained in:
@@ -68,6 +68,14 @@ def update_door_modifier_representation(context, obj):
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_active_representation_context(obj):
|
||||||
|
active_representation = tool.Geometry.get_active_representation(obj)
|
||||||
|
if active_representation:
|
||||||
|
return active_representation.ContextOfItems
|
||||||
|
return ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
|
||||||
|
|
||||||
|
previously_active_context = get_active_representation_context(obj)
|
||||||
|
|
||||||
# ELEVATION_VIEW representation
|
# ELEVATION_VIEW representation
|
||||||
profile = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Profile", "ELEVATION_VIEW")
|
profile = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Profile", "ELEVATION_VIEW")
|
||||||
if profile:
|
if profile:
|
||||||
@@ -78,6 +86,7 @@ def update_door_modifier_representation(context, obj):
|
|||||||
tool.Model.replace_object_ifc_representation(profile, obj, elevation_representation)
|
tool.Model.replace_object_ifc_representation(profile, obj, elevation_representation)
|
||||||
|
|
||||||
# MODEL_VIEW representation
|
# MODEL_VIEW representation
|
||||||
|
# (Model/Body defined only BEFORE Plan/Body to prevent #2744)
|
||||||
body = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
|
body = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
|
||||||
representation_data["context"] = body
|
representation_data["context"] = body
|
||||||
model_representation = ifcopenshell.api.run("geometry.add_door_representation", ifc_file, **representation_data)
|
model_representation = ifcopenshell.api.run("geometry.add_door_representation", ifc_file, **representation_data)
|
||||||
@@ -113,14 +122,34 @@ def update_door_modifier_representation(context, obj):
|
|||||||
)
|
)
|
||||||
tool.Model.replace_object_ifc_representation(plan_annotation, obj, plan_representation)
|
tool.Model.replace_object_ifc_representation(plan_annotation, obj, plan_representation)
|
||||||
|
|
||||||
if plan_body or plan_annotation:
|
# adding switch representation at the end instead of changing order of representations
|
||||||
# adding switch representation at the end instead of changing order of representations
|
# to prevent #2744
|
||||||
# to prevent #2744
|
if get_active_representation_context(obj) != previously_active_context:
|
||||||
core.switch_representation(
|
previously_active_representation = ifcopenshell.util.representation.get_representation(
|
||||||
|
element,
|
||||||
|
previously_active_context.ContextType,
|
||||||
|
previously_active_context.ContextIdentifier,
|
||||||
|
previously_active_context.TargetView,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not previously_active_representation:
|
||||||
|
# we assume there is no representation because it was
|
||||||
|
# Plan/Annotation/PLAN_VIEW
|
||||||
|
previously_active_context = ifcopenshell.util.representation.get_context(
|
||||||
|
ifc_file, "Plan", "Body", "PLAN_VIEW"
|
||||||
|
)
|
||||||
|
previously_active_representation = ifcopenshell.util.representation.get_representation(
|
||||||
|
element,
|
||||||
|
previously_active_context.ContextType,
|
||||||
|
previously_active_context.ContextIdentifier,
|
||||||
|
previously_active_context.TargetView,
|
||||||
|
)
|
||||||
|
|
||||||
|
blenderbim.core.geometry.switch_representation(
|
||||||
tool.Ifc,
|
tool.Ifc,
|
||||||
tool.Geometry,
|
tool.Geometry,
|
||||||
obj=obj,
|
obj=obj,
|
||||||
representation=model_representation,
|
representation=previously_active_representation,
|
||||||
should_reload=True,
|
should_reload=True,
|
||||||
is_global=True,
|
is_global=True,
|
||||||
should_sync_changes_first=True,
|
should_sync_changes_first=True,
|
||||||
|
|||||||
@@ -116,6 +116,14 @@ def update_window_modifier_representation(context, obj):
|
|||||||
}
|
}
|
||||||
representation_data["panel_properties"].append(panel_data)
|
representation_data["panel_properties"].append(panel_data)
|
||||||
|
|
||||||
|
def get_active_representation_context(obj):
|
||||||
|
active_representation = tool.Geometry.get_active_representation(obj)
|
||||||
|
if active_representation:
|
||||||
|
return active_representation.ContextOfItems
|
||||||
|
return ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
|
||||||
|
|
||||||
|
previously_active_context = get_active_representation_context(obj)
|
||||||
|
|
||||||
# ELEVATION_VIEW representation
|
# ELEVATION_VIEW representation
|
||||||
profile = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Profile", "ELEVATION_VIEW")
|
profile = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Profile", "ELEVATION_VIEW")
|
||||||
if profile:
|
if profile:
|
||||||
@@ -126,6 +134,7 @@ def update_window_modifier_representation(context, obj):
|
|||||||
tool.Model.replace_object_ifc_representation(profile, obj, elevation_representation)
|
tool.Model.replace_object_ifc_representation(profile, obj, elevation_representation)
|
||||||
|
|
||||||
# MODEL_VIEW representation
|
# MODEL_VIEW representation
|
||||||
|
# (Model/Body defined only BEFORE Plan/Body to prevent #2744)
|
||||||
body = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
|
body = ifcopenshell.util.representation.get_context(ifc_file, "Model", "Body", "MODEL_VIEW")
|
||||||
representation_data["context"] = body
|
representation_data["context"] = body
|
||||||
model_representation = ifcopenshell.api.run("geometry.add_window_representation", ifc_file, **representation_data)
|
model_representation = ifcopenshell.api.run("geometry.add_window_representation", ifc_file, **representation_data)
|
||||||
@@ -140,13 +149,20 @@ def update_window_modifier_representation(context, obj):
|
|||||||
)
|
)
|
||||||
tool.Model.replace_object_ifc_representation(plan, obj, plan_representation)
|
tool.Model.replace_object_ifc_representation(plan, obj, plan_representation)
|
||||||
|
|
||||||
# adding switch representation at the end instead of changing order of representations
|
# adding switch representation at the end instead of changing order of representations
|
||||||
# to prevent #2744
|
# to prevent #2744
|
||||||
|
if get_active_representation_context(obj) != previously_active_context:
|
||||||
|
previously_active_representation = ifcopenshell.util.representation.get_representation(
|
||||||
|
element,
|
||||||
|
previously_active_context.ContextType,
|
||||||
|
previously_active_context.ContextIdentifier,
|
||||||
|
previously_active_context.TargetView,
|
||||||
|
)
|
||||||
blenderbim.core.geometry.switch_representation(
|
blenderbim.core.geometry.switch_representation(
|
||||||
tool.Ifc,
|
tool.Ifc,
|
||||||
tool.Geometry,
|
tool.Geometry,
|
||||||
obj=obj,
|
obj=obj,
|
||||||
representation=model_representation,
|
representation=previously_active_representation,
|
||||||
should_reload=True,
|
should_reload=True,
|
||||||
is_global=True,
|
is_global=True,
|
||||||
should_sync_changes_first=True,
|
should_sync_changes_first=True,
|
||||||
|
|||||||
Reference in New Issue
Block a user