mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 15:07:38 +00:00
Fix bug where assigning a new constituent or profile was borked. Also you can now reorder material lists and constituent set items.
This commit is contained in:
@@ -10,7 +10,7 @@ classes = (
|
|||||||
operator.RemoveConstituent,
|
operator.RemoveConstituent,
|
||||||
operator.AddLayer,
|
operator.AddLayer,
|
||||||
operator.RemoveLayer,
|
operator.RemoveLayer,
|
||||||
operator.ReorderLayer,
|
operator.ReorderMaterialSetItem,
|
||||||
operator.AddListItem,
|
operator.AddListItem,
|
||||||
operator.RemoveListItem,
|
operator.RemoveListItem,
|
||||||
operator.EnableEditingAssignedMaterial,
|
operator.EnableEditingAssignedMaterial,
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ class Usecase:
|
|||||||
self.assign_ifc_material()
|
self.assign_ifc_material()
|
||||||
elif self.settings["type"] == "IfcMaterialConstituentSet":
|
elif self.settings["type"] == "IfcMaterialConstituentSet":
|
||||||
material_set = self.file.create_entity(self.settings["type"])
|
material_set = self.file.create_entity(self.settings["type"])
|
||||||
material_set.MaterialConstituents = [self.settings["material"]]
|
|
||||||
self.create_material_association(material_set)
|
self.create_material_association(material_set)
|
||||||
elif self.settings["type"] == "IfcMaterialLayerSet":
|
elif self.settings["type"] == "IfcMaterialLayerSet":
|
||||||
material_set = self.file.create_entity(self.settings["type"])
|
material_set = self.file.create_entity(self.settings["type"])
|
||||||
@@ -24,7 +23,6 @@ class Usecase:
|
|||||||
self.create_material_association(material_set_usage)
|
self.create_material_association(material_set_usage)
|
||||||
elif self.settings["type"] == "IfcMaterialProfileSet":
|
elif self.settings["type"] == "IfcMaterialProfileSet":
|
||||||
material_set = self.file.create_entity(self.settings["type"])
|
material_set = self.file.create_entity(self.settings["type"])
|
||||||
material_set.MaterialProfiles = [self.settings["material"]]
|
|
||||||
self.create_material_association(material_set)
|
self.create_material_association(material_set)
|
||||||
elif self.settings["type"] == "IfcMaterialList":
|
elif self.settings["type"] == "IfcMaterialList":
|
||||||
material_set = self.file.create_entity(self.settings["type"])
|
material_set = self.file.create_entity(self.settings["type"])
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import blenderbim.bim.module.material.remove_constituent as remove_constituent
|
|||||||
import blenderbim.bim.module.material.add_layer as add_layer
|
import blenderbim.bim.module.material.add_layer as add_layer
|
||||||
import blenderbim.bim.module.material.edit_layer as edit_layer
|
import blenderbim.bim.module.material.edit_layer as edit_layer
|
||||||
import blenderbim.bim.module.material.remove_layer as remove_layer
|
import blenderbim.bim.module.material.remove_layer as remove_layer
|
||||||
import blenderbim.bim.module.material.reorder_layer as reorder_layer
|
import blenderbim.bim.module.material.reorder_set_item as reorder_set_item
|
||||||
import blenderbim.bim.module.material.add_list_item as add_list_item
|
import blenderbim.bim.module.material.add_list_item as add_list_item
|
||||||
import blenderbim.bim.module.material.remove_list_item as remove_list_item
|
import blenderbim.bim.module.material.remove_list_item as remove_list_item
|
||||||
import blenderbim.bim.module.material.edit_assigned_material as edit_assigned_material
|
import blenderbim.bim.module.material.edit_assigned_material as edit_assigned_material
|
||||||
@@ -138,26 +138,34 @@ class AddLayer(bpy.types.Operator):
|
|||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
class ReorderLayer(bpy.types.Operator):
|
class ReorderMaterialSetItem(bpy.types.Operator):
|
||||||
bl_idname = "bim.reorder_layer"
|
bl_idname = "bim.reorder_material_set_item"
|
||||||
bl_label = "Reorder Layer"
|
bl_label = "Reorder Material Set Item"
|
||||||
obj: bpy.props.StringProperty()
|
obj: bpy.props.StringProperty()
|
||||||
old_index: bpy.props.IntProperty()
|
old_index: bpy.props.IntProperty()
|
||||||
new_index: bpy.props.IntProperty()
|
new_index: bpy.props.IntProperty()
|
||||||
layer_set: bpy.props.IntProperty()
|
material_set: bpy.props.IntProperty()
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
obj = bpy.data.objects.get(self.obj) if self.obj else bpy.context.active_object
|
obj = bpy.data.objects.get(self.obj) if self.obj else bpy.context.active_object
|
||||||
self.file = IfcStore.get_file()
|
self.file = IfcStore.get_file()
|
||||||
reorder_layer.Usecase(
|
material_set = self.file.by_id(self.material_set)
|
||||||
|
reorder_set_item.Usecase(
|
||||||
self.file,
|
self.file,
|
||||||
{
|
{
|
||||||
"layer_set": self.file.by_id(self.layer_set),
|
"material_set": material_set,
|
||||||
"old_index": self.old_index,
|
"old_index": self.old_index,
|
||||||
"new_index": self.new_index,
|
"new_index": self.new_index,
|
||||||
},
|
},
|
||||||
).execute()
|
).execute()
|
||||||
Data.load_layers()
|
if material_set.is_a("IfcMaterialConstituentSet"):
|
||||||
|
Data.load_constituents()
|
||||||
|
elif material_set.is_a("IfcMaterialLayerSet"):
|
||||||
|
Data.load_layers()
|
||||||
|
elif material_set.is_a("IfcMaterialProfileSet"):
|
||||||
|
Data.load_profiles()
|
||||||
|
elif material_set.is_a("IfcMaterialList"):
|
||||||
|
Data.load_lists()
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
class Usecase:
|
|
||||||
def __init__(self, file, settings=None):
|
|
||||||
self.file = file
|
|
||||||
self.settings = {"layer_set": None, "old_index": 0, "new_index": 0}
|
|
||||||
for key, value in settings.items():
|
|
||||||
self.settings[key] = value
|
|
||||||
|
|
||||||
def execute(self):
|
|
||||||
layers = list(self.settings["layer_set"].MaterialLayers or [])
|
|
||||||
layers.insert(self.settings["new_index"], layers.pop(self.settings["old_index"]))
|
|
||||||
self.settings["layer_set"].MaterialLayers = layers
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
class Usecase:
|
||||||
|
def __init__(self, file, settings=None):
|
||||||
|
self.file = file
|
||||||
|
self.settings = {"material_set": None, "old_index": 0, "new_index": 0}
|
||||||
|
for key, value in settings.items():
|
||||||
|
self.settings[key] = value
|
||||||
|
|
||||||
|
def execute(self):
|
||||||
|
if self.settings["material_set"].is_a("IfcMaterialConstituentSet"):
|
||||||
|
set_name = "MaterialConstituents"
|
||||||
|
elif self.settings["material_set"].is_a("IfcMaterialLayerSet"):
|
||||||
|
set_name = "MaterialLayers"
|
||||||
|
elif self.settings["material_set"].is_a("IfcMaterialProfileSet"):
|
||||||
|
set_name = "MaterialProfiles"
|
||||||
|
elif self.settings["material_set"].is_a("IfcMaterialList"):
|
||||||
|
set_name = "Materials"
|
||||||
|
items = list(getattr(self.settings["material_set"], set_name) or [])
|
||||||
|
items.insert(self.settings["new_index"], items.pop(self.settings["old_index"]))
|
||||||
|
setattr(self.settings["material_set"], set_name, items)
|
||||||
@@ -12,7 +12,7 @@ class BIM_PT_material(Panel):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
return IfcStore.get_file()
|
return IfcStore.get_file() and context.active_object and context.active_object.active_material
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
row = self.layout.row()
|
row = self.layout.row()
|
||||||
@@ -185,15 +185,15 @@ class BIM_PT_object_material(Panel):
|
|||||||
row.label(text=Data.materials[item["Material"]]["Name"], icon="MATERIAL")
|
row.label(text=Data.materials[item["Material"]]["Name"], icon="MATERIAL")
|
||||||
|
|
||||||
if not is_first:
|
if not is_first:
|
||||||
op = row.operator(f"bim.reorder_{self.set_item_name}", icon="TRIA_UP", text="")
|
op = row.operator(f"bim.reorder_material_set_item", icon="TRIA_UP", text="")
|
||||||
op.old_index = index
|
op.old_index = index
|
||||||
op.new_index = index - 1
|
op.new_index = index - 1
|
||||||
setattr(op, f"{self.set_item_name}_set", self.material_set_id)
|
setattr(op, "material_set", self.material_set_id)
|
||||||
if not is_last:
|
if not is_last:
|
||||||
op = row.operator(f"bim.reorder_{self.set_item_name}", icon="TRIA_DOWN", text="")
|
op = row.operator(f"bim.reorder_material_set_item", icon="TRIA_DOWN", text="")
|
||||||
op.old_index = index
|
op.old_index = index
|
||||||
op.new_index = index + 1
|
op.new_index = index + 1
|
||||||
setattr(op, f"{self.set_item_name}_set", self.material_set_id)
|
setattr(op, "material_set", self.material_set_id)
|
||||||
if not self.props.active_material_set_item_id and self.product_data["type"] != "IfcMaterialList":
|
if not self.props.active_material_set_item_id and self.product_data["type"] != "IfcMaterialList":
|
||||||
op = row.operator("bim.enable_editing_material_set_item", icon="GREASEPENCIL", text="")
|
op = row.operator("bim.enable_editing_material_set_item", icon="GREASEPENCIL", text="")
|
||||||
op.material_set_item = set_item_id
|
op.material_set_item = set_item_id
|
||||||
|
|||||||
@@ -175,6 +175,8 @@ class BIM_PT_material_psets(Panel):
|
|||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
if not context.active_object:
|
if not context.active_object:
|
||||||
return False
|
return False
|
||||||
|
if not context.active_object.active_material:
|
||||||
|
return False
|
||||||
props = context.active_object.active_material.BIMObjectProperties
|
props = context.active_object.active_material.BIMObjectProperties
|
||||||
if not props.ifc_definition_id:
|
if not props.ifc_definition_id:
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user