mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 06:21:40 +00:00
Fix issue #1637 Blender ID collision for bim.assign_resource and bim.unassign_resource
This commit is contained in:
@@ -76,9 +76,7 @@ classes = (
|
|||||||
operator.AddTaskColumn,
|
operator.AddTaskColumn,
|
||||||
operator.RemoveTaskColumn,
|
operator.RemoveTaskColumn,
|
||||||
operator.SetTaskSortColumn,
|
operator.SetTaskSortColumn,
|
||||||
operator.EnableAssigningResources,
|
operator.EnableAssigningProcessToResource,
|
||||||
operator.AssignResource,
|
|
||||||
operator.UnassignResource,
|
|
||||||
prop.WorkPlan,
|
prop.WorkPlan,
|
||||||
prop.BIMWorkPlanProperties,
|
prop.BIMWorkPlanProperties,
|
||||||
prop.Task,
|
prop.Task,
|
||||||
|
|||||||
@@ -818,22 +818,44 @@ class AssignProcess(bpy.types.Operator):
|
|||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
task: bpy.props.IntProperty()
|
task: bpy.props.IntProperty()
|
||||||
related_object: bpy.props.StringProperty()
|
related_object: bpy.props.StringProperty()
|
||||||
|
parent_resource: bpy.props.IntProperty()
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
return IfcStore.execute_ifc_operator(self, context)
|
return IfcStore.execute_ifc_operator(self, context)
|
||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
related_objects = (
|
self.file = IfcStore.get_file()
|
||||||
[bpy.data.objects.get(self.related_object)] if self.related_object else context.selected_objects
|
if self.parent_resource:
|
||||||
)
|
resource = ifcopenshell.api.run(
|
||||||
for related_object in related_objects:
|
"resource.add_resource",
|
||||||
self.file = IfcStore.get_file()
|
self.file,
|
||||||
|
**{
|
||||||
|
"parent_resource": self.file.by_id(self.parent_resource),
|
||||||
|
"ifc_class": self.file.by_id(self.parent_resource).is_a(),
|
||||||
|
"name": self.file.by_id(self.parent_resource).Name + ": " + self.file.by_id(self.task).Name,
|
||||||
|
},
|
||||||
|
)
|
||||||
ifcopenshell.api.run(
|
ifcopenshell.api.run(
|
||||||
"sequence.assign_process",
|
"sequence.assign_process",
|
||||||
self.file,
|
self.file,
|
||||||
related_object=self.file.by_id(related_object.BIMObjectProperties.ifc_definition_id),
|
**{
|
||||||
relating_process=self.file.by_id(self.task),
|
"related_object": resource,
|
||||||
|
"relating_process": self.file.by_id(self.task),
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
ResourceData.load(self.file)
|
||||||
|
bpy.ops.bim.load_resources()
|
||||||
|
else:
|
||||||
|
related_objects = (
|
||||||
|
[bpy.data.objects.get(self.related_object)] if self.related_object else context.selected_objects
|
||||||
|
)
|
||||||
|
for related_object in related_objects:
|
||||||
|
ifcopenshell.api.run(
|
||||||
|
"sequence.assign_process",
|
||||||
|
self.file,
|
||||||
|
related_object=self.file.by_id(related_object.BIMObjectProperties.ifc_definition_id),
|
||||||
|
relating_process=self.file.by_id(self.task),
|
||||||
|
)
|
||||||
Data.load(self.file)
|
Data.load(self.file)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
@@ -844,22 +866,38 @@ class UnassignProcess(bpy.types.Operator):
|
|||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
task: bpy.props.IntProperty()
|
task: bpy.props.IntProperty()
|
||||||
related_object: bpy.props.StringProperty()
|
related_object: bpy.props.StringProperty()
|
||||||
|
resource: bpy.props.IntProperty()
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
return IfcStore.execute_ifc_operator(self, context)
|
return IfcStore.execute_ifc_operator(self, context)
|
||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
related_objects = (
|
self.file = IfcStore.get_file()
|
||||||
[bpy.data.objects.get(self.related_object)] if self.related_object else context.selected_objects
|
if self.resource:
|
||||||
)
|
|
||||||
for related_object in related_objects:
|
|
||||||
self.file = IfcStore.get_file()
|
|
||||||
ifcopenshell.api.run(
|
ifcopenshell.api.run(
|
||||||
"sequence.unassign_process",
|
"sequence.unassign_process",
|
||||||
self.file,
|
self.file,
|
||||||
related_object=self.file.by_id(related_object.BIMObjectProperties.ifc_definition_id),
|
related_object=self.file.by_id(self.resource),
|
||||||
relating_process=self.file.by_id(self.task),
|
relating_process=self.file.by_id(self.task),
|
||||||
)
|
)
|
||||||
|
ifcopenshell.api.run(
|
||||||
|
"resource.remove_resource",
|
||||||
|
self.file,
|
||||||
|
resource=self.file.by_id(self.resource),
|
||||||
|
)
|
||||||
|
ResourceData.load(self.file)
|
||||||
|
bpy.ops.bim.load_resources()
|
||||||
|
else:
|
||||||
|
related_objects = (
|
||||||
|
[bpy.data.objects.get(self.related_object)] if self.related_object else context.selected_objects
|
||||||
|
)
|
||||||
|
for related_object in related_objects:
|
||||||
|
ifcopenshell.api.run(
|
||||||
|
"sequence.unassign_process",
|
||||||
|
self.file,
|
||||||
|
related_object=self.file.by_id(related_object.BIMObjectProperties.ifc_definition_id),
|
||||||
|
relating_process=self.file.by_id(self.task),
|
||||||
|
)
|
||||||
Data.load(self.file)
|
Data.load(self.file)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
@@ -1980,8 +2018,8 @@ class SetTaskSortColumn(bpy.types.Operator):
|
|||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
class EnableAssigningResources(bpy.types.Operator):
|
class EnableAssigningProcessToResource(bpy.types.Operator):
|
||||||
bl_idname = "bim.enable_assigning_resources"
|
bl_idname = "bim.enable_assigning_process_to_resources"
|
||||||
bl_label = "Enable Assigning Resources To Tasks"
|
bl_label = "Enable Assigning Resources To Tasks"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
task: bpy.props.IntProperty()
|
task: bpy.props.IntProperty()
|
||||||
@@ -1991,66 +2029,3 @@ class EnableAssigningResources(bpy.types.Operator):
|
|||||||
self.props.active_task_id = self.task
|
self.props.active_task_id = self.task
|
||||||
self.props.editing_task_type = "RESOURCES"
|
self.props.editing_task_type = "RESOURCES"
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
class AssignResource(bpy.types.Operator):
|
|
||||||
bl_idname = "bim.assign_resource"
|
|
||||||
bl_label = "Assign Resource"
|
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
|
||||||
task: bpy.props.IntProperty()
|
|
||||||
parent_resource: bpy.props.IntProperty()
|
|
||||||
|
|
||||||
def execute(self, context):
|
|
||||||
return IfcStore.execute_ifc_operator(self, context)
|
|
||||||
|
|
||||||
def _execute(self, context):
|
|
||||||
self.file = IfcStore.get_file()
|
|
||||||
resource = ifcopenshell.api.run(
|
|
||||||
"resource.add_resource",
|
|
||||||
self.file,
|
|
||||||
**{
|
|
||||||
"parent_resource": self.file.by_id(self.parent_resource),
|
|
||||||
"ifc_class": self.file.by_id(self.parent_resource).is_a(),
|
|
||||||
"name": self.file.by_id(self.parent_resource).Name + ": " + self.file.by_id(self.task).Name,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
ifcopenshell.api.run(
|
|
||||||
"sequence.assign_process",
|
|
||||||
self.file,
|
|
||||||
**{
|
|
||||||
"related_object": resource,
|
|
||||||
"relating_process": self.file.by_id(self.task),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
Data.load(self.file)
|
|
||||||
ResourceData.load(self.file)
|
|
||||||
bpy.ops.bim.load_resources()
|
|
||||||
return {"FINISHED"}
|
|
||||||
|
|
||||||
class UnassignResource(bpy.types.Operator):
|
|
||||||
bl_idname = "bim.unassign_resource"
|
|
||||||
bl_label = "Unassign Resource"
|
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
|
||||||
task: bpy.props.IntProperty()
|
|
||||||
resource: bpy.props.IntProperty()
|
|
||||||
|
|
||||||
def execute(self, context):
|
|
||||||
return IfcStore.execute_ifc_operator(self, context)
|
|
||||||
|
|
||||||
def _execute(self, context):
|
|
||||||
self.file = IfcStore.get_file()
|
|
||||||
ifcopenshell.api.run(
|
|
||||||
"sequence.unassign_process",
|
|
||||||
self.file,
|
|
||||||
related_object=self.file.by_id(self.resource),
|
|
||||||
relating_process=self.file.by_id(self.task),
|
|
||||||
)
|
|
||||||
ifcopenshell.api.run(
|
|
||||||
"resource.remove_resource",
|
|
||||||
self.file,
|
|
||||||
resource=self.file.by_id(self.resource),
|
|
||||||
)
|
|
||||||
Data.load(self.file)
|
|
||||||
ResourceData.load(self.file)
|
|
||||||
bpy.ops.bim.load_resources()
|
|
||||||
return {"FINISHED"}
|
|
||||||
|
|||||||
@@ -293,20 +293,19 @@ class BIM_PT_work_schedules(Panel):
|
|||||||
def draw_editable_task_resource_ui(self):
|
def draw_editable_task_resource_ui(self):
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
row.prop(self.props, "resources", text="")
|
row.prop(self.props, "resources", text="")
|
||||||
op = row.operator("bim.assign_resource", text="", icon="ADD")
|
op = row.operator("bim.assign_process", text="", icon="ADD")
|
||||||
op.parent_resource = int(self.props.resources)
|
if self.props.resources:
|
||||||
op.task = self.props.active_task_id
|
op.parent_resource = int(self.props.resources)
|
||||||
task = Data.tasks[self.props.active_task_id]
|
|
||||||
ResourceData.load(IfcStore.get_file())
|
|
||||||
|
|
||||||
for related_obect_id in task["OperatesOn"]:
|
|
||||||
resource = ResourceData.resources[related_obect_id]
|
|
||||||
row = self.layout.row(align=True)
|
|
||||||
row.label(text=resource["Name"], icon="COMMUNITY")
|
|
||||||
op = row.operator("bim.unassign_resource", text="", icon="X")
|
|
||||||
op.task = self.props.active_task_id
|
op.task = self.props.active_task_id
|
||||||
op.resource = related_obect_id
|
task = Data.tasks[self.props.active_task_id]
|
||||||
|
ResourceData.load(IfcStore.get_file())
|
||||||
|
for related_obect_id in task["OperatesOn"]:
|
||||||
|
resource = ResourceData.resources[related_obect_id]
|
||||||
|
row = self.layout.row(align=True)
|
||||||
|
row.label(text=resource["Name"], icon="COMMUNITY")
|
||||||
|
op = row.operator("bim.unassign_process", text="", icon="X")
|
||||||
|
op.task = self.props.active_task_id
|
||||||
|
op.resource = related_obect_id
|
||||||
|
|
||||||
class BIM_UL_task_columns(UIList):
|
class BIM_UL_task_columns(UIList):
|
||||||
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
|
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
|
||||||
@@ -436,7 +435,7 @@ class BIM_UL_tasks(UIList):
|
|||||||
row.operator(
|
row.operator(
|
||||||
"bim.enable_editing_task_calendar", text="", icon="VIEW_ORTHO"
|
"bim.enable_editing_task_calendar", text="", icon="VIEW_ORTHO"
|
||||||
).task = item.ifc_definition_id
|
).task = item.ifc_definition_id
|
||||||
row.operator("bim.enable_assigning_resources", text="", icon="COMMUNITY").task = item.ifc_definition_id
|
row.operator("bim.enable_assigning_process_to_resources", text="", icon="COMMUNITY").task = item.ifc_definition_id
|
||||||
row.operator("bim.enable_editing_task", text="", icon="GREASEPENCIL").task = item.ifc_definition_id
|
row.operator("bim.enable_editing_task", text="", icon="GREASEPENCIL").task = item.ifc_definition_id
|
||||||
row.operator("bim.add_task", text="", icon="ADD").task = item.ifc_definition_id
|
row.operator("bim.add_task", text="", icon="ADD").task = item.ifc_definition_id
|
||||||
row.operator("bim.remove_task", text="", icon="X").task = item.ifc_definition_id
|
row.operator("bim.remove_task", text="", icon="X").task = item.ifc_definition_id
|
||||||
|
|||||||
Reference in New Issue
Block a user