mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-27 18:57:17 +00:00
Update system.py so two ortogonal arrows (in x and y local) are used for MEP systems decorations
Currently the flow direction decorations run in the local Y. This means that if one is creating ducts/pipes in the xy plane, the decorations are drawn in planes perpendicular to that one and than means that the arrows are not visible from a top/bottom view. By adding another set of arrows perpendicular the arrows are always visible no matter what projection is taken
This commit is contained in:
@@ -340,32 +340,37 @@ class System(bonsai.core.tool.System):
|
|||||||
|
|
||||||
# for now it's hardcoded to local Y axis to avoid using viewport data
|
# for now it's hardcoded to local Y axis to avoid using viewport data
|
||||||
# for performance reasons
|
# for performance reasons
|
||||||
edge_ortho = obj.matrix_world.col[1].to_3d().normalized()
|
for j in range(2):
|
||||||
second_ortho = edge_dir.cross(edge_ortho)
|
edge_ortho = obj.matrix_world.col[j].to_3d().normalized()
|
||||||
edge_ortho = second_ortho.cross(edge_dir)
|
second_ortho = edge_dir.cross(edge_ortho)
|
||||||
|
edge_ortho = second_ortho.cross(edge_dir)
|
||||||
|
|
||||||
# direction lines should be around the edge center
|
# direction lines should be around the edge center
|
||||||
n_direction_lines, start_offset = divmod(edge_length, direction_lines_offset)
|
n_direction_lines, start_offset = divmod(edge_length, direction_lines_offset)
|
||||||
n_direction_lines = int(n_direction_lines) + 1
|
n_direction_lines = int(n_direction_lines) + 1
|
||||||
start_offset /= 2
|
start_offset /= 2
|
||||||
start_offset = edge_dir * start_offset + base_vert
|
start_offset = edge_dir * start_offset + base_vert
|
||||||
cur_vert_index = start_vert_i + len(port_data)
|
|
||||||
|
|
||||||
for i in range(n_direction_lines):
|
|
||||||
cur_offset = start_offset + edge_dir * i * direction_lines_offset
|
|
||||||
if both_directions:
|
if both_directions:
|
||||||
verts_pos.append(cur_offset + edge_ortho * direction_lines_width)
|
cur_vert_index = start_vert_i + len(port_data) + j * 2 * n_direction_lines
|
||||||
verts_pos.append(cur_offset - edge_ortho * direction_lines_width)
|
|
||||||
edges.append((cur_vert_index, cur_vert_index + 1))
|
|
||||||
cur_vert_index += 2
|
|
||||||
else:
|
else:
|
||||||
arrow_base = cur_offset - edge_dir * direction_lines_width
|
cur_vert_index = start_vert_i + len(port_data) + j * 3 * n_direction_lines
|
||||||
verts_pos.append(arrow_base + edge_ortho * direction_lines_width)
|
|
||||||
verts_pos.append(cur_offset)
|
for i in range(n_direction_lines):
|
||||||
verts_pos.append(arrow_base - edge_ortho * direction_lines_width)
|
cur_offset = start_offset + edge_dir * i * direction_lines_offset
|
||||||
edges.append((cur_vert_index, cur_vert_index + 1))
|
if both_directions:
|
||||||
edges.append((cur_vert_index + 1, cur_vert_index + 2))
|
verts_pos.append(cur_offset + edge_ortho * direction_lines_width)
|
||||||
cur_vert_index += 3
|
verts_pos.append(cur_offset - edge_ortho * direction_lines_width)
|
||||||
|
edges.append((cur_vert_index, cur_vert_index + 1))
|
||||||
|
cur_vert_index += 2
|
||||||
|
else:
|
||||||
|
arrow_base = cur_offset - edge_dir * direction_lines_width
|
||||||
|
verts_pos.append(arrow_base + edge_ortho * direction_lines_width)
|
||||||
|
verts_pos.append(cur_offset)
|
||||||
|
verts_pos.append(arrow_base - edge_ortho * direction_lines_width)
|
||||||
|
edges.append((cur_vert_index, cur_vert_index + 1))
|
||||||
|
edges.append((cur_vert_index + 1, cur_vert_index + 2))
|
||||||
|
cur_vert_index += 3
|
||||||
|
|
||||||
all_vertices.extend(verts_pos)
|
all_vertices.extend(verts_pos)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user