mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-12 06:32:09 +00:00
Continued grid bugfixing, especially related to export-time syncing.
This commit is contained in:
@@ -98,9 +98,7 @@ class IfcExporter:
|
|||||||
obj = bpy.data.objects.get(obj_name)
|
obj = bpy.data.objects.get(obj_name)
|
||||||
if not obj:
|
if not obj:
|
||||||
continue
|
continue
|
||||||
representation = IfcStore.get_file().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
|
bpy.ops.bim.update_mesh_representation(obj=obj.name)
|
||||||
if representation.RepresentationType == "Tessellation" or representation.RepresentationType == "Brep":
|
|
||||||
bpy.ops.bim.update_mesh_representation(obj=obj.name)
|
|
||||||
IfcStore.edited_objs.clear()
|
IfcStore.edited_objs.clear()
|
||||||
|
|
||||||
def sync_object_placement(self, obj):
|
def sync_object_placement(self, obj):
|
||||||
@@ -136,7 +134,11 @@ class IfcExporter:
|
|||||||
elif element.is_a("IfcContext"):
|
elif element.is_a("IfcContext"):
|
||||||
return
|
return
|
||||||
|
|
||||||
if (element.is_a("IfcElement") and element_collection) or element.is_a("IfcSpatialStructureElement"):
|
if (
|
||||||
|
(element.is_a("IfcElement") and element_collection)
|
||||||
|
or element.is_a("IfcSpatialStructureElement")
|
||||||
|
or element.is_a("IfcGrid")
|
||||||
|
):
|
||||||
try:
|
try:
|
||||||
parent_collection = [c for c in bpy.data.collections if c.children.get(element_collection.name)][0]
|
parent_collection = [c for c in bpy.data.collections if c.children.get(element_collection.name)][0]
|
||||||
except:
|
except:
|
||||||
@@ -144,6 +146,7 @@ class IfcExporter:
|
|||||||
else:
|
else:
|
||||||
parent_collection = obj.users_collection[0]
|
parent_collection = obj.users_collection[0]
|
||||||
|
|
||||||
|
|
||||||
parent_obj = bpy.data.objects.get(parent_collection.name)
|
parent_obj = bpy.data.objects.get(parent_collection.name)
|
||||||
if not parent_obj or not parent_obj.BIMObjectProperties.ifc_definition_id:
|
if not parent_obj or not parent_obj.BIMObjectProperties.ifc_definition_id:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -15,12 +15,15 @@ def mode_callback(obj, data):
|
|||||||
obj.mode != "EDIT"
|
obj.mode != "EDIT"
|
||||||
or not obj.data
|
or not obj.data
|
||||||
or not isinstance(obj.data, bpy.types.Mesh)
|
or not isinstance(obj.data, bpy.types.Mesh)
|
||||||
or not obj.data.BIMMeshProperties.ifc_definition_id
|
or not obj.BIMObjectProperties.ifc_definition_id
|
||||||
or not bpy.context.scene.BIMProjectProperties.is_authoring
|
or not bpy.context.scene.BIMProjectProperties.is_authoring
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
representation = IfcStore.get_file().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
|
if obj.data.BIMMeshProperties.ifc_definition_id:
|
||||||
if representation.RepresentationType == "Tessellation" or representation.RepresentationType == "Brep":
|
representation = IfcStore.get_file().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
|
||||||
|
if representation.RepresentationType == "Tessellation" or representation.RepresentationType == "Brep":
|
||||||
|
IfcStore.edited_objs.add(obj.name)
|
||||||
|
elif IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id).is_a("IfcGridAxis"):
|
||||||
IfcStore.edited_objs.add(obj.name)
|
IfcStore.edited_objs.add(obj.name)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ class AddRepresentation(bpy.types.Operator):
|
|||||||
|
|
||||||
if obj.data:
|
if obj.data:
|
||||||
product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
|
product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
|
||||||
|
|
||||||
context_id = self.context_id or int(bpy.context.scene.BIMProperties.contexts)
|
context_id = self.context_id or int(bpy.context.scene.BIMProperties.contexts)
|
||||||
context_of_items = self.file.by_id(context_id)
|
context_of_items = self.file.by_id(context_id)
|
||||||
|
|
||||||
@@ -356,23 +357,6 @@ class UpdateMeshRepresentation(bpy.types.Operator):
|
|||||||
|
|
||||||
new_representation = ifcopenshell.api.run("geometry.add_representation", self.file, **representation_data)
|
new_representation = ifcopenshell.api.run("geometry.add_representation", self.file, **representation_data)
|
||||||
|
|
||||||
# if product.is_a("IfcWall"):
|
|
||||||
# # Generate axis representation
|
|
||||||
# axis_context_id = get_context_id("Model", "Axis", "MODEL_VIEW")
|
|
||||||
# old_axis = ifcopenshell.util.element.get_representation(product, "Model", "Axis", "MODEL_VIEW")
|
|
||||||
# if (
|
|
||||||
# axis_context_id
|
|
||||||
# and old_axis
|
|
||||||
# and context_of_items.ContextType == "Model"
|
|
||||||
# and context_of_items.ContextIdentifier
|
|
||||||
# and context_of_items.ContextIdentifier == "Body"
|
|
||||||
# ):
|
|
||||||
# has_axis_generator = False
|
|
||||||
# if has_axis_generator:
|
|
||||||
# # TODO, just pseudocode for now
|
|
||||||
# representation_data["geometry"] = axis_generator_function_call
|
|
||||||
# pass
|
|
||||||
|
|
||||||
box_context_id = get_context_id("Model", "Box", "MODEL_VIEW")
|
box_context_id = get_context_id("Model", "Box", "MODEL_VIEW")
|
||||||
old_box = ifcopenshell.util.element.get_representation(product, "Model", "Box", "MODEL_VIEW")
|
old_box = ifcopenshell.util.element.get_representation(product, "Model", "Box", "MODEL_VIEW")
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -15,8 +15,10 @@ class Usecase:
|
|||||||
self.settings[key] = value
|
self.settings[key] = value
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
if self.settings["grid_axis"].AxisCurve:
|
existing_curve = self.settings["grid_axis"].AxisCurve
|
||||||
ifcopenshell.util.element.remove_deep(self.file, self.settings["grid_axis"].AxisCurve)
|
if existing_curve and len(self.file.get_inverse(existing_curve)) == 1:
|
||||||
|
ifcopenshell.util.element.remove_deep(self.file, existing_curve)
|
||||||
|
self.file.remove(existing_curve)
|
||||||
|
|
||||||
self.settings["unit_scale"] = ifcopenshell.util.unit.calculate_unit_scale(self.file)
|
self.settings["unit_scale"] = ifcopenshell.util.unit.calculate_unit_scale(self.file)
|
||||||
grid = [i for i in self.file.get_inverse(self.settings["grid_axis"]) if i.is_a("IfcGrid")][0]
|
grid = [i for i in self.file.get_inverse(self.settings["grid_axis"]) if i.is_a("IfcGrid")][0]
|
||||||
|
|||||||
Reference in New Issue
Block a user