mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-12 02:23:34 +00:00
Implement inherited calendars in the sequencing task tree
This commit is contained in:
@@ -86,9 +86,32 @@ def derive_date(ifc_definition_id, attribute_name, date=None, is_earliest=False,
|
||||
if current_date:
|
||||
return current_date
|
||||
for subtask in task["RelatedObjects"]:
|
||||
current_date = derive_date(
|
||||
subtask, attribute_name, date=date, is_earliest=is_earliest, is_latest=is_latest
|
||||
)
|
||||
current_date = derive_date(subtask, attribute_name, date=date, is_earliest=is_earliest, is_latest=is_latest)
|
||||
if is_earliest:
|
||||
if current_date and (date is None or current_date < date):
|
||||
date = current_date
|
||||
if is_latest:
|
||||
if current_date and (date is None or current_date > date):
|
||||
date = current_date
|
||||
return date
|
||||
|
||||
|
||||
def derive_calendar(ifc_definition_id):
|
||||
task = Data.tasks[ifc_definition_id]
|
||||
if task["HasAssignmentsWorkCalendar"]:
|
||||
return Data.work_calendars[task["HasAssignmentsWorkCalendar"][0]]
|
||||
if task["Nests"]:
|
||||
return derive_calendar(task["Nests"][0])
|
||||
|
||||
|
||||
def derive_duration(ifc_definition_id, attribute_name):
|
||||
task = Data.tasks[ifc_definition_id]
|
||||
if task["TaskTime"]:
|
||||
current_date = Data.task_times[task["TaskTime"]][attribute_name]
|
||||
if current_date:
|
||||
return current_date
|
||||
for subtask in task["RelatedObjects"]:
|
||||
current_date = derive_date(subtask, attribute_name, date=date, is_earliest=is_earliest, is_latest=is_latest)
|
||||
if is_earliest:
|
||||
if current_date and (date is None or current_date < date):
|
||||
date = current_date
|
||||
|
||||
@@ -291,6 +291,14 @@ class LoadTaskProperties(bpy.types.Operator):
|
||||
item.is_successor = self.props.active_task_id in [
|
||||
Data.sequences[r]["RelatingProcess"] for r in task["IsSuccessorFrom"]
|
||||
]
|
||||
|
||||
calendar = helper.derive_calendar(item.ifc_definition_id)
|
||||
if task["HasAssignmentsWorkCalendar"]:
|
||||
item.calendar = calendar["Name"] or "Unnamed"
|
||||
else:
|
||||
item.calendar = ""
|
||||
item.derived_calendar = calendar["Name"] or "Unnamed" if calendar else ""
|
||||
|
||||
if task["TaskTime"]:
|
||||
task_time = Data.task_times[task["TaskTime"]]
|
||||
item.start = self.canonicalise_time(task_time["ScheduleStart"])
|
||||
@@ -309,10 +317,7 @@ class LoadTaskProperties(bpy.types.Operator):
|
||||
item.start = "-"
|
||||
item.finish = "-"
|
||||
item.duration = "-"
|
||||
if task["HasAssignmentsWorkCalendar"]:
|
||||
item.calendar = Data.work_calendars[task["HasAssignmentsWorkCalendar"][0]]["Name"] or "Unnamed"
|
||||
else:
|
||||
item.calendar = ""
|
||||
|
||||
self.props.is_task_update_enabled = True
|
||||
return {"FINISHED"}
|
||||
|
||||
@@ -1069,7 +1074,10 @@ class EditTaskCalendar(bpy.types.Operator):
|
||||
},
|
||||
)
|
||||
Data.load(IfcStore.get_file())
|
||||
bpy.ops.bim.load_task_properties(task=self.task)
|
||||
if Data.tasks[self.task]["RelatedObjects"]:
|
||||
bpy.ops.bim.load_task_properties()
|
||||
else:
|
||||
bpy.ops.bim.load_task_properties(task=self.task)
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
@@ -1090,7 +1098,10 @@ class RemoveTaskCalendar(bpy.types.Operator):
|
||||
},
|
||||
)
|
||||
Data.load(IfcStore.get_file())
|
||||
bpy.ops.bim.load_task_properties(task=self.task)
|
||||
if Data.tasks[self.task]["RelatedObjects"]:
|
||||
bpy.ops.bim.load_task_properties()
|
||||
else:
|
||||
bpy.ops.bim.load_task_properties(task=self.task)
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
|
||||
@@ -156,10 +156,11 @@ class Task(PropertyGroup):
|
||||
duration: StringProperty(name="Duration")
|
||||
start: StringProperty(name="Start", update=updateTaskTimeStart)
|
||||
finish: StringProperty(name="Finish", update=updateTaskTimeFinish)
|
||||
calendar: StringProperty(name="Calendar")
|
||||
derived_start: StringProperty(name="Derived Start")
|
||||
derived_finish: StringProperty(name="Derived Finish")
|
||||
derived_duration: StringProperty(name="Derived Duration")
|
||||
calendar: StringProperty(name="Calendar")
|
||||
derived_calendar: StringProperty(name="Derived Calendar")
|
||||
is_predecessor: BoolProperty(name="Is Predecessor")
|
||||
is_successor: BoolProperty(name="Is Successor")
|
||||
|
||||
|
||||
@@ -338,7 +338,10 @@ class BIM_UL_tasks(UIList):
|
||||
row.prop(item, "duration", emboss=False, text="")
|
||||
|
||||
if props.should_show_calendars:
|
||||
row.label(text=item.calendar)
|
||||
if item.derived_calendar:
|
||||
row.label(text=item.derived_calendar + "*")
|
||||
else:
|
||||
row.label(text=item.calendar or "-")
|
||||
|
||||
if context.active_object:
|
||||
oprops = context.active_object.BIMObjectProperties
|
||||
|
||||
@@ -133,6 +133,7 @@ class Data:
|
||||
data["TaskTime"] = data["TaskTime"].id()
|
||||
for rel in task.IsNestedBy:
|
||||
[data["RelatedObjects"].append(o.id()) for o in rel.RelatedObjects if o.is_a("IfcTask")]
|
||||
data["Nests"] = [r.RelatingObject.id() for r in task.Nests or []]
|
||||
[
|
||||
data["RelatingProducts"].append(r.RelatingProduct.id())
|
||||
for r in task.HasAssignments
|
||||
|
||||
Reference in New Issue
Block a user