""" @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