Source code for qtdraw.parser.converter

"""
Converter for QtDraw ver. 1.

This module contains the converter for version 1 format.
"""

import copy
from qtdraw.core.pyvista_widget_setting import default_status, default_preference
from qtdraw.multipie.plugin_multipie_setting import space_group_list, point_group_list, crystal_list
from qtdraw.multipie.plugin_multipie_setting import default_status as multipie_default
from qtdraw import __version__


# ==================================================
[docs] def to_bool(b): """ Convert from string to bool. Args: b (str): string of bool. Returns: - (bool) -- converted value. """ if type(b) == str: return b == "True" else: return b
# old setting keyword (text -> text2d). # ================================================== old_setting = { "site": ["name", "ON", "label", "cell", "position", "size", "color", "opacity", "space", "D", "AD", "AL"], "bond": [ "name", "ON", "label", "cell", "position", "vector", "width", "color", "color2", "opacity", "space", "D", "AD", "AL", ], "vector": [ "name", "ON", "label", "cell", "position", "vector", "length", "width", "offset", "color", "opacity", "space", "D", "AD", "AL", ], "orbital": [ "name", "ON", "label", "cell", "position", "shape", "surface", "size", "scale", "theta0", "theta1", "phi0", "phi1", "color", "opacity", "space", "D", "AD", "AL", ], "stream": [ "name", "ON", "label", "cell", "position", "shape", "vector", "size", "v_size", "width", "scale", "theta", "phi", "theta0", "theta1", "phi0", "phi1", "color", "component", "opacity", "space", "D", "AD", "AL", ], "plane": ["name", "ON", "label", "cell", "position", "normal", "x", "y", "color", "opacity", "space", "D", "AD", "AL"], "box": [ "name", "ON", "label", "cell", "position", "a1", "a2", "a3", "edge", "wireframe", "width", "color", "opacity", "space", "D", "AD", "AL", ], "polygon": [ "name", "ON", "label", "cell", "position", "point", "connection", "edge", "wireframe", "width", "color", "opacity", "space", "D", "AD", "AL", ], "text3d": [ "name", "ON", "label", "cell", "position", "text", "size", "depth", "normal", "offset", "color", "opacity", "space", "D", "AD", "AL", ], "spline": [ "name", "ON", "label", "cell", "position", "point", "width", "n_interp", "closed", "natural", "color", "opacity", "space", "D", "AD", "AL", ], "spline_t": [ "name", "ON", "label", "cell", "position", "expression", "t_range", "width", "n_interp", "closed", "natural", "color", "opacity", "space", "D", "AD", "AL", ], "caption": ["name", "cell", "position", "caption", "space", "size", "bold", "color", "D", "AD"], "text": ["name", "position", "relative", "caption", "size", "color", "font", "D", "AD"], } # ==================================================
[docs] def get_status(dic): """ Get update status. Args: dic (dict): read status. Returns: - (dict) -- updated status. """ axis_type = {0: "on", 1: "axis", 2: "off"} cell_mode = {0: "single", 1: "all", 2: "off"} setting = dic["setting"] status = copy.deepcopy(default_status) update_status = { "model": setting["model"], "origin": setting["origin"], "cell": setting["cell"], "crystal": setting["crystal"], "clip": setting["clip"], "repeat": setting["repeat"], "lower": setting["view_range"][0], "upper": setting["view_range"][1], "view": setting["view"], "axis_type": axis_type[setting["axis_mode"]], "cell_mode": cell_mode[setting["cell_mode"]], } status.update(update_status) return status
# ==================================================
[docs] def get_camera(dic): """ Get camera info. Args: dic (dict): read camera info. Returns: - (dict) -- updated camera info. """ setting = dic["setting"] camera = { "position": [2.495208, 2.99401, 1.497604], "viewup": [-0.186248, -0.23281, 0.954521], "focal_point": [0.5, 0.5, 0.5], "angle": 30.0, "clipping_range": [1.68102, 5.450085], "distance": 3.346065, "scale": 0.866025, } update_camera = { "position": list(setting["camera.position"]), "viewup": list(setting["camera.up"]), "focal_point": list(setting["camera.focus"]), } camera.update(update_camera) return camera
# ==================================================
[docs] def get_preference(dic): """ Get update preference. Args: dic (dict): read preference. Returns: - (dict) -- updated preference. """ pref = dic["preference"] preference = copy.deepcopy(default_preference) amode = {"xyz": "[x,y,z]", "abc": "[a,b,c]", "abc*": "[a*,b*,c*]"} update_preference = { "light": { "type": "ver1", "intensity": pref["light.intensity"], "pbr": pref["light.pbr"], "metallic": pref["light.metallic"], "roughness": pref["light.roughness"], }, "label": { "font": pref["label.font"], "size": pref["label.size"], "bold": pref["label.bold"], "italic": pref["label.italic"], "color": pref["label.color"], }, "cell": {"line_width": pref["cell.width"], "color": pref["cell.color"], "opacity": pref["cell.opacity"]}, "axis": { "size": pref["axis.size"], "bold": pref["axis.bold"], "italic": pref["axis.italic"], "label": amode[pref["axis.type"]], }, } for key, value in update_preference.items(): preference[key].update(value) return preference
# ==================================================
[docs] def get_multipie(dic): """ Get multipie info. Args: dic (dict): read multipie info. Returns: - (dict) -- updated multipie info. """ type_str = {0: "Q", 1: "G", 2: "T", 3: "M"} type_str1 = {0: "Q,G", 1: "T,M"} multipie = copy.deepcopy(multipie_default) multipie["plus"] = {} if "multipie" in dic.keys(): old = dic["multipie"] multipie["version"] = old["version"] # main panel. g_type, crystal, group = old["main"]["group"] crystal = crystal_list[crystal] if g_type == 0: tag = space_group_list[crystal][group] else: tag = point_group_list[crystal][group] if tag.count(" ") > 0: tag = tag.split(" ")[1] multipie["group"]["group"] = tag multipie["group"]["irrep1"] = 0 multipie["group"]["irrep2"] = 0 multipie["group"]["irrep"] = 0 multipie["group"]["vc_wyckoff"] = 0 # tab1. multipie["object"]["site"] = old["tab1"]["site"][0] multipie["object"]["bond"] = old["tab1"]["bond"][0] vector, v_type = old["tab1"]["vector"] multipie["object"]["vector"] = vector multipie["object"]["vector_type"] = type_str[v_type] orbital, o_type = old["tab1"]["orbital"] multipie["object"]["orbital"] = orbital multipie["object"]["orbital_type"] = type_str[o_type] harmonics, h_type, h_rank, _ = old["tab1"]["harmonics"] multipie["object"]["harmonics_type"] = type_str[h_type] multipie["object"]["harmonics_rank"] = h_rank multipie["object"]["harmonics"] = harmonics multipie["object"]["wyckoff"] = old["tab1"]["wyckoff"][0] # tab2. site = old["tab2"]["site"][0] multipie["basis"]["site"] = site bond = old["tab2"]["bond"][0] multipie["basis"]["bond"] = bond vector, v_type, v_samb_type, _, v_lc, v_mod_type, v_mod = old["tab2"]["vector"] multipie["basis"]["vector_type"] = type_str[v_type] multipie["basis"]["vector"] = vector multipie["basis"]["vector_samb_type"] = type_str[v_samb_type] multipie["basis"]["vector_lc"] = v_lc multipie["basis"]["vector_modulation_type"] = type_str1[v_mod_type] multipie["basis"]["vector_modulation"] = v_mod orbital, o_type, o_rank, o_samb_type, _, o_lc, o_mod_type, o_mod = old["tab2"]["orbital"] multipie["basis"]["orbital_type"] = type_str[o_type] multipie["basis"]["orbital_rank"] = o_rank multipie["basis"]["orbital"] = orbital multipie["basis"]["orbital_samb_type"] = type_str[o_samb_type] multipie["basis"]["orbital_lc"] = o_lc multipie["basis"]["orbital_modulation_type"] = type_str1[o_mod_type] multipie["basis"]["orbital_modulation"] = o_mod hopping = old["tab2"]["hopping"][0] multipie["basis"]["hopping"] = hopping return multipie
# ==================================================
[docs] def get_data(dic, widget): """ Get updated data. Args: dic (dict): read data. widget (PyVistaWidget): PyVistaWidget. Returns: - (dict) -- updated data. """ widget._data["site"].block_update_widget(True) for row in dic["site"]: d = dict(zip(old_setting["site"], row)) widget.add_site( 0.07 * float(d["size"]), d["color"], d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"] ) widget._data["site"].block_update_widget(False) widget._data["bond"].block_update_widget(True) for row in dic["bond"]: d = dict(zip(old_setting["bond"], row)) widget.add_bond( d["vector"], 0.018 * float(d["width"]), d["color"], d["color2"], False, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["bond"].block_update_widget(False) widget._data["vector"].block_update_widget(True) for row in dic["vector"]: d = dict(zip(old_setting["vector"], row)) widget.add_vector( d["vector"], d["length"], 0.02 * float(d["width"]), d["offset"], d["color"], True, None, None, None, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["vector"].block_update_widget(False) widget._data["orbital"].block_update_widget(True) for row in dic["orbital"]: d = dict(zip(old_setting["orbital"], row)) size = -0.3 * abs(float(d["size"])) if d["scale"] else 0.3 * abs(float(d["size"])) widget.add_orbital( d["shape"], d["surface"], size, [[d["theta0"], d["theta1"]], [d["phi0"], d["phi1"]]], d["color"], d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["orbital"].block_update_widget(False) comp_str = {0: "x", 1: "y", 2: "z", 3: "abs"} widget._data["stream"].block_update_widget(True) for row in dic["stream"]: d = dict(zip(old_setting["stream"], row)) size = -float(d["size"]) if d["scale"] else float(d["size"]) widget.add_stream( d["shape"], d["vector"], size, [[d["theta0"], d["theta1"]], [d["phi0"], d["phi1"]]], [d["theta"], d["phi"]], d["v_size"], 0.004 * float(d["width"]), None, to_bool(d["scale"]), d["color"], comp_str[d["component"]], None, None, None, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["stream"].block_update_widget(False) widget._data["plane"].block_update_widget(True) for row in dic["plane"]: d = dict(zip(old_setting["plane"], row)) widget.add_plane( d["normal"], d["x"], d["y"], d["color"], None, None, None, False, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["plane"].block_update_widget(False) widget._data["box"].block_update_widget(True) for row in dic["box"]: d = dict(zip(old_setting["box"], row)) widget.add_box( d["a1"], d["a2"], d["a3"], d["width"], None, None, to_bool(d["wireframe"]), d["color"], False, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["box"].block_update_widget(False) widget._data["polygon"].block_update_widget(True) for row in dic["polygon"]: d = dict(zip(old_setting["polygon"], row)) widget.add_polygon( d["point"], d["connection"], d["width"], to_bool(d["edge"]), None, to_bool(d["wireframe"]), d["color"], False, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["polygon"].block_update_widget(False) widget._data["text3d"].block_update_widget(True) for row in dic["text3d"]: d = dict(zip(old_setting["text3d"], row)) widget.add_text3d( d["text"], 0.04 * float(d["size"]), d["normal"], 0.3 * float(d["depth"]), d["offset"], d["color"], d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["text3d"].block_update_widget(False) widget._data["spline"].block_update_widget(True) for row in dic["spline"]: d = dict(zip(old_setting["spline"], row)) widget.add_spline( d["point"], 0.01 * float(d["width"]), d["n_interp"], to_bool(d["closed"]), to_bool(d["natural"]), None, None, None, None, d["color"], False, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["spline"].block_update_widget(False) widget._data["spline_t"].block_update_widget(True) for row in dic["spline_t"]: d = dict(zip(old_setting["spline_t"], row)) widget.add_spline_t( d["expression"], d["t_range"], 0.01 * float(d["width"]), d["n_interp"], to_bool(d["closed"]), to_bool(d["natural"]), None, None, None, None, d["color"], False, d["opacity"], d["position"], d["cell"], d["name"], d["label"], d["space"], ) widget._data["spline_t"].block_update_widget(False) widget._data["caption"].block_update_widget(True) for row in dic["caption"]: d = dict(zip(old_setting["caption"], row)) caption = "[" + ",".join(d["caption"]) + "]" widget.add_caption( caption, d["size"], to_bool(d["bold"]), d["color"], d["position"], d["cell"], d["name"], d["space"], ) widget._data["caption"].block_update_widget(False) font_str = {0: "arial", 1: "courier", 2: "times"} widget._data["text2d"].block_update_widget(True) for row in dic["text"]: d = dict(zip(old_setting["text"], row)) widget.add_text2d( d["caption"], d["size"], d["color"], font_str[d["font"]], d["position"] + [0], d["name"], ) widget._data["text2d"].block_update_widget(False) data = widget.get_data_dict() return data
# ==================================================
[docs] def convert_version2(dic, widget): """ Converter from ver.1 to ver. 2. Args: dic (dict): ver.1 dict. widget (PyVistaWidget): PyVistaWidget. Returns: - (dict) -- all data dict in ver. 2. """ # all data. all_data = { "version": __version__, "data": get_data(dic, widget), "status": get_status(dic), "preference": get_preference(dic), "camera": get_camera(dic), } all_data["status"].update({"multipie": get_multipie(dic)}) return all_data