mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-26 10:11:46 +00:00
You can now edit parameterised profiles again in the material panel
This commit is contained in:
@@ -32,11 +32,14 @@ classes = (
|
|||||||
operator.CopyMaterial,
|
operator.CopyMaterial,
|
||||||
operator.DisableEditingAssignedMaterial,
|
operator.DisableEditingAssignedMaterial,
|
||||||
operator.DisableEditingMaterialSetItem,
|
operator.DisableEditingMaterialSetItem,
|
||||||
|
operator.DisableEditingMaterialSetItemProfile,
|
||||||
operator.DisableEditingMaterials,
|
operator.DisableEditingMaterials,
|
||||||
operator.EditAssignedMaterial,
|
operator.EditAssignedMaterial,
|
||||||
operator.EditMaterialSetItem,
|
operator.EditMaterialSetItem,
|
||||||
|
operator.EditMaterialSetItemProfile,
|
||||||
operator.EnableEditingAssignedMaterial,
|
operator.EnableEditingAssignedMaterial,
|
||||||
operator.EnableEditingMaterialSetItem,
|
operator.EnableEditingMaterialSetItem,
|
||||||
|
operator.EnableEditingMaterialSetItemProfile,
|
||||||
operator.ExpandMaterialCategory,
|
operator.ExpandMaterialCategory,
|
||||||
operator.LoadMaterials,
|
operator.LoadMaterials,
|
||||||
operator.RemoveConstituent,
|
operator.RemoveConstituent,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import ifcopenshell.util.representation
|
|||||||
import blenderbim.bim.helper
|
import blenderbim.bim.helper
|
||||||
import blenderbim.tool as tool
|
import blenderbim.tool as tool
|
||||||
import blenderbim.core.material as core
|
import blenderbim.core.material as core
|
||||||
|
import blenderbim.bim.module.model.profile as model_profile
|
||||||
from blenderbim.bim.module.material.prop import purge as material_prop_purge
|
from blenderbim.bim.module.material.prop import purge as material_prop_purge
|
||||||
from blenderbim.bim.ifc import IfcStore
|
from blenderbim.bim.ifc import IfcStore
|
||||||
from ifcopenshell.api.material.data import Data
|
from ifcopenshell.api.material.data import Data
|
||||||
@@ -518,6 +519,52 @@ class EditAssignedMaterial(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
bpy.ops.bim.disable_editing_assigned_material(obj=obj.name)
|
bpy.ops.bim.disable_editing_assigned_material(obj=obj.name)
|
||||||
|
|
||||||
|
|
||||||
|
class EnableEditingMaterialSetItemProfile(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.enable_editing_material_set_item_profile"
|
||||||
|
bl_label = "Enable Editing Material Set Item"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
obj: bpy.props.StringProperty()
|
||||||
|
material_set_item: bpy.props.IntProperty()
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
obj = bpy.data.objects.get(self.obj) if self.obj else context.active_object
|
||||||
|
self.props = obj.BIMObjectMaterialProperties
|
||||||
|
self.props.material_set_item_profile_attributes.clear()
|
||||||
|
profile = tool.Ifc.get().by_id(self.material_set_item).Profile
|
||||||
|
blenderbim.bim.helper.import_attributes2(profile, self.props.material_set_item_profile_attributes)
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
class DisableEditingMaterialSetItemProfile(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.disable_editing_material_set_item_profile"
|
||||||
|
bl_label = "Disable Editing Material Set Item"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
obj: bpy.props.StringProperty()
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
obj = bpy.data.objects.get(self.obj) if self.obj else context.active_object
|
||||||
|
self.props = obj.BIMObjectMaterialProperties
|
||||||
|
self.props.material_set_item_profile_attributes.clear()
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
class EditMaterialSetItemProfile(bpy.types.Operator, tool.Ifc.Operator):
|
||||||
|
bl_idname = "bim.edit_material_set_item_profile"
|
||||||
|
bl_label = "Edit Material Set Item Profile"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
obj: bpy.props.StringProperty()
|
||||||
|
material_set_item: bpy.props.IntProperty()
|
||||||
|
|
||||||
|
def _execute(self, context):
|
||||||
|
obj = bpy.data.objects.get(self.obj) if self.obj else context.active_object
|
||||||
|
self.props = obj.BIMObjectMaterialProperties
|
||||||
|
attributes = blenderbim.bim.helper.export_attributes(self.props.material_set_item_profile_attributes)
|
||||||
|
profile = tool.Ifc.get().by_id(self.material_set_item).Profile
|
||||||
|
ifcopenshell.api.run("profile.edit_profile", tool.Ifc.get(), profile=profile, attributes=attributes)
|
||||||
|
self.props.material_set_item_profile_attributes.clear()
|
||||||
|
model_profile.DumbProfileRegenerator().regenerate_from_profile_def(profile)
|
||||||
|
|
||||||
|
|
||||||
class EnableEditingMaterialSetItem(bpy.types.Operator):
|
class EnableEditingMaterialSetItem(bpy.types.Operator):
|
||||||
bl_idname = "bim.enable_editing_material_set_item"
|
bl_idname = "bim.enable_editing_material_set_item"
|
||||||
bl_label = "Enable Editing Material Set Item"
|
bl_label = "Enable Editing Material Set Item"
|
||||||
|
|||||||
@@ -142,6 +142,9 @@ class BIMObjectMaterialProperties(PropertyGroup):
|
|||||||
material_set_attributes: CollectionProperty(name="Material Set Attributes", type=Attribute)
|
material_set_attributes: CollectionProperty(name="Material Set Attributes", type=Attribute)
|
||||||
active_material_set_item_id: IntProperty(name="Active Material Set ID")
|
active_material_set_item_id: IntProperty(name="Active Material Set ID")
|
||||||
material_set_item_attributes: CollectionProperty(name="Material Set Item Attributes", type=Attribute)
|
material_set_item_attributes: CollectionProperty(name="Material Set Item Attributes", type=Attribute)
|
||||||
|
material_set_item_profile_attributes: CollectionProperty(
|
||||||
|
name="Material Set Item Profile Attributes", type=Attribute
|
||||||
|
)
|
||||||
material_set_item_material: EnumProperty(items=get_materials, name="Material")
|
material_set_item_material: EnumProperty(items=get_materials, name="Material")
|
||||||
profile_classes: EnumProperty(items=get_profile_classes, name="Profile Classes")
|
profile_classes: EnumProperty(items=get_profile_classes, name="Profile Classes")
|
||||||
parameterized_profile_classes: EnumProperty(
|
parameterized_profile_classes: EnumProperty(
|
||||||
|
|||||||
@@ -209,13 +209,23 @@ class BIM_PT_object_material(Panel):
|
|||||||
|
|
||||||
total_items = len(ObjectMaterialData.data["set_items"])
|
total_items = len(ObjectMaterialData.data["set_items"])
|
||||||
for index, set_item in enumerate(ObjectMaterialData.data["set_items"]):
|
for index, set_item in enumerate(ObjectMaterialData.data["set_items"]):
|
||||||
if self.props.active_material_set_item_id == set_item["id"]:
|
if len(self.props.material_set_item_profile_attributes):
|
||||||
|
self.draw_editable_set_item_profile_ui(set_item)
|
||||||
|
elif self.props.active_material_set_item_id == set_item["id"]:
|
||||||
self.draw_editable_set_item_ui(set_item)
|
self.draw_editable_set_item_ui(set_item)
|
||||||
else:
|
else:
|
||||||
self.draw_read_only_set_item_ui(
|
self.draw_read_only_set_item_ui(
|
||||||
set_item, index, is_first=index == 0, is_last=index == total_items - 1
|
set_item, index, is_first=index == 0, is_last=index == total_items - 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def draw_editable_set_item_profile_ui(self, set_item):
|
||||||
|
box = self.layout.box()
|
||||||
|
row = box.row(align=True)
|
||||||
|
op = row.operator("bim.edit_material_set_item_profile", icon="CHECKMARK", text="Save Changes")
|
||||||
|
op.material_set_item = set_item["id"]
|
||||||
|
row.operator("bim.disable_editing_material_set_item_profile", icon="CANCEL", text="")
|
||||||
|
draw_attributes(self.props.material_set_item_profile_attributes, box)
|
||||||
|
|
||||||
def draw_editable_set_item_ui(self, set_item):
|
def draw_editable_set_item_ui(self, set_item):
|
||||||
box = self.layout.box()
|
box = self.layout.box()
|
||||||
row = box.row(align=True)
|
row = box.row(align=True)
|
||||||
@@ -254,7 +264,7 @@ class BIM_PT_object_material(Panel):
|
|||||||
setattr(op, "material_set", ObjectMaterialData.data["set"]["id"])
|
setattr(op, "material_set", ObjectMaterialData.data["set"]["id"])
|
||||||
if not self.props.active_material_set_item_id and ObjectMaterialData.data["material_class"] != "IfcMaterialList":
|
if not self.props.active_material_set_item_id and ObjectMaterialData.data["material_class"] != "IfcMaterialList":
|
||||||
if "Profile" in ObjectMaterialData.data["material_class"]:
|
if "Profile" in ObjectMaterialData.data["material_class"]:
|
||||||
op = row.operator("bim.enable_editing_material_set_item", icon="ITALIC", text="")
|
op = row.operator("bim.enable_editing_material_set_item_profile", icon="ITALIC", text="")
|
||||||
op.material_set_item = set_item["id"]
|
op.material_set_item = set_item["id"]
|
||||||
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"]
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ class EditProfile(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
attributes = blenderbim.bim.helper.export_attributes(props.profile_attributes)
|
attributes = blenderbim.bim.helper.export_attributes(props.profile_attributes)
|
||||||
profile = tool.Ifc.get().by_id(props.active_profile_id)
|
profile = tool.Ifc.get().by_id(props.active_profile_id)
|
||||||
ifcopenshell.api.run("profile.edit_profile", tool.Ifc.get(), profile=profile, attributes=attributes)
|
ifcopenshell.api.run("profile.edit_profile", tool.Ifc.get(), profile=profile, attributes=attributes)
|
||||||
|
model_profile.DumbProfileRegenerator().regenerate_from_profile_def(profile)
|
||||||
bpy.ops.bim.load_profiles()
|
bpy.ops.bim.load_profiles()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user