mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-27 18:57:17 +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:
|
if current_date:
|
||||||
return current_date
|
return current_date
|
||||||
for subtask in task["RelatedObjects"]:
|
for subtask in task["RelatedObjects"]:
|
||||||
current_date = derive_date(
|
current_date = derive_date(subtask, attribute_name, date=date, is_earliest=is_earliest, is_latest=is_latest)
|
||||||
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 is_earliest:
|
||||||
if current_date and (date is None or current_date < date):
|
if current_date and (date is None or current_date < date):
|
||||||
date = current_date
|
date = current_date
|
||||||
|
|||||||
@@ -291,6 +291,14 @@ class LoadTaskProperties(bpy.types.Operator):
|
|||||||
item.is_successor = self.props.active_task_id in [
|
item.is_successor = self.props.active_task_id in [
|
||||||
Data.sequences[r]["RelatingProcess"] for r in task["IsSuccessorFrom"]
|
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"]:
|
if task["TaskTime"]:
|
||||||
task_time = Data.task_times[task["TaskTime"]]
|
task_time = Data.task_times[task["TaskTime"]]
|
||||||
item.start = self.canonicalise_time(task_time["ScheduleStart"])
|
item.start = self.canonicalise_time(task_time["ScheduleStart"])
|
||||||
@@ -309,10 +317,7 @@ class LoadTaskProperties(bpy.types.Operator):
|
|||||||
item.start = "-"
|
item.start = "-"
|
||||||
item.finish = "-"
|
item.finish = "-"
|
||||||
item.duration = "-"
|
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
|
self.props.is_task_update_enabled = True
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
@@ -1069,7 +1074,10 @@ class EditTaskCalendar(bpy.types.Operator):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
Data.load(IfcStore.get_file())
|
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"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
@@ -1090,7 +1098,10 @@ class RemoveTaskCalendar(bpy.types.Operator):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
Data.load(IfcStore.get_file())
|
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"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -156,10 +156,11 @@ class Task(PropertyGroup):
|
|||||||
duration: StringProperty(name="Duration")
|
duration: StringProperty(name="Duration")
|
||||||
start: StringProperty(name="Start", update=updateTaskTimeStart)
|
start: StringProperty(name="Start", update=updateTaskTimeStart)
|
||||||
finish: StringProperty(name="Finish", update=updateTaskTimeFinish)
|
finish: StringProperty(name="Finish", update=updateTaskTimeFinish)
|
||||||
|
calendar: StringProperty(name="Calendar")
|
||||||
derived_start: StringProperty(name="Derived Start")
|
derived_start: StringProperty(name="Derived Start")
|
||||||
derived_finish: StringProperty(name="Derived Finish")
|
derived_finish: StringProperty(name="Derived Finish")
|
||||||
derived_duration: StringProperty(name="Derived Duration")
|
derived_duration: StringProperty(name="Derived Duration")
|
||||||
calendar: StringProperty(name="Calendar")
|
derived_calendar: StringProperty(name="Derived Calendar")
|
||||||
is_predecessor: BoolProperty(name="Is Predecessor")
|
is_predecessor: BoolProperty(name="Is Predecessor")
|
||||||
is_successor: BoolProperty(name="Is Successor")
|
is_successor: BoolProperty(name="Is Successor")
|
||||||
|
|
||||||
|
|||||||
@@ -338,7 +338,10 @@ class BIM_UL_tasks(UIList):
|
|||||||
row.prop(item, "duration", emboss=False, text="")
|
row.prop(item, "duration", emboss=False, text="")
|
||||||
|
|
||||||
if props.should_show_calendars:
|
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:
|
if context.active_object:
|
||||||
oprops = context.active_object.BIMObjectProperties
|
oprops = context.active_object.BIMObjectProperties
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ class Data:
|
|||||||
data["TaskTime"] = data["TaskTime"].id()
|
data["TaskTime"] = data["TaskTime"].id()
|
||||||
for rel in task.IsNestedBy:
|
for rel in task.IsNestedBy:
|
||||||
[data["RelatedObjects"].append(o.id()) for o in rel.RelatedObjects if o.is_a("IfcTask")]
|
[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())
|
data["RelatingProducts"].append(r.RelatingProduct.id())
|
||||||
for r in task.HasAssignments
|
for r in task.HasAssignments
|
||||||
|
|||||||
Reference in New Issue
Block a user