Merge pull request #13 from senaduka/extract-corner-values-based-on-building-outline-dxf
extract corner values from DXF file
This commit is contained in:
@@ -7,3 +7,5 @@ parapet_coefficients = 0.88, 1.2
|
||||
system_force_capacity = 418.
|
||||
|
||||
minimum_racking_capacity = 226
|
||||
|
||||
max_corner_angle = 135
|
||||
@@ -296,6 +296,7 @@ def array_summary():
|
||||
calculator.subarrays,
|
||||
max_y)
|
||||
context['buildings'] = project_presenter.get_buildings(calculator.buildings_for_drawing, max_y)
|
||||
context['corners'] = project_presenter.get_corners(calculator.buildings)
|
||||
context['override_form'] = True
|
||||
context['cad_file_name'] = session_manager.site.cad_file_name or 'Upload System Text Data'
|
||||
context['dxf_file_name'] = session_manager.site.dxf_file_name or 'Upload System DXF'
|
||||
|
||||
13
helix/models/corner.py
Normal file
13
helix/models/corner.py
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
|
||||
class Corner(object):
|
||||
def __init__(self, x, y, length_ccw, length_cw, angle):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.length_ccw = length_ccw
|
||||
self.length_cw = length_cw
|
||||
self.angle = angle
|
||||
|
||||
@property
|
||||
def dictionary(self):
|
||||
return {"x": self.x, "y": self.y, "length ccw": self.length_ccw, "length cw : ": self.length_cw, "angle": self.angle}
|
||||
@@ -1,4 +1,7 @@
|
||||
import sys
|
||||
from math import sqrt, atan, degrees
|
||||
from helix.models.corner import Corner
|
||||
from helix.constants.global_constants import max_corner_angle
|
||||
|
||||
class ProjectPresenter(object):
|
||||
def __init__(self, system_type, module_type):
|
||||
@@ -18,8 +21,6 @@ class ProjectPresenter(object):
|
||||
spacing_x, spacing_y = module_constants.presenter_spacing
|
||||
wind_zones = system_constants.wind_zones
|
||||
|
||||
|
||||
|
||||
for panel in panels:
|
||||
subarray = [x for x in subarrays if x.subarray_number == panel.subarray][0]
|
||||
origin = subarray.origin
|
||||
@@ -73,6 +74,45 @@ class ProjectPresenter(object):
|
||||
|
||||
return result
|
||||
|
||||
def get_corners(self, buildings):
|
||||
result = []
|
||||
for building in buildings:
|
||||
presentable_building = []
|
||||
result.append(presentable_building)
|
||||
previous_corner = building[-1]
|
||||
for i, corner in enumerate(building):
|
||||
if (i+1 == len(building)):
|
||||
next_corner = building[0]
|
||||
else:
|
||||
next_corner = building[i+1]
|
||||
|
||||
#x coordinate is stored as first element of corner variable
|
||||
#y coordinate is stored as second element of corner variable
|
||||
corner_length_ccw = sqrt((next_corner[0] - corner[0])**2 + (next_corner[1] - corner[1])**2)
|
||||
corner_length_cw = sqrt((previous_corner[0] - corner[0])**2 + (previous_corner[1] - corner[1])**2)
|
||||
|
||||
k1 = float('Inf') if (corner[0]==previous_corner[0]) else (corner[1] - previous_corner[1]) / (corner[0] - previous_corner[0])
|
||||
k2 = float('Inf') if (corner[0]==next_corner[0]) else (next_corner[1] - corner[1]) / (next_corner[0] - corner[0])
|
||||
|
||||
theta2 = degrees(atan(k2))
|
||||
theta1 = degrees(atan(k1)) - theta2
|
||||
|
||||
if (theta1 < 0):
|
||||
if (k1 < 0 and k2 < 0):
|
||||
theta1 = 360 + theta1
|
||||
elif (k1 <= 0 and k2 >= 0):
|
||||
theta1 = 180 + theta1
|
||||
else:
|
||||
if (k1 > 0 and k2 > 0):
|
||||
theta1 = 180 + theta1
|
||||
|
||||
if (theta1 < max_corner_angle):
|
||||
presentable_building.append(Corner(corner[0], corner[1], corner_length_ccw,corner_length_cw, theta1).__dict__)
|
||||
|
||||
previous_corner = corner
|
||||
|
||||
return result
|
||||
|
||||
def get_max_y(self,buildings, panels):
|
||||
|
||||
module_constants = self.system_type.module_constants(self.module_type)
|
||||
|
||||
@@ -1,6 +1,16 @@
|
||||
{% extends "layout.html.jinja" %}
|
||||
{% set title = "Helix Calculator" %}
|
||||
{% block contents %}
|
||||
<script>
|
||||
{%if context['corners']%}
|
||||
var corners_data = {{ context['corners']|tojson}};
|
||||
if (corners_data){
|
||||
console.log("Corners data :");
|
||||
console.log(corners_data);
|
||||
}
|
||||
{%endif%}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var is_csv_available = {{ context['csv_available']|tojson|safe }};
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user