| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | from PySide import QtCore, QtGui |
| | import FreeCAD, FreeCADGui |
| |
|
| |
|
| | class Diagram: |
| | def create( |
| | self, title, function, xlength, xname, xunit, xscale, yname, yunit, yscale, numxpoints |
| | ): |
| | |
| | from FreeCAD.Plot import Plot |
| |
|
| | self.title = title |
| | self.function = function |
| | self.xlength = xlength |
| | self.xname = xname |
| | self.xunit = xunit |
| | self.xscale = xscale |
| | self.yname = yname |
| | self.yunit = yunit |
| | self.yscale = yscale |
| | self.numxpoints = numxpoints |
| |
|
| | |
| | self.win = Plot.figure(title) |
| | |
| | self.thePlot = Plot.getPlot() |
| | |
| | Plot.xlabel("$%s$ [%s]" % (xname, xunit)) |
| | Plot.ylabel("$%s$ [%s]" % (yname, yunit)) |
| | Plot.grid(True) |
| |
|
| | |
| | (self.xpoints, self.ypoints) = self.function.evaluate(self.xlength, self.numxpoints) |
| | |
| | self.plot() |
| |
|
| | def update(self, function=None, xlength=None): |
| | if function is not None: |
| | self.function = function |
| | if xlength is not None: |
| | self.xlength = xlength |
| | |
| | (self.xpoints, self.ypoints) = self.function.evaluate(self.xlength, self.numxpoints) |
| | |
| | self.plot() |
| |
|
| | def plot(self): |
| | plots = self.thePlot.series |
| |
|
| | if plots: |
| | |
| | axes = plots[0].axes |
| | axes.lines.pop(plots[0].lid) |
| | |
| | del self.thePlot.series[0] |
| |
|
| | self.thePlot.update() |
| | self.xpoints = [p * self.xscale for p in self.xpoints] |
| | self.ypoints = [p * self.yscale for p in self.ypoints] |
| | self.thePlot.plot(self.xpoints, self.ypoints) |
| | plots = self.thePlot.series |
| | axes = plots[0].axes |
| | axes.set_xlim(right=max(self.xpoints) * 1.05) |
| | axes.set_ylim(min(self.ypoints) * 1.05, max(self.ypoints) * 1.05) |
| | self.thePlot.update() |
| |
|
| | def close(self): |
| | |
| | self.win.parent().close() |
| |
|