BUGFIX: VFT;
change to src layout
This commit is contained in:
114
src/gui_qt/io/exporters.py
Normal file
114
src/gui_qt/io/exporters.py
Normal file
@@ -0,0 +1,114 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from numpy import c_
|
||||
|
||||
from nmreval.io.graceeditor import GraceEditor
|
||||
from nmreval.utils.text import convert
|
||||
|
||||
from ..Qt import QtGui, QtCore, QtPrintSupport
|
||||
|
||||
|
||||
class GraceExporter:
|
||||
def __init__(self, kwargs: dict):
|
||||
self.__agr = None
|
||||
self.__opts = kwargs
|
||||
|
||||
def export(self, outfile: str, mode: int | str = 'w'):
|
||||
if mode == 'w':
|
||||
self.__agr = GraceEditor()
|
||||
else:
|
||||
self.__agr = GraceEditor(outfile)
|
||||
|
||||
if isinstance(mode, str):
|
||||
new_g = self.__agr.new_graph()
|
||||
|
||||
new_g.set_limits(x=self.__opts['limits'][0], y=self.__opts['limits'][1])
|
||||
new_g.set_log(x=self.__opts['log'][0], y=self.__opts['log'][1])
|
||||
|
||||
new_g.set_onoff('legend', self.__opts['legend'])
|
||||
new_g.set_property(**{'title': f'"{convert(self.__opts["labels"][2], old="html", new="agr")}"',
|
||||
'legend loctype': 'view',
|
||||
'legend': ', '.join(str(i) for i in new_g.world_to_view(self.__opts['legend_pos']))})
|
||||
|
||||
for i, ax in enumerate('xy'):
|
||||
new_g.set_axis_property(ax, **{'label': f'"{convert(self.__opts["labels"][i], old="html", new="agr")}"',
|
||||
'tick major': self.__opts['ticks'][i][0],
|
||||
'tick minor ticks': self.__opts['ticks'][i][1],})
|
||||
new_g.set_axis_onoff(ax, 'tick major grid', self.__opts['grid'])
|
||||
g_idx = new_g.idx
|
||||
else:
|
||||
g_idx = mode
|
||||
|
||||
colors = self.__agr.colors
|
||||
|
||||
new_colors = []
|
||||
for plot_label, item in zip(self.__opts['in_legend'], self.__opts['items']):
|
||||
new_s = self.__agr.new_set(g_idx)
|
||||
|
||||
sc = item['symbolcolor']
|
||||
c_num = -1
|
||||
for i, (_, rgb) in colors.items():
|
||||
if rgb == sc:
|
||||
c_num = i
|
||||
break
|
||||
|
||||
if c_num == -1:
|
||||
c_num = max(colors.keys())
|
||||
colors[c_num + 1] = (f'color{c_num + 1}', sc)
|
||||
new_colors.append((c_num + 1, f'color{c_num + 1}', sc))
|
||||
|
||||
new_s.set_symbol(**{'symbol': item['symbol'].value, 'size': item['symbolsize'] / 10., 'color': c_num,
|
||||
'fill color': c_num, 'fill pattern': 1})
|
||||
new_s.set_onoff('errorbar', self.__opts['plots'][2])
|
||||
|
||||
lc = item['linecolor']
|
||||
c_num = -1
|
||||
for c_num, (_, rgb) in colors.items():
|
||||
if rgb == lc:
|
||||
break
|
||||
|
||||
if c_num == -1:
|
||||
c_num = max(colors.keys())
|
||||
colors[c_num + 1] = ()
|
||||
new_colors.append((c_num, f'color{c_num + 1}', sc))
|
||||
|
||||
new_s.set_line(**{'color': c_num, 'linewidth': item['linewidth'],
|
||||
'linestyle': item['linestyle'].to_agr()})
|
||||
|
||||
if plot_label:
|
||||
new_s.set_property(comment=f'"{item["name"]}"',
|
||||
legend=f'"{convert(item["name"], old="tex", new="agr")}"')
|
||||
else:
|
||||
new_s.set_property(comment=f'"{item["name"]}"')
|
||||
|
||||
data = self.__agr.dataset(g_idx, new_s.idx)
|
||||
if 'yerr' in item:
|
||||
data.type = 'xydy'
|
||||
data.data = c_[item['x'], item['y'], item['yerr']]
|
||||
new_s.set_property(**{'errorbar color': c_num})
|
||||
else:
|
||||
data.data = c_[item['x'], item['y']]
|
||||
|
||||
for c in new_colors:
|
||||
self.__agr.set_color(c[1], c[2], idx=c[0])
|
||||
|
||||
self.__agr.write(outfile)
|
||||
|
||||
|
||||
class PDFPrintExporter:
|
||||
def __init__(self, graphview):
|
||||
self.graphic = graphview
|
||||
|
||||
def export(self, outfile):
|
||||
printer = QtPrintSupport.QPrinter()
|
||||
|
||||
printer.setOutputFormat(printer.PdfFormat)
|
||||
printer.setOutputFileName(outfile)
|
||||
|
||||
printer.setPaperSize(QtCore.QSizeF(self.graphic.width(), self.graphic.height()),
|
||||
printer.DevicePixel)
|
||||
printer.setPageMargins(0, 0, 0, 0, printer.DevicePixel)
|
||||
|
||||
painter = QtGui.QPainter(printer)
|
||||
self.graphic.render(painter)
|
||||
painter.end()
|
||||
Reference in New Issue
Block a user