mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Fix bug where you could save geometry with no data (no vertices / splines) which is invalid.
This commit is contained in:
@@ -78,6 +78,9 @@ def register():
|
||||
km = wm.keyconfigs.addon.keymaps.new(name="Mesh", space_type="EMPTY")
|
||||
kmi = km.keymap_items.new("bim.override_mode_set_object", "TAB", "PRESS")
|
||||
|
||||
km = wm.keyconfigs.addon.keymaps.new(name="Curve", space_type="EMPTY")
|
||||
kmi = km.keymap_items.new("bim.override_mode_set_object", "TAB", "PRESS")
|
||||
|
||||
km = wm.keyconfigs.addon.keymaps.new(name="Outliner", space_type="OUTLINER")
|
||||
kmi = km.keymap_items.new("bim.override_paste_buffer", "V", "PRESS", ctrl=True)
|
||||
kmi = km.keymap_items.new("bim.override_outliner_delete", "X", "PRESS")
|
||||
|
||||
@@ -815,10 +815,17 @@ class OverrideModeSetObject(bpy.types.Operator):
|
||||
)
|
||||
|
||||
def draw(self, context):
|
||||
row = self.layout.row(align=True)
|
||||
row.prop(self, "should_save")
|
||||
if self.is_valid:
|
||||
row = self.layout.row()
|
||||
row.prop(self, "should_save")
|
||||
else:
|
||||
row = self.layout.row()
|
||||
row.label(text="No Geometry Found: Object will revert to previous state.")
|
||||
|
||||
def invoke(self, context, event):
|
||||
self.is_valid = True
|
||||
self.should_save = True
|
||||
|
||||
bpy.ops.object.mode_set(mode="EDIT", toggle=True)
|
||||
|
||||
if not tool.Ifc.get():
|
||||
@@ -834,16 +841,19 @@ class OverrideModeSetObject(bpy.types.Operator):
|
||||
continue
|
||||
|
||||
element = tool.Ifc.get_entity(obj)
|
||||
if not element or element.is_a("IfcAnnotation"):
|
||||
if not element:
|
||||
continue
|
||||
|
||||
if obj.data.BIMMeshProperties.ifc_definition_id:
|
||||
if not tool.Geometry.has_geometric_data(obj):
|
||||
self.is_valid = False
|
||||
self.should_save = False
|
||||
representation = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
|
||||
if tool.Geometry.is_meshlike(
|
||||
representation
|
||||
) and obj.data.BIMMeshProperties.mesh_checksum != tool.Geometry.get_mesh_checksum(obj.data):
|
||||
self.edited_objs.append(obj)
|
||||
elif element.HasOpenings:
|
||||
elif getattr(element, "HasOpenings", None):
|
||||
self.unchanged_objs_with_openings.append(obj)
|
||||
|
||||
if self.edited_objs:
|
||||
|
||||
@@ -247,6 +247,16 @@ class Geometry(blenderbim.core.tool.Geometry):
|
||||
def has_data_users(cls, data):
|
||||
return data.users != 0
|
||||
|
||||
@classmethod
|
||||
def has_geometric_data(cls, obj):
|
||||
if not obj.data:
|
||||
return False
|
||||
if isinstance(obj.data, bpy.types.Mesh):
|
||||
return bool(obj.data.vertices)
|
||||
elif isinstance(obj.data, bpy.types.Curve):
|
||||
return bool(obj.data.splines)
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def import_representation(cls, obj, representation, apply_openings=True):
|
||||
logger = logging.getLogger("ImportIFC")
|
||||
|
||||
Reference in New Issue
Block a user