123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- """
- @package nviz.workspace
- @brief wxNviz workspace settings
- Classes:
- - workspace::NvizSettings
- (C) 2007-2011 by the GRASS Development Team
- This program is free software under the GNU General Public License
- (>=v2). Read the file COPYING that comes with GRASS for details.
- @author Anna Kratochvilova <kratochanna gmail.com> (wxNviz / Google SoC 2011)
- """
- import copy
- import six
- from core.settings import UserSettings
- try:
- from nviz import wxnviz
- except ImportError:
- wxnviz = None
- class NvizSettings(object):
- def __init__(self):
- pass
- def SetConstantDefaultProp(self):
- """Set default constant data properties"""
- data = dict()
- for key, value in six.iteritems(UserSettings.Get(group="nviz", key="constant")):
- data[key] = value
- color = (
- str(data["color"][0])
- + ":"
- + str(data["color"][1])
- + ":"
- + str(data["color"][2])
- )
- data["color"] = color
- return data
- def SetSurfaceDefaultProp(self, data=None):
- """Set default surface data properties"""
- if not data:
- data = dict()
- for sec in ("attribute", "draw", "mask", "position"):
- data[sec] = {}
- #
- # attributes
- #
- for attrb in ("shine",):
- data["attribute"][attrb] = {}
- for key, value in six.iteritems(
- UserSettings.Get(group="nviz", key="surface", subkey=attrb)
- ):
- data["attribute"][attrb][key] = value
- data["attribute"][attrb]["update"] = None
- #
- # draw
- #
- data["draw"]["all"] = False # apply only for current surface
- for control, value in six.iteritems(
- UserSettings.Get(group="nviz", key="surface", subkey="draw")
- ):
- if control[:3] == "res":
- if "resolution" not in data["draw"]:
- data["draw"]["resolution"] = {}
- if "update" not in data["draw"]["resolution"]:
- data["draw"]["resolution"]["update"] = None
- data["draw"]["resolution"][control[4:]] = value
- continue
- if control == "wire-color":
- value = str(value[0]) + ":" + str(value[1]) + ":" + str(value[2])
- elif control in ("mode", "style", "shading"):
- if "mode" not in data["draw"]:
- data["draw"]["mode"] = {}
- continue
- data["draw"][control] = {"value": value}
- data["draw"][control]["update"] = None
- value, desc = self.GetDrawMode(
- UserSettings.Get(group="nviz", key="surface", subkey=["draw", "mode"]),
- UserSettings.Get(group="nviz", key="surface", subkey=["draw", "style"]),
- UserSettings.Get(group="nviz", key="surface", subkey=["draw", "shading"]),
- )
- data["draw"]["mode"] = {"value": value, "desc": desc, "update": None}
- # position
- for coord in ("x", "y", "z"):
- data["position"][coord] = UserSettings.Get(
- group="nviz", key="surface", subkey=["position", coord]
- )
- data["position"]["update"] = None
- return data
- def SetVolumeDefaultProp(self):
- """Set default volume data properties"""
- data = dict()
- for sec in ("attribute", "draw", "position"):
- data[sec] = dict()
- for sec in ("isosurface", "slice"):
- data[sec] = list()
- #
- # draw
- #
- for control, value in six.iteritems(
- UserSettings.Get(group="nviz", key="volume", subkey="draw")
- ):
- if control == "shading":
- sel = UserSettings.Get(
- group="nviz", key="volume", subkey=["draw", "shading"]
- )
- value, desc = self.GetDrawMode(shade=sel, string=False)
- data["draw"]["shading"] = {}
- data["draw"]["shading"]["isosurface"] = {
- "value": value,
- "desc": desc["shading"],
- }
- data["draw"]["shading"]["slice"] = {
- "value": value,
- "desc": desc["shading"],
- }
- elif control == "mode":
- sel = UserSettings.Get(
- group="nviz", key="volume", subkey=["draw", "mode"]
- )
- if sel == 0:
- desc = "isosurface"
- else:
- desc = "slice"
- data["draw"]["mode"] = {
- "value": sel,
- "desc": desc,
- }
- elif control == "box":
- box = UserSettings.Get(
- group="nviz", key="volume", subkey=["draw", "box"]
- )
- data["draw"]["box"] = {"enabled": box}
- else:
- data["draw"][control] = {}
- data["draw"][control]["isosurface"] = {"value": value}
- data["draw"][control]["slice"] = {"value": value}
- if "update" not in data["draw"][control]:
- data["draw"][control]["update"] = None
- #
- # isosurface attributes
- #
- for attrb in ("shine",):
- data["attribute"][attrb] = {}
- for key, value in six.iteritems(
- UserSettings.Get(group="nviz", key="volume", subkey=attrb)
- ):
- data["attribute"][attrb][key] = value
- return data
- def SetIsosurfaceDefaultProp(self):
- """Set default isosurface properties"""
- data = dict()
- for attr in ("shine", "topo", "transp", "color", "inout"):
- data[attr] = {}
- data[attr]["update"] = None
- if attr == "inout":
- data[attr]["value"] = 0
- continue
- for key, value in six.iteritems(
- UserSettings.Get(group="nviz", key="volume", subkey=attr)
- ):
- data[attr][key] = value
- return data
- def SetSliceDefaultProp(self):
- """Set default slice properties"""
- data = dict()
- data["position"] = copy.deepcopy(
- UserSettings.Get(group="nviz", key="volume", subkey="slice_position")
- )
- data["position"]["update"] = None
- data["transp"] = copy.deepcopy(
- UserSettings.Get(group="nviz", key="volume", subkey="transp")
- )
- return data
- def SetVectorDefaultProp(self, longDim, data=None):
- """Set default vector data properties"""
- if not data:
- data = dict()
- for sec in ("lines", "points"):
- data[sec] = {}
- self.SetVectorLinesDefaultProp(data["lines"])
- self.SetVectorPointsDefaultProp(data["points"], longDim)
- return data
- def SetVectorLinesDefaultProp(self, data):
- """Set default vector properties -- lines"""
- # width
- data["width"] = {
- "value": UserSettings.Get(
- group="nviz", key="vector", subkey=["lines", "width"]
- )
- }
- # color
- value = UserSettings.Get(group="nviz", key="vector", subkey=["lines", "color"])
- color = str(value[0]) + ":" + str(value[1]) + ":" + str(value[2])
- data["color"] = {"value": color}
- # mode
- if UserSettings.Get(group="nviz", key="vector", subkey=["lines", "flat"]):
- type = "flat"
- else:
- type = "surface"
- data["mode"] = {}
- data["mode"]["type"] = type
- data["mode"]["update"] = None
- # height
- data["height"] = {
- "value": UserSettings.Get(
- group="nviz", key="vector", subkey=["lines", "height"]
- )
- }
- # thematic
- data["thematic"] = {
- "rgbcolumn": UserSettings.Get(
- group="nviz", key="vector", subkey=["lines", "rgbcolumn"]
- ),
- "sizecolumn": UserSettings.Get(
- group="nviz", key="vector", subkey=["lines", "sizecolumn"]
- ),
- "layer": 1,
- "usecolor": False,
- "usewidth": False,
- }
- if "object" in data:
- for attrb in ("color", "width", "mode", "height", "thematic"):
- data[attrb]["update"] = None
- def SetVectorPointsDefaultProp(self, data, longDim):
- """Set default vector properties -- points"""
- size_fraction = 0.005
- # size
- autosize = UserSettings.Get(
- group="nviz", key="vector", subkey=["points", "autosize"]
- )
- if autosize:
- data["size"] = {"value": longDim * size_fraction}
- else:
- data["size"] = {
- "value": UserSettings.Get(
- group="nviz", key="vector", subkey=["points", "size"]
- )
- }
- # width
- data["width"] = {
- "value": UserSettings.Get(
- group="nviz", key="vector", subkey=["points", "width"]
- )
- }
- # marker
- data["marker"] = {
- "value": UserSettings.Get(
- group="nviz", key="vector", subkey=["points", "marker"]
- )
- }
- # color
- value = UserSettings.Get(group="nviz", key="vector", subkey=["points", "color"])
- color = str(value[0]) + ":" + str(value[1]) + ":" + str(value[2])
- data["color"] = {"value": color}
- # mode
- data["mode"] = {"type": "surface"}
- # 'surface' : '', }
- # height
- data["height"] = {
- "value": UserSettings.Get(
- group="nviz", key="vector", subkey=["points", "height"]
- )
- }
- data["thematic"] = {
- "rgbcolumn": UserSettings.Get(
- group="nviz", key="vector", subkey=["points", "rgbcolumn"]
- ),
- "sizecolumn": UserSettings.Get(
- group="nviz", key="vector", subkey=["points", "sizecolumn"]
- ),
- "layer": 1,
- "usecolor": False,
- "usesize": False,
- }
- if "object" in data:
- for attrb in ("size", "width", "marker", "color", "height", "thematic"):
- data[attrb]["update"] = None
- def GetDrawMode(self, mode=None, style=None, shade=None, string=False):
- """Get surface draw mode (value) from description/selection
- :param mode:
- :param style:
- :param shade:
- :param string: if True input parameters are strings otherwise
- selections
- """
- if not wxnviz:
- return None
- value = 0
- desc = {}
- if string:
- if mode is not None:
- if mode == "coarse":
- value |= wxnviz.DM_WIRE
- elif mode == "fine":
- value |= wxnviz.DM_POLY
- else: # both
- value |= wxnviz.DM_WIRE_POLY
- if style is not None:
- if style == "wire":
- value |= wxnviz.DM_GRID_WIRE
- else: # surface
- value |= wxnviz.DM_GRID_SURF
- if shade is not None:
- if shade == "flat":
- value |= wxnviz.DM_FLAT
- else: # surface
- value |= wxnviz.DM_GOURAUD
- return value
- # -> string is False
- if mode is not None:
- if mode == 0: # coarse
- value |= wxnviz.DM_WIRE
- desc["mode"] = "coarse"
- elif mode == 1: # fine
- value |= wxnviz.DM_POLY
- desc["mode"] = "fine"
- else: # both
- value |= wxnviz.DM_WIRE_POLY
- desc["mode"] = "both"
- if style is not None:
- if style == 0: # wire
- value |= wxnviz.DM_GRID_WIRE
- desc["style"] = "wire"
- else: # surface
- value |= wxnviz.DM_GRID_SURF
- desc["style"] = "surface"
- if shade is not None:
- if shade == 0:
- value |= wxnviz.DM_FLAT
- desc["shading"] = "flat"
- else: # surface
- value |= wxnviz.DM_GOURAUD
- desc["shading"] = "gouraud"
- return (value, desc)
- def SetDecorDefaultProp(self, type):
- """Set default arrow properties"""
- data = {}
- # arrow
- if type == "arrow":
- data["arrow"] = copy.deepcopy(UserSettings.Get(group="nviz", key="arrow"))
- data["arrow"]["color"] = "%d:%d:%d" % (
- UserSettings.Get(group="nviz", key="arrow", subkey="color")[:3]
- )
- data["arrow"].update(
- copy.deepcopy(
- UserSettings.Get(
- group="nviz", key="arrow", settings_type="internal"
- )
- )
- )
- data["arrow"]["show"] = False
- # arrow
- if type == "scalebar":
- data["scalebar"] = copy.deepcopy(
- UserSettings.Get(group="nviz", key="scalebar")
- )
- data["scalebar"]["color"] = "%d:%d:%d" % (
- UserSettings.Get(group="nviz", key="scalebar", subkey="color")[:3]
- )
- data["scalebar"].update(
- copy.deepcopy(
- UserSettings.Get(
- group="nviz", key="scalebar", settings_type="internal"
- )
- )
- )
- data["scalebar"]["id"] = 0
- return data
|