From 3aa72ae74a58e25ea9012bf230df324d4c0ade4f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 29 Aug 2023 14:30:24 +0500 Subject: [PATCH] notify about unsupported transition case --- src/blenderbim/blenderbim/bim/module/model/mep.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/mep.py b/src/blenderbim/blenderbim/bim/module/model/mep.py index e6aaa734da..94bd3dffcc 100644 --- a/src/blenderbim/blenderbim/bim/module/model/mep.py +++ b/src/blenderbim/blenderbim/bim/module/model/mep.py @@ -639,11 +639,20 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator): start_object_z_basis = start_object_rotation.to_matrix().col[2] # z basis vector keep_only_z_axis = lambda p_ws: p_ws.dot(start_object_z_basis) * start_object_z_basis - # TODO: support cases when segments are partially or completely overlapping each other if not tool.Cad.are_edges_parallel(start_axis, end_axis): self.report({"ERROR"}, f"Failed to add transition - segments are not parallel.") return {"CANCELLED"} + # TODO: support different profiles rotation by local Z + rotation_difference_z = start_object.matrix_world.to_quaternion().rotation_difference(end_object.matrix_world.to_quaternion()).to_euler().z + def is_multiple_of_pi(value): + n = round(value / pi) + return tool.Cad.is_x(abs(value - n * pi), 0) + + if not is_multiple_of_pi(rotation_difference_z): + self.report({"ERROR"}, f"There is some rotation difference between profiles by local Z axis: {round(degrees(rotation_difference_z))} deg, this kind of transition is not yet supported.") + return {"CANCELLED"} + start_segment_data = MEPGenerator().get_segment_data(start_element) end_segment_data = MEPGenerator().get_segment_data(end_element) end_port = end_segment_data["start_port"]