mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-11 02:02:22 +00:00
code clean up for sequence module
This commit is contained in:
@@ -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
|
||||
return len(get_task_outputs(task)) > 0
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
sequence.setup_default_task_columns()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
props.visualisation_finish = canonicalise_time(finish_date)
|
||||
|
||||
Reference in New Issue
Block a user