Total float calculation now takes into account calendar

This commit is contained in:
Dion Moult
2021-06-04 17:22:35 +10:00
parent 8b3b1eeb8e
commit 153b6ee24d
2 changed files with 15 additions and 11 deletions
@@ -49,7 +49,7 @@ class Usecase:
elif self.settings["context"].ContextType == "Plan":
return self.create_plan_representation()
return self.create_variable_representation()
def should_triangulate_face(self, face, threshold=EPSILON):
vz = face.normal
co = face.verts[0].co
@@ -60,15 +60,12 @@ class Usecase:
else:
vx = vz.cross(X_AXIS)
vy = vx.cross(vz)
tM = Matrix([
[vx.x, vy.x, vz.x, co.x],
[vx.y, vy.y, vz.y, co.y],
[vx.z, vy.z, vz.z, co.z],
[0, 0, 0, 1]
]).inverted()
tM = Matrix(
[[vx.x, vy.x, vz.x, co.x], [vx.y, vy.y, vz.y, co.y], [vx.z, vy.z, vz.z, co.z], [0, 0, 0, 1]]
).inverted()
return any([abs((tM @ v.co).z) > threshold for v in face.verts])
return any([abs((tM @ v.co).z) > threshold for v in face.verts])
def evaluate_geometry(self):
for modifier in self.settings["blender_object"].modifiers:
if modifier.type == "BOOLEAN":
@@ -265,7 +262,7 @@ class Usecase:
"Curve3D",
self.create_curves(),
)
def create_curve2d_representation(self):
return self.file.createIfcShapeRepresentation(
self.settings["context"],
@@ -242,7 +242,14 @@ class Usecase:
elif data.get("late_start") is None:
data["late_start"] = self.offset_date(data["late_finish"], -data["duration"], data)
data["total_float"] = data["late_finish"] - data["early_finish"]
if data["duration_type"] == "WORKTIME":
data["total_float"] = datetime.timedelta(
days=ifcopenshell.util.sequence.count_working_days(
data["early_finish"], data["late_finish"], data["calendar"]
)
)
else:
data["total_float"] = data["late_finish"] - data["early_finish"]
# Waiting for yassine to confirm relationships
# data["free_float"] = min([self.g.nodes[s]["early_start"] for s in successors])