resources code cleanup

This commit is contained in:
Sigma Dimensions (Yass)
2023-09-24 19:02:35 +01:00
parent b2f95bfa60
commit e40019f3cb
13 changed files with 69 additions and 71 deletions
@@ -49,7 +49,6 @@ classes = (
operator.ExpandResource,
operator.GoToResource,
operator.ImportResources,
operator.LoadResourceProperties,
operator.LoadResources,
operator.RemoveResource,
operator.RemoveResourceQuantity,
@@ -33,19 +33,6 @@ class LoadResources(bpy.types.Operator):
return {"FINISHED"}
class LoadResourceProperties(bpy.types.Operator):
bl_idname = "bim.load_resource_properties"
bl_label = "Load Resource Properties"
bl_options = {"REGISTER", "UNDO"}
resource: bpy.props.IntProperty()
def execute(self, context):
core.load_resource_properties(
tool.Resource, resource=tool.Ifc.get().by_id(self.resource) if self.resource else None
)
return {"FINISHED"}
class AddResource(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.add_resource"
bl_label = "Add Resource"
@@ -81,8 +81,7 @@ def update_active_resource_index(self, context):
def updateResourceUsage(self, context):
props = context.scene.BIMResourceProperties
if not props.is_resource_update_enabled:
if not context.scene.BIMResourceProperties.is_resource_update_enabled:
return
if not self.schedule_usage:
return
@@ -372,6 +372,7 @@ class EditTaskTime(bpy.types.Operator, tool.Ifc.Operator):
core.edit_task_time(
tool.Ifc,
tool.Sequence,
tool.Resource,
task_time=tool.Ifc.get().by_id(context.scene.BIMWorkScheduleProperties.active_task_time_id),
)
@@ -508,7 +509,7 @@ class AssignProcess(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
if self.related_object_type == "RESOURCE":
core.assign_resource(tool.Ifc, tool.Sequence, task=tool.Ifc.get().by_id(self.task))
core.assign_resource(tool.Ifc, tool.Sequence, tool.Resource, task=tool.Ifc.get().by_id(self.task))
elif self.related_object_type == "PRODUCT":
if self.related_object:
core.assign_input_products(
@@ -541,6 +542,7 @@ class UnassignProcess(bpy.types.Operator):
core.unassign_resource(
tool.Ifc,
tool.Sequence,
tool.Resource,
task=tool.Ifc.get().by_id(self.task),
resource=tool.Ifc.get().by_id(self.resource),
)
@@ -329,17 +329,16 @@ def get_saved_color_schemes(self, context):
def updateAssignedResourceName(self, context):
pass
def updateAssignedResourceUsage(self, context):
if not bpy.context.scene.BIMResourceProperties.is_resource_update_enabled:
if not context.scene.BIMResourceProperties.is_resource_update_enabled:
return
if not self.schedule_usage:
return
resource = tool.Ifc.get().by_id(self.ifc_definition_id)
if resource.Usage and resource.Usage.ScheduleUsage == self.schedule_usage:
return
tool.Resource.run_edit_resource_time(resource, attributes={
"ScheduleUsage": self.schedule_usage
})
tool.Resource.run_edit_resource_time(resource, attributes={"ScheduleUsage": self.schedule_usage})
tool.Sequence.load_task_properties()
tool.Resource.load_resource_properties()
tool.Sequence.refresh_task_resources()
@@ -347,6 +346,7 @@ def updateAssignedResourceUsage(self, context):
refresh_sequence_data()
blenderbim.bim.module.pset.data.refresh()
class Task(PropertyGroup):
name: StringProperty(name="Name", update=updateTaskName)
identification: StringProperty(name="Identification", update=updateTaskIdentification)
@@ -727,7 +727,11 @@ class BIM_PT_task_icom(Panel):
if total_task_outputs:
op = row2.operator("bim.unassign_product", icon="REMOVE", text="")
op.task = task.ifc_definition_id
if not context.selected_objects and self.props.active_task_output_index < total_task_outputs:
if (
total_task_outputs
and not context.selected_objects
and self.props.active_task_output_index < total_task_outputs
):
output_id = self.props.task_outputs[self.props.active_task_output_index].ifc_definition_id
op.relating_product = output_id
@@ -770,6 +774,7 @@ class BIM_UL_task_resources(UIList):
row.prop(item, "name", emboss=False, text="")
row.prop(item, "schedule_usage", emboss=False, text="")
class BIM_UL_animation_colors(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
+27 -6
View File
@@ -1,4 +1,4 @@
def add_cost_schedule(ifc, name, predefined_type,object_type):
def add_cost_schedule(ifc, name, predefined_type, object_type):
ifc.run("cost.add_cost_schedule", name=name, predefined_type=predefined_type, object_type=object_type)
@@ -112,70 +112,89 @@ def assign_cost_item_quantity(ifc, cost, cost_item, related_object_type, prop_na
ifc.run("cost.assign_cost_item_quantity", cost_item=cost_item, products=products, prop_name=prop_name)
cost.load_cost_item_quantity_assignments(cost_item, related_object_type=related_object_type)
def load_cost_item_quantities(cost):
cost.load_cost_item_quantities()
def load_cost_item_element_quantities(cost):
cost_item = cost.get_highlighted_cost_item()
cost.load_cost_item_quantity_assignments(cost_item, related_object_type="PRODUCT")
def load_cost_item_task_quantities(cost):
cost_item = cost.get_highlighted_cost_item()
cost.load_cost_item_quantity_assignments(cost_item, related_object_type="PROCESS")
def load_cost_item_resource_quantities(cost):
cost_item = cost.get_highlighted_cost_item()
cost.load_cost_item_quantity_assignments(cost_item, related_object_type="RESOURCE")
def assign_cost_value(ifc, cost_item, cost_rate):
ifc.run("cost.assign_cost_value", cost_item=cost_item, cost_rate=cost_rate)
def load_schedule_of_rates(cost, schedule_of_rates):
cost.load_schedule_of_rates_tree(schedule_of_rates)
def unassign_cost_item_quantity(ifc, cost, cost_item, products):
ifc.run("cost.unassign_cost_item_quantity", cost_item=cost_item, products=products)
cost.load_cost_item_quantities()
def enable_editing_cost_item_quantities(cost, cost_item):
cost.enable_editing_cost_item_quantities(cost_item)
def enable_editing_cost_item_values(cost, cost_item):
cost.enable_editing_cost_item_values(cost_item)
def add_cost_item_quantity(ifc, cost_item, ifc_class):
ifc.run("cost.add_cost_item_quantity", cost_item=cost_item, ifc_class=ifc_class)
def remove_cost_item_quantity(ifc, cost_item, physical_quantity):
ifc.run("cost.remove_cost_item_quantity", cost_item=cost_item, physical_quantity=physical_quantity)
def enable_editing_cost_item_quantity(cost, physical_quantity):
cost.load_cost_item_quantity_attributes(physical_quantity)
cost.enable_editing_cost_item_quantity(physical_quantity)
def disable_editing_cost_item_quantity(cost):
cost.disable_editing_cost_item_quantity()
def edit_cost_item_quantity(ifc, cost, physical_quantity):
attributes = cost.get_cost_item_quantity_attributes()
ifc.run("cost.edit_cost_item_quantity", physical_quantity=physical_quantity, attributes=attributes)
cost.disable_editing_cost_item_quantity()
cost.load_cost_item_quantities()
def add_cost_value(ifc, cost, parent, cost_type, cost_category):
value = ifc.run("cost.add_cost_value", parent=parent)
ifc.run(
"cost.edit_cost_value",
cost_value=value,
attributes=cost.get_attributes_for_cost_value(cost_type, cost_category))
attributes=cost.get_attributes_for_cost_value(cost_type, cost_category),
)
def remove_cost_value(ifc, parent, cost_value):
ifc.run("cost.remove_cost_value", parent=parent, cost_value=cost_value)
def enable_editing_cost_item_value(cost, cost_value):
cost.load_cost_item_value_attributes(cost_value)
cost.enable_editing_cost_item_value(cost_value)
def disable_editing_cost_item_value(cost):
cost.disable_editing_cost_item_value()
@@ -195,7 +214,7 @@ def edit_cost_value(ifc, cost, cost_value):
attributes = cost.get_cost_value_attributes()
ifc.run("cost.edit_cost_value", cost_value=cost_value, attributes=attributes)
cost.disable_editing_cost_item_value()
#cost.load_cost_item_values(cost.get_highlighted_cost_item())
# cost.load_cost_item_values(cost.get_highlighted_cost_item())
def copy_cost_item_values(ifc, cost, source, destination):
@@ -275,11 +294,12 @@ def change_parent_cost_item(ifc, cost, new_parent):
cost_item = cost.get_active_cost_item()
if cost_item and cost.is_root_cost_item(cost_item):
return "Cannot change root cost item"
if cost_item :
if cost_item:
ifc.run("nest.change_nest", item=cost_item, new_parent=new_parent)
cost.disable_editing_cost_item_parent()
cost.load_cost_schedule_tree()
def copy_cost_item(ifc, cost):
cost_item = cost.get_highlighted_cost_item()
if cost_item:
@@ -287,9 +307,10 @@ def copy_cost_item(ifc, cost):
cost.disable_editing_cost_item_parent()
cost.load_cost_schedule_tree()
def add_currency(ifc, cost):
unit = ifc.run("unit.add_monetary_unit")
attributes = cost.get_currency_attributes()
ifc.run("unit.edit_monetary_unit", unit=unit, attributes=attributes)
ifc.run("unit.assign_unit", units=[unit])
return unit
return unit
+10 -12
View File
@@ -21,15 +21,11 @@
def load_resources(resource):
resource.load_resources()
resource.load_resource_properties()
def add_resource(tool_ifc, resource_tool, ifc_class, parent_resource=None):
tool_ifc.run("resource.add_resource", ifc_class=ifc_class, parent_resource=parent_resource)
load_resources(resource_tool)
def load_resource_properties(resource_tool, resource=None):
resource_tool.load_resource_properties()
resource_tool.load_resources()
def disable_editing_resource(resource_tool):
@@ -54,7 +50,7 @@ def edit_resource(ifc, resource_tool, resource):
def remove_resource(ifc, resource_tool, resource=None):
ifc.run("resource.remove_resource", resource=resource)
load_resources(resource_tool)
resource_tool.load_resources()
def enable_editing_resource_time(ifc_tool, resource_tool, resource):
@@ -82,7 +78,7 @@ def calculate_resource_work(ifc, resource_tool, resource):
nested_resources = resource_tool.get_nested_resources(resource)
for nested_resource in nested_resources or []:
ifc.run("resource.calculate_resource_work", resource=nested_resource)
load_resources(resource_tool)
resource_tool.load_resources()
def enable_editing_resource_costs(resource_tool, resource):
@@ -143,17 +139,17 @@ def edit_resource_quantity(resource_tool, ifc, physical_quantity=None):
def import_resources(resource_tool, file_path):
resource_tool.import_resources(file_path)
load_resources(resource_tool)
resource_tool.load_resources()
def expand_resource(resource_tool, resource):
resource_tool.expand_resource(resource)
load_resources(resource_tool)
resource_tool.load_resources()
def contract_resource(resource_tool, resource):
resource_tool.contract_resource(resource)
load_resources(resource_tool)
resource_tool.load_resources()
def assign_resource(ifc, spatial, resource=None, products=None):
@@ -213,9 +209,11 @@ def remove_usage_constraint(ifc, resource_tool, resource, reference_path):
ifc.run("constraint.unassign_constraint", product=resource, constraint=constraint)
ifc.run("constraint.remove_constraint", constraint=constraint)
def go_to_resource(resource_tool, resource):
resource_tool.go_to_resource(resource)
def calculate_resource_usage(ifc, resource_tool, resource):
ifc.run("resource.calculate_resource_usage", resource=resource)
load_resources(resource_tool)
resource_tool.load_resources()
+9 -11
View File
@@ -186,14 +186,14 @@ def enable_editing_task_time(ifc, sequence, task=None):
sequence.enable_editing_task_time(task)
def edit_task_time(ifc, sequence, task_time=None):
def edit_task_time(ifc, sequence, resource, task_time=None):
attributes = sequence.get_task_time_attributes()
# TODO: nasty loop goes on when calendar props are messed up
ifc.run("sequence.edit_task_time", task_time=task_time, attributes=attributes)
task = sequence.get_active_task()
sequence.load_task_properties(task=task)
sequence.disable_editing_task_time()
sequence.load_resources()
resource.load_resource_properties()
def assign_predecessor(ifc, sequence, task=None):
@@ -248,8 +248,8 @@ def unassign_input_products(ifc, sequence, spatial, task=None, products=None):
sequence.load_task_inputs(inputs)
def assign_resource(ifc, sequence, task=None):
resource = sequence.get_selected_resource()
def assign_resource(ifc, sequence, resource_tool, task=None):
resource = resource_tool.get_highlighted_resource()
sub_resource = ifc.run(
"resource.add_resource",
parent_resource=resource,
@@ -257,17 +257,15 @@ def assign_resource(ifc, sequence, task=None):
name="{}/{}".format(resource.Name or "Unnamed", task.Name or ""),
)
ifc.run("sequence.assign_process", relating_process=task, related_object=sub_resource)
resources = sequence.get_task_resources(task)
sequence.load_task_resources(resources)
sequence.load_resources()
sequence.load_task_resources(task)
resource_tool.load_resources()
def unassign_resource(ifc, sequence, task=None, resource=None):
def unassign_resource(ifc, sequence, resource_tool, task=None, resource=None):
ifc.run("sequence.unassign_process", relating_process=task, related_object=resource)
ifc.run("resource.remove_resource", resource=resource)
resources = sequence.get_task_resources(task)
sequence.load_task_resources(resources)
sequence.load_resources()
sequence.load_task_resources(task)
resource_tool.load_resources()
def remove_work_calendar(ifc, work_calendar=None):
+1 -2
View File
@@ -726,7 +726,6 @@ class Sequence:
def get_recurrence_pattern_attributes(cls, recurrence_pattern): pass
def get_recurrence_pattern_times(cls): pass
def get_rel_sequence_attributes(cls): pass
def get_selected_resource(cls): pass
def get_start_date(cls): pass
def get_task_attribute_value(cls, attribute_name): pass
def get_task_attributes(cls): pass
@@ -758,7 +757,7 @@ class Sequence:
def load_task_inputs(cls, inputs): pass
def load_task_outputs(cls, outputs): pass
def load_task_properties(cls, task): pass
def load_task_resources(cls,resources): pass
def load_task_resources(cls, task): pass
def load_task_time_attributes(cls, task_time): pass
def load_task_tree(cls, work_schedule): pass
def load_work_calendar_attributes(cls, work_calendar): pass
-1
View File
@@ -234,7 +234,6 @@ class Cost(blenderbim.core.tool.Cost):
@classmethod
def get_products(cls, related_object_type=None):
props = bpy.context.scene.BIMCostProperties
if related_object_type == "PRODUCT":
products = tool.Spatial.get_selected_products()
elif related_object_type == "PROCESS":
+2 -1
View File
@@ -61,6 +61,7 @@ class Resource(blenderbim.core.tool.Resource):
continue
create_new_resource_li(resource, 0)
cls.load_productivity_data()
cls.load_resource_properties()
props.is_resource_update_enabled = True
props.is_editing = True
@@ -425,7 +426,7 @@ class Resource(blenderbim.core.tool.Resource):
contracted_resources.remove(ancestor)
bpy.context.scene.BIMResourceProperties.contracted_resources = json.dumps(contracted_resources)
cls.load_resources()
cls.load_resource_properties()
resource_props = bpy.context.scene.BIMResourceTreeProperties
expanded_resources = [item.ifc_definition_id for item in resource_props.resources]
+6 -16
View File
@@ -254,14 +254,6 @@ class Sequence(blenderbim.core.tool.Sequence):
return None
return tool.Ifc.get().by_id(bpy.context.scene.BIMWorkScheduleProperties.active_work_schedule_id)
@classmethod
def get_selected_resource(cls):
if bpy.context.scene.BIMResourceTreeProperties.resources:
selected_resource_id = bpy.context.scene.BIMResourceTreeProperties.resources[
bpy.context.scene.BIMResourceProperties.active_resource_index
].ifc_definition_id
return tool.Ifc.get().by_id(selected_resource_id)
@classmethod
def expand_task(cls, task):
props = bpy.context.scene.BIMWorkScheduleProperties
@@ -410,20 +402,16 @@ class Sequence(blenderbim.core.tool.Sequence):
@classmethod
def load_task_resources(cls, task):
resources = cls.get_task_resources(task)
props = bpy.context.scene.BIMWorkScheduleProperties
rprops = bpy.context.scene.BIMResourceProperties
props.task_resources.clear()
bpy.context.scene.BIMResourceProperties.is_resource_update_enabled = False
for resource in resources or []:
rprops.is_resource_update_enabled = False
for resource in cls.get_task_resources(task) or []:
new = props.task_resources.add()
new.ifc_definition_id = resource.id()
new.name = resource.Name or "Unnamed"
new.schedule_usage = resource.Usage.ScheduleUsage or 0 if resource.Usage else 0
bpy.context.scene.BIMResourceProperties.is_resource_update_enabled = True
@classmethod
def load_resources(cls):
blenderbim.core.resource.load_resources(tool.Resource)
rprops.is_resource_update_enabled = True
@classmethod
def get_task_inputs(cls, task):
@@ -449,6 +437,8 @@ class Sequence(blenderbim.core.tool.Sequence):
@classmethod
def get_task_resources(cls, task):
if not task:
return
is_deep = bpy.context.scene.BIMWorkScheduleProperties.show_nested_resources
return ifcopenshell.util.sequence.get_task_resources(task, is_deep)