mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 14:31:39 +00:00
Fix #4547. Handle both null inherited predefined types and disable editing predefined types on occurrences which inherit from a type.
This commit is contained in:
@@ -47,10 +47,18 @@ class EnableEditingAttributes(bpy.types.Operator):
|
|||||||
obj = bpy.data.objects.get(self.obj)
|
obj = bpy.data.objects.get(self.obj)
|
||||||
elif self.obj_type == "Material":
|
elif self.obj_type == "Material":
|
||||||
obj = bpy.data.materials.get(self.obj)
|
obj = bpy.data.materials.get(self.obj)
|
||||||
oprops = obj.BIMObjectProperties
|
|
||||||
props = obj.BIMAttributeProperties
|
props = obj.BIMAttributeProperties
|
||||||
props.attributes.clear()
|
props.attributes.clear()
|
||||||
|
|
||||||
|
element = tool.Ifc.get_entity(obj)
|
||||||
|
has_inherited_predefined_type = False
|
||||||
|
if not element.is_a("IfcTypeObject") and (element_type := ifcopenshell.util.element.get_type(element)):
|
||||||
|
# Allow for None due to https://github.com/buildingSMART/IFC4.3.x-development/issues/818
|
||||||
|
has_inherited_predefined_type = ifcopenshell.util.element.get_predefined_type(element_type) not in (
|
||||||
|
"NOTDEFINED",
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
def callback(name, prop, data):
|
def callback(name, prop, data):
|
||||||
if name in ("RefLatitude", "RefLongitude"):
|
if name in ("RefLatitude", "RefLongitude"):
|
||||||
new = props.attributes.add()
|
new = props.attributes.add()
|
||||||
@@ -62,10 +70,11 @@ class EnableEditingAttributes(bpy.types.Operator):
|
|||||||
new.string_value = "" if new.is_null else json.dumps(data[name])
|
new.string_value = "" if new.is_null else json.dumps(data[name])
|
||||||
blenderbim.bim.helper.add_attribute_description(new)
|
blenderbim.bim.helper.add_attribute_description(new)
|
||||||
new.description += " The degrees, minutes and seconds should follow this format : [12,34,56]"
|
new.description += " The degrees, minutes and seconds should follow this format : [12,34,56]"
|
||||||
|
if name in ("PredefinedType", "ObjectType") and has_inherited_predefined_type:
|
||||||
|
props.attributes.remove(len(props.attributes) - 1)
|
||||||
|
return True
|
||||||
|
|
||||||
blenderbim.bim.helper.import_attributes2(
|
blenderbim.bim.helper.import_attributes2(element, props.attributes, callback=callback)
|
||||||
tool.Ifc.get().by_id(oprops.ifc_definition_id), props.attributes, callback=callback
|
|
||||||
)
|
|
||||||
props.is_editing_attributes = True
|
props.is_editing_attributes = True
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|||||||
@@ -169,7 +169,8 @@ class IfcClassData:
|
|||||||
if not element:
|
if not element:
|
||||||
return
|
return
|
||||||
if element_type := ifcopenshell.util.element.get_type(element):
|
if element_type := ifcopenshell.util.element.get_type(element):
|
||||||
return ifcopenshell.util.element.get_predefined_type(element_type) != "NOTDEFINED"
|
# Allow for None due to https://github.com/buildingSMART/IFC4.3.x-development/issues/818
|
||||||
|
return ifcopenshell.util.element.get_predefined_type(element_type) not in ("NOTDEFINED", None)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -64,7 +64,8 @@ class Usecase:
|
|||||||
self.settings["product"].PredefinedType = "USERDEFINED"
|
self.settings["product"].PredefinedType = "USERDEFINED"
|
||||||
elif hasattr(self.settings["product"], "ObjectType"):
|
elif hasattr(self.settings["product"], "ObjectType"):
|
||||||
relating_type = ifcopenshell.util.element.get_type(self.settings["product"])
|
relating_type = ifcopenshell.util.element.get_type(self.settings["product"])
|
||||||
if relating_type and relating_type.PredefinedType != "NOTDEFINED":
|
# Allow for None due to https://github.com/buildingSMART/IFC4.3.x-development/issues/818
|
||||||
|
if relating_type and relating_type.PredefinedType not in ("NOTDEFINED", None):
|
||||||
self.settings["product"].ObjectType = None
|
self.settings["product"].ObjectType = None
|
||||||
self.settings["product"].PredefinedType = None
|
self.settings["product"].PredefinedType = None
|
||||||
elif (
|
elif (
|
||||||
|
|||||||
Reference in New Issue
Block a user