Punto de restauración.
This commit is contained in:
@@ -26,6 +26,7 @@ import Part
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui, os
|
||||
from PySide import QtCore, QtGui
|
||||
from PySide.QtGui import QListWidgetItem
|
||||
from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
else:
|
||||
# \cond
|
||||
@@ -62,7 +63,8 @@ class _PVPlantPlacementTaskPanel:
|
||||
'''The editmode TaskPanel for Schedules'''
|
||||
|
||||
def __init__(self, obj=None):
|
||||
self.Terrain = PVPlantSite.get().Terrain
|
||||
self.site = PVPlantSite.get()
|
||||
self.Terrain = self.site.Terrain
|
||||
self.FrameSetups = None
|
||||
self.PVArea = None
|
||||
self.Area = None
|
||||
@@ -77,8 +79,10 @@ class _PVPlantPlacementTaskPanel:
|
||||
self.form.setWindowIcon(QtGui.QIcon(os.path.join(PVPlantResources.DirIcons, "way.svg")))
|
||||
|
||||
self.form.buttonPVArea.clicked.connect(self.addPVArea)
|
||||
self.form.buttonAddFrame.clicked.connect(self.addFrame)
|
||||
self.form.buttonRemoveFrame.clicked.connect(self.removeFrame)
|
||||
#self.form.buttonAddFrame.clicked.connect(self.addFrames)
|
||||
#self.form.buttonRemoveFrame.clicked.connect(self.removeFrame)
|
||||
|
||||
self.addFrames()
|
||||
|
||||
def addPVArea(self):
|
||||
sel = FreeCADGui.Selection.getSelection()
|
||||
@@ -86,21 +90,10 @@ class _PVPlantPlacementTaskPanel:
|
||||
self.PVArea = sel[0]
|
||||
self.form.editPVArea.setText(self.PVArea.Label)
|
||||
|
||||
def addFrame(self):
|
||||
from Mechanical.Frame import PVPlantFrame
|
||||
selection = FreeCADGui.Selection.getSelection()
|
||||
self.FrameSetup = selectionFilter(selection, PVPlantFrame.TrackerSetup)
|
||||
|
||||
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 addFrames(self):
|
||||
for frame_setup in self.site.Frames:
|
||||
list_item = QListWidgetItem(frame_setup.Name, self.form.listFrameSetups)
|
||||
list_item.setCheckState(QtCore.Qt.Checked)
|
||||
|
||||
def createFrameFromPoints(self, dataframe):
|
||||
from Mechanical.Frame import PVPlantFrame
|
||||
@@ -111,6 +104,12 @@ class _PVPlantPlacementTaskPanel:
|
||||
MechanicalGroup.Label = "Frames"
|
||||
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()
|
||||
types = dataframe["type"].tolist()
|
||||
frames = []
|
||||
@@ -121,33 +120,30 @@ class _PVPlantPlacementTaskPanel:
|
||||
newrack.Placement = placements[idx]
|
||||
MechanicalGroup.addObject(newrack)
|
||||
frames.append(newrack)
|
||||
|
||||
if self.PVArea.Name.startswith("FrameArea"):
|
||||
self.PVArea.Frames = frames
|
||||
# TODO: else
|
||||
|
||||
def getProjected(self, shape):
|
||||
""" returns projected edges from a shape and a direction """
|
||||
|
||||
if shape.BoundBox.ZLength == 0:
|
||||
edges = shape.Edges
|
||||
return Part.Face(Part.Wire(edges))
|
||||
else:
|
||||
from Utils import PVPlantUtils as utils
|
||||
wire = utils.simplifyWire(utils.getProjected(shape))
|
||||
if wire.isClosed():
|
||||
wire = wire.removeSplitter()
|
||||
return Part.Face(wire)
|
||||
return Part.Face(Part.Wire(shape.Edges))
|
||||
|
||||
from Utils import PVPlantUtils as utils
|
||||
wire = utils.simplifyWire(utils.getProjected(shape))
|
||||
return Part.Face(wire.removeSplitter()) if wire.isClosed() else Part.Face(wire)
|
||||
|
||||
def calculateWorkingArea(self):
|
||||
self.Area = self.getProjected(self.PVArea.Shape)
|
||||
tmp = FreeCAD.ActiveDocument.findObjects(Name="ExclusionArea")
|
||||
if len(tmp):
|
||||
ProhibitedAreas = list()
|
||||
for obj in tmp:
|
||||
exclusion_areas = FreeCAD.ActiveDocument.findObjects(Name="ExclusionArea")
|
||||
|
||||
if exclusion_areas:
|
||||
prohibited_faces = []
|
||||
for obj in exclusion_areas:
|
||||
face = self.getProjected(obj.Base.Shape)
|
||||
if face.isValid():
|
||||
ProhibitedAreas.append(face)
|
||||
self.Area = self.Area.cut(ProhibitedAreas)
|
||||
prohibited_faces.append(face)
|
||||
self.Area = self.Area.cut(prohibited_faces)
|
||||
|
||||
def getAligments(self):
|
||||
# TODO: revisar todo esto: -----------------------------------------------------------------
|
||||
@@ -280,104 +276,6 @@ class _PVPlantPlacementTaskPanel:
|
||||
placeRegion(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):
|
||||
if self.Area.isInside(point, 10, True):
|
||||
frame.Placement.Base = point
|
||||
@@ -542,23 +440,32 @@ class _PVPlantPlacementTaskPanel:
|
||||
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()))
|
||||
tmpframes = list()
|
||||
items = [
|
||||
FreeCAD.ActiveDocument.getObject(item.text())
|
||||
for i in range(self.form.listFrameSetups.count())
|
||||
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):
|
||||
found = False
|
||||
if frame.Length not in seen_lengths:
|
||||
seen_lengths.add(frame.Length)
|
||||
tmpframes.append(frame)
|
||||
'''found = False
|
||||
for tmp in tmpframes:
|
||||
if tmp.Length == frame.Length:
|
||||
found = True
|
||||
break
|
||||
if not found:
|
||||
tmpframes.append(frame)
|
||||
self.FrameSetups = tmpframes.copy()
|
||||
longerFrame = self.FrameSetups[0]
|
||||
tmpframes.append(frame)'''
|
||||
self.FrameSetups = tmpframes.copy()"""
|
||||
|
||||
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_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.offsetY = FreeCAD.Units.Quantity(self.form.editOffsetVertical.text()).Value
|
||||
|
||||
@@ -581,8 +488,6 @@ class _PVPlantPlacementTaskPanel:
|
||||
print(" -- Tiempo tardado:", total_time)
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
#return True
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------------------------------------------------
|
||||
# function AdjustToTerrain
|
||||
|
||||
Reference in New Issue
Block a user