first commit
This commit is contained in:
47
helix/validators/subarray_validator.py
Normal file
47
helix/validators/subarray_validator.py
Normal file
@@ -0,0 +1,47 @@
|
||||
from helix.constants.subarray import SUBARRAY_SIZE_BIG
|
||||
from helix.constants.system_type import SystemType
|
||||
from helix.models.dxf.dxf_error import DXFError
|
||||
from helix.models.dxf.graph_direction import GraphDirection
|
||||
|
||||
|
||||
class SubarrayValidator(object):
|
||||
"""
|
||||
Tests to make sure that Single Tilt systems have East or West neighbors
|
||||
(as a panel without an East/West neighbor is
|
||||
invalid, and that Dual Tilt systems have North or South neighbors.
|
||||
Also checks to make sure that all "sides" of the
|
||||
subarray are less than 150' long (due to government safety requirements).
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def validate_subarray(node_graph, subarray_number, system_type):
|
||||
subarray_node_graph = [node for node in node_graph if node.panel.subarray == subarray_number]
|
||||
furthest_west = subarray_node_graph[0].panel.coordinate.unrotate()
|
||||
furthest_east = subarray_node_graph[0].panel.coordinate.unrotate()
|
||||
furthest_north = subarray_node_graph[0].panel.coordinate.unrotate()
|
||||
furthest_south = subarray_node_graph[0].panel.coordinate.unrotate()
|
||||
|
||||
for node in subarray_node_graph:
|
||||
if system_type == SystemType.singleTilt:
|
||||
if not (node.has_existing_neighbor(GraphDirection.East) or node.has_existing_neighbor(GraphDirection.West)):
|
||||
raise DXFError("Error - Unsupported panel configuration in subarray %d." % subarray_number)
|
||||
if not (node.has_existing_neighbor(GraphDirection.North) or node.has_existing_neighbor(GraphDirection.South)):
|
||||
raise DXFError("Error - Unsupported panel configuration in subarray %d." % subarray_number)
|
||||
rotated_coordinate = node.panel.coordinate.unrotate()
|
||||
if rotated_coordinate.x < furthest_west.x:
|
||||
furthest_west = rotated_coordinate
|
||||
elif rotated_coordinate.x > furthest_east.x:
|
||||
furthest_east = rotated_coordinate
|
||||
if rotated_coordinate.y < furthest_south.y:
|
||||
furthest_south = rotated_coordinate
|
||||
elif rotated_coordinate.y > furthest_north.y:
|
||||
furthest_north = rotated_coordinate
|
||||
|
||||
# detect subarray size
|
||||
horizontal_distance = furthest_east.x - furthest_west.x
|
||||
if horizontal_distance > (150 * 12):
|
||||
raise DXFError(SUBARRAY_SIZE_BIG)
|
||||
|
||||
vertical_distance = furthest_north.y - furthest_south.y
|
||||
if vertical_distance > (150 * 12):
|
||||
raise DXFError(SUBARRAY_SIZE_BIG)
|
||||
Reference in New Issue
Block a user