diff --git a/Electrical/Cable/PVPlantCable.py b/Electrical/Cable/PVPlantCable.py
index 62348ad..a393a7c 100644
--- a/Electrical/Cable/PVPlantCable.py
+++ b/Electrical/Cable/PVPlantCable.py
@@ -47,16 +47,16 @@ except AttributeError:
import PVPlantResources
-def makeCable(base = None):
- obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", "Cable")
+def makeCable(name="Cable"):
+ obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", name)
+ obj.Label = name
Cable(obj)
ViewProviderCable(obj.ViewObject)
- if base:
- obj.Base = base
return obj
+
class Cable(ArchComponent.Component):
- "A Base Frame Obcject - Class"
+ "A Cable Obcject - Class"
def __init__(self, obj):
ArchComponent.Component.__init__(self, obj)
@@ -254,48 +254,10 @@ class Cable(ArchComponent.Component):
return val.Placement.Base
def execute(self, obj):
- import Part, DraftGeomUtils
- import Draft
-
- if obj.Base:
- w = obj.Base.Shape.SubShapes[1].SubShapes[0]
- w = DraftGeomUtils.filletWire(w, 150)
- else:
- return
-
- """if obj.Base:
- # Si tiene ruta, dibujar ruteado
- import PVPlantTrench as trench
- if isinstance(obj.Base, trench.Trench):
- w = obj.Base.Shape.SubShapes[0]
- else:
- w = obj.Base.Shape
- elif obj.From and obj.Name:
- '''line = Part.LineSegment()
- line.StartPoint = getPoint(obj.From)
- line.EndPoint = getPoint(obj.To)
- w = Part.Wire(line.toShape())'''
- w = Part.makePolygon([self.getPoint(obj.From), self.getPoint(obj.To)])
- else:
- return"""
-
- r = obj.ExternalDiameter.Value / 2
- p = Part.Wire([Part.Circle(FreeCAD.Vector(0, 0, 0),
- FreeCAD.Vector(0, 1, 0),
- r).toShape()])
- c = obj.Offset
- c.x -= r
- c.z += r
- v1 = w.Vertexes[1].Point - w.Vertexes[0].Point
- v2 = DraftGeomUtils.getNormal(p)
- p.Placement.Base = w.Vertexes[0].Point + c
- p.Placement.Rotation = FreeCAD.Rotation(v2, v1)
-
- obj.Shape = w.makePipeShell([p], True, False, 0)
- obj.Distance = w.Length
+ ''' No hacer nada. Es un componente sin shape'''
-class ViewProviderCable(ArchComponent.ViewProviderComponent):
+class ViewProviderCable(ArchComponent.ViewProviderComponent): #hace falta??
def __init__(self, vobj):
ArchComponent.ViewProviderComponent.__init__(self, vobj)
@@ -311,15 +273,7 @@ class CommandCable:
'ToolTip': QT_TRANSLATE_NOOP("Placement", "Calcular el BOQ de la")}
def Activated(self):
- import Draft
- sel = FreeCADGui.Selection.getSelection()
- wire = None
- for obj in sel:
- if Draft.getType(obj) == "Wire":
- wire = obj
- break
-
- makeCable(wire)
+ makeCable()
FreeCAD.ActiveDocument.recompute()
def IsActive(self):
diff --git a/Export/PVPlantBOQCivil.py b/Export/PVPlantBOQCivil.py
index ae03a22..8c3799e 100644
--- a/Export/PVPlantBOQCivil.py
+++ b/Export/PVPlantBOQCivil.py
@@ -59,7 +59,7 @@ def makeBOQCivil():
-class _CommandBOQCivil:
+class CommandBOQCivil:
def GetResources(self):
return {'Pixmap': str(os.path.join(DirIcons, "boqc.svg")),
@@ -76,5 +76,5 @@ class _CommandBOQCivil:
else:
return False
-if FreeCAD.GuiUp:
- FreeCADGui.addCommand('BOQCivil', _CommandBOQCivil())
+'''if FreeCAD.GuiUp:
+ FreeCADGui.addCommand('BOQCivil', _CommandBOQCivil())'''
diff --git a/Export/PVPlantBOQElectrical.py b/Export/PVPlantBOQElectrical.py
index 20f790e..28373a5 100644
--- a/Export/PVPlantBOQElectrical.py
+++ b/Export/PVPlantBOQElectrical.py
@@ -83,7 +83,8 @@ def makeBOQElectrical():
b = mgb.get_boundary(m)
Part.show(b)
-class _CommandBOQElectrical:
+
+class CommandBOQElectrical:
def GetResources(self):
return {'Pixmap': str(os.path.join(DirIcons, "boqe.svg")),
'Accel': "R, E",
@@ -100,5 +101,5 @@ class _CommandBOQElectrical:
return False
-if FreeCAD.GuiUp:
- FreeCADGui.addCommand('BOQElectrical', _CommandBOQElectrical())
+'''if FreeCAD.GuiUp:
+ FreeCADGui.addCommand('BOQElectrical', _CommandBOQElectrical())'''
diff --git a/Export/PVPlantBOQMechanical.py b/Export/PVPlantBOQMechanical.py
index d1aa28f..b392405 100644
--- a/Export/PVPlantBOQMechanical.py
+++ b/Export/PVPlantBOQMechanical.py
@@ -294,7 +294,7 @@ def spreadsheetBOQPanelCollision(sheet, sel):
sheet['G{0}'.format(ind + 2)] = sel[ind].Placement.Rotation.toEuler()[1]
sheet['H{0}'.format(ind + 2)] = sel[ind].NumberPole.Value
-class _CommandBOQMechanical:
+class CommandBOQMechanical:
def GetResources(self):
return {'Pixmap': str(os.path.join(PVPlantResources.DirIcons, "boqm.svg")),
'Accel': "R, M",
@@ -340,5 +340,5 @@ class _CommandBOQMechanical:
else:
return False
-if FreeCAD.GuiUp:
- FreeCADGui.addCommand('BOQMechanical', _CommandBOQMechanical())
+'''if FreeCAD.GuiUp:
+ FreeCADGui.addCommand('BOQMechanical', CommandBOQMechanical())'''
diff --git a/Export/exportPF.py b/Export/exportPF.py
index 1301924..5009b59 100644
--- a/Export/exportPF.py
+++ b/Export/exportPF.py
@@ -186,8 +186,8 @@ def createPVPanel(name):
typpvpanel.noct = 45.0 # SINTC (double) (Cº)
typpvpanel.manuf = "" # Fabricante
- typpypanel.chr_name = "" # Nombre característico
- typpypanel.appr_status = 1 # Estado: 0: No aprobado, 1: aprobado
+ typpvpanel.chr_name = "" # Nombre característico
+ typpvpanel.appr_status = 1 # Estado: 0: No aprobado, 1: aprobado
return typpvpanel
diff --git a/Export/exportPVSyst.py b/Export/exportPVSyst.py
index bfe0d66..f8bde1d 100644
--- a/Export/exportPVSyst.py
+++ b/Export/exportPVSyst.py
@@ -46,15 +46,10 @@ except AttributeError:
from PVPlantResources import DirIcons as DirIcons
-## @package importDAE
-# \ingroup ARCH
-# \brief DAE (Collada) file format importer and exporter
-#
-# This module provides tools to import and export Collada (.dae) files.
-__title__ = "FreeCAD Collada importer"
-__author__ = "Yorik van Havre"
-__url__ = "http://www.freecadweb.org"
+__title__ = "FreeCAD PVSyst importer"
+__author__ = "Javier"
+#__url__ = "http://www.freecadweb.org"
try:
# Python 2 forward compatibility
@@ -453,7 +448,7 @@ def exportToPVC(path, exportTerrain = False):
array = SubElement(axis, 'float_array')
array.set('id', 'tracker{0}AxisFloatArray1'.format(ind))
array.set('count', '3')
- array.text = '{0:.6f} {1:.6f} {2:.6f}'.format(centers[i].x, centers[i].y, centers[i].z)
+ array.text = '{0:.6f} {1:.6f} {2:.6f}'.format(centers[ind].x, centers[ind].y, centers[ind].z)
min_phi = SubElement(frame, 'min_phi')
min_phi.text = '{0}'.format(int(obj.Setup.MinPhi.Value))
@@ -529,11 +524,10 @@ def exportToPVC(path, exportTerrain = False):
frame_setup["footprint"] = ""
objind = 0
+
# TODO: revisar
- for type in frameType:
- isTracker = "tracker" in type.Proxy.Type.lower()
- #TODO: Sólo para los proyectos de NAcho. Borrar
- isTracker = False
+ for typ in frameType:
+ isTracker = "tracker" in typ.Proxy.Type.lower()
objectlist = FreeCAD.ActiveDocument.findObjects(Name="Tracker")
tmp = []
@@ -545,7 +539,7 @@ def exportToPVC(path, exportTerrain = False):
objectlist = tmp.copy()
for obj in objectlist:
- if obj.Setup == type:
+ if obj.Setup == typ:
findex = numpy.array([])
modules = obj.Setup.Shape.SubShapes[0].SubShapes[0]
@@ -726,26 +720,26 @@ def exportToH2P(path): # sólo válido para mesas
#for obj in objects:
grouptype.append(objects[0])
- for type in grouptype:
+ for typ in grouptype:
st += 'TABLE\n' \
'10\n'
- st += f3.format(type.Width.Value) + ',' + f3.format(type.Length.Value) + ',' + \
+ st += f3.format(typ.Width.Value) + ',' + f3.format(typ.Length.Value) + ',' + \
f3.format(0) + ',' + f3.format(0) + ',' + f3.format(0) + ',' + f3.format(0) + "\n"
#'#{ f3 %pvsyst.ilb.to_mm },#{f3 %pvsyst.irb.to_mm},#{f3 %pvsyst.itb.to_mm},' \
#'#{f3 %pvsyst.ibb.to_mm}\n'
st += '20\n'
- st += str(int(type.ModulesCols.Value)) + ',' + str(int(type.ModulesRows.Value)) + ',' + \
- str(type.ModuleColGap.Value) + ',' + str(type.ModuleRowGap.Value) + ',' + '30\n'
+ st += str(int(typ.ModulesCols.Value)) + ',' + str(int(typ.ModulesRows.Value)) + ',' + \
+ str(typ.ModuleColGap.Value) + ',' + str(typ.ModuleRowGap.Value) + ',' + '30\n'
st += '30\n'
- st += '1,' + f3.format(type.ModuleWidth.Value) + ',' + f3.format(type.ModuleHeight.Value) + ',' + \
- f3.format(type.ModuleThick.Value) + ',' + f2.format(450) + '\n' #f2.format(type.ModulePower.Value) + '\n'
+ st += '1,' + f3.format(typ.ModuleWidth.Value) + ',' + f3.format(typ.ModuleHeight.Value) + ',' + \
+ f3.format(typ.ModuleThick.Value) + ',' + f2.format(450) + '\n' #f2.format(typ.ModulePower.Value) + '\n'
# cornerdown = find_component_sizes(group.cdef)[1]
# pvorigin = Geom::Point3d.new(cornerdown.x, cornerdown.y, 0)
# group.instances.each{ | ins | str += pvsyst_insert(ins, pvorigin)}
for obj in objects:
- if obj.CloneOf == type:
+ if obj.CloneOf == typ:
st += H2PInsert(obj)
## TODO: Bucle para buscar objetos que den sombra y el terreno. Todos llaman a H2PMesh
@@ -778,12 +772,12 @@ def H2PInsert(obj):
return st
-def H2PMesh(mesh, type):
+def H2PMesh(mesh, typ):
scale = 0.001 ## ver como se puede hacer para que sea general. Pasar de mm a m
f3 = '{:.3f}'
st = ''
- if type:
+ if typ:
st = 'ShadowObject\nFence\n'
else:
st = 'DGM\n'
@@ -799,7 +793,7 @@ def H2PMesh(mesh, type):
return st
-class _PVSystTaskPanel:
+class PVSystTaskPanel:
def __init__(self):
self.form = FreeCADGui.PySideUic.loadUi(os.path.dirname(__file__) + "/exportPVSyst.ui")
@@ -812,7 +806,7 @@ class _PVSystTaskPanel:
def accept(self):
import datetime
x = datetime.datetime.now()
- date = x.strftime("%y%m%d%H%M%S")
+ date = x.strftime("%Y%m%d%H%M%S")
overwrite = True
path = os.path.join(os.path.dirname(FreeCAD.ActiveDocument.FileName), "outputs", "PVSyst")
@@ -820,8 +814,8 @@ class _PVSystTaskPanel:
os.makedirs(path)
name = FreeCAD.ActiveDocument.Label
- if not overwrite:
- name = date + "-" + name
+ #if not overwrite:
+ name = date + "-" + name
filename = os.path.join(path, name)
#if self.form.cbDAE.isChecked():
@@ -840,7 +834,7 @@ class _PVSystTaskPanel:
FreeCADGui.Control.closeDialog()
return True
-class _CommandExportToPVSyst:
+'''class _CommandExportToPVSyst:
"Export to PVSyst"
def GetResources(self):
@@ -861,4 +855,4 @@ class _CommandExportToPVSyst:
return False
if FreeCAD.GuiUp:
- FreeCADGui.addCommand('ExportToPVSyst', _CommandExportToPVSyst())
+ FreeCADGui.addCommand('ExportToPVSyst', _CommandExportToPVSyst())'''
diff --git a/InitGui.py b/InitGui.py
index be8a351..26d1c2f 100644
--- a/InitGui.py
+++ b/InitGui.py
@@ -28,33 +28,10 @@ from pathlib import Path
import sys
import os
import FreeCADGui
+import FreeCAD
FreeCADGui.updateLocale()
-try:
- import PVPlantGeoreferencing, PVPlantPlacement, \
- PVPlantTerrainAnalisys, PVPlantSite, PVPlantImportGrid, PVPlantFence, \
- PVPlantFoundation, PVPlantCreateTerrainMesh, \
- PVPlantTreeGenerator, PVPlantBuilding, PVPlantTrench, PVPlantEarthWorks, \
- PVPlantStringing, \
- PVPlantPad, PVPlantRoad, PVPlantTerrain, PVPlantManhole, \
- GraphProfile, Utils.PVPlantTrace, \
- reload
- import PVPlantRackChecking
-
- from Project.Area import PVPlantArea, PVPlantAreaUtils
- from Project import ProjectSetup
-
- from Importer import importDXF
-
- from Mechanical.Frame import PVPlantFrame
-
- from Electrical.Cable import PVPlantCable, PVPlantElectricalLine
- from Electrical.CombinerBox import PVPlantStringBox
- from Electrical.Inverter import PVPlantInverter
-except ImportError as e:
- print(f"Error importing modules: {e}")
-
class PVPlantWorkbench(Workbench):
from PVPlantResources import DirIcons as DirIcons
@@ -66,49 +43,22 @@ class PVPlantWorkbench(Workbench):
#sys.path.append(r"C:\Users\javie\AppData\Roaming\FreeCAD\Mod")
sys.path.append(os.path.join(FreeCAD.getUserAppDataDir(), 'Mod'))
- import PVPlantTools
+ import PVPlantTools, reload
self.projectlist = PVPlantTools.projectlist
+ self.projectlist.insert(0, 'Reload')
+ self.projectlist.insert(1, 'Separator')
+ self.framelist = PVPlantTools.pv_list
+
+ from Export import ExporterCommands
+ self.inportExportlist = ExporterCommands.Exportlist
- # A list of command names created in the line above
- '''self.projectlist = ["Reload",
- "PVPlantSite",
- "PVPlantGeoreferencing",
- "ProjectSetup",
- # "ImportGrid",
- "Terrain",
- "PointsGroup",
- "PVPlantCreateTerrainMesh",
- "PVPlantAreas",
- "SplitArea",
- "TerrainAnalisys",
- "Trenches",
- "PVPlantEarthworks",
- "PVPlantPad",
- "PVPlantRoad",
- "PVPlantManhole",
- # "PVPlantFoundation"
- "GraphTerrainProfile",
- "Trace",
- ]'''
- self.framelist = [
- "RackType",
- "PVPlantRackCheck",
- "Separator",
- "PVPlantPlacement",
- "PVPlantAdjustToTerrain",
- "PVPlantConvertTo",
- "PVArea"
- ]
self.objectlist = [
"PVPlantTree",
"PVPlantBuilding",
"PVPlantFenceGroup",
]
-
- from Export import ExporterCommands
- self.inportExportlist = ExporterCommands.Exportlist
self.electricalList = ["PVPlantStringBox",
"PVPlantCable",
"PVPlanElectricalLine",
@@ -119,7 +69,6 @@ class PVPlantWorkbench(Workbench):
]
self.roads = ["PVPlantRoad",
-
]
self.pads = ["PVPlantPad",
diff --git a/PVPLantPlacement-old.py b/PVPLantPlacement-old_2022.py
similarity index 100%
rename from PVPLantPlacement-old.py
rename to PVPLantPlacement-old_2022.py
diff --git a/PVPlantCreateTerrainMesh.py b/PVPlantCreateTerrainMesh.py
index 45e3403..8a693e0 100644
--- a/PVPlantCreateTerrainMesh.py
+++ b/PVPlantCreateTerrainMesh.py
@@ -33,7 +33,7 @@ except AttributeError:
import os, math
from PVPlantResources import DirIcons as DirIcons
-class _TaskPanel:
+class TaskPanel:
def __init__(self, obj = None):
self.obj = None
self.select = 0
@@ -251,7 +251,7 @@ def Open3DTriangle(point_cloud):
#p_mesh_crop = mesh.crop(bbox)
return mesh
-class _PVPlantCreateTerrainMesh:
+'''class _PVPlantCreateTerrainMesh:
def GetResources(self):
return {'Pixmap': str(os.path.join(DirIcons, "surface.svg")),
@@ -268,4 +268,4 @@ class _PVPlantCreateTerrainMesh:
if FreeCAD.GuiUp:
- FreeCADGui.addCommand('PVPlantCreateTerrainMesh', _PVPlantCreateTerrainMesh())
+ FreeCADGui.addCommand('PVPlantCreateTerrainMesh', _PVPlantCreateTerrainMesh())'''
diff --git a/PVPlantEarthWorks.py b/PVPlantEarthWorks.py
index f126e94..1ffb063 100644
--- a/PVPlantEarthWorks.py
+++ b/PVPlantEarthWorks.py
@@ -488,7 +488,7 @@ class ViewProviderEarthWorksVolume:
return None
-class _EarthWorksTaskPanel:
+class EarthWorksTaskPanel:
def __init__(self):
self.To = None
@@ -827,7 +827,7 @@ def searchTool(obj, tools):
return tool
-class _CommandCalculateEarthworks:
+'''class _CommandCalculateEarthworks:
def GetResources(self):
return {'Pixmap': str(os.path.join(PVPlantResources.DirIcons, "pico.svg")),
@@ -846,7 +846,7 @@ class _CommandCalculateEarthworks:
return active
if FreeCAD.GuiUp:
- FreeCADGui.addCommand('PVPlantEarthworks', _CommandCalculateEarthworks())
+ FreeCADGui.addCommand('PVPlantEarthworks', _CommandCalculateEarthworks())'''
def accept():
diff --git a/PVPlantGeoreferencing.py b/PVPlantGeoreferencing.py
index 49bff5a..5eb2b81 100644
--- a/PVPlantGeoreferencing.py
+++ b/PVPlantGeoreferencing.py
@@ -27,8 +27,7 @@ if FreeCAD.GuiUp:
import FreeCADGui
from PySide import QtCore, QtGui
from PySide.QtCore import QT_TRANSLATE_NOOP
- from PySide2.QtWebEngineWidgets import QWebEngineView
- from PySide2.QtWebChannel import QWebChannel
+
import os
else:
# \cond
@@ -47,13 +46,19 @@ class MapWindow(QtGui.QWidget):
def __init__(self, WinTitle="MapWindow"):
super(MapWindow, self).__init__()
self.raise_()
- self.lat = 0
- self.lon = 0
+ self.lat = None
+ self.lon = None
+ self.minLat = None
+ self.maxLat = None
+ self.minLon = None
+ self.maxLon = None
self.WinTitle = WinTitle
-
self.setupUi()
def setupUi(self):
+ from PySide2.QtWebEngineWidgets import QWebEngineView
+ from PySide2.QtWebChannel import QWebChannel
+
self.ui = FreeCADGui.PySideUic.loadUi(PVPlantResources.__dir__ + "/PVPlantGeoreferencing.ui", self)
self.resize(1200, 800)
@@ -144,6 +149,9 @@ class MapWindow(QtGui.QWidget):
RightLayout.addWidget(self.groupbox)
# ------------------------
+ self.checkboxImportGis = QtGui.QCheckBox("Importar datos GIS")
+ RightLayout.addWidget(self.checkboxImportGis)
+
verticalSpacer = QtGui.QSpacerItem(20, 48, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
RightLayout.addItem(verticalSpacer)
@@ -169,7 +177,6 @@ class MapWindow(QtGui.QWidget):
geolocator = Nominatim(user_agent="http")
location = geolocator.geocode(self.valueSearch.text())
- print(location.raw)
self.valueSearch.setText(location.address)
self.panMap(location.longitude, location.latitude, location.raw['boundingbox'])
@@ -196,6 +203,13 @@ class MapWindow(QtGui.QWidget):
' | UTM: ' + str(zone_number) + zone_letter +
', {:.5f}m E, {:.5f}m N'.format(x, y))
+ @QtCore.Slot(float, float, float, float)
+ def onMapZoom(self, minLat, minLon, maxLat, maxLon):
+ self.minLat = min([minLat, maxLat])
+ self.maxLat = max([minLat, maxLat])
+ self.minLon = min([minLon, maxLon])
+ self.maxLon = max([minLon, maxLon])
+
@QtCore.Slot(float, float)
def georeference(self, lat, lng):
import PVPlantSite
@@ -228,13 +242,20 @@ class MapWindow(QtGui.QWidget):
import geojson
import PVPlantImportGrid as ImportElevation
import Draft
+ import PVPlantSite
+ Site = PVPlantSite.get()
+
+ offset = FreeCAD.Vector(0, 0, 0)
+ if not (self.lat is None or self.lon is None):
+ offset = FreeCAD.Vector(Site.Origin)
+ offset.z = 0
items = geojson.loads(drawnItems)
for item in items['features']:
if item['geometry']['type'] == "Point": # 1. if the feature is a Point or Circle:
coord = item['geometry']['coordinates']
point = ImportElevation.getElevationFromOE([[coord[0], coord[1]],])
- c = FreeCAD.Vector(point[0][0], point[0][1], point[0][2])
+ c = FreeCAD.Vector(point[0][0], point[0][1], point[0][2]).sub(offset)
if item['properties'].get('radius'):
r = round(item['properties']['radius'] * 1000, 0)
p = FreeCAD.Placement()
@@ -252,34 +273,67 @@ class MapWindow(QtGui.QWidget):
name = "Area"
lp = item['geometry']['coordinates'][0]
- pts = []
- for cords in lp:
- pts.append([cords[1], cords[0]])
+ pts = [[cords[1], cords[0]] for cords in lp]
tmp = ImportElevation.getElevationFromOE(pts)
- pts = []
- for p in tmp:
- pts.append(p.sub(FreeCAD.ActiveDocument.Site.Origin))
+ pts = [p.sub(offset) for p in tmp]
obj = Draft.makeWire(pts, closed=cw, face=False)
- obj.Placement.Base = FreeCAD.ActiveDocument.Site.Origin
+ #obj.Placement.Base = offset
obj.Label = name
Draft.autogroup(obj)
if item['properties'].get('name'):
obj.Label = item['properties']['name']
- FreeCAD.activeDocument().recompute()
- FreeCADGui.updateGui()
- FreeCADGui.SendMsgToActiveView("ViewFit")
+ if self.checkboxImportGis.isChecked():
+ self.getDataFromOSM(self.minLat, self.minLon, self.maxLat, self.maxLon)
- def panMap(self, lng, lat, geometry=""):
+ def getDataFromOSM(self, min_lat, min_lon, max_lat, max_lon):
+ import Importer.importOSM as importOSM
+ import PVPlantSite
+ site = PVPlantSite.get()
+
+ offset = FreeCAD.Vector(0, 0, 0)
+ if not (self.lat is None or self.lon is None):
+ offset = FreeCAD.Vector(site.Origin)
+ offset.z = 0
+ importer = importOSM.OSMImporter(offset)
+ osm_data = importer.get_osm_data(f"{min_lat},{min_lon},{max_lat},{max_lon}")
+ importer.process_osm_data(osm_data)
+
+ '''FreeCAD.activeDocument().recompute()
+ FreeCADGui.updateGui()
+ FreeCADGui.SendMsgToActiveView("ViewFit")'''
+
+ def panMap_old(self, lng, lat, geometry=""):
frame = self.view.page()
bbox = "[{0}, {1}], [{2}, {3}]".format(float(geometry[0]), float(geometry[2]),
float(geometry[1]), float(geometry[3]))
- command = 'map.panTo(L.latLng({lt}, {lg}));'.format(lt=lat, lg=lng)
+ command = 'map.panTo(L.latLng({lt}, {lg}));'.format(lt=lat, lg=lng)
command += 'map.fitBounds([{box}]);'.format(box=bbox)
frame.runJavaScript(command)
+ # deepseek
+ def panMap(self, lng, lat, geometry=None):
+ frame = self.view.page()
+
+ # 1. Validación del parámetro geometry
+ if not geometry or len(geometry) < 4:
+ # Pan básico sin ajuste de bounds
+ command = f'map.panTo(L.latLng({lat}, {lng}));'
+ else:
+ try:
+ # 2. Mejor manejo de coordenadas (Leaflet usa [lat, lng])
+ # Asumiendo que geometry es [min_lng, min_lat, max_lng, max_lat]
+ southwest = f"{float(geometry[1])}, {float(geometry[0])}" # min_lat, min_lng
+ northeast = f"{float(geometry[3])}, {float(geometry[2])}" # max_lat, max_lng
+ command = f'map.panTo(L.latLng({lat}, {lng}));'
+ command += f'map.fitBounds(L.latLngBounds([{southwest}], [{northeast}]));'
+ except (IndexError, ValueError, TypeError) as e:
+ print(f"Error en geometry: {str(e)}")
+ command = f'map.panTo(L.latLng({lat}, {lng}));'
+ frame.runJavaScript(command)
+
def importKML(self):
file = QtGui.QFileDialog.getOpenFileName(None, "FileDialog", "", "Google Earth (*.kml *.kmz)")[0]
@@ -287,11 +341,11 @@ class MapWindow(QtGui.QWidget):
layers = kmz_convert(file, "", )
frame = self.view.page()
for layer in layers:
- command = "drawnItems.addLayer(L.geoJSON({0}));".format(layer)
+ command = "var geoJsonLayer = L.geoJSON({0}); drawnItems.addLayer(geoJsonLayer); map.fitBounds(geoJsonLayer.getBounds());".format( layer)
frame.runJavaScript(command)
-class _CommandPVPlantGeoreferencing:
+class CommandPVPlantGeoreferencing:
def GetResources(self):
return {'Pixmap': str(os.path.join(DirIcons, "Location.svg")),
@@ -309,6 +363,6 @@ class _CommandPVPlantGeoreferencing:
else:
return False
-if FreeCAD.GuiUp:
+'''if FreeCAD.GuiUp:
FreeCADGui.addCommand('PVPlantGeoreferencing',_CommandPVPlantGeoreferencing())
-
+'''
diff --git a/PVPlantGeoreferencing.ui b/PVPlantGeoreferencing.ui
index 6403339..be4c97e 100644
--- a/PVPlantGeoreferencing.ui
+++ b/PVPlantGeoreferencing.ui
@@ -57,14 +57,14 @@
0
-
-
+
Search...
-
-
+
0
@@ -80,10 +80,7 @@
-
-
-
- -
-
+
0
@@ -91,7 +88,7 @@
- TextLabel
+ coordenadas:
@@ -111,7 +108,7 @@
-
-
+
PushButton
@@ -124,20 +121,27 @@
- -
-
-
- Georeferenciar
-
-
-
+ -
+
+
+ Georeferenciar
+
+
+
+ -
+
+
+ CheckBox
+
+
+
-
- Qt::Vertical
+ Qt::Orientation::Vertical
@@ -164,7 +168,7 @@
-
-
+
Aceptar
@@ -178,14 +182,6 @@
-
-
- QWebEngineView
- QWidget
-
- 1
-
-
diff --git a/PVPlantGeoreferencing.ui.autosave b/PVPlantGeoreferencing.ui.autosave
deleted file mode 100644
index a9cd56d..0000000
--- a/PVPlantGeoreferencing.ui.autosave
+++ /dev/null
@@ -1,213 +0,0 @@
-
-
- Georeferencing
-
-
-
- 0
- 0
- 574
- 350
-
-
-
-
- 0
- 0
-
-
-
- Create Surface
-
-
- -
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Search...
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Search
-
-
-
-
-
-
- -
-
-
- -
-
-
-
- 0
- 0
-
-
-
- TextLabel
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
-
- Configuraciones:
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
- Georeferenciar
-
-
-
- -
-
-
-
-
-
-
- Cargar un archivo KMZ/KML:
-
-
-
- -
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
- New Item
-
-
- Unchecked
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
-
- Cancelar
-
-
-
- -
-
-
- Aceptar
-
-
-
-
-
-
-
-
-
-
-
-
-
- QWebEngineView
- QWidget
-
- 1
-
-
-
-
-
diff --git a/PVPlantImportGrid.py b/PVPlantImportGrid.py
index 04d6138..89f1c09 100644
--- a/PVPlantImportGrid.py
+++ b/PVPlantImportGrid.py
@@ -40,7 +40,70 @@ from PVPlantResources import DirIcons as DirIcons
import PVPlantSite
+def get_elevation_from_oe(coordinates): # v1 deepseek
+ """Obtiene elevaciones de Open-Elevation API y devuelve vectores FreeCAD en coordenadas UTM.
+ Args:
+ coordinates (list): Lista de tuplas con coordenadas (latitud, longitud)
+ Returns:
+ list: Lista de vectores FreeCAD con coordenadas UTM y elevación (en milímetros)
+ o lista vacía en caso de error.
+ """
+ if not coordinates:
+ return []
+
+ import requests
+ import utm
+ from requests.exceptions import RequestException
+
+ # Construcción más eficiente de parámetros
+ locations = "|".join([f"{lat:.6f},{lon:.6f}" for lat, lon in coordinates])
+
+ try:
+ response = requests.get(
+ url="https://api.open-elevation.com/api/v1/lookup",
+ params={'locations': locations},
+ timeout=20,
+ verify=True
+ )
+ response.raise_for_status() # Lanza excepción para códigos 4xx/5xx
+
+ except RequestException as e:
+ print(f"Error en la solicitud: {str(e)}")
+ return []
+
+ try:
+ data = response.json()
+ except ValueError:
+ print("Respuesta JSON inválida")
+ return []
+
+ if "results" not in data or len(data["results"]) != len(coordinates):
+ print("Formato de respuesta inesperado")
+ return []
+
+ points = []
+ for result in data["results"]:
+ try:
+ # Conversión UTM con manejo de errores
+ easting, northing, _, _ = utm.from_latlon(
+ result["latitude"],
+ result["longitude"]
+ )
+
+ points.append(FreeCAD.Vector(round(easting), # Convertir metros a milímetros
+ round(northing),
+ round(result["elevation"])) * 1000)
+
+ except Exception as e:
+ print(f"Error procesando coordenadas: {str(e)}")
+ continue
+
+ return points
+
def getElevationFromOE(coordinates):
+ """Obtiene elevaciones de Open-Elevation API y devuelve vectores FreeCAD en coordenadas UTM."""
+
+ from requests.exceptions import RequestException
if len(coordinates) == 0:
return None
@@ -54,7 +117,16 @@ def getElevationFromOE(coordinates):
if i != total:
str += '|'
query = 'https://api.open-elevation.com/api/v1/lookup?locations=' + str
- r = get(query, timeout=20)
+ try:
+ r = get(query, timeout=20, verify=False)
+ except RequestException as e:
+ points = []
+ for i, point in enumerate(coordinates):
+ c = utm.from_latlon(point[0], point[1])
+ points.append(FreeCAD.Vector(round(c[0] * 1000, 0),
+ round(c[1] * 1000, 0),
+ 0))
+ return points
# Only get the json response in case of 200 or 201
points = []
@@ -82,7 +154,7 @@ def getSinglePointElevationFromBing(lat, lng):
# +# to do: error handling - wait and try again
s = json.loads(ans)
res = s['resourceSets'][0]['resources'][0]['elevations']
-
+
import utm
for elevation in res:
c = utm.from_latlon(lat, lng)
diff --git a/PVPlantManhole.py b/PVPlantManhole.py
index 7bc9fa5..4702322 100644
--- a/PVPlantManhole.py
+++ b/PVPlantManhole.py
@@ -180,7 +180,7 @@ class _ViewProviderManhole(ArchComponent.ViewProviderComponent):
import draftguitools.gui_tool_utils as gui_tool_utils
-class _ManholeTaskPanel:
+class ManholeTaskPanel:
def __init__(self, obj=None):
self.new = False
if obj is None:
@@ -249,7 +249,7 @@ class _ManholeTaskPanel:
self.view.removeEventCallback("SoEvent", self.call)
-class _CommandManhole:
+'''class _CommandManhole:
"the Arch Building command definition"
def GetResources(self):
@@ -274,5 +274,5 @@ class _CommandManhole:
if FreeCAD.GuiUp:
- FreeCADGui.addCommand('PVPlantManhole', _CommandManhole())
+ FreeCADGui.addCommand('PVPlantManhole', _CommandManhole())'''
diff --git a/PVPlantPlacement.py b/PVPlantPlacement.py
index 11dffc4..3005ac6 100644
--- a/PVPlantPlacement.py
+++ b/PVPlantPlacement.py
@@ -22,7 +22,6 @@
import FreeCAD
import Part
-import numpy as np
if FreeCAD.GuiUp:
import FreeCADGui, os
@@ -47,6 +46,8 @@ except AttributeError:
import PVPlantResources
import PVPlantSite
+version = "0.1.0"
+
def selectionFilter(sel, objtype):
print("type: ", objtype)
@@ -119,8 +120,8 @@ class _PVPlantPlacementTaskPanel:
for idx in range(len(placements)):
newrack = PVPlantFrame.makeTracker(setup=types[idx])
newrack.Label = "Tracker"
+ newrack.Visibility = False
newrack.Placement = placements[idx]
- newrack.Visibility = True
MechanicalGroup.addObject(newrack)
frames.append(newrack)
if self.PVArea.Name.startswith("FrameArea"):
@@ -136,6 +137,8 @@ class _PVPlantPlacementTaskPanel:
else:
from Utils import PVPlantUtils as utils
wire = utils.simplifyWire(utils.getProjected(shape))
+ if wire.isClosed():
+ wire = wire.removeSplitter()
return Part.Face(wire)
def calculateWorkingArea(self):
@@ -180,8 +183,8 @@ class _PVPlantPlacementTaskPanel:
starty = int(refh.BoundBox.YMin + self.offsetY + self.gap_row * steps)
# todo end ----------------------------------------------------------------------------------
- return np.arange(startx, self.Area.BoundBox.XMax, self.gap_col, dtype=int), \
- np.arange(starty, self.Area.BoundBox.YMin, -self.gap_row, dtype=int)
+ return np.arange(startx, self.Area.BoundBox.XMax, self.gap_col, dtype=np.int64), \
+ np.arange(starty, self.Area.BoundBox.YMin, -self.gap_row, dtype=np.int64)
def adjustToTerrain(self, coordinates):
mode = 1
@@ -241,7 +244,7 @@ class _PVPlantPlacementTaskPanel:
df["regression"] = linregression
# 01. Grouping:
- from scipy.ndimage import sclabel
+ from scipy.ndimage import label as sclabel
import pandas as pd
tmp = []
for c, col in enumerate(coordinates):
@@ -389,6 +392,7 @@ class _PVPlantPlacementTaskPanel:
return False
def calculateAlignedArray(self):
+ import FreeCAD
pointsx, pointsy = self.getAligments()
footprints = []
@@ -536,6 +540,11 @@ class _PVPlantPlacementTaskPanel:
from datetime import datetime
starttime = datetime.now()
+ params = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Document")
+ auto_save_enabled = params.GetBool("AutoSaveEnabled")
+ params.SetBool("AutoSaveEnabled", False)
+ FreeCAD.ActiveDocument.RecomputesFrozen = True
+
items = []
for x in range(self.form.listFrameSetups.count()):
items.append(FreeCAD.ActiveDocument.getObject(self.form.listFrameSetups.item(x).text()))
@@ -565,15 +574,16 @@ class _PVPlantPlacementTaskPanel:
dataframe = self.calculateNonAlignedArray()
# last step: ------------------------------
- FreeCAD.ActiveDocument.RecomputesFrozen = True
- self.createFrameFromPoints(dataframe)
FreeCAD.ActiveDocument.RecomputesFrozen = False
+ params.SetBool("AutoSaveEnabled", auto_save_enabled)
+
+ self.createFrameFromPoints(dataframe)
total_time = datetime.now() - starttime
print(" -- Tiempo tardado:", total_time)
FreeCADGui.Control.closeDialog()
FreeCAD.ActiveDocument.recompute()
- return True
+ #return True
# ----------------------------------------------------------------------------------------------------------------------
@@ -1066,7 +1076,7 @@ def ConvertObjectsTo(sel, objTo):
## Comandos: -----------------------------------------------------------------------------------------------------------
-class _CommandPVPlantPlacement:
+class CommandPVPlantPlacement:
def GetResources(self):
return {'Pixmap': str(os.path.join(PVPlantResources.DirIcons, "way.svg")),
@@ -1085,7 +1095,7 @@ class _CommandPVPlantPlacement:
return False
-class _CommandAdjustToTerrain:
+class CommandAdjustToTerrain:
def GetResources(self):
return {'Pixmap': str(os.path.join(PVPlantResources.DirIcons, "adjust.svg")),
@@ -1108,7 +1118,7 @@ class _CommandAdjustToTerrain:
return False
-class _CommandConvert:
+class CommandConvert:
def GetResources(self):
return {'Pixmap': str(os.path.join(PVPlantResources.DirIcons, "convert.svg")),
'Accel': "P, C",
@@ -1126,7 +1136,7 @@ class _CommandConvert:
FreeCADGui.Control.showDialog(taskd)
-if FreeCAD.GuiUp:
+'''if FreeCAD.GuiUp:
FreeCADGui.addCommand('PVPlantPlacement', _CommandPVPlantPlacement())
FreeCADGui.addCommand('PVPlantAdjustToTerrain', _CommandAdjustToTerrain())
- FreeCADGui.addCommand('PVPlantConvertTo', _CommandConvert())
+ FreeCADGui.addCommand('PVPlantConvertTo', _CommandConvert())'''
diff --git a/PVPlantSite.py b/PVPlantSite.py
index 3fd178c..677ee56 100644
--- a/PVPlantSite.py
+++ b/PVPlantSite.py
@@ -1171,7 +1171,7 @@ class _ViewProviderSite:
'''
-class _CommandPVPlantSite:
+'''class _CommandPVPlantSite:
"the Arch Site command definition"
def GetResources(self):
@@ -1189,4 +1189,4 @@ class _CommandPVPlantSite:
return
if FreeCAD.GuiUp:
- FreeCADGui.addCommand('PVPlantSite', _CommandPVPlantSite())
+ FreeCADGui.addCommand('PVPlantSite', _CommandPVPlantSite())'''
diff --git a/PVPlantTerrain.py b/PVPlantTerrain.py
index 1234c26..a945ceb 100644
--- a/PVPlantTerrain.py
+++ b/PVPlantTerrain.py
@@ -670,7 +670,7 @@ class ViewProviderTerrain:
return None
-class _CommandTerrain:
+'''class _CommandTerrain:
"the PVPlant Terrain command definition"
def GetResources(self):
@@ -692,4 +692,4 @@ class _CommandTerrain:
if FreeCAD.GuiUp:
- FreeCADGui.addCommand('Terrain', _CommandTerrain())
+ FreeCADGui.addCommand('Terrain', _CommandTerrain())'''
diff --git a/PVPlantTerrainAnalisys.py b/PVPlantTerrainAnalisys.py
index 4adf263..a8d706f 100644
--- a/PVPlantTerrainAnalisys.py
+++ b/PVPlantTerrainAnalisys.py
@@ -23,6 +23,7 @@ except AttributeError:
import os
from PVPlantResources import DirIcons as DirIcons
+
def Mest2FemMesh(obj):
import Fem
@@ -44,6 +45,7 @@ def Mest2FemMesh(obj):
FreeCAD.activeDocument().recompute()
return obj2
+
def makeContours(land, minor = 1000, mayor = 5000,
minorColor=(0.0, 0.00, 0.80), mayorColor=(0.00, 0.00, 1.00),
minorThickness = 2, mayorThickness = 5,
@@ -58,6 +60,7 @@ def makeContours(land, minor = 1000, mayor = 5000,
FreeCAD.ActiveDocument.recompute()
+
def Contours_Mesh(Mesh, minor, mayor,
minorColor, mayorColor,
minorLineWidth, mayorLineWidth,
@@ -144,6 +147,7 @@ def Contours_Mesh(Mesh, minor, mayor,
calculateSection(minor_array)
calculateSection(mayor_array)
+
def Contours_Part(Terrain, minor, mayor,
minorColor, mayorColor,
minorLineWidth, mayorLineWidth,
@@ -235,6 +239,8 @@ def Contours_Part(Terrain, minor, mayor,
calculateSection(mayor_array)
# Base widget for task panel terrain analisys
+
+
class _generalTaskPanel:
'''The TaskPanel for Slope setup'''
@@ -324,7 +330,7 @@ class _generalTaskPanel:
self.ranges[curentIndex.row()][2] = (color.red()/255, color.green()/255, color.blue()/255)
# Contours Analisys: ---------------------------------------------------------------------------------
-class _ContourTaskPanel():
+class ContourTaskPanel():
'''The editmode TaskPanel for contours generator'''
def __init__(self):
@@ -480,7 +486,7 @@ class _ContourTaskPanel():
return True
# Height Analisys: ---------------------------------------------------------------------------------
-class _HeightTaskPanel(_generalTaskPanel):
+class HeightTaskPanel(_generalTaskPanel):
'''The TaskPanel for Slope setup'''
def __init__(self):
@@ -513,7 +519,7 @@ class _HeightTaskPanel(_generalTaskPanel):
return True
# Slope Analisys: ---------------------------------------------------------------------------------
-class _SlopeTaskPanel(_generalTaskPanel):
+class SlopeTaskPanel(_generalTaskPanel):
'''The TaskPanel for Slope setup'''
def __init__(self):
@@ -603,7 +609,7 @@ class _SlopeTaskPanel(_generalTaskPanel):
return True
# Orientation Analisys: ---------------------------------------------------------------------------------
-class _OrientationTaskPanel(_generalTaskPanel):
+class OrientationTaskPanel(_generalTaskPanel):
'''The TaskPanel for Orientation setup'''
def __init__(self):
@@ -707,7 +713,7 @@ class _OrientationTaskPanel(_generalTaskPanel):
## Commands ----------------------------------------------------------------------------------------------------------
## 1. Contours:
-class _CommandContours:
+'''class _CommandContours:
def GetResources(self):
return {'Pixmap': str(os.path.join(DirIcons, "TerrainContours.svg")),
'Accel': "T, C",
@@ -803,4 +809,4 @@ if FreeCAD.GuiUp:
FreeCADGui.addCommand('SlopeAnalisys', _CommandSlopeAnalisys())
FreeCADGui.addCommand('HeightAnalisys', _CommandHeightAnalisys())
FreeCADGui.addCommand('OrientationAnalisys', _CommandOrientationAnalisys())
- FreeCADGui.addCommand('TerrainAnalisys', CommandTerrainAnalisysGroup())
\ No newline at end of file
+ FreeCADGui.addCommand('TerrainAnalisys', CommandTerrainAnalisysGroup())'''
\ No newline at end of file
diff --git a/PVPlantTools.py b/PVPlantTools.py
index 87f53f4..8975045 100644
--- a/PVPlantTools.py
+++ b/PVPlantTools.py
@@ -56,7 +56,7 @@ class CommandPVPlantSite:
return
-class CommandPVPlantGeoreferencing:
+'''class CommandPVPlantGeoreferencing:
@staticmethod
def GetResources():
return {'Pixmap': str(os.path.join(DirIcons, "Location.svg")),
@@ -74,8 +74,10 @@ class CommandPVPlantGeoreferencing:
@staticmethod
def Activated():
import PVPlantGeoreferencing
- form = PVPlantGeoreferencing.MapWindow()
- form.show()
+ taskd = PVPlantGeoreferencing.MapWindow()
+ #taskd.setParent(FreeCADGui.getMainWindow())
+ #taskd.setWindowFlags(QtCore.Qt.Window)
+ taskd.show()#exec_()'''
class CommandProjectSetup:
@@ -187,8 +189,8 @@ class CommandBoundary:
from Project.Area import PVPlantArea
sel = FreeCADGui.Selection.getSelection()[0]
obj = PVPlantArea.makeArea([ver.Point for ver in sel.Shape.Vertexes])
- #taskd = _PVPlantPlacementTaskPanel()
- #FreeCADGui.Control.showDialog(taskd)
+ # taskd = _PVPlantPlacementTaskPanel()
+ # FreeCADGui.Control.showDialog(taskd)
class CommandFrameArea:
@@ -249,6 +251,7 @@ class CommandPVSubplant:
return True
else:
return False
+
@staticmethod
def Activated():
from Project.Area import PVPlantArea
@@ -524,7 +527,7 @@ class CommandManhole:
@staticmethod
def IsActive():
- return not FreeCAD.ActiveDocument is None
+ return not (FreeCAD.ActiveDocument is None)
if FreeCAD.ActiveDocument is not None:
if FreeCADGui.Selection.getCompleteSelection():
for ob in FreeCAD.ActiveDocument.Objects:
@@ -534,29 +537,30 @@ class CommandManhole:
@staticmethod
def Activated():
import PVPlantManhole
- TaskPanel = PVPlantManhole._ManholeTaskPanel()
- FreeCADGui.Control.showDialog(TaskPanel)
+ task_panel = PVPlantManhole._ManholeTaskPanel()
+ FreeCADGui.Control.showDialog(task_panel)
return
-
-
if FreeCAD.GuiUp:
FreeCADGui.addCommand('PVPlantSite', CommandPVPlantSite())
- FreeCADGui.addCommand('PVPlantGeoreferencing', CommandPVPlantGeoreferencing())
+ import PVPlantGeoreferencing
+
+ FreeCADGui.addCommand('PVPlantGeoreferencing', PVPlantGeoreferencing.CommandPVPlantGeoreferencing())
FreeCADGui.addCommand('ProjectSetup', CommandProjectSetup())
FreeCADGui.addCommand('Terrain', CommandTerrain())
FreeCADGui.addCommand('PVPlantCreateTerrainMesh', CommandCreateTerrainMesh())
+
class CommandAreaGroup:
@staticmethod
def GetCommands():
- return tuple([#'Area',
- 'FrameArea',
- 'ForbiddenArea',
- 'PVSubplant',
- 'OffsetArea'
- ])
+ return tuple([ # 'Area',
+ 'FrameArea',
+ 'ForbiddenArea',
+ 'PVSubplant',
+ 'OffsetArea'
+ ])
@staticmethod
def GetResources():
@@ -568,7 +572,8 @@ if FreeCAD.GuiUp:
def IsActive():
return not FreeCAD.ActiveDocument is None
- #FreeCADGui.addCommand('Area', CommandBoundary())
+
+ # FreeCADGui.addCommand('Area', CommandBoundary())
FreeCADGui.addCommand('FrameArea', CommandFrameArea())
FreeCADGui.addCommand('ForbiddenArea', CommandProhibitedArea())
FreeCADGui.addCommand('PVSubplant', CommandPVSubplant())
@@ -578,6 +583,7 @@ if FreeCAD.GuiUp:
FreeCADGui.addCommand('SplitArea', CommandSplitArea())
FreeCADGui.addCommand('JoinAreas', CommandJoinAreas())
+
class CommandTerrainAnalisysGroup:
@staticmethod
def GetCommands():
@@ -589,20 +595,22 @@ if FreeCAD.GuiUp:
@staticmethod
def GetResources():
- return { 'MenuText': QT_TRANSLATE_NOOP("",'Terrain Analisys'),
- 'ToolTip': QT_TRANSLATE_NOOP("",'Terrain Analisys')
- }
+ return {'MenuText': QT_TRANSLATE_NOOP("", 'Terrain Analisys'),
+ 'ToolTip': QT_TRANSLATE_NOOP("", 'Terrain Analisys')
+ }
@staticmethod
def IsActive():
return not FreeCAD.ActiveDocument is None
+
FreeCADGui.addCommand('Contours', CommandContours())
FreeCADGui.addCommand('SlopeAnalisys', CommandSlopeAnalisys())
FreeCADGui.addCommand('HeightAnalisys', CommandHeightAnalisys())
FreeCADGui.addCommand('OrientationAnalisys', CommandOrientationAnalisys())
FreeCADGui.addCommand('TerrainAnalisys', CommandTerrainAnalisysGroup())
+
class CommandTrenchGroup:
@staticmethod
def GetCommands():
@@ -625,33 +633,48 @@ if FreeCAD.GuiUp:
active = active and not (FreeCAD.ActiveDocument.getObject("Terrain").Mesh is None)
return active
+
FreeCADGui.addCommand('PVPlantTrench', CommandTrench())
FreeCADGui.addCommand('PVPlantSemiAutomaticTrench', CommandSemiAutomaticTrench())
FreeCADGui.addCommand('Trenches', CommandTrenchGroup())
FreeCADGui.addCommand('PVPlantEarthworks', CommandCalculateEarthworks())
- FreeCADGui.addCommand('PVPlantManhole', _ommandManhole())
+ FreeCADGui.addCommand('PVPlantManhole', CommandManhole())
-projectlist = [ #"Reload",
- "PVPlantSite",
- "ProjectSetup",
- "PVPlantGeoreferencing",
- "Separator",
- # "ImportGrid",
- "Terrain",
- "TerrainAnalisys",
- "PVPlantCreateTerrainMesh",
- "Separator",
- #"PointsGroup",
- "PVPlantAreas",
- "SplitArea",
- "Separator",
- "Trenches",
- "PVPlantEarthworks",
- #"PVPlantPad",
- #"PVPlantRoad",
- #"PVPlantManhole",
- #"PVPlantFoundation"
- #"GraphTerrainProfile",
- #"Trace",
- ]
\ No newline at end of file
+ import PVPlantPlacement
+ FreeCADGui.addCommand('PVPlantPlacement', PVPlantPlacement.CommandPVPlantPlacement())
+ FreeCADGui.addCommand('PVPlantAdjustToTerrain', PVPlantPlacement.CommandAdjustToTerrain())
+ FreeCADGui.addCommand('PVPlantConvertTo', PVPlantPlacement.CommandConvert())
+
+projectlist = [ # "Reload",
+ "PVPlantSite",
+ "ProjectSetup",
+ "PVPlantGeoreferencing",
+ "Separator",
+ # "ImportGrid",
+ "Terrain",
+ "TerrainAnalisys",
+ "PVPlantCreateTerrainMesh",
+ "Separator",
+ # "PointsGroup",
+ "PVPlantAreas",
+ "SplitArea",
+ "Separator",
+ "Trenches",
+ "PVPlantEarthworks",
+ # "PVPlantPad",
+ # "PVPlantRoad",
+ "PVPlantManhole",
+ # "PVPlantFoundation"
+ # "GraphTerrainProfile",
+ # "Trace",
+]
+pv_list = [
+ # "RackType",
+ # "PVPlantRackCheck",
+ # "Separator",
+ "PVPlantPlacement",
+ "PVPlantAdjustToTerrain",
+ "PVPlantConvertTo",
+ # "PVArea"
+]
diff --git a/PVPlantTrench.py b/PVPlantTrench.py
index eb27663..f6d8a45 100644
--- a/PVPlantTrench.py
+++ b/PVPlantTrench.py
@@ -1018,7 +1018,7 @@ class semiAutomaticTrench:
self.unregister_editing_callbacks()
-class CommandTrench: # V1:
+'''class CommandTrench: # V1:
"""Gui command for the Line tool."""
def GetResources(self):
@@ -1107,5 +1107,5 @@ if FreeCAD.GuiUp:
FreeCADGui.addCommand('PVPlantTrench', CommandTrench())
FreeCADGui.addCommand('PVPlantSemiAutomaticTrench', CommandSemiAutomaticTrench())
- FreeCADGui.addCommand('Trenches', CommandTrenchGroup())
+ FreeCADGui.addCommand('Trenches', CommandTrenchGroup())'''
diff --git a/Project/Area/PVPlantArea.py b/Project/Area/PVPlantArea.py
index 78b412f..67268fd 100644
--- a/Project/Area/PVPlantArea.py
+++ b/Project/Area/PVPlantArea.py
@@ -372,7 +372,7 @@ class ViewProviderOffsetArea(_ViewProviderArea):
def makeProhibitedArea(base = None):
- obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", "ProhibitedArea")
+ obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython", "Exclusions")
ProhibitedArea(obj)
ViewProviderForbiddenArea(obj.ViewObject)
if base:
@@ -702,8 +702,8 @@ class CommandFrameArea:
'ToolTip': "Frame Area"}
def Activated(self):
- sel = FreeCADGui.Selection.getSelection()
- makeFramedArea(None, sel)
+ for base in FreeCADGui.Selection.getSelection():
+ makeFramedArea(None, base)
def IsActive(self):
if FreeCAD.ActiveDocument:
@@ -720,8 +720,8 @@ class CommandProhibitedArea:
'ToolTip': "Prohibited Area"}
def Activated(self):
- sel = FreeCADGui.Selection.getSelection()
- makeProhibitedArea(sel[0])
+ for base in FreeCADGui.Selection.getSelection():
+ makeProhibitedArea(base)
def IsActive(self):
if FreeCAD.ActiveDocument:
@@ -763,11 +763,8 @@ class CommandOffsetArea:
'ToolTip': "OffsetArea"}
def Activated(self):
- sel = FreeCADGui.Selection.getSelection()
- base = None
- if sel:
- base = sel[0]
- obj = makeOffsetArea(base)
+ for base in FreeCADGui.Selection.getSelection():
+ makeOffsetArea(base)
def IsActive(self):
if FreeCAD.ActiveDocument:
@@ -776,7 +773,7 @@ class CommandOffsetArea:
return False
-if FreeCAD.GuiUp:
+'''if FreeCAD.GuiUp:
class CommandAreaGroup:
def GetCommands(self):
@@ -800,4 +797,4 @@ if FreeCAD.GuiUp:
FreeCADGui.addCommand('ForbiddenArea', CommandProhibitedArea())
FreeCADGui.addCommand('PVSubplant', CommandPVSubplant())
FreeCADGui.addCommand('OffsetArea', CommandOffsetArea())
- FreeCADGui.addCommand('PVPlantAreas', CommandAreaGroup())
+ FreeCADGui.addCommand('PVPlantAreas', CommandAreaGroup())'''
diff --git a/Project/Area/PVPlantAreaUtils.py b/Project/Area/PVPlantAreaUtils.py
index 9dac55f..da9bf96 100644
--- a/Project/Area/PVPlantAreaUtils.py
+++ b/Project/Area/PVPlantAreaUtils.py
@@ -128,7 +128,7 @@ def joinAreas(areas):
shape.fuse(shapes)
return shape
-class CommandSplitArea:
+'''class CommandSplitArea:
def GetResources(self):
return {'Pixmap': str(os.path.join(PVPlantResources.DirIcons, "split_area.svg")),
'Accel': "A, S",
@@ -162,6 +162,6 @@ class CommandJoinAreas:
if FreeCAD.GuiUp:
FreeCADGui.addCommand('SplitArea', CommandSplitArea())
- FreeCADGui.addCommand('JoinAreas', CommandJoinAreas())
+ FreeCADGui.addCommand('JoinAreas', CommandJoinAreas())'''
diff --git a/Project/ProjectSetup.py b/Project/ProjectSetup.py
index 6b6d469..92fa8ff 100644
--- a/Project/ProjectSetup.py
+++ b/Project/ProjectSetup.py
@@ -138,7 +138,7 @@ class ProjectSetupDialog(QtGui.QWidget):
def closeForm(self):
self.close()
-class CommandProjectSetup:
+'''class CommandProjectSetup:
def GetResources(self):
return {'Pixmap': str(os.path.join(DirIcons, "flash.svg")),
'Accel': "P, S",
@@ -159,5 +159,5 @@ class CommandProjectSetup:
if FreeCAD.GuiUp:
- FreeCADGui.addCommand('ProjectSetup', CommandProjectSetup())
+ FreeCADGui.addCommand('ProjectSetup', CommandProjectSetup())'''
diff --git a/Resources/webs/map.js b/Resources/webs/map.js
index 1b76e09..27c235b 100644
--- a/Resources/webs/map.js
+++ b/Resources/webs/map.js
@@ -38,7 +38,10 @@ new QWebChannel(qt.webChannelTransport, function (channel)
map.on('mousemove', function(e)
{
- MyApp.onMapMove(e.latlng.lat, e.latlng.lng)
+ MyApp.onMapMove(e.latlng.lat, e.latlng.lng);
+
+ const bounds = map.getBounds();
+ MyApp.onMapZoom(bounds.getSouth(), bounds.getWest(), bounds.getNorth(), bounds.getEast());
});
var DrawShapes;
diff --git a/Utils/PVPlantUtils.py b/Utils/PVPlantUtils.py
index 93ea5f3..2c51fc0 100644
--- a/Utils/PVPlantUtils.py
+++ b/Utils/PVPlantUtils.py
@@ -201,8 +201,8 @@ def simplifyWire(wire):
else:
i += 1
- if closed:
- points.append(FreeCAD.Vector(points[0]))
+ #if closed:
+ points.append(FreeCAD.Vector(points[0]))
pol = Part.makePolygon(points)
return pol