Files
old-krovovi-kalkulator/helix/models/dxf/graph_node.py

69 lines
2.3 KiB
Python
Raw Normal View History

2017-11-07 09:23:57 +01:00
from helix.models.dxf.graph_direction import GraphDirection
class GraphNode(object):
def __init__(self, panel, x_spacing, y_spacing):
self.neighbors = {}
self.neighbors = {
GraphDirection.North: None,
GraphDirection.NorthEast: None,
GraphDirection.East: None,
GraphDirection.SouthEast: None,
GraphDirection.South: None,
GraphDirection.SouthWest: None,
GraphDirection.West: None,
GraphDirection.NorthWest: None
}
self.panel = panel
self.x_spacing = x_spacing
self.y_spacing = y_spacing
@property
def coordinate(self):
return self.panel.coordinate
def has_existing_neighbor(self, direction):
return self.neighbors.get(direction) is not None
def add_neighbor(self, other_node, direction):
if other_node is not None:
if direction:
self.neighbors[direction] = other_node
opposite_direction = direction.opposite_direction()
other_node.neighbors[opposite_direction] = self
def neighboring_nodes(self):
return [neighbor for neighbor in self.neighbors.values() if neighbor is not None]
def ordinal_neighbors(self):
neighbors = {}
for direction in GraphDirection.ordinal_directions():
if self.neighbors.get(direction):
neighbors[direction] = self.neighbors[direction]
return neighbors
def __hash__(self):
return self.panel.coordinate.__hash__()
def __repr__(self):
neighbors = {}
for key, value in self.neighbors.items():
if value is not None:
neighbors[key] = value.panel
return str(self.panel) + " - " + str(neighbors)
def __eq__(self, other):
if self is other:
return True
if not self.panel == other.panel and self.x_spacing != other.x_spacing and self.y_spacing != other.y_spacing:
return False
for key, value in self.neighbors.items():
other_neighbor = other.neighbors[key]
if value is None and other_neighbor is None:
continue
elif value is None or other_neighbor is None:
return False
elif value.panel != other_neighbor.panel:
return False
return True