Skip to content

Commit 318652c

Browse files
committed
put UpdateDrawAtoms back into G2phsGUI
1 parent 35eba20 commit 318652c

File tree

2 files changed

+248
-247
lines changed

2 files changed

+248
-247
lines changed

GSASII/GSASIIphsGUI.py

Lines changed: 241 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7221,7 +7221,241 @@ def OnDefineRB(event):
72217221
G2frame.GetStatusBar().SetStatusText('New rigid body UNKRB added to set of Residue rigid bodies',1)
72227222

72237223
##### Draw Atom routines ################################################################################
7224+
def UpdateDrawAtoms(G2frame,data,atomStyle=''):
7225+
drawAtoms = G2frame.drawAtoms
7226+
def RefreshDrawAtomGrid(event):
7227+
def SetChoice(name,c,n=0):
7228+
choice = []
7229+
for r in range(len(atomData)):
7230+
if n:
7231+
srchStr = str(atomData[r][c][:n])
7232+
else:
7233+
srchStr = str(atomData[r][c])
7234+
if srchStr not in choice:
7235+
if n:
7236+
choice.append(str(atomData[r][c][:n]))
7237+
else:
7238+
choice.append(str(atomData[r][c]))
7239+
choice.sort()
7240+
7241+
dlg = wx.MultiChoiceDialog(G2frame,'Select',name,choice)
7242+
if dlg.ShowModal() == wx.ID_OK:
7243+
sel = dlg.GetSelections()
7244+
parms = []
7245+
for x in sel:
7246+
parms.append(choice[x])
7247+
drawAtoms.ClearSelection()
7248+
drawingData['selectedAtoms'] = []
7249+
for row in range(len(atomData)):
7250+
test = atomData[row][c]
7251+
if n:
7252+
test = test[:n]
7253+
if test in parms:
7254+
drawAtoms.SelectRow(row,True)
7255+
drawingData['selectedAtoms'].append(row)
7256+
G2plt.PlotStructure(G2frame,data)
7257+
dlg.Destroy()
7258+
7259+
r,c = event.GetRow(),event.GetCol()
7260+
if r < 0 and c < 0:
7261+
for row in range(drawAtoms.GetNumberRows()):
7262+
drawingData['selectedAtoms'].append(row)
7263+
drawAtoms.SelectRow(row,True)
7264+
elif r < 0: #dclick on col label
7265+
# sel = -1
7266+
if drawAtoms.GetColLabelValue(c) == 'Style':
7267+
DrawAtomStyle(event)
7268+
elif drawAtoms.GetColLabelValue(c) == 'Label':
7269+
DrawAtomLabel(event)
7270+
elif drawAtoms.GetColLabelValue(c) == 'Color':
7271+
DrawAtomColor(event)
7272+
elif drawAtoms.GetColLabelValue(c) == 'Residue':
7273+
SetChoice('Residue',c,3)
7274+
elif drawAtoms.GetColLabelValue(c) == '1-letter':
7275+
SetChoice('1-letter',c,1)
7276+
elif drawAtoms.GetColLabelValue(c) == 'Chain':
7277+
SetChoice('Chain',c)
7278+
elif drawAtoms.GetColLabelValue(c) == 'Name':
7279+
SetChoice('Name',c)
7280+
elif drawAtoms.GetColLabelValue(c) == 'Sym Op':
7281+
SetChoice('Name',c)
7282+
elif drawAtoms.GetColLabelValue(c) == 'Type':
7283+
SetChoice('Type',c)
7284+
elif drawAtoms.GetColLabelValue(c) in ['x','y','z','I/A']:
7285+
drawAtoms.ClearSelection()
7286+
else:
7287+
if drawAtoms.GetColLabelValue(c) in ['Style','Label']:
7288+
atomData[r][c] = drawAtoms.GetCellValue(r,c)
7289+
FindBondsDraw(data)
7290+
elif drawAtoms.GetColLabelValue(c) == 'Color':
7291+
colors = wx.ColourData()
7292+
colors.SetChooseFull(True)
7293+
dlg = wx.ColourDialog(G2frame.GetParent(),colors)
7294+
if dlg.ShowModal() == wx.ID_OK:
7295+
color = dlg.GetColourData().GetColour()[:3]
7296+
attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop!
7297+
attr.SetReadOnly(True)
7298+
attr.SetBackgroundColour(color)
7299+
atomData[r][c] = color
7300+
drawingData['Atoms'][r][c] = color
7301+
drawAtoms.SetAttr(i,cs+2,attr)
7302+
dlg.Destroy()
7303+
UpdateDrawAtoms(G2frame,data)
7304+
G2plt.PlotStructure(G2frame,data)
72247305

7306+
def NextAtom(event):
7307+
'respond to a tab by cycling through the atoms'
7308+
next = 0
7309+
for r in drawAtoms.GetSelectedRows():
7310+
next = r + 1
7311+
break
7312+
if next >= drawAtoms.GetNumberRows():
7313+
next = 0
7314+
drawAtoms.ClearSelection()
7315+
drawAtoms.SelectRow(next,True)
7316+
drawAtoms.MakeCellVisible(next,0)
7317+
drawingData['selectedAtoms'] = drawAtoms.GetSelectedRows()
7318+
G2plt.PlotStructure(G2frame,data)
7319+
G2frame.Raise()
7320+
7321+
def RowSelect(event):
7322+
r,c = event.GetRow(),event.GetCol()
7323+
if r < 0 and c < 0:
7324+
if drawAtoms.IsSelection():
7325+
drawAtoms.ClearSelection()
7326+
elif c < 0: #only row clicks
7327+
if event.ControlDown():
7328+
if r in drawAtoms.GetSelectedRows():
7329+
drawAtoms.DeselectRow(r)
7330+
else:
7331+
drawAtoms.SelectRow(r,True)
7332+
elif event.ShiftDown():
7333+
indxs = drawAtoms.GetSelectedRows()
7334+
drawAtoms.ClearSelection()
7335+
ibeg = 0
7336+
if indxs:
7337+
ibeg = indxs[-1]
7338+
for row in range(ibeg,r+1):
7339+
drawAtoms.SelectRow(row,True)
7340+
else:
7341+
G2frame.GetStatusBar().SetStatusText('Use right mouse click to brng up Draw Atom editing options',1)
7342+
drawAtoms.ClearSelection()
7343+
drawAtoms.SelectRow(r,True)
7344+
drawingData['selectedAtoms'] = []
7345+
drawingData['selectedAtoms'] = drawAtoms.GetSelectedRows()
7346+
G2plt.PlotStructure(G2frame,data)
7347+
7348+
#### UpdateDrawAtoms executable code starts here
7349+
topSizer = G2frame.dataWindow.topBox
7350+
topSizer.Clear(True)
7351+
parent = G2frame.dataWindow.topPanel
7352+
lbl= f"Draw Atom list for {data['General']['Name']!r}"[:60]
7353+
topSizer.Add(wx.StaticText(parent,label=lbl),0,WACV)
7354+
topSizer.Add((-1,-1),1,wx.EXPAND)
7355+
topSizer.Add(G2G.HelpButton(parent,helpIndex=G2frame.dataWindow.helpKey))
7356+
wx.CallAfter(G2frame.dataWindow.SetDataSize)
7357+
G2frame.GetStatusBar().SetStatusText('',1)
7358+
oldSizer = G2frame.drawAtomsList.GetSizer()
7359+
if oldSizer: # 2nd+ use, clear out old entries
7360+
for i in oldSizer.GetChildren(): # look for grids in sizer
7361+
if type(i.GetWindow()) is G2G.GSGrid:
7362+
oldSizer.Detach(i.GetWindow()) # don't delete them
7363+
oldSizer.Clear(True)
7364+
generalData = data['General']
7365+
SetupDrawingData()
7366+
drawingData = data['Drawing']
7367+
SetDrawingDefaults(drawingData)
7368+
cx,ct,cs,ci = drawingData['atomPtrs']
7369+
atomData = drawingData['Atoms']
7370+
if atomStyle:
7371+
for atom in atomData:
7372+
atom[cs] = atomStyle
7373+
Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,5',]+ \
7374+
[wg.GRID_VALUE_STRING,wg.GRID_VALUE_CHOICE+": ,lines,vdW balls,sticks,balls & sticks,ellipsoids,polyhedra",
7375+
wg.GRID_VALUE_CHOICE+": ,type,name,number",wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,]
7376+
# styleChoice = DrawStyleChoice
7377+
# labelChoice = [' ','type','name','number']
7378+
colLabels = ['Name','Type','x','y','z','Sym Op','Style','Label','Color','I/A']
7379+
if generalData['Type'] == 'macromolecular':
7380+
colLabels = ['Residue','1-letter','Chain'] + colLabels
7381+
Types = 3*[wg.GRID_VALUE_STRING,]+Types
7382+
Types[8] = wg.GRID_VALUE_CHOICE+": ,lines,vdW balls,sticks,balls & sticks,ellipsoids,backbone,ribbons,schematic"
7383+
# styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids','backbone','ribbons','schematic']
7384+
# labelChoice = [' ','type','name','number','residue','1-letter','chain']
7385+
Types[9] = wg.GRID_VALUE_CHOICE+": ,type,name,number,residue,1-letter,chain"
7386+
elif generalData['Type'] == 'magnetic':
7387+
colLabels = colLabels[:5]+['Mx','My','Mz']+colLabels[5:]
7388+
Types = Types[:5]+3*[wg.GRID_VALUE_FLOAT+':10,4',]+Types[5:]
7389+
table = []
7390+
rowLabels = []
7391+
for i,atom in enumerate(drawingData['Atoms']):
7392+
table.append(atom[:colLabels.index('I/A')+1])
7393+
rowLabels.append(str(i))
7394+
7395+
G2frame.atomTable = None
7396+
G2frame.atomTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
7397+
drawAtoms.SetTable(G2frame.atomTable, True)
7398+
drawAtoms.SetMargins(0,0)
7399+
drawAtoms.AutoSizeColumns(True)
7400+
drawAtoms.SetColSize(colLabels.index('Style'),80)
7401+
drawAtoms.SetColSize(colLabels.index('Color'),50)
7402+
drawAtoms.SetRowLabelSize(45)
7403+
if 'phoenix' in wx.version():
7404+
drawAtoms.Unbind(wg.EVT_GRID_CELL_CHANGED)
7405+
drawAtoms.Bind(wg.EVT_GRID_CELL_CHANGED, RefreshDrawAtomGrid)
7406+
else:
7407+
drawAtoms.Unbind(wg.EVT_GRID_CELL_CHANGE)
7408+
drawAtoms.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshDrawAtomGrid)
7409+
drawAtoms.Unbind(wg.EVT_GRID_LABEL_LEFT_DCLICK)
7410+
drawAtoms.Unbind(wg.EVT_GRID_CELL_LEFT_DCLICK)
7411+
drawAtoms.Unbind(wg.EVT_GRID_LABEL_LEFT_CLICK)
7412+
drawAtoms.Bind(wg.EVT_GRID_LABEL_LEFT_DCLICK, RefreshDrawAtomGrid)
7413+
drawAtoms.Bind(wg.EVT_GRID_CELL_LEFT_DCLICK, RefreshDrawAtomGrid)
7414+
drawAtoms.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK, RowSelect)
7415+
7416+
lblList = ('Delete','Set atom style','Set atom label',
7417+
'Set atom color','Set view point','Generate copy',
7418+
'Generate surrounding sphere','Transform atoms',
7419+
'Generate bonded','Select from list')
7420+
callList = (DrawAtomsDelete,DrawAtomStyle, DrawAtomLabel,
7421+
DrawAtomColor,SetViewPoint,AddSymEquiv,
7422+
AddSphere,AddBox,TransformSymEquiv,
7423+
FillCoordSphere,SelDrawList)
7424+
onRightClick = drawAtoms.setupPopup(lblList,callList)
7425+
drawAtoms.Bind(wg.EVT_GRID_CELL_RIGHT_CLICK, onRightClick)
7426+
drawAtoms.Bind(wg.EVT_GRID_LABEL_RIGHT_CLICK, onRightClick)
7427+
7428+
try:
7429+
drawAtoms.Bind(wg.EVT_GRID_TABBING, NextAtom)
7430+
except: # patch: for pre-2.9.5 wx
7431+
pass
7432+
for i,atom in enumerate(drawingData['Atoms']):
7433+
attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop!
7434+
attr.SetReadOnly(True)
7435+
attr.SetBackgroundColour(atom[cs+2])
7436+
drawAtoms.SetAttr(i,cs+2,attr)
7437+
drawAtoms.SetCellValue(i,cs+2,'')
7438+
indx = drawingData['selectedAtoms']
7439+
if indx:
7440+
for r in range(len(atomData)):
7441+
if r in indx:
7442+
drawAtoms.SelectRow(r)
7443+
for c in range(len(colLabels)):
7444+
attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop!
7445+
attr.SetReadOnly(True)
7446+
attr.SetBackgroundColour(VERY_LIGHT_GREY)
7447+
if colLabels[c] not in ['Style','Label','Color']:
7448+
drawAtoms.SetColAttr(c,attr)
7449+
7450+
mainSizer = wx.BoxSizer(wx.VERTICAL)
7451+
mainSizer.Add(drawAtoms,1,wx.EXPAND)
7452+
drawAtoms.SetScrollRate(10,10) # allow grid to scroll
7453+
SetPhaseWindow(G2frame.drawAtomsList,mainSizer)
7454+
7455+
FindBondsDraw(data)
7456+
drawAtoms.ClearSelection()
7457+
G2frame.drawAtoms = drawAtoms
7458+
72257459
def DrawAtomStyle(event):
72267460
cx,ct,cs,ci = G2mth.getAtomPtrs(data,draw=True)
72277461
indx = getAtomSelections(G2frame.drawAtoms,ct-1)
@@ -8168,8 +8402,8 @@ def RandomizedAction(event):
81688402
ranDrwDict['msgWin'].Show()
81698403
G2phsG2.UpdateDrawAtoms(G2frame,data)
81708404

8171-
#### Draw Options page ################################################################################
8172-
def UpdateDrawOptions():
8405+
# #### Draw Options page ################################################################################
8406+
def UpdateDrawOptions(G2frame,data):
81738407
def SlopSizer():
81748408
def OnCameraPos():
81758409
#old code
@@ -8602,6 +8836,7 @@ def onLeave(*args,**kwargs):
86028836
return mapSizer
86038837

86048838
# UpdateDrawOptions exectable code starts here
8839+
drawOptions = G2frame.drawOptions
86058840
topSizer = G2frame.dataWindow.topBox
86068841
topSizer.Clear(True)
86078842
parent = G2frame.dataWindow.topPanel
@@ -12997,11 +13232,11 @@ def ChangePage(page):
1299713232
elif text == 'Draw Options':
1299813233
G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.DataDrawOptions)
1299913234
G2plt.PlotStructure(G2frame,data,firstCall=True)
13000-
UpdateDrawOptions()
13235+
UpdateDrawOptions(G2frame,data)
1300113236
elif text == 'Draw Atoms':
1300213237
G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.DrawAtomsMenu)
1300313238
G2plt.PlotStructure(G2frame,data,firstCall=True)
13004-
G2phsG2.UpdateDrawAtoms(G2frame,data)
13239+
UpdateDrawAtoms(G2frame,data)
1300513240
elif text == 'Deformation':
1300613241
G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.DeformationMenu)
1300713242
G2plt.PlotStructure(G2frame,data,firstCall=True)
@@ -13353,8 +13588,8 @@ def renamePhaseName(phaseItem,generalData,newName):
1335313588
G2frame.layerData = wx.ScrolledWindow(G2frame.phaseDisplay)
1335413589
G2frame.phaseDisplay.AddPage(G2frame.layerData,'Layers')
1335513590
Pages.append('Layers')
13356-
drawOptions = wx.ScrolledWindow(G2frame.phaseDisplay)
13357-
G2frame.phaseDisplay.AddPage(drawOptions,'Draw Options')
13591+
G2frame.drawOptions = wx.ScrolledWindow(G2frame.phaseDisplay)
13592+
G2frame.phaseDisplay.AddPage(G2frame.drawOptions,'Draw Options')
1335813593
Pages.append('Draw Options')
1335913594
G2frame.drawAtomsList = wx.Panel(G2frame.phaseDisplay)
1336013595
G2frame.drawAtoms = G2G.GSGrid(G2frame.drawAtomsList)

0 commit comments

Comments
 (0)