mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-27 18:57:17 +00:00
Uncached schedule recalculation is now twice as fast
This commit is contained in:
@@ -1484,9 +1484,7 @@ class VisualiseWorkScheduleDateRange(bpy.types.Operator):
|
|||||||
obj.keyframe_insert(data_path="color", frame=product_frame["COMPLETED"])
|
obj.keyframe_insert(data_path="color", frame=product_frame["COMPLETED"])
|
||||||
|
|
||||||
def animate_destruction(self, obj, product_frame):
|
def animate_destruction(self, obj, product_frame):
|
||||||
obj.hide_viewport = False
|
|
||||||
obj.color = (1.0, 1.0, 1.0, 1)
|
obj.color = (1.0, 1.0, 1.0, 1)
|
||||||
obj.keyframe_insert(data_path="hide_viewport", frame=self.start_frame)
|
|
||||||
obj.keyframe_insert(data_path="color", frame=self.start_frame)
|
obj.keyframe_insert(data_path="color", frame=self.start_frame)
|
||||||
obj.keyframe_insert(data_path="color", frame=product_frame["STARTED"] - 1)
|
obj.keyframe_insert(data_path="color", frame=product_frame["STARTED"] - 1)
|
||||||
obj.color = (1.0, 0.0, 0.0, 1)
|
obj.color = (1.0, 0.0, 0.0, 1)
|
||||||
@@ -1516,9 +1514,7 @@ class VisualiseWorkScheduleDateRange(bpy.types.Operator):
|
|||||||
obj.keyframe_insert(data_path="color", frame=product_frame["COMPLETED"])
|
obj.keyframe_insert(data_path="color", frame=product_frame["COMPLETED"])
|
||||||
|
|
||||||
def animate_movement_from(self, obj, product_frame):
|
def animate_movement_from(self, obj, product_frame):
|
||||||
obj.hide_viewport = False
|
|
||||||
obj.color = (1.0, 1.0, 1.0, 1)
|
obj.color = (1.0, 1.0, 1.0, 1)
|
||||||
obj.keyframe_insert(data_path="hide_viewport", frame=self.start_frame)
|
|
||||||
obj.keyframe_insert(data_path="color", frame=self.start_frame)
|
obj.keyframe_insert(data_path="color", frame=self.start_frame)
|
||||||
obj.keyframe_insert(data_path="color", frame=product_frame["STARTED"] - 1)
|
obj.keyframe_insert(data_path="color", frame=product_frame["STARTED"] - 1)
|
||||||
obj.color = (1.0, 0.5, 0.0, 1)
|
obj.color = (1.0, 0.5, 0.0, 1)
|
||||||
@@ -1529,9 +1525,7 @@ class VisualiseWorkScheduleDateRange(bpy.types.Operator):
|
|||||||
obj.keyframe_insert(data_path="hide_viewport", frame=product_frame["COMPLETED"])
|
obj.keyframe_insert(data_path="hide_viewport", frame=product_frame["COMPLETED"])
|
||||||
|
|
||||||
def animate_consumption(self, obj, product_frame):
|
def animate_consumption(self, obj, product_frame):
|
||||||
obj.hide_viewport = False
|
|
||||||
obj.color = (1.0, 1.0, 1.0, 1)
|
obj.color = (1.0, 1.0, 1.0, 1)
|
||||||
obj.keyframe_insert(data_path="hide_viewport", frame=self.start_frame)
|
|
||||||
obj.keyframe_insert(data_path="color", frame=self.start_frame)
|
obj.keyframe_insert(data_path="color", frame=self.start_frame)
|
||||||
obj.keyframe_insert(data_path="color", frame=product_frame["STARTED"] - 1)
|
obj.keyframe_insert(data_path="color", frame=product_frame["STARTED"] - 1)
|
||||||
obj.color = (0.0, 1.0, 1.0, 1)
|
obj.color = (0.0, 1.0, 1.0, 1)
|
||||||
@@ -1605,9 +1599,7 @@ class VisualiseWorkScheduleDateRange(bpy.types.Operator):
|
|||||||
"type": task.PredefinedType,
|
"type": task.PredefinedType,
|
||||||
"relationship": relationship,
|
"relationship": relationship,
|
||||||
"STARTED": round(self.start_frame + (((start - self.start) / self.duration) * self.total_frames)),
|
"STARTED": round(self.start_frame + (((start - self.start) / self.duration) * self.total_frames)),
|
||||||
"COMPLETED": round(
|
"COMPLETED": round(self.start_frame + (((finish - self.start) / self.duration) * self.total_frames)),
|
||||||
self.start_frame + (((finish - self.start) / self.duration) * self.total_frames)
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -146,24 +146,36 @@ class Usecase:
|
|||||||
finish = predecessor_data.get("early_finish")
|
finish = predecessor_data.get("early_finish")
|
||||||
if finish is None:
|
if finish is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
starts.append(finish)
|
||||||
|
else:
|
||||||
starts.append(self.offset_date(finish, edge["lag_time"], data))
|
starts.append(self.offset_date(finish, edge["lag_time"], data))
|
||||||
starts.append(self.offset_date(finish, edge["lag_time"], predecessor_data))
|
starts.append(self.offset_date(finish, edge["lag_time"], predecessor_data))
|
||||||
elif edge["type"] == "SS":
|
elif edge["type"] == "SS":
|
||||||
start = predecessor_data.get("early_start")
|
start = predecessor_data.get("early_start")
|
||||||
if start is None:
|
if start is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
starts.append(start)
|
||||||
|
else:
|
||||||
starts.append(self.offset_date(start, edge["lag_time"], data))
|
starts.append(self.offset_date(start, edge["lag_time"], data))
|
||||||
starts.append(self.offset_date(start, edge["lag_time"], predecessor_data))
|
starts.append(self.offset_date(start, edge["lag_time"], predecessor_data))
|
||||||
elif edge["type"] == "FF":
|
elif edge["type"] == "FF":
|
||||||
finish = predecessor_data.get("early_finish")
|
finish = predecessor_data.get("early_finish")
|
||||||
if finish is None:
|
if finish is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
finishes.append(finish)
|
||||||
|
else:
|
||||||
finishes.append(self.offset_date(finish, edge["lag_time"], data))
|
finishes.append(self.offset_date(finish, edge["lag_time"], data))
|
||||||
finishes.append(self.offset_date(finish, edge["lag_time"], predecessor_data))
|
finishes.append(self.offset_date(finish, edge["lag_time"], predecessor_data))
|
||||||
elif edge["type"] == "SF":
|
elif edge["type"] == "SF":
|
||||||
start = predecessor_data.get("early_start")
|
start = predecessor_data.get("early_start")
|
||||||
if start is None:
|
if start is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
finishes.append(start)
|
||||||
|
else:
|
||||||
finishes.append(self.offset_date(start, edge["lag_time"], data))
|
finishes.append(self.offset_date(start, edge["lag_time"], data))
|
||||||
finishes.append(self.offset_date(start, edge["lag_time"], predecessor_data))
|
finishes.append(self.offset_date(start, edge["lag_time"], predecessor_data))
|
||||||
if starts and finishes:
|
if starts and finishes:
|
||||||
@@ -205,6 +217,9 @@ class Usecase:
|
|||||||
start = successor_data.get("late_start")
|
start = successor_data.get("late_start")
|
||||||
if start is None:
|
if start is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
finishes.append(start)
|
||||||
|
else:
|
||||||
finishes.append(self.offset_date(start, -edge["lag_time"], data))
|
finishes.append(self.offset_date(start, -edge["lag_time"], data))
|
||||||
finishes.append(self.offset_date(start, -edge["lag_time"], successor_data))
|
finishes.append(self.offset_date(start, -edge["lag_time"], successor_data))
|
||||||
free_floats.append(
|
free_floats.append(
|
||||||
@@ -216,6 +231,9 @@ class Usecase:
|
|||||||
start = successor_data.get("late_start")
|
start = successor_data.get("late_start")
|
||||||
if start is None:
|
if start is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
starts.append(start)
|
||||||
|
else:
|
||||||
starts.append(self.offset_date(start, -edge["lag_time"], data))
|
starts.append(self.offset_date(start, -edge["lag_time"], data))
|
||||||
starts.append(self.offset_date(start, -edge["lag_time"], successor_data))
|
starts.append(self.offset_date(start, -edge["lag_time"], successor_data))
|
||||||
free_floats.append(
|
free_floats.append(
|
||||||
@@ -227,6 +245,9 @@ class Usecase:
|
|||||||
finish = successor_data.get("late_finish")
|
finish = successor_data.get("late_finish")
|
||||||
if finish is None:
|
if finish is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
finishes.append(finish)
|
||||||
|
else:
|
||||||
finishes.append(self.offset_date(finish, -edge["lag_time"], data))
|
finishes.append(self.offset_date(finish, -edge["lag_time"], data))
|
||||||
finishes.append(self.offset_date(finish, -edge["lag_time"], successor_data))
|
finishes.append(self.offset_date(finish, -edge["lag_time"], successor_data))
|
||||||
free_floats.append(
|
free_floats.append(
|
||||||
@@ -238,6 +259,9 @@ class Usecase:
|
|||||||
finish = successor_data.get("late_finish")
|
finish = successor_data.get("late_finish")
|
||||||
if finish is None:
|
if finish is None:
|
||||||
return
|
return
|
||||||
|
if not edge["lag_time"]:
|
||||||
|
starts.append(finish)
|
||||||
|
else:
|
||||||
starts.append(self.offset_date(finish, -edge["lag_time"], data))
|
starts.append(self.offset_date(finish, -edge["lag_time"], data))
|
||||||
starts.append(self.offset_date(finish, -edge["lag_time"], successor_data))
|
starts.append(self.offset_date(finish, -edge["lag_time"], successor_data))
|
||||||
free_floats.append(
|
free_floats.append(
|
||||||
@@ -278,6 +302,9 @@ class Usecase:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def calculate_free_float(self, predecessor_date, successor_date, lag_time, predecessor_data, successor_data):
|
def calculate_free_float(self, predecessor_date, successor_date, lag_time, predecessor_data, successor_data):
|
||||||
|
if not lag_time:
|
||||||
|
min_successor_date = successor_date
|
||||||
|
else:
|
||||||
min_successor_date = min(
|
min_successor_date = min(
|
||||||
(
|
(
|
||||||
self.offset_date(successor_date, -lag_time, predecessor_data),
|
self.offset_date(successor_date, -lag_time, predecessor_data),
|
||||||
|
|||||||
Reference in New Issue
Block a user