Skip to content
Snippets Groups Projects
Commit 1b29b884 authored by Allen, Bruce (CIV)'s avatar Allen, Bruce (CIV)
Browse files

make view spacing change consistent

parent 2626fada
No related branches found
No related tags found
No related merge requests found
...@@ -75,10 +75,10 @@ def _move_one(X, Y, VX, VY, adjacency_matrix): ...@@ -75,10 +75,10 @@ def _move_one(X, Y, VX, VY, adjacency_matrix):
X[i] += VX[i] * delta_t X[i] += VX[i] * delta_t
Y[i] += VY[i] * delta_t Y[i] += VY[i] * delta_t
def _place_nodes(nodes, X, Y, scale_x, scale_y): def _place_nodes(nodes, X, Y, k_x, k_y):
for i, node in enumerate(nodes): for i, node in enumerate(nodes):
node.setX(scale_x * X[i]) node.setX(k_x * X[i])
node.setY(scale_y * Y[i]) node.setY(k_y * Y[i])
def _place_edges(edges): def _place_edges(edges):
placer = EdgeBezierPlacer() placer = EdgeBezierPlacer()
...@@ -91,10 +91,11 @@ def _place_edges(edges): ...@@ -91,10 +91,11 @@ def _place_edges(edges):
def set_initial_layout(nodes, edges, scale_x, scale_y): def set_initial_layout(nodes, edges, scale_x, scale_y):
# place nodes around a circle # place nodes around a circle
count = len(nodes) count = len(nodes)
kx = 0.035 * pow(count, .5) * scale_x # equation determined experimentally k = pow(count, .5) # nonlinear radius determined experimentally
ky = 0.020 * pow(count, .5) * scale_x X = [sin(2 * pi * i / count) * k for i in range(count)]
X = [sin(2 * pi * i / count) * kx for i in range(count)] Y = [-cos(2 * pi * i / count) * k for i in range(count)]
Y = [-cos(2 * pi * i / count) * ky for i in range(count)] kx = 0.5 * scale_x # scaling constant determined experimentally
ky = 0.5 * scale_y
_place_nodes(nodes, X, Y, kx, ky) _place_nodes(nodes, X, Y, kx, ky)
_place_edges(edges) _place_edges(edges)
......
...@@ -15,6 +15,53 @@ from view_bar_chart import ViewBarChart ...@@ -15,6 +15,53 @@ from view_bar_chart import ViewBarChart
from view_gantt_chart import ViewGanttChart from view_gantt_chart import ViewGanttChart
from view_ad import ViewAD # Activity Diagram from view_ad import ViewAD # Activity Diagram
def _change_node_spacing(gry_view, x_ratio, y_ratio):
if x_ratio != 1.0:
for gry_node in gry_view["nodes"]:
gry_node["x"] *= x_ratio
if y_ratio != 1.0:
for gry_node in gry_view["nodes"]:
gry_node["y"] *= y_ratio
def _change_edge_spacing(gry_view, x_ratio, y_ratio):
if x_ratio != 1.0:
for gry_edge in gry_view["edges"]:
gry_edge["ep1_x"] *= x_ratio
gry_edge["ep2_x"] *= x_ratio
if y_ratio != 1.0:
for gry_edge in gry_view["edges"]:
gry_edge["ep1_y"] *= y_ratio
gry_edge["ep2_y"] *= y_ratio
def _change_title_spacing(gry_view, x_ratio, y_ratio):
print(gry_view)
if x_ratio != 1.0:
gry_view["title"]["x"] *= x_ratio
if y_ratio != 1.0:
gry_view["title"]["y"] *= y_ratio
# update spacing when the item is not initialized
def _change_gry_trace_item_spacing(gry_trace, x_ratio, y_ratio):
# all trace items come with x,y
_change_node_spacing(gry_trace, x_ratio, y_ratio)
_change_edge_spacing(gry_trace, x_ratio, y_ratio)
# update spacing when the item is not initialized
def _change_gry_graph_item_spacing(gry_graph, x_ratio, y_ratio):
# no graph items are placed until box has x,y
if "x" in gry_graph["box"]:
_change_title_spacing(gry_graph, x_ratio, y_ratio)
_change_node_spacing(gry_graph, x_ratio, y_ratio)
_change_edge_spacing(gry_graph, x_ratio, y_ratio)
# update spacing when the item is not initialized
def _change_gry_ad_item_spacing(gry_ad, x_ratio, y_ratio):
# only nodes are placed until box has x,y
_change_node_spacing(gry_ad, x_ratio, y_ratio)
if "x" in gry_ad["box"]:
_change_title_spacing(gry_ad, x_ratio, y_ratio)
_change_edge_spacing(gry_ad, x_ratio, y_ratio)
class GraphItem(QObject): class GraphItem(QObject):
"""Defines one graph item. """Defines one graph item.
Data structures: Data structures:
...@@ -74,7 +121,6 @@ class GraphItem(QObject): ...@@ -74,7 +121,6 @@ class GraphItem(QObject):
# view | activity diagrams # view | activity diagrams
self.view_activity_diagrams = list() self.view_activity_diagrams = list()
for gry_view in gry_graph["activity_diagrams"]: for gry_view in gry_graph["activity_diagrams"]:
print("TBD") #zzz
self.view_activity_diagrams.append(ViewAD(self.background_box, self.view_activity_diagrams.append(ViewAD(self.background_box,
gry_view)) gry_view))
...@@ -175,18 +221,36 @@ class GraphItem(QObject): ...@@ -175,18 +221,36 @@ class GraphItem(QObject):
item.reset_appearance() item.reset_appearance()
def change_item_spacing(self, ratios): def change_item_spacing(self, ratios):
if self.is_initialized: # trace
if self.has_trace(): h_ratio, v_ratio = ratios["trace_h"], ratios["trace_v"]
h_ratio, v_ratio = ratios["trace_h"], ratios["trace_v"] if h_ratio != 1.0 or v_ratio != 1.0:
self.trace.change_item_spacing(h_ratio, v_ratio) if self.is_initialized:
if self.has_trace():
h_ratio, v_ratio = ratios["graph_h"], ratios["graph_v"] self.trace.change_item_spacing(h_ratio, v_ratio)
for graph in self.view_graphs: else:
graph.change_item_spacing(h_ratio, v_ratio) if "trace" in self.gry_graph:
_change_gry_trace_item_spacing(self.gry_graph["trace"],
h_ratio, v_ratio = ratios["ad_h"], ratios["ad_v"] h_ratio, v_ratio)
for ad in self.view_activity_diagrams:
ad.change_item_spacing(h_ratio, v_ratio) # graphs
h_ratio, v_ratio = ratios["graph_h"], ratios["graph_v"]
if h_ratio != 1.0 or v_ratio != 1.0:
if self.is_initialized:
for graph in self.view_graphs:
graph.change_item_spacing(h_ratio, v_ratio)
else:
for gry_graph in self.gry_graph["graphs"]:
_change_gry_graph_item_spacing(gry_graph, h_ratio, v_ratio)
# activity diagrams
h_ratio, v_ratio = ratios["ad_h"], ratios["ad_v"]
if h_ratio != 1.0 or v_ratio != 1.0:
if self.is_initialized:
for ad in self.view_activity_diagrams:
ad.change_item_spacing(h_ratio, v_ratio)
else:
for gry_ad in self.gry_graph["activity_diagrams"]:
_change_gry_ad_item_spacing(gry_ad, h_ratio, v_ratio)
def bounding_rect(self): def bounding_rect(self):
self.initialize_items() self.initialize_items()
......
...@@ -224,7 +224,8 @@ class GraphMainScene(QGraphicsScene): ...@@ -224,7 +224,8 @@ class GraphMainScene(QGraphicsScene):
if self._in_set_scene_rect: if self._in_set_scene_rect:
# Avoid possible recursion that has been observed when # Avoid possible recursion that has been observed when
# overly zoomed in. # overly zoomed in.
print("GraphMainScene._set_scene_rect: skipping to avoid recursion") print("GraphMainScene._set_scene_rect comment: skipping "
"to avoid recursion")
super(GraphMainScene, self).mouseMoveEvent(_event) super(GraphMainScene, self).mouseMoveEvent(_event)
else: else:
self._in_set_scene_rect = True self._in_set_scene_rect = True
......
...@@ -109,12 +109,10 @@ class GraphsManager(QObject): ...@@ -109,12 +109,10 @@ class GraphsManager(QObject):
break break
for graph in self.graphs: for graph in self.graphs:
# maybe change spacing
if change_spacing: if change_spacing:
graph.change_item_spacing(spacing_ratios) graph.change_item_spacing(spacing_ratios)
# reset appearance of all initialized graph items # reset appearance whether or not the change was about spacing
if graph.is_initialized: if graph.is_initialized:
graph.reset_appearance() graph.reset_appearance()
...@@ -21,8 +21,6 @@ class ViewAD(QObject): ...@@ -21,8 +21,6 @@ class ViewAD(QObject):
self.edges = list() self.edges = list()
# view graph title # view graph title
print("zz1", gry_ad)
print("zz2", gry_ad["title"])
self.title = ViewText(self.ad_box, gry_ad["title"]) self.title = ViewText(self.ad_box, gry_ad["title"])
# nodes # nodes
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment