Changeset 2450 for trunk/GSASIIgrid.py


Ignore:
Timestamp:
Aug 25, 2016 12:22:04 PM (7 years ago)
Author:
vondreele
Message:

fix error in matrix in getCellEsd & RetDistAngle?
Add new atom drawing option for sphere of enclosure

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r2435 r2450  
    7575    wxID_DRAWVIEWPOINT, wxID_DRAWTRANSFORM, wxID_DRAWDELETE, wxID_DRAWFILLCELL,
    7676    wxID_DRAWADDEQUIV, wxID_DRAWFILLCOORD, wxID_DRAWDISAGLTOR,  wxID_DRAWPLANE,
    77     wxID_DRAWDISTVP,
    78 ] = [wx.NewId() for item in range(13)]
     77    wxID_DRAWDISTVP, wxID_DRAWADDSPHERE,
     78] = [wx.NewId() for item in range(14)]
    7979
    8080[ wxID_DRAWRESTRBOND, wxID_DRAWRESTRANGLE, wxID_DRAWRESTRPLANE, wxID_DRAWRESTRCHIRAL,
     
    324324       
    325325################################################################################
     326class SphereEnclosure(wx.Dialog):
     327    ''' Add atoms within sphere of enclosure to drawing
     328   
     329    :param wx.Frame parent: reference to parent frame (or None)
     330    :param general: general data (includes drawing data)
     331    :param atoms: drawing atoms data
     332   
     333    '''
     334    def __init__(self,parent,general,drawing,indx):
     335        wx.Dialog.__init__(self,parent,wx.ID_ANY,'Setup phase transformation',
     336            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
     337        self.panel = wx.Panel(self)         #just a dummy - gets destroyed in Draw!
     338        self.General = general
     339        self.Drawing = drawing
     340        self.indx = indx
     341        self.Sphere = 1.0
     342        self.centers = []
     343       
     344        self.Draw()
     345       
     346    def Draw(self):
     347       
     348        def OnRadius(event):
     349            event.Skip()
     350            try:
     351                val = float(radius.GetValue())
     352                if val < 0.5:
     353                    raise ValueError
     354                self.Sphere = val
     355            except ValueError:
     356                pass
     357            radius.SetValue('%.3f'%(self.Sphere))
     358       
     359        self.panel.Destroy()
     360        self.panel = wx.Panel(self)
     361        mainSizer = wx.BoxSizer(wx.VERTICAL)
     362        mainSizer.Add(wx.StaticText(self.panel,label=' Sphere of enclosure controls:'),0,WACV)
     363        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     364        atoms = []
     365        if len(self.indx):
     366            topSizer.Add(wx.StaticText(self.panel,label=' Sphere centered at atoms: '),0,WACV)
     367            cx,ct,cs = self.Drawing['atomPtrs'][:3]
     368#            print self.Drawing.keys()
     369            for id in self.indx:
     370                atom = self.Drawing['Atoms'][id]
     371                self.centers.append(atom[cx:cx+3])
     372                atoms.append('%s(%s)'%(atom[ct-1],atom[cs-1]))
     373            topSizer.Add(wx.ComboBox(self.panel,choices=atoms,value=atoms[0],
     374                style=wx.CB_READONLY|wx.CB_DROPDOWN),0,WACV)
     375        else:
     376            topSizer.Add(wx.StaticText(self.panel,label=' Sphere centered at drawing view point'),0,WACV)
     377            self.centers.append(self.Drawing['viewPoint'][0])
     378        mainSizer.Add(topSizer,0,WACV)
     379        sphereSizer = wx.BoxSizer(wx.HORIZONTAL)
     380        sphereSizer.Add(wx.StaticText(self.panel,label=' Sphere radius: '),0,WACV)
     381        radius = wx.TextCtrl(self.panel,value='%.3f'%(self.Sphere),style=wx.TE_PROCESS_ENTER)
     382        radius.Bind(wx.EVT_TEXT_ENTER,OnRadius)
     383        radius.Bind(wx.EVT_KILL_FOCUS,OnRadius)
     384        sphereSizer.Add(radius,0,WACV)
     385        mainSizer.Add(sphereSizer,0,WACV)
     386       
     387        OkBtn = wx.Button(self.panel,-1,"Ok")
     388        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
     389        cancelBtn = wx.Button(self.panel,-1,"Cancel")
     390        cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
     391        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
     392        btnSizer.Add((20,20),1)
     393        btnSizer.Add(OkBtn)
     394        btnSizer.Add((20,20),1)
     395        btnSizer.Add(cancelBtn)
     396        btnSizer.Add((20,20),1)
     397       
     398        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
     399        self.panel.SetSizer(mainSizer)
     400        self.panel.Fit()
     401        self.Fit()
     402       
     403    def GetSelection(self):
     404        return self.centers,self.Sphere
     405
     406    def OnOk(self,event):
     407        parent = self.GetParent()
     408        parent.Raise()
     409        self.EndModal(wx.ID_OK)
     410
     411    def OnCancel(self,event):
     412        parent = self.GetParent()
     413        parent.Raise()
     414        self.EndModal(wx.ID_CANCEL)
     415       
     416################################################################################
    326417class TransformDialog(wx.Dialog):
    327     ''' Phaae transformation
     418    ''' Phase transformation
    328419   
    329420    :param wx.Frame parent: reference to parent frame (or None)
     
    20542145        self.DrawAtomEdit.Append(id=wxID_DRAWADDEQUIV, kind=wx.ITEM_NORMAL,text='Add atoms',
    20552146            help='Add symmetry & cell equivalents to drawing set from selected atoms')
     2147        self.DrawAtomEdit.Append(id=wxID_DRAWADDSPHERE, kind=wx.ITEM_NORMAL,text='Add sphere of atoms',
     2148            help='Add atoms within sphere of enclosure')
    20562149        self.DrawAtomEdit.Append(id=wxID_DRAWTRANSFORM, kind=wx.ITEM_NORMAL,text='Transform draw atoms',
    20572150            help='Transform selected atoms by symmetry & cell translations')
Note: See TracChangeset for help on using the changeset viewer.