Punto de restauración.

This commit is contained in:
2025-07-16 08:58:35 +02:00
parent d009cb7695
commit e1e1441892
9 changed files with 599 additions and 579 deletions

View File

@@ -1,5 +1,6 @@
import math import math
import FreeCAD import FreeCAD
import Part
from Utils.PVPlantUtils import findObjects from Utils.PVPlantUtils import findObjects
if FreeCAD.GuiUp: if FreeCAD.GuiUp:
@@ -259,15 +260,60 @@ class exportDXF:
'rotation': rotation 'rotation': rotation
}) })
def createPolyline(self, wire): def createPolyline(self, wire, layer=""):
try: try:
data = getWire(wire.Shape) data = getWire(wire.Shape)
lwp = self.msp.add_lwpolyline(data) lwp = self.msp.add_lwpolyline(data)
if layer:
lwp.dxf.layer = layer
return lwp return lwp
except Exception as e: except Exception as e:
print("Error creating polyline:", e) print("Error creating polyline:", e)
return None return None
def createHatch(self, wire, pattern="SOLID", scale=1.0, angle=0, layer=None):
"""Crea un sombreado (hatch) para un área"""
try:
# Obtener los puntos en metros
points = [(x, y) for (x, y, *_) in wire]
# Crear el hatch
hatch = self.msp.add_hatch(color=7, dxfattribs={'layer': layer})
if pattern == "SOLID":
# Sombreado sólido
hatch.set_solid_fill()
else:
# Patrón de sombreado
hatch.set_pattern_fill(name=pattern, scale=scale, angle=angle)
# Añadir el contorno
hatch.paths.add_polyline_path(points, is_closed=True)
return hatch
except Exception as e:
print("Error creating hatch:", e)
return None
def export_feature_image(self, feature, layer_name):
"""Exporta una imagen del GeoFeature y la añade al DXF"""
try:
# Añadir la imagen al DXF
image_def = self.doc.add_image_def(feature.ImageFile, size_in_pixel=(feature.XSize, feature.YSize))
self.msp.add_image(image_def,
insert=(0, 0, 0),
size_in_units=(feature.XSize,
feature.YSize),
rotation=0,
dxfattribs={'layer': layer_name})
print(f"Imagen exportada para {feature.Label}")
# Eliminar el archivo temporal
import os
os.unlink(temp_img.name)
except Exception as e:
print(f"Error en exportación de imagen: {e}")
# ================================================================================= # =================================================================================
# INTERFAZ DE USUARIO # INTERFAZ DE USUARIO
# ================================================================================= # =================================================================================
@@ -575,6 +621,58 @@ class LineTypeComboBox(QtWidgets.QComboBox):
finally: finally:
painter.end() # Asegurar que el painter se cierre correctamente painter.end() # Asegurar que el painter se cierre correctamente
layers = [
("Available area", QtGui.QColor(0, 204, 153), "Continuous", "1", True),
("Available area Names", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("Areas Exclusion", QtGui.QColor(255, 85, 0), "Continuous", "1", True),
("Areas Exclusion Name", QtGui.QColor(255, 85, 0), "Continuous", "1", True),
("Areas Cadastral Plot", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("Areas Cadastral Plot Name", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("Areas Offset", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("Cable codes LV AC inverter", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("Cable codes LV string", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("Cable codes MV System", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("CABLES LV AC inverter 120 mm2", QtGui.QColor(255, 204, 0), "Continuous", "1", True),
("CABLES LV AC inverter 185 mm2", QtGui.QColor(204, 153, 0), "Continuous", "1", True),
("CABLES LV string 4 mm2", QtGui.QColor(255, 255, 0), "Continuous", "1", True),
("CABLES LV string 10 mm2", QtGui.QColor(255, 255, 102), "Continuous", "1", True),
("CABLES MV system 300 mm2", QtGui.QColor(102, 51, 0), "Continuous", "1", True),
("CIVIL Fence", QtGui.QColor(102, 102, 102), "FENCELINE1", "1", True),
("CIVIL External Roads", QtGui.QColor(91, 91, 91), "Continuous", "1", True),
("CIVIL External Roads Axis", QtGui.QColor(255, 255, 192), "Dashed", "1", True),
("CIVIL External Roads Text", QtGui.QColor(255, 255, 192), "Continuous", "1", True),
("CIVIL Internal Roads", QtGui.QColor(153, 95, 76), "Continuous", "1", True),
("CIVIL Internal Roads Axis", QtGui.QColor(192, 192, 192), "Dashed", "1", True),
("CIVIL External Roads Text", QtGui.QColor(192, 192, 192), "Continuous", "1", True),
("Contour Line Legend text", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("Major contour line", QtGui.QColor(0, 0, 0), "Continuous", "1", True),
("Major contour value", QtGui.QColor(0, 0, 0), "Continuous", "1", True),
("Minor contour line", QtGui.QColor(128, 128, 128), "Continuous", "1", True),
("Minor contour value", QtGui.QColor(128, 128, 128), "Continuous", "1", True),
("Power Stations", QtGui.QColor(255, 0, 0), "Continuous", "1", True),
("Power Stations Names", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("ST", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("ST Names", QtGui.QColor(255, 255, 0), "Continuous", "1", True),
("String Inv", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("STRUC Structure 1", QtGui.QColor(0, 0, 255), "Continuous", "1", True),
("STRUC Structure 2", QtGui.QColor(0, 0, 204), "Continuous", "1", True),
("STRUC Structure 3", QtGui.QColor(0, 0, 153), "Continuous", "1", True),
("STRUC Structure 4", QtGui.QColor(0, 0, 128), "Continuous", "1", True),
("STRUC Structure 5", QtGui.QColor(0, 0, 102), "Continuous", "1", True),
("STRUC Structure 6", QtGui.QColor(0, 0, 76), "Continuous", "1", True),
("STRUC Structure 7", QtGui.QColor(0, 0, 51), "Continuous", "1", True),
("STRUC Structure 8", QtGui.QColor(0, 0, 25), "Continuous", "1", True),
("Structure Codes", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("TRENCHES Low voltage 400.0 x 1000.0 m", QtGui.QColor(128, 128, 128), "Continuous", "1", True),
("TRENCHES Medium voltage 400.0 x 1000.", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("TRENCHES Medium voltage 800.0 x 1000.", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
("TRENCHES Medium voltage 800.0 x 1500.", QtGui.QColor(255, 255, 255), "Continuous", "1", True),
]
class _PVPlantExportDXF(QtGui.QWidget): class _PVPlantExportDXF(QtGui.QWidget):
'''The editmode TaskPanel to select what you want to export''' '''The editmode TaskPanel to select what you want to export'''
@@ -610,10 +708,8 @@ class _PVPlantExportDXF(QtGui.QWidget):
self.form.tableLayers.removeRow(row) self.form.tableLayers.removeRow(row)
# Configuración de las capas por defecto # Configuración de las capas por defecto
self.add_row("Areas_Boundary", QtGui.QColor(0, 125, 125), "FENCELINE1", "1", True) for row in layers:
self.add_row("Areas_Exclusion", QtGui.QColor(255, 0, 0), "CONTINUOUS", "1", True) self.add_row(*row)
self.add_row("Internal_Roads", QtGui.QColor(128, 128, 128), "CONTINUOUS", "1", True)
self.add_row("Frames", QtGui.QColor(0, 255, 0), "CONTINUOUS", "1", True)
def save_project_settings(self): def save_project_settings(self):
"""Guarda la configuración actual en el proyecto de FreeCAD""" """Guarda la configuración actual en el proyecto de FreeCAD"""
@@ -778,25 +874,25 @@ class _PVPlantExportDXF(QtGui.QWidget):
) )
def writeArea(self, exporter): def writeArea(self, exporter):
exporter.createPolyline(FreeCAD.ActiveDocument.Site.Boundary, "boundary") exporter.createPolyline(FreeCAD.ActiveDocument.Site.Boundary, "Available area")
areas_types = [("Boundaries", "Available area"),
areas_types = ["Boundaries", "Exclusions", "Offsets"] ("CadastralPlots", "Areas Cadastral Plot"),
("Exclusions", "Areas Exclusion"),
("Offsets", "Areas Offset")]
for area_type in areas_types: for area_type in areas_types:
if hasattr(FreeCAD.ActiveDocument, area_type): if hasattr(FreeCAD.ActiveDocument, area_type[0]):
for area in FreeCAD.ActiveDocument.Boundaries.Group: area_group = FreeCAD.ActiveDocument.getObjectsByLabel(area_type[0])
exporter.createPolyline(area, "Areas_Boundary") if len(area_group):
for area in area_group[0].Group:
'''for area in FreeCAD.ActiveDocument.Boundaries.Group: tmp = exporter.createPolyline(area, area_type[1])
pol = exporter.createPolyline(area) if area_type[0] == "Exclusions":
pol.dxf.layer = "Areas_Boundary" exporter.createHatch(
tmp,
for area in FreeCAD.ActiveDocument.Exclusions.Group: pattern="ANSI37",
pol = exporter.createPolyline(area) scale=0.3,
pol.dxf.layer = "Areas_Exclusion" angle=0,
layer=area_type[1]
for area in FreeCAD.ActiveDocument.Offsets.Group: )
pol = exporter.createPolyline(area)
pol.dxf.layer = "Areas_Offsets"'''
def writeFrameSetups(self, exporter): def writeFrameSetups(self, exporter):
if not hasattr(FreeCAD.ActiveDocument, "Site"): if not hasattr(FreeCAD.ActiveDocument, "Site"):
@@ -811,11 +907,11 @@ class _PVPlantExportDXF(QtGui.QWidget):
w.Placement.Base = w.Placement.Base.sub(center) w.Placement.Base = w.Placement.Base.sub(center)
block.add_lwpolyline(getWire(w)) block.add_lwpolyline(getWire(w))
block.add_circle((0, 0), 0.2, dxfattribs={'color': 2}) block.add_circle((0, 0), 0.2, dxfattribs={'layer': 'Structure Posts'}) #'color': 2,
p = math.sin(math.radians(45)) * 0.2 p = math.sin(math.radians(45)) * 0.2
block.add_line((-p, -p), (p, p), dxfattribs={"layer": "MyLines"}) block.add_line((-p, -p), (p, p), dxfattribs={'layer': 'Structure Posts'})
block.add_line((-p, p), (p, -p), dxfattribs={"layer": "MyLines"}) block.add_line((-p, p), (p, -p), dxfattribs={'layer': 'Structure Posts'})
# 2. Frames # 2. Frames
for ts in FreeCAD.ActiveDocument.Site.Frames: for ts in FreeCAD.ActiveDocument.Site.Frames:
@@ -868,10 +964,10 @@ class _PVPlantExportDXF(QtGui.QWidget):
if FreeCAD.ActiveDocument.Transport: if FreeCAD.ActiveDocument.Transport:
for road in FreeCAD.ActiveDocument.Transport.Group: for road in FreeCAD.ActiveDocument.Transport.Group:
base = exporter.createPolyline(road, "External_Roads") base = exporter.createPolyline(road, "CIVIL External Roads")
base.dxf.const_width = road.Width base.dxf.const_width = road.Width
axis = exporter.createPolyline(road.Base, "External_Roads_Axis") axis = exporter.createPolyline(road, "CIVIL External Roads Axis")
axis.dxf.const_width = .2 axis.dxf.const_width = .2
def writeTrenches(self, exporter): def writeTrenches(self, exporter):
@@ -976,8 +1072,12 @@ class _PVPlantExportDXF(QtGui.QWidget):
self.writeTrenches(exporter) self.writeTrenches(exporter)
# Crear espacios de papel # Crear espacios de papel
self.setup_layout4(exporter.doc) #self.setup_layout4(exporter.doc)
self.createPaperSpaces(exporter) #self.createPaperSpaces(exporter)
if hasattr(FreeCAD.ActiveDocument, "Background"):
# Exportar como imagen en lugar de polilínea
exporter.export_feature_image(FreeCAD.ActiveDocument.Background, "Site_Image")
# Guardar archivo # Guardar archivo
exporter.save() exporter.save()

View File

@@ -42,11 +42,10 @@ class OSMImporter:
} }
self.ssl_context = ssl.create_default_context(cafile=certifi.where()) self.ssl_context = ssl.create_default_context(cafile=certifi.where())
def transform_from_latlon(self, lat, lon): def transform_from_latlon(self, coordinates):
point = ImportElevation.getElevationFromOE([[lat, lon], ]) points = ImportElevation.getElevationFromOE(coordinates)
return FreeCAD.Vector(point[0].x, point[0].y, point[0].z) * scale - self.Origin pts = [FreeCAD.Vector(p.x, p.y, p.z).sub(self.Origin) for p in points]
'''x, y, _, _ = utm.from_latlon(lat, lon) return pts
return FreeCAD.Vector(x, y, .0) * scale - self.Origin'''
def get_osm_data(self, bbox): def get_osm_data(self, bbox):
query = f""" query = f"""
@@ -81,11 +80,16 @@ class OSMImporter:
root = ET.fromstring(osm_data) root = ET.fromstring(osm_data)
# Almacenar nodos transformados # Almacenar nodos transformados
coordinates = [[float(node.attrib['lat']), float(node.attrib['lon'])] for node in root.findall('node')]
coordinates = self.transform_from_latlon(coordinates)
for i, node in enumerate(root.findall('node')):
self. nodes[node.attrib['id']] = coordinates[i]
'''return
for node in root.findall('node'): for node in root.findall('node'):
self.nodes[node.attrib['id']] = self.transform_from_latlon( self.nodes[node.attrib['id']] = self.transform_from_latlon(
float(node.attrib['lat']), float(node.attrib['lat']),
float(node.attrib['lon']) float(node.attrib['lon'])
) )'''
# Procesar ways # Procesar ways
for way in root.findall('way'): for way in root.findall('way'):
@@ -162,11 +166,10 @@ class OSMImporter:
def create_buildings(self): def create_buildings(self):
building_layer = self.create_layer("Buildings") building_layer = self.create_layer("Buildings")
for way_id, data in self.ways_data.items(): for way_id, data in self.ways_data.items():
print(data)
if 'building' not in data['tags']: if 'building' not in data['tags']:
continue continue
print(data)
tags = data['tags'] tags = data['tags']
nodes = [self.nodes[ref] for ref in data['nodes'] if ref in self.nodes] nodes = [self.nodes[ref] for ref in data['nodes'] if ref in self.nodes]

View File

@@ -376,8 +376,7 @@ class _Fence(ArchComponent.Component):
site = PVPlantSite.get() site = PVPlantSite.get()
if True: # prueba if True: # prueba
import MeshPart as mp import MeshPart as mp
land = FreeCAD.ActiveDocument.Terrain.Mesh segments = mp.projectShapeOnMesh(pathwire, site.Terrain.Mesh, FreeCAD.Vector(0, 0, 1))
segments = mp.projectShapeOnMesh(pathwire, land, FreeCAD.Vector(0, 0, 1))
points=[] points=[]
for segment in segments: for segment in segments:
points.extend(segment) points.extend(segment)

View File

@@ -256,7 +256,9 @@ class _CommandPVPlantGate:
gate = makePVPlantFence() gate = makePVPlantFence()
try: try:
import MeshPart as mp import MeshPart as mp
point1 = mp.projectPointsOnMesh([point1,], FreeCAD.ActiveDocument.Terrain.Mesh, FreeCAD.Vector(0, 0, 1))[0] import PVPlantSite
site = PVPlantSite.get()
point1 = mp.projectPointsOnMesh([point1,], site.Terrain.Mesh, FreeCAD.Vector(0, 0, 1))[0]
except: except:
FreeCAD.Console.PrintError("No se puede encontrar punto 3D.." + "\n") FreeCAD.Console.PrintError("No se puede encontrar punto 3D.." + "\n")

View File

@@ -122,6 +122,7 @@ def getElevationFromOE(coordinates):
try: try:
r = get(query, timeout=20, verify=certifi.where()) # <-- Corrección aquí r = get(query, timeout=20, verify=certifi.where()) # <-- Corrección aquí
except RequestException as e: except RequestException as e:
print(f"Error en la solicitud: {str(e)}")
points = [] points = []
for i, point in enumerate(coordinates): for i, point in enumerate(coordinates):
c = utm.from_latlon(point[0], point[1]) c = utm.from_latlon(point[0], point[1])

View File

@@ -26,6 +26,7 @@ import Part
if FreeCAD.GuiUp: if FreeCAD.GuiUp:
import FreeCADGui, os import FreeCADGui, os
from PySide import QtCore, QtGui from PySide import QtCore, QtGui
from PySide.QtGui import QListWidgetItem
from PySide.QtCore import QT_TRANSLATE_NOOP from PySide.QtCore import QT_TRANSLATE_NOOP
else: else:
# \cond # \cond
@@ -62,7 +63,8 @@ class _PVPlantPlacementTaskPanel:
'''The editmode TaskPanel for Schedules''' '''The editmode TaskPanel for Schedules'''
def __init__(self, obj=None): def __init__(self, obj=None):
self.Terrain = PVPlantSite.get().Terrain self.site = PVPlantSite.get()
self.Terrain = self.site.Terrain
self.FrameSetups = None self.FrameSetups = None
self.PVArea = None self.PVArea = None
self.Area = None self.Area = None
@@ -77,8 +79,10 @@ class _PVPlantPlacementTaskPanel:
self.form.setWindowIcon(QtGui.QIcon(os.path.join(PVPlantResources.DirIcons, "way.svg"))) self.form.setWindowIcon(QtGui.QIcon(os.path.join(PVPlantResources.DirIcons, "way.svg")))
self.form.buttonPVArea.clicked.connect(self.addPVArea) self.form.buttonPVArea.clicked.connect(self.addPVArea)
self.form.buttonAddFrame.clicked.connect(self.addFrame) #self.form.buttonAddFrame.clicked.connect(self.addFrames)
self.form.buttonRemoveFrame.clicked.connect(self.removeFrame) #self.form.buttonRemoveFrame.clicked.connect(self.removeFrame)
self.addFrames()
def addPVArea(self): def addPVArea(self):
sel = FreeCADGui.Selection.getSelection() sel = FreeCADGui.Selection.getSelection()
@@ -86,21 +90,10 @@ class _PVPlantPlacementTaskPanel:
self.PVArea = sel[0] self.PVArea = sel[0]
self.form.editPVArea.setText(self.PVArea.Label) self.form.editPVArea.setText(self.PVArea.Label)
def addFrame(self): def addFrames(self):
from Mechanical.Frame import PVPlantFrame for frame_setup in self.site.Frames:
selection = FreeCADGui.Selection.getSelection() list_item = QListWidgetItem(frame_setup.Name, self.form.listFrameSetups)
self.FrameSetup = selectionFilter(selection, PVPlantFrame.TrackerSetup) list_item.setCheckState(QtCore.Qt.Checked)
if len(selection) > 0:
items = []
for x in range(self.form.listFrameSetups.count()):
items.append(self.form.listFrameSetups.item(x).text())
if not (selection[0].Name in items):
self.form.listFrameSetups.addItem(selection[0].Name)
def removeFrame(self):
''' remove select item from list '''
self.form.listFrameSetups.takeItem(self.form.listFrameSetups.currentRow())
def createFrameFromPoints(self, dataframe): def createFrameFromPoints(self, dataframe):
from Mechanical.Frame import PVPlantFrame from Mechanical.Frame import PVPlantFrame
@@ -111,6 +104,12 @@ class _PVPlantPlacementTaskPanel:
MechanicalGroup.Label = "Frames" MechanicalGroup.Label = "Frames"
FreeCAD.ActiveDocument.MechanicalGroup.addObject(MechanicalGroup) FreeCAD.ActiveDocument.MechanicalGroup.addObject(MechanicalGroup)
if self.form.cbSubfolders.checked:
group = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroup", self.PVArea.Label)
group.Label = self.PVArea.Label
MechanicalGroup.addObject(group)
MechanicalGroup = group
placements = dataframe["placement"].tolist() placements = dataframe["placement"].tolist()
types = dataframe["type"].tolist() types = dataframe["type"].tolist()
frames = [] frames = []
@@ -121,33 +120,30 @@ class _PVPlantPlacementTaskPanel:
newrack.Placement = placements[idx] newrack.Placement = placements[idx]
MechanicalGroup.addObject(newrack) MechanicalGroup.addObject(newrack)
frames.append(newrack) frames.append(newrack)
if self.PVArea.Name.startswith("FrameArea"): if self.PVArea.Name.startswith("FrameArea"):
self.PVArea.Frames = frames self.PVArea.Frames = frames
# TODO: else
def getProjected(self, shape): def getProjected(self, shape):
""" returns projected edges from a shape and a direction """ """ returns projected edges from a shape and a direction """
if shape.BoundBox.ZLength == 0: if shape.BoundBox.ZLength == 0:
edges = shape.Edges return Part.Face(Part.Wire(shape.Edges))
return Part.Face(Part.Wire(edges))
else: from Utils import PVPlantUtils as utils
from Utils import PVPlantUtils as utils wire = utils.simplifyWire(utils.getProjected(shape))
wire = utils.simplifyWire(utils.getProjected(shape)) return Part.Face(wire.removeSplitter()) if wire.isClosed() else Part.Face(wire)
if wire.isClosed():
wire = wire.removeSplitter()
return Part.Face(wire)
def calculateWorkingArea(self): def calculateWorkingArea(self):
self.Area = self.getProjected(self.PVArea.Shape) self.Area = self.getProjected(self.PVArea.Shape)
tmp = FreeCAD.ActiveDocument.findObjects(Name="ExclusionArea") exclusion_areas = FreeCAD.ActiveDocument.findObjects(Name="ExclusionArea")
if len(tmp):
ProhibitedAreas = list() if exclusion_areas:
for obj in tmp: prohibited_faces = []
for obj in exclusion_areas:
face = self.getProjected(obj.Base.Shape) face = self.getProjected(obj.Base.Shape)
if face.isValid(): if face.isValid():
ProhibitedAreas.append(face) prohibited_faces.append(face)
self.Area = self.Area.cut(ProhibitedAreas) self.Area = self.Area.cut(prohibited_faces)
def getAligments(self): def getAligments(self):
# TODO: revisar todo esto: ----------------------------------------------------------------- # TODO: revisar todo esto: -----------------------------------------------------------------
@@ -280,104 +276,6 @@ class _PVPlantPlacementTaskPanel:
placeRegion(df) placeRegion(df)
return df return df
"""def placeonregion_old(frames): # old
for colnum, col in enumerate(frames):
groups = list()
groups.append([col[0]])
for i in range(1, len(col)):
group = groups[-1]
long = (col[i].sub(group[-1])).Length
long -= width
if long <= dist:
group.append(col[i])
else:
groups.append([col[i]])
for group in groups:
points = list()
points.append(group[0].sub(vec1))
for ind in range(0, len(group) - 1):
points.append((group[ind].sub(vec1) + group[ind + 1].add(vec1)) / 2)
points.append(group[-1].add(vec1))
points3D = list()
'''
# v0
for ind in range(len(points) - 1):
line = Part.LineSegment(points[ind], points[ind + 1])
tmp = terrain.makeParallelProjection(line.toShape(), FreeCAD.Vector(0, 0, 1))
if len(tmp.Vertexes) > 0:
if ind == 0:
points3D.append(tmp.Vertexes[0].Point)
points3D.append(tmp.Vertexes[-1].Point)
'''
# V1
if type == 0: # Mesh:
import MeshPart as mp
for point in points:
point3D = mp.projectPointsOnMesh([point, ], terrain, FreeCAD.Vector(0, 0, 1))
if len(point3D) > 0:
points3D.append(point3D[0])
else: # Shape:
line = Part.LineSegment(points[0], points[-1])
tmp = terrain.makeParallelProjection(line.toShape(), FreeCAD.Vector(0, 0, 1))
if len(tmp.Vertexes) > 0:
tmppoints = [ver.Point for ver in tmp.Vertexes]
if mode == 1: # mode = normal
for point in points:
'''# OPTION 1:
line = Part.Line(point, point + FreeCAD.Vector(0, 0, 10))
for i in range(len(tmppoints) - 1):
seg = Part.LineSegment(tmppoints[i], tmppoints[i + 1])
inter = line.intersect(seg)
print(inter)
if len(inter) > 0:
points3D.append(FreeCAD.Vector(inter[0].X, inter[0].Y, inter[0].Z))
'''
# OPTION 2:
plane = Part.Plane(point, self.Dir)
for i in range(len(tmppoints) - 1):
seg = Part.LineSegment(tmppoints[i], tmppoints[i + 1])
inter = plane.intersect(seg)
if len(inter) > 0:
if len(inter[0]):
inter = inter[0]
points3D.append(FreeCAD.Vector(inter[0].X, inter[0].Y, inter[0].Z))
break
else: # TODO: mode = Trend
# TODO: check:
from scipy import stats
xx = list()
yy = list()
zz = list()
for pts in tmppoints:
xx.append(pts.x)
yy.append(pts.y)
zz.append(pts.z)
slope, intercept, r, p, std_err = stats.linregress(yy, zz)
def myfunc(x):
return slope * x + intercept
x = list()
x.append(yy[0])
x.append(yy[-1])
newzz = list(map(myfunc, x))
points3D.append(FreeCAD.Vector(xx[0], yy[0], newzz[0]))
points3D.append(FreeCAD.Vector(xx[-1], yy[-1], newzz[1]))
for ind in range(0, len(points3D) - 1):
pl = FreeCAD.Placement()
vec = points3D[ind] - points3D[ind + 1]
pl.Base = FreeCAD.Vector(group[ind])
p = (points3D[ind] + points3D[ind + 1]) / 2
pl.Base.z = p.z
rot = FreeCAD.Rotation(FreeCAD.Vector(-1, 0, 0), vec)
pl.Rotation = FreeCAD.Rotation(rot.toEuler()[0], rot.toEuler()[1], 0)
placements.append(pl)
return placements"""
def isInside(self, frame, point): def isInside(self, frame, point):
if self.Area.isInside(point, 10, True): if self.Area.isInside(point, 10, True):
frame.Placement.Base = point frame.Placement.Base = point
@@ -542,23 +440,32 @@ class _PVPlantPlacementTaskPanel:
params.SetBool("AutoSaveEnabled", False) params.SetBool("AutoSaveEnabled", False)
FreeCAD.ActiveDocument.RecomputesFrozen = True FreeCAD.ActiveDocument.RecomputesFrozen = True
items = [] items = [
for x in range(self.form.listFrameSetups.count()): FreeCAD.ActiveDocument.getObject(item.text())
items.append(FreeCAD.ActiveDocument.getObject(self.form.listFrameSetups.item(x).text())) for i in range(self.form.listFrameSetups.count())
tmpframes = list() if (item := self.form.listFrameSetups.item(i)).checkState() == QtCore.Qt.Checked
]
"""seen_lengths = set()
tmpframes = []
for frame in sorted(items, key=lambda rack: rack.Length, reverse=True): for frame in sorted(items, key=lambda rack: rack.Length, reverse=True):
found = False if frame.Length not in seen_lengths:
seen_lengths.add(frame.Length)
tmpframes.append(frame)
'''found = False
for tmp in tmpframes: for tmp in tmpframes:
if tmp.Length == frame.Length: if tmp.Length == frame.Length:
found = True found = True
break break
if not found: if not found:
tmpframes.append(frame) tmpframes.append(frame)'''
self.FrameSetups = tmpframes.copy() self.FrameSetups = tmpframes.copy()"""
longerFrame = self.FrameSetups[0]
unique_frames = {frame.Length.Value: frame for frame in items}
self.FrameSetups = sorted(list(unique_frames.values()), key=lambda rack: rack.Length, reverse=True)
self.gap_col = FreeCAD.Units.Quantity(self.form.editGapCols.text()).Value self.gap_col = FreeCAD.Units.Quantity(self.form.editGapCols.text()).Value
self.gap_row = FreeCAD.Units.Quantity(self.form.editGapRows.text()).Value + longerFrame.Length.Value self.gap_row = FreeCAD.Units.Quantity(self.form.editGapRows.text()).Value + self.FrameSetups[0].Length.Value
self.offsetX = FreeCAD.Units.Quantity(self.form.editOffsetHorizontal.text()).Value self.offsetX = FreeCAD.Units.Quantity(self.form.editOffsetHorizontal.text()).Value
self.offsetY = FreeCAD.Units.Quantity(self.form.editOffsetVertical.text()).Value self.offsetY = FreeCAD.Units.Quantity(self.form.editOffsetVertical.text()).Value
@@ -581,8 +488,6 @@ class _PVPlantPlacementTaskPanel:
print(" -- Tiempo tardado:", total_time) print(" -- Tiempo tardado:", total_time)
FreeCADGui.Control.closeDialog() FreeCADGui.Control.closeDialog()
FreeCAD.ActiveDocument.recompute() FreeCAD.ActiveDocument.recompute()
#return True
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
# function AdjustToTerrain # function AdjustToTerrain

View File

@@ -15,6 +15,338 @@
<string>Park Settings</string> <string>Park Settings</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" alignment="Qt::AlignmentFlag::AlignTop">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Estructura:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QListWidget" name="listFrameSetups">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>54</height>
</size>
</property>
</widget>
</item>
<item row="7" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<widget class="QWidget" name="widget_2" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="buttonAddFrame">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="buttonRemoveFrame">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="buttonPVArea">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="3">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Configuración</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="8" column="1">
<widget class="QComboBox" name="comboDirV">
<item>
<property name="text">
<string>De arriba a abajo</string>
</property>
</item>
<item>
<property name="text">
<string>De abajo a arriba</string>
</property>
</item>
<item>
<property name="text">
<string>Del centro a los lados</string>
</property>
</item>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_2">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Dirección Horizontal</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QComboBox" name="comboDirH">
<item>
<property name="text">
<string>De izquierda a derecha</string>
</property>
</item>
<item>
<property name="text">
<string>De derecha a izquiera</string>
</property>
</item>
<item>
<property name="text">
<string>De centro a los lados</string>
</property>
</item>
</widget>
</item>
<item row="11" column="1">
<widget class="QCheckBox" name="cbAlignFrames">
<property name="text">
<string>Alinear estructuras</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="editGapRows">
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property>
<property name="suffix">
<string> mm</string>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Pitch</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QDoubleSpinBox" name="editOffsetHorizontal">
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property>
<property name="suffix">
<string> m</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>-10000.000000000000000</double>
</property>
<property name="maximum">
<double>10000.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Orientación</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_7">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Offset Horizontal</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_9">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Offset Vertical</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QDoubleSpinBox" name="editOffsetVertical">
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property>
<property name="suffix">
<string> m</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>-10000.000000000000000</double>
</property>
<property name="maximum">
<double>10000.000000000000000</double>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="editGapCols">
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property>
<property name="suffix">
<string> m</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>100.000000000000000</double>
</property>
<property name="value">
<double>5.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboOrientation">
<item>
<property name="text">
<string>Norte - Sur</string>
</property>
</item>
<item>
<property name="text">
<string>Este - Oeste</string>
</property>
</item>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_11">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Dirección Vertical</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_5">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Espacio entre filas</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="editInnerSpacing"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string> - Inner Spacing</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="0" colspan="3"> <item row="6" column="0" colspan="3">
<widget class="QGroupBox" name="groupCorridor"> <widget class="QGroupBox" name="groupCorridor">
<property name="title"> <property name="title">
@@ -59,10 +391,10 @@
<item row="3" column="1"> <item row="3" column="1">
<widget class="QDoubleSpinBox" name="editRowGap"> <widget class="QDoubleSpinBox" name="editRowGap">
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property> </property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
<property name="prefix"> <property name="prefix">
<string/> <string/>
@@ -110,10 +442,10 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QDoubleSpinBox" name="editColGap"> <widget class="QDoubleSpinBox" name="editColGap">
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property> </property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
<property name="prefix"> <property name="prefix">
<string/> <string/>
@@ -135,10 +467,10 @@
<item row="2" column="1"> <item row="2" column="1">
<widget class="QSpinBox" name="editRowCount"> <widget class="QSpinBox" name="editRowCount">
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property> </property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
<property name="value"> <property name="value">
<number>4</number> <number>4</number>
@@ -148,10 +480,10 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QSpinBox" name="editColCount"> <widget class="QSpinBox" name="editColCount">
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property> </property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
<property name="value"> <property name="value">
<number>8</number> <number>8</number>
@@ -161,45 +493,6 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="1" column="2">
<widget class="QPushButton" name="buttonPVArea">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QWidget" name="widget_2" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="buttonAddFrame">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="buttonRemoveFrame">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
@@ -207,292 +500,9 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QLineEdit" name="editPVArea"/> <widget class="QLineEdit" name="editPVArea"/>
</item> </item>
<item row="5" column="0" colspan="3">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Configuración</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="8" column="0">
<widget class="QLabel" name="label_9">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Offset Vertical</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Orientación</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="cbAlignFrames">
<property name="text">
<string>Alinear estructuras</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Espacio entre filas</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_2">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Dirección Horizontal</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_7">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Offset Horizontal</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Pitch</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_11">
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Dirección Vertical</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboOrientation">
<item>
<property name="text">
<string>Norte - Sur</string>
</property>
</item>
<item>
<property name="text">
<string>Este - Oeste</string>
</property>
</item>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="editGapCols">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="suffix">
<string> m</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>100.000000000000000</double>
</property>
<property name="value">
<double>5.000000000000000</double>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="comboDirH">
<item>
<property name="text">
<string>De izquierda a derecha</string>
</property>
</item>
<item>
<property name="text">
<string>De derecha a izquiera</string>
</property>
</item>
<item>
<property name="text">
<string>De centro a los lados</string>
</property>
</item>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="comboDirV">
<item>
<property name="text">
<string>De arriba a abajo</string>
</property>
</item>
<item>
<property name="text">
<string>De abajo a arriba</string>
</property>
</item>
<item>
<property name="text">
<string>Del centro a los lados</string>
</property>
</item>
</widget>
</item>
<item row="7" column="1">
<widget class="QDoubleSpinBox" name="editOffsetHorizontal">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="suffix">
<string> m</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>-10000.000000000000000</double>
</property>
<property name="maximum">
<double>10000.000000000000000</double>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QDoubleSpinBox" name="editOffsetVertical">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="suffix">
<string> m</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>-10000.000000000000000</double>
</property>
<property name="maximum">
<double>10000.000000000000000</double>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="editGapRows">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="suffix">
<string> mm</string>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0" alignment="Qt::AlignTop">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Estructura:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QListWidget" name="listFrameSetups">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>54</height>
</size>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<tabstops> <tabstops>

View File

@@ -771,12 +771,12 @@ class _PVPlantSite(ArchSite._Site):
import PVPlantImportGrid import PVPlantImportGrid
x, y, zone_number, zone_letter = utm.from_latlon(lat, lon) x, y, zone_number, zone_letter = utm.from_latlon(lat, lon)
self.obj.UtmZone = zone_list[zone_number - 1] self.obj.UtmZone = zone_list[zone_number - 1]
zz = PVPlantImportGrid.getElevationFromOE([[lat, lon]])
self.obj.Origin = FreeCAD.Vector(x * 1000, y * 1000, zz[0].z) point = PVPlantImportGrid.getElevationFromOE([[lat, lon]])
#self.obj.OriginOffset = FreeCAD.Vector(x * 1000, y * 1000, 0) #?? self.obj.Origin = FreeCAD.Vector(point[0].x, point[0].y, point[0].z)
self.obj.Latitude = lat self.obj.Latitude = lat
self.obj.Longitude = lon self.obj.Longitude = lon
self.obj.Elevation = zz[0].z self.obj.Elevation = point[0].z
class _ViewProviderSite(ArchSite._ViewProviderSite): class _ViewProviderSite(ArchSite._ViewProviderSite):

View File

@@ -39,6 +39,16 @@
<property name="spacing"> <property name="spacing">
<number>9</number> <number>9</number>
</property> </property>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Maximum west-east slope:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QWidget" name="widget_2" native="true"/>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
@@ -46,17 +56,20 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="0" column="2">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Frame coloring:</string> <string>South facing</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="5" column="0">
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@@ -66,71 +79,20 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="3" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>Maximum west-east slope:</string> <string>Frame coloring:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="editWETL">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="suffix">
<string> º</string>
</property>
<property name="maximum">
<double>90.000000000000000</double>
</property>
<property name="value">
<double>8.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QDoubleSpinBox" name="editSFTL">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="suffix">
<string> º</string>
</property>
<property name="maximum">
<double>90.000000000000000</double>
</property>
<property name="value">
<double>2.800000000000000</double>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QWidget" name="widget_2" native="true"/>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>South facing</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QDoubleSpinBox" name="editNFTL"> <widget class="QDoubleSpinBox" name="editNFTL">
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property> </property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
<property name="suffix"> <property name="suffix">
<string> º</string> <string> º</string>
@@ -149,7 +111,45 @@
<string>North Facing</string> <string>North Facing</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QDoubleSpinBox" name="editSFTL">
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property>
<property name="suffix">
<string> º</string>
</property>
<property name="maximum">
<double>90.000000000000000</double>
</property>
<property name="value">
<double>2.800000000000000</double>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="editWETL">
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property>
<property name="suffix">
<string> º</string>
</property>
<property name="maximum">
<double>90.000000000000000</double>
</property>
<property name="value">
<double>8.000000000000000</double>
</property> </property>
</widget> </widget>
</item> </item>