From 599c39140748b4ff9e01ffc10e0581f56ac0c757 Mon Sep 17 00:00:00 2001 From: Sigma Dimensions <79010126+myoualid@users.noreply.github.com> Date: Mon, 26 Dec 2022 22:48:51 +0100 Subject: [PATCH] code clean up for sequence module --- .../blenderbim/bim/module/sequence/helper.py | 22 ++- .../bim/module/sequence/operator.py | 6 +- .../blenderbim/bim/module/sequence/prop.py | 7 +- .../blenderbim/bim/module/sequence/ui.py | 4 +- src/blenderbim/blenderbim/core/sequence.py | 14 +- src/blenderbim/blenderbim/core/tool.py | 130 +++++++++--------- src/blenderbim/blenderbim/tool/sequence.py | 33 +++-- 7 files changed, 120 insertions(+), 96 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/sequence/helper.py b/src/blenderbim/blenderbim/bim/module/sequence/helper.py index 8dbca96b8d..659f10f2d5 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/helper.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/helper.py @@ -65,12 +65,18 @@ def canonicalise_time(time): def get_nested_tasks(task): - return [related_object for rel in task.IsNestedBy for related_object in rel.RelatedObjects if related_object.is_a("IfcTask")] + return [ + related_object + for rel in task.IsNestedBy + for related_object in rel.RelatedObjects + if related_object.is_a("IfcTask") + ] def get_parent_task(task): return task.Nests[0].RelatingObject if task.Nests and task.Nests[0].RelatingObject.is_a("IfcTask") else None + def get_task_work_schedule(task): parent_task = get_parent_task(task) if parent_task: @@ -84,11 +90,13 @@ def get_task_work_schedule(task): print(f"Returning {schedules}") return schedules + def get_all_nested_tasks(task): for nested_task in get_nested_tasks(task): yield nested_task yield from get_all_nested_tasks(nested_task) - + + def get_work_schedule_tasks(work_schedule): tasks = [] for root_task in get_root_tasks(work_schedule): @@ -96,12 +104,15 @@ def get_work_schedule_tasks(work_schedule): tasks.extend(nested_tasks) return tasks + def get_root_tasks(work_schedule): return [obj for rel in work_schedule.Controls for obj in rel.RelatedObjects if obj.is_a("IfcTask")] + def get_root_tasks_ids(work_schedule): return [obj.id() for rel in work_schedule.Controls for obj in rel.RelatedObjects if obj.is_a("IfcTask")] + def guess_date_range(work_schedule): earliest = None latest = None @@ -123,9 +134,11 @@ def guess_date_range(work_schedule): latest = derived_finish return earliest, latest -def get_direct_task_outputs(task): + +def get_direct_task_outputs(task): return [rel.RelatingProduct for rel in task.HasAssignments if rel.is_a("IfcRelAssignsToProduct")] + def get_task_outputs(task, is_deep=False): if not is_deep: return get_direct_task_outputs(task) @@ -133,5 +146,6 @@ def get_task_outputs(task, is_deep=False): nested_tasks = get_all_nested_tasks(task) return [output for nested_task in nested_tasks for output in get_direct_task_outputs(nested_task)] + def has_task_outputs(task): - return len(get_task_outputs(task)) > 0 \ No newline at end of file + return len(get_task_outputs(task)) > 0 diff --git a/src/blenderbim/blenderbim/bim/module/sequence/operator.py b/src/blenderbim/blenderbim/bim/module/sequence/operator.py index 6b70716853..6560c57f71 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/operator.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/operator.py @@ -1020,6 +1020,7 @@ class SelectTaskRelatedProducts(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): core.select_task_outputs(tool.Ifc, tool.Sequence, task=tool.Ifc.get().by_id(self.task)) + class SelectTaskRelatedInputs(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.select_task_related_inputs" bl_label = "Select All Input Products" @@ -1095,6 +1096,7 @@ class GuessDateRange(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): core.guess_date_range(tool.Sequence, work_schedule=tool.Ifc.get().by_id(self.work_schedule)) + class VisualiseWorkScheduleDateRange(bpy.types.Operator): bl_idname = "bim.visualise_work_schedule_date_range" bl_label = "Visualise Work Schedule Date Range" @@ -1461,6 +1463,7 @@ class AddTaskColumn(bpy.types.Operator): core.add_task_column(tool.Sequence, self.column_type, self.name, self.data_type) return {"FINISHED"} + class SetupDefaultTaskColumns(bpy.types.Operator): bl_idname = "bim.setup_default_task_columns" bl_label = "Setip Default Task Columns" @@ -1470,6 +1473,7 @@ class SetupDefaultTaskColumns(bpy.types.Operator): core.setup_default_task_columns(tool.Sequence) return {"FINISHED"} + class RemoveTaskColumn(bpy.types.Operator): bl_idname = "bim.remove_task_column" bl_label = "Remove Task Column" @@ -1520,7 +1524,7 @@ class LoadTaskOutputs(bpy.types.Operator): def execute(self, context): core.load_task_outputs(tool.Sequence) return {"FINISHED"} - + class CalculateTaskDuration(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.calculate_task_duration" diff --git a/src/blenderbim/blenderbim/bim/module/sequence/prop.py b/src/blenderbim/blenderbim/bim/module/sequence/prop.py index 0d4a05ebda..7d7f993fcb 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/prop.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/prop.py @@ -92,9 +92,11 @@ def update_active_task_index(self, context): bpy.ops.bim.load_task_outputs() blenderbim.bim.module.pset.data.refresh() + def update_active_task_outputs(self, context): bpy.ops.bim.load_task_outputs() + def updateTaskName(self, context): props = context.scene.BIMWorkScheduleProperties if not props.is_task_update_enabled or self.name == "Unnamed": @@ -353,9 +355,12 @@ class BIMWorkScheduleProperties(PropertyGroup): active_task_input_index: IntProperty(name="Active Task Input Index") task_outputs: CollectionProperty(name="Task Outputs", type=TaskProduct) active_task_output_index: IntProperty(name="Active Task Output Index") - is_nested_task_outputs: BoolProperty(name="Is Nested Task Outputs", default=False, update=update_active_task_outputs) + is_nested_task_outputs: BoolProperty( + name="Is Nested Task Outputs", default=False, update=update_active_task_outputs + ) active_nested_task_output_index: IntProperty(name="Active Nested Tasks Output Index") + class BIMDuration(PropertyGroup): duration_days: IntProperty(name="Days ") duration_hours: IntProperty(name="Hours") diff --git a/src/blenderbim/blenderbim/bim/module/sequence/ui.py b/src/blenderbim/blenderbim/bim/module/sequence/ui.py index 5624c55215..9836f4d660 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/ui.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/ui.py @@ -442,9 +442,9 @@ class BIM_PT_task_icom(Panel): op.relating_product = output_id op = row2.operator("bim.select_task_related_products", icon="RESTRICT_SELECT_OFF", text="Select") - op.task = task.ifc_definition_id + op.task = task.ifc_definition_id row2 = col.row() - row2.prop(self.props, "is_nested_task_outputs", text="Show Nested") + row2.prop(self.props, "is_nested_task_outputs", text="Show Nested") row2 = col.row() row2.template_list( "BIM_UL_task_outputs", "", self.props, "task_outputs", self.props, "active_task_output_index" diff --git a/src/blenderbim/blenderbim/core/sequence.py b/src/blenderbim/blenderbim/core/sequence.py index e43b4cab12..bb00ec9f7c 100644 --- a/src/blenderbim/blenderbim/core/sequence.py +++ b/src/blenderbim/blenderbim/core/sequence.py @@ -266,8 +266,8 @@ def load_task_outputs(sequence): task = sequence.get_highlighted_task() outputs = sequence.get_task_outputs(task) sequence.load_task_outputs(outputs) - - + + def load_task_inputs(sequence): task = sequence.get_highlighted_task() inputs = sequence.get_task_inputs(task) @@ -425,12 +425,12 @@ def disable_editing_rel_sequence(sequence): def select_task_outputs(ifc, sequence, task=None): outputs = sequence.get_task_outputs(task) - sequence.select_task_products(outputs) + sequence.select_products(outputs) def select_task_inputs(ifc, sequence, task=None): inputs = sequence.get_task_inputs(task) - sequence.select_task_products(inputs) + sequence.select_products(inputs) def recalculate_schedule(ifc, work_schedule=None): @@ -470,9 +470,11 @@ def highlight_product_related_task(sequence, product_type=None): if is_work_schedule_active: sequence.highlight_task(task) + def guess_date_range(sequence, work_schedule=None): start, finish = sequence.guess_date_range(work_schedule) - sequence.update_visualisation_date(start,finish) + sequence.update_visualisation_date(start, finish) + def setup_default_task_columns(sequence): - sequence.setup_default_task_columns() \ No newline at end of file + sequence.setup_default_task_columns() diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 1917af33fa..df161c3606 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -471,81 +471,81 @@ class Selector: @interface class Sequence: - def get_work_plan_attributes(cls): pass - def load_work_plan_attributes(cls, work_plan): pass - def get_direct_nested_tasks(cls, task):pass - def enable_editing_work_plan(cls, work_plan): pass - def disable_editing_work_plan(cls): pass - def enable_editing_work_plan_schedules(cls, work_plan): pass - def get_work_schedule_attributes(cls): pass - def load_work_schedule_attributes(cls, work_schedule): pass - def enable_editing_work_schedule(cls,work_schedule): pass - def disable_editing_work_schedule(cls): pass - def enable_editing_work_schedule_tasks(cls, work_schedule): pass - def create_task_tree(cls, work_schedule): pass - def load_task_properties(cls, task): pass - def get_active_work_schedule_id(cls): pass - def get_selected_resource(cls): pass - def expand_task(cls, task): pass - def expand_all_tasks(cls): pass - def contract_task(cls, task): pass + def add_task_column(cls, column_type, name, data_type): pass def contract_all_tasks(cls): pass - def disable_work_schedule(cls): pass - def disable_selecting_deleted_task(cls): pass - def get_checked_tasks(cls): pass - def get_task_attribute_value(cls, attribute_name): pass - def get_active_task(cls): pass - def get_task_time(cls, task): pass - def load_task_attributes(cls, task): pass - def get_selected_products(cls): pass - def enable_editing_task(cls, task): pass - def get_task_attributes(cls): pass - def load_task_time_attributes(cls, task_time): pass - def enable_editing_task_time(cls, task): pass + def contract_task(cls, task): pass + def create_task_tree(cls, work_schedule): pass + def disable_editing_rel_sequence(cls): pass + def disable_editing_task_time(cls): pass def disable_editing_task(cls): pass - def get_task_time_attributes(cls): pass - def load_task_resources(cls,resources): pass - def load_resources(cls): pass - def get_task_inputs(cls, task): pass - def load_task_inputs(cls, inputs): pass - def load_task_outputs(cls, outputs): pass - def get_highlighted_task(cls): pass - def get_direct_task_outputs(cls, task): pass - def get_task_outputs(cls, task): pass - def get_task_resources(cls, task):pass - def enable_editing_work_calendar_times(cls, work_calendar): pass - def load_work_calendar_attributes(cls, work_calendar): pass - def enable_editing_work_calendar(cls, work_calendar): pass def disable_editing_work_calendar(cls): pass - def get_work_calendar_attributes(cls): pass - def load_work_time_attributes(cls, work_time): pass - def enable_editing_work_time(cls, work_time): pass - def get_work_time_attributes(cls): pass - def get_recurrence_pattern_attributes(cls, recurrence_pattern): pass + def disable_editing_work_plan(cls): pass + def disable_editing_work_schedule(cls): pass def disable_editing_work_time(cls): pass - def get_recurrence_pattern_times(cls): pass - def reset_time_period(cls): pass + def disable_selecting_deleted_task(cls): pass + def disable_work_schedule(cls): pass + def enable_editing_rel_sequence_attributes(cls, rel_sequence): pass + def enable_editing_sequence_lag_time(cls, rel_sequence): pass def enable_editing_task_calendar(cls, task): pass def enable_editing_task_sequence(cls, task): pass - def disable_editing_task_time(cls): pass - def load_rel_sequence_attributes(cls, rel_sequence): pass - def enable_editing_rel_sequence_attributes(cls, rel_sequence): pass - def load_lag_time_attributes(cls, lag_time): pass - def enable_editing_sequence_lag_time(cls, rel_sequence): pass - def get_rel_sequence_attributes(cls): pass - def disable_editing_rel_sequence(cls): pass - def get_lag_time_attributes(cls): pass - def select_task_products(cls, products): pass - def add_task_column(cls, column_type, name, data_type): pass - def remove_task_column(cls, name): pass - def set_task_sort_column(cls, column): pass + def enable_editing_task_time(cls, task): pass + def enable_editing_task(cls, task): pass + def enable_editing_work_calendar_times(cls, work_calendar): pass + def enable_editing_work_calendar(cls, work_calendar): pass + def enable_editing_work_plan_schedules(cls, work_plan): pass + def enable_editing_work_plan(cls, work_plan): pass + def enable_editing_work_schedule_tasks(cls, work_schedule): pass + def enable_editing_work_schedule(cls,work_schedule): pass + def enable_editing_work_time(cls, work_time): pass + def expand_all_tasks(cls): pass + def expand_task(cls, task): pass def find_related_output_tasks(cls, column): pass + def get_active_task(cls): pass + def get_active_work_schedule_id(cls): pass + def get_checked_tasks(cls): pass + def get_direct_nested_tasks(cls, task):pass + def get_direct_task_outputs(cls, task): pass + def get_highlighted_task(cls): pass + def get_lag_time_attributes(cls): pass + 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_products(cls): pass + def get_selected_resource(cls): pass + def get_task_attribute_value(cls, attribute_name): pass + def get_task_attributes(cls): pass + def get_task_inputs(cls, task): pass + def get_task_outputs(cls, task): pass + def get_task_resources(cls, task):pass + def get_task_time_attributes(cls): pass + def get_task_time(cls, task): pass + def get_work_calendar_attributes(cls): pass + def get_work_plan_attributes(cls): pass + def get_work_schedule_attributes(cls): pass def get_work_schedule(cls, task): pass - def is_work_schedule_active(cls, work_schedule): pass + def get_work_time_attributes(cls): pass + def guess_date_range(cls, work_schedule): pass def highlight_task(cls, task): pass + def is_work_schedule_active(cls, work_schedule): pass + def load_lag_time_attributes(cls, lag_time): pass + def load_rel_sequence_attributes(cls, rel_sequence): pass + def load_resources(cls): pass + def load_task_attributes(cls, task): pass + 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_time_attributes(cls, task_time): pass + def load_work_calendar_attributes(cls, work_calendar): pass + def load_work_plan_attributes(cls, work_plan): pass + def load_work_schedule_attributes(cls, work_schedule): pass + def load_work_time_attributes(cls, work_time): pass + def remove_task_column(cls, name): pass + def reset_time_period(cls): pass + def select_products(cls, products): pass + def set_task_sort_column(cls, column): pass def setup_default_task_columns(cls): pass - def guess_date_range(cls, task): pass - def update_visualisation_date(cls, date): pass + def update_visualisation_date(cls, start_date, finish_date): pass @interface diff --git a/src/blenderbim/blenderbim/tool/sequence.py b/src/blenderbim/blenderbim/tool/sequence.py index 11706d7e1d..11ed7d5fd2 100644 --- a/src/blenderbim/blenderbim/tool/sequence.py +++ b/src/blenderbim/blenderbim/tool/sequence.py @@ -447,7 +447,6 @@ class Sequence(blenderbim.core.tool.Sequence): new.ifc_definition_id = output.id() new.name = output.Name or "Unnamed" - @classmethod def get_highlighted_task(cls): props = bpy.context.scene.BIMWorkScheduleProperties @@ -459,7 +458,7 @@ class Sequence(blenderbim.core.tool.Sequence): return helper.get_nested_tasks(task) @classmethod - def get_direct_task_outputs(cls, task): + def get_direct_task_outputs(cls, task): return helper.get_direct_task_outputs(task) @classmethod @@ -687,7 +686,7 @@ class Sequence(blenderbim.core.tool.Sequence): return blenderbim.bim.helper.export_attributes(bpy.context.scene.BIMWorkScheduleProperties.lag_time_attributes) @classmethod - def select_task_products(cls, products): + def select_products(cls, products): for obj in bpy.context.visible_objects: obj.select_set(False) if obj.BIMObjectProperties.ifc_definition_id in [product.id() for product in products]: @@ -703,19 +702,19 @@ class Sequence(blenderbim.core.tool.Sequence): @classmethod def setup_default_task_columns(cls): items = [ - { - "column_type": "IfcTaskTime", - "name": "ScheduleStart", - }, - { - "column_type": "IfcTaskTime", - "name": "ScheduleFinish", - }, - { - "column_type": "IfcTaskTime", - "name": "ScheduleDuration", - }, - ] + { + "column_type": "IfcTaskTime", + "name": "ScheduleStart", + }, + { + "column_type": "IfcTaskTime", + "name": "ScheduleFinish", + }, + { + "column_type": "IfcTaskTime", + "name": "ScheduleDuration", + }, + ] props = bpy.context.scene.BIMWorkScheduleProperties props.columns.clear() @@ -800,4 +799,4 @@ class Sequence(blenderbim.core.tool.Sequence): props = bpy.context.scene.BIMWorkScheduleProperties props.visualisation_start = canonicalise_time(start_date) - props.visualisation_finish = canonicalise_time(finish_date) \ No newline at end of file + props.visualisation_finish = canonicalise_time(finish_date)