Changeset 158


Ignore:
Timestamp:
Oct 1, 2010 12:36:31 PM (12 years ago)
Author:
vondreele
Message:

implement drawing options:
select atom hilites
movable test point & atom insertion

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r155 r158  
    1111
    1212[ wxID_ATOMSEDITADD, wxID_ATOMSEDITINSERT, wxID_ATOMSEDITDELETE, wxID_ATOMSREFINE,
    13     wxID_ATOMSMODIFY, wxID_ATOMSTRANSFORM,
    14 ] = [wx.NewId() for _init_coll_Atom_Items in range(6)]
     13    wxID_ATOMSMODIFY, wxID_ATOMSTRANSFORM, wxID_ATOMSTESTADD, wxID_ATONTESTINSERT,
     14] = [wx.NewId() for _init_coll_Atom_Items in range(8)]
    1515
    1616[ wxID_DRAWATOMSTYLE, wxID_DRAWATOMLABEL, wxID_DRAWVIEWPOINT, wxID_DRAWTRANSFORM,
     
    6868       
    6969    def _init_coll_Atom_Items(self,parent):
    70         parent.Append(help='',id=wxID_ATOMSEDITADD, kind=wx.ITEM_NORMAL,text='Append empty atom')
    71         parent.Append(id=wxID_ATOMSEDITINSERT, kind=wx.ITEM_NORMAL,text='Insert empty atom',
    72             help='Double left click on atom row to Insert before')
     70        parent.Append(id=wxID_ATOMSEDITADD, kind=wx.ITEM_NORMAL,text='Append atom',
     71            help='Inserted as an H atom')
     72        parent.Append(id=wxID_ATOMSTESTADD, kind=wx.ITEM_NORMAL,text='Append test point',
     73            help='Inserted as an H atom')
     74        parent.Append(id=wxID_ATOMSEDITINSERT, kind=wx.ITEM_NORMAL,text='Insert atom',
     75            help='Select atom row to insert before; inserted as an H atom')
     76        parent.Append(id=wxID_ATONTESTINSERT, kind=wx.ITEM_NORMAL,text='Insert test point',
     77            help='Select atom row to insert before; inserted as an H atom')
    7378        parent.Append(id=wxID_ATOMSEDITDELETE, kind=wx.ITEM_NORMAL,text='Delete atom',
    7479            help='Select atoms to delete first')
  • trunk/GSASIIlattice.py

    r155 r158  
    2020    S = sec-3600*H-60*M
    2121    return '%d:%2d:%.2f'%(H,M,S)
     22   
     23def rotdMat(angle,axis=0):
     24    '''Prepare rotation matrix for angle in degrees about axis(=0,1,2)
     25    Returns numpy 3,3 array
     26    '''
     27    if axis == 2:
     28        return np.array([[cosd(angle),-sind(angle),0],[sind(angle),cosd(angle),0],[0,0,1]])
     29    elif axis == 1:
     30        return np.array([[cosd(angle),0,-sind(angle)],[0,1,0],[sind(angle),0,cosd(angle)]])
     31    else:
     32        return np.array([[1,0,0],[0,cosd(angle),-sind(angle)],[0,sind(angle),cosd(angle)]])
    2233
    2334def fillgmat(cell):
     
    135146    B = nl.inv(A)
    136147    return A,B
    137    
     148       
    138149#def U2Uij(U):
    139150#    #returns the UIJ vector U11,U22,U33,U12,U13,U23 from tensor U
  • trunk/GSASIIphsGUI.py

    r157 r158  
    612612                        Atoms.SetCellStyle(row,ci,WHITE,False)
    613613
    614     def AtomAdd(event):
     614    def OnAtomAdd(event):
     615        AtomAdd(0,0,0)
     616        FillAtomsGrid()
     617        event.StopPropagation()
     618       
     619    def OnAtomTestAdd(event):
     620        try:
     621            drawData = data['Drawing']
     622            x,y,z = drawData['testPos']
     623            AtomAdd(x,y,z)
     624        except:
     625            AtomAdd(0,0,0)
     626        FillAtomsGrid()
     627        event.StopPropagation()
     628               
     629    def AtomAdd(x,y,z):
    615630        atomData = data['Atoms']
    616631        generalData = data['General']
    617632        Ncol = Atoms.GetNumberCols()
    618633        E,SGData = G2spc.SpcGroup(generalData['SGData']['SpGrp'])
    619         Sytsym,Mult = G2spc.SytSym([0,0,0],SGData)
     634        Sytsym,Mult = G2spc.SytSym([x,y,z],SGData)
    620635        if generalData['Type'] == 'macromolecular':
    621             atomData.append([0,'UNK','','UNK','UNK',Sytsym,Mult,0,0,1,'',0,'I',0.10,0,0,0,0,0,0])
     636            atomData.append([0,'UNK','','UNK','H','',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0])
    622637        elif generalData['Type'] == 'nuclear':
    623             atomData.append(['UNK','UNK','',0,0,0,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0])
     638            atomData.append(['UNK','H','',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0])
    624639        elif generalData['Type'] == 'magnetic':
    625             atomData.append(['UNK','UNK','',0,0,0,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0])
     640            atomData.append(['UNK','H','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0])
     641        UpdateGeneral()
     642
     643    def OnAtomInsert(event):
     644        AtomInsert(0,0,0)
    626645        FillAtomsGrid()
    627646        event.StopPropagation()
    628 
    629     def AtomInsert(event):
     647       
     648    def OnAtomTestInsert(event):
     649        try:
     650            drawData = data['Drawing']
     651            x,y,z = drawData['testPos']
     652            AtomAdd(x,y,z)
     653        except:
     654            AtomAdd(0,0,0)
     655        FillAtomsGrid()
     656        event.StopPropagation()
     657           
     658    def AtomInsert(x,y,z):
    630659        indx = Atoms.GetSelectedRows()
    631660        if indx:
     
    637666            Sytsym,Mult = G2spc.SytSym([0,0,0],SGData)
    638667            if generalData['Type'] == 'macromolecular':
    639                 atomData.insert(indx,[0,'UNK','','UNK','UNK',Sytsym,Mult,0,0,1,'',0,'I',0.10,0,0,0,0,0,0])
     668                atomData.insert(indx,[0,'UNK','','UNK','UNK','',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0])
    640669            elif generalData['Type'] == 'nuclear':
    641                 atomData.insert(indx,['UNK','UNK','',0,0,0,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0])
     670                atomData.insert(indx,['UNK','UNK','',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0])
    642671            elif generalData['Type'] == 'magnetic':
    643                 atomData.insert(indx,['UNK','UNK','',0,0,0,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,0,0,0])
    644             FillAtomsGrid()
    645         event.StopPropagation()
     672                atomData.insert(indx,['UNK','UNK','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0])
     673            UpdateGeneral()
    646674
    647675    def AtomDelete(event):
     
    739767        AA1letter = ['A','R','N','D','C','Q','E','G','H','I',
    740768            'L','K','M','F','P','S','T','W','Y','V','M',' ',' ',' ']
    741         defaultDrawing = {'viewPoint':[[0.5,0.5,0.5],[0,0]],'showHydrogen':True,'backColor':[0,0,0],'depthFog':False,
     769        defaultDrawing = {'viewPoint':[[0.5,0.5,0.5],[]],'showHydrogen':True,'backColor':[0,0,0],'depthFog':False,
    742770            'Zclip':50.0,'cameraPos':50.,'pickItem':'Atoms','showBadContacts':False,
    743             'bondRadius':0.1,'ballScale':0.33,'vdwScale':0.67,'ellipseProb':50,'sizeH':0.50,'packing':False,
    744             'unitCellBox':False,'showABC':True,'fogFactor':1.0,'showSymElem':False,'selectedAtoms':[],
    745             'Rotation':[0.0,0.0,0.0,np.array([0,0])],'bondList':{}}
     771            'bondRadius':0.1,'ballScale':0.33,'vdwScale':0.67,'ellipseProb':50,'sizeH':0.50,
     772            'unitCellBox':False,'showABC':True,'showSymElem':False,'selectedAtoms':[],
     773            'Rotation':[0.0,0.0,0.0,[]],'bondList':{},'testPos':[-.1,-.1,-.1]}
    746774        try:
    747775            drawingData = data['Drawing']
     
    774802
    775803    def UpdateDrawAtoms():
    776         self.dataFrame.setSizePosLeft([600,300])
    777804        generalData = data['General']
    778805        SetupDrawingData()
     
    789816            colLabels = ['Residue','1-letter','Chain'] + colLabels
    790817            Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING]+Types
    791             Types[8] = wg.GRID_VALUE_CHOICE+": ,lines,vdW balls,sticks,balls & sticks,ellipsoids,ribbons,schematic"
    792             styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids','ribbons','schematic']
     818            Types[8] = wg.GRID_VALUE_CHOICE+": ,lines,vdW balls,sticks,balls & sticks,ellipsoids,backbone,ribbons,schematic"
     819            styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids','backbone','ribbons','schematic']
    793820            labelChoice = [' ','type','name','number','residue','1-letter','chain']
    794821            Types[9] = wg.GRID_VALUE_CHOICE+": ,type,name,number,residue,1-letter,chain"
     
    829856                            drawAtoms.SelectRow(row,True)
    830857                            drawingData['selectedAtoms'].append(row)
     858                    G2plt.PlotStructure(self,data)                   
    831859                dlg.Destroy()
    832860               
     
    859887                            atomData[r][c] = parms
    860888                            drawAtoms.SetCellValue(r,c,parms)
    861                         G2plt.PlotStructure(self,data)
    862889                    dlg.Destroy()                   
    863890                elif drawAtoms.GetColLabelValue(c) == 'Residue':
     
    879906                    atomData[r][c] = drawAtoms.GetCellValue(r,c)
    880907                    FindBonds()
    881                     G2plt.PlotStructure(self,data)                   
     908            G2plt.PlotStructure(self,data)
    882909                   
    883910        def RowSelect(event):
     
    900927            drawingData['selectedAtoms'] = []
    901928            drawingData['selectedAtoms'] = drawAtoms.GetSelectedRows()
     929            G2plt.PlotStructure(self,data)                   
    902930               
    903931        table = []
     
    926954                attr.SetBackgroundColour(VERY_LIGHT_GREY)
    927955                drawAtoms.SetColAttr(c,attr)
     956        self.dataFrame.setSizePosLeft([600,300])
    928957        FindBonds()
    929958        G2plt.PlotStructure(self,data)
     
    937966            styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids','polyhedra']
    938967            if generalData['Type'] == 'macromolecular':
    939                 styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids','ribbons','schematic']
     968                styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids',
     969                'backbone','ribbons','schematic']
    940970            dlg = wx.SingleChoiceDialog(self,'Select','Atom drawing style',styleChoice)
    941971            if dlg.ShowModal() == wx.ID_OK:
     
    12151245                i = atomA[0]
    12161246                for j in IndB[0]:
    1217                     if Types[i] == 'polyhedra':
    1218                         atomData[i][-1].append(np.inner(Amat,Dx[j]))
    1219                     elif Types[j] != 'polyhedra':
    1220                         atomData[i][-1].append(Dx[j]*Radii[i]/sumR[j])
    1221                         atomData[j][-1].append(-Dx[j]*Radii[j]/sumR[j])
     1247                    if j > i:
     1248                        if Types[i] == 'polyhedra':
     1249                            atomData[i][-1].append(np.inner(Amat,Dx[j]))
     1250                        elif Types[j] != 'polyhedra':
     1251                            atomData[i][-1].append(Dx[j]*Radii[i]/sumR[j])
     1252                            atomData[j][-1].append(-Dx[j]*Radii[j]/sumR[j])
    12221253
    12231254    def DrawAtomsDelete(event):   
     
    12371268        import copy
    12381269        import wx.lib.colourselect as wcs
    1239         self.dataFrame.setSizePosLeft([300,470])
     1270        self.dataFrame.setSizePosLeft([300,430])
    12401271        generalData = data['General']
    12411272        SetupDrawingData()
     
    12611292            G2plt.PlotStructure(self,data)
    12621293
    1263         def OnDepthFog(event):
    1264             drawingData['depthFog'] = depthFog.GetValue()
    1265             G2plt.PlotStructure(self,data)
    1266 
    1267         def OnFogFactor(event):
    1268             drawingData['fogFactor'] = fogFactor.GetValue()/100.
    1269             fogFactorTxt.SetLabel('Fog factor: '+'%.2f'%(drawingData['fogFactor']))
    1270             G2plt.PlotStructure(self,data)
    12711294
    12721295        def OnBallScale(event):
     
    12971320            drawingData['unitCellBox'] = unitCellBox.GetValue()
    12981321            G2plt.PlotStructure(self,data)
    1299 
    1300         def OnPacking(event):
    1301             drawingData['packing'] = packing.GetValue()
    13021322
    13031323        def OnShowBadContacts(event):
     
    13301350       
    13311351        slopSizer = wx.BoxSizer(wx.HORIZONTAL)
    1332         slideSizer = wx.FlexGridSizer(7,2,5,0)
     1352        slideSizer = wx.FlexGridSizer(6,2,5,0)
    13331353        slideSizer.AddGrowableCol(1,1)
    13341354
     
    13741394        slideSizer.Add(bondRadius,1,wx.EXPAND|wx.RIGHT)
    13751395       
    1376         fogFactorTxt = wx.StaticText(dataDisplay,-1,'Fog factor: '+'%.2f'%(drawingData['fogFactor']))
    1377         slideSizer.Add(fogFactorTxt,0,wx.ALIGN_CENTER_VERTICAL)
    1378         fogFactor = wx.Slider(dataDisplay,style=wx.SL_HORIZONTAL,value=int(100*drawingData['fogFactor']))
    1379         fogFactor.Bind(wx.EVT_SLIDER, OnFogFactor)
    1380         slideSizer.Add(fogFactor,1,wx.EXPAND|wx.RIGHT)
    1381 
    13821396        slopSizer.Add(slideSizer,1,wx.EXPAND|wx.RIGHT)
    13831397        slopSizer.Add((10,5),0)
     1398        slopSizer.SetMinSize(wx.Size(300,180))
    13841399        mainSizer.Add(slopSizer,1,wx.EXPAND)
    13851400
    1386         flexSizer = wx.FlexGridSizer(7,2,5,0)
     1401        flexSizer = wx.FlexGridSizer(6,2,5,0)
    13871402        flexSizer.Add(wx.StaticText(dataDisplay,-1,'View Point:  '),0,wx.ALIGN_CENTER_VERTICAL)
    13881403        VP = drawingData['viewPoint'][0]
     
    13921407        flexSizer.Add(viewPoint,0,wx.ALIGN_CENTER_VERTICAL)
    13931408       
    1394         depthFog = wx.CheckBox(dataDisplay,-1,label='Use depth fog?')
    1395         depthFog.Bind(wx.EVT_CHECKBOX, OnDepthFog)
    1396         depthFog.SetValue(drawingData['depthFog'])
    1397         flexSizer.Add(depthFog,0,wx.ALIGN_CENTER_VERTICAL)
    13981409        lineSizer = wx.BoxSizer(wx.HORIZONTAL)
    13991410        lineSizer.Add(wx.StaticText(dataDisplay,-1,'Background color:'),0,wx.ALIGN_CENTER_VERTICAL)
     
    14031414        flexSizer.Add(lineSizer,0,)
    14041415
    1405         showABC = wx.CheckBox(dataDisplay,-1,label='Show cell vectors?')
     1416        showABC = wx.CheckBox(dataDisplay,-1,label='Show test point?')
    14061417        showABC.Bind(wx.EVT_CHECKBOX, OnShowABC)
    14071418        showABC.SetValue(drawingData['showABC'])
     
    14121423        unitCellBox.SetValue(drawingData['unitCellBox'])
    14131424        flexSizer.Add(unitCellBox,0,wx.ALIGN_CENTER_VERTICAL)
    1414 
    1415         packing = wx.CheckBox(dataDisplay,-1,label='Packing diagram?')
    1416         packing.Bind(wx.EVT_CHECKBOX, OnPacking)
    1417         packing.SetValue(drawingData['packing'])
    1418         flexSizer.Add(packing,0,wx.ALIGN_CENTER_VERTICAL)
    14191425
    14201426        showBadContacts = wx.CheckBox(dataDisplay,-1,label='Show bad contacts?')
     
    14451451        flexSizer.Add(pickItem,0,wx.ALIGN_CENTER_VERTICAL)
    14461452        mainSizer.Add(flexSizer,0,)
    1447         mainSizer.SetMinSize(wx.Size(300,370))
     1453#        mainSizer.SetMinSize(wx.Size(300,340))          #to get sliders long enough
    14481454
    14491455        dataDisplay.SetSizer(mainSizer)
     
    14601466        if text == 'Atoms':
    14611467            self.dataFrame.SetMenuBar(self.dataFrame.AtomsMenu)
    1462             self.dataFrame.Bind(wx.EVT_MENU, AtomAdd, id=G2gd.wxID_ATOMSEDITADD)
    1463             self.dataFrame.Bind(wx.EVT_MENU, AtomInsert, id=G2gd.wxID_ATOMSEDITINSERT)
     1468            self.dataFrame.Bind(wx.EVT_MENU, OnAtomAdd, id=G2gd.wxID_ATOMSEDITADD)
     1469            self.dataFrame.Bind(wx.EVT_MENU, OnAtomTestAdd, id=G2gd.wxID_ATOMSTESTADD)
     1470            self.dataFrame.Bind(wx.EVT_MENU, OnAtomInsert, id=G2gd.wxID_ATOMSEDITINSERT)
     1471            self.dataFrame.Bind(wx.EVT_MENU, OnAtomTestInsert, id=G2gd.wxID_ATONTESTINSERT)
    14641472            self.dataFrame.Bind(wx.EVT_MENU, AtomDelete, id=G2gd.wxID_ATOMSEDITDELETE)
    14651473            self.dataFrame.Bind(wx.EVT_MENU, AtomRefine, id=G2gd.wxID_ATOMSREFINE)
  • trunk/GSASIIplot.py

    r157 r158  
    2020from OpenGL.GLU import *
    2121from OpenGL.GLUT import *
     22from OpenGL.GLE import *
    2223from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas
    2324from matplotlib.backends.backend_wxagg import NavigationToolbar2Wx as Toolbar
     
    11341135   
    11351136    def OnMouseDown(event):
    1136         drawingData['Rotation'][3] = event.GetPosition()
     1137        xy = event.GetPosition()
     1138        drawingData['Rotation'][3] = xy
     1139       
    11371140    def OnMouseWheel(event):
    11381141        drawingData['cameraPos'] += event.GetWheelRotation()/24
     
    11521155            names = [child.GetName() for child in panel]
    11531156            panel[names.index('viewPoint')].SetValue('%.3f, %.3f, %.3f'%(VP[0],VP[1],VP[2]))
    1154                            
     1157           
     1158    def GetSelectedAtoms():
     1159        page = self.dataDisplay.GetSelection()
     1160        Ind = []
     1161        if self.dataDisplay.GetPageText(page) == 'Draw Atoms':
     1162            Ind = self.dataDisplay.GetPage(page).GetSelectedRows()      #this is the Atoms grid in Draw Atoms
     1163        return Ind
     1164                                       
    11551165    def OnKey(event):
    11561166        keyCode = event.GetKeyCode()
     1167        if keyCode > 255:
     1168            keyCode = 0
    11571169        key,xyz = chr(keyCode),event.GetPosition()
    11581170        indx = drawingData['selectedAtoms']
     
    11601172        if key in ['c','C']:
    11611173            drawingData['viewPoint'] = [[.5,.5,.5],[0,0]]
    1162             drawingData['Rotation'] = [0.0,0.0,0.0,np.array([0,0])]
     1174            drawingData['testPos'] = [-.1,-.1,-.1]
     1175            drawingData['Rotation'] = [0.0,0.0,0.0,[]]
    11631176            SetViewPointText(drawingData['viewPoint'][0])
    11641177        elif key in ['n','N']:
     
    12021215    def OnMouseMove(event):
    12031216        newxy = event.GetPosition()
     1217        if event.ShiftDown() and drawingData['showABC']:
     1218            if event.RightIsDown():
     1219                SetTestPos(newxy)
    12041220        if event.Dragging():
    12051221            if event.LeftIsDown():
     
    12301246        glLightfv(GL_LIGHT0,GL_DIFFUSE,[1,1,1,1])
    12311247       
    1232     def SetFog():       #doesn't work for some reason
    1233         cPos = drawingData['cameraPos']
    1234         Zclip = drawingData['Zclip']*cPos/200.
    1235         glFogi(GL_FOG_MODE,GL_LINEAR)
    1236         glFogfv(GL_FOG_COLOR,Page.camera['backColor'])
    1237         glFogf(GL_FOG_START,cPos-Zclip)
    1238         glFogf(GL_FOG_END,cPos+Zclip)
    1239         glFogf(GL_FOG_DENSITY,drawingData['fogFactor'])
    1240                  
    12411248    def SetTranslation(newxy):
    12421249        Tx,Ty,Tz = drawingData['viewPoint'][0]
    1243         oldxy = drawingData['Rotation'][3]
    1244         dxy = newxy-oldxy
    1245         Tx += dxy[0]*0.01
    1246         Ty -= dxy[1]*0.01
     1250        anglex,angley,anglez,oldxy = drawingData['Rotation']
     1251        Rx = G2lat.rotdMat(anglex,0)
     1252        Ry = G2lat.rotdMat(angley,1)
     1253        Rz = G2lat.rotdMat(anglez,2)
     1254        dxy = list(newxy-oldxy)+[0,]
     1255        dxy = np.inner(Bmat,np.inner(Rz,np.inner(Ry,np.inner(Rx,dxy))))
     1256        Tx -= dxy[0]*0.01
     1257        Ty += dxy[1]*0.01
     1258        Tz -= dxy[2]*0.01
    12471259        drawingData['Rotation'][3] = newxy
    12481260        drawingData['viewPoint'][0] =  Tx,Ty,Tz
    1249                
     1261        SetViewPointText([Tx,Ty,Tz])
     1262       
     1263    def SetTestPos(newxy):
     1264        Tx,Ty,Tz = drawingData['testPos']
     1265        anglex,angley,anglez,oldxy = drawingData['Rotation']
     1266        Rx = G2lat.rotdMat(anglex,0)
     1267        Ry = G2lat.rotdMat(angley,1)
     1268        Rz = G2lat.rotdMat(anglez,2)
     1269        dxy = list(newxy-oldxy)+[0,]
     1270        dxy = np.inner(Rz,np.inner(Ry,np.inner(Rx,dxy)))
     1271        Tx += dxy[0]*0.001
     1272        Ty -= dxy[1]*0.001
     1273        Tz += dxy[2]*0.001
     1274        drawingData['Rotation'][3] = newxy
     1275        drawingData['testPos'] =  Tx,Ty,Tz
     1276                             
    12501277    def SetRotation(newxy):       
    12511278        anglex,angley,anglez,oldxy = drawingData['Rotation']
    12521279        dxy = newxy-oldxy
    1253         anglex += dxy[1]
    1254         angley += dxy[0]
     1280        anglex += dxy[1]*.25
     1281        angley += dxy[0]*.25
    12551282        oldxy = newxy
    12561283        drawingData['Rotation'] = [anglex,angley,anglez,oldxy]
     
    12801307        glDisable(GL_COLOR_MATERIAL)
    12811308       
    1282     def RenderUnitVectors():
     1309    def RenderUnitVectors(x,y,z):
     1310        xyz = np.array([x,y,z])
    12831311        glEnable(GL_COLOR_MATERIAL)
     1312        glPushMatrix()
     1313        glTranslate(x,y,z)
     1314        glScalef(1/cell[0],1/cell[1],1/cell[2])
    12841315        glBegin(GL_LINES)
    12851316        for line,color in zip(uEdges,uColors)[:3]:
     
    12881319            glVertex3fv(line[1])
    12891320        glEnd()
     1321        glPopMatrix()
    12901322        glColor4ubv([0,0,0,0])
    12911323        glDisable(GL_COLOR_MATERIAL)
     
    12971329        glMultMatrixf(B4mat.T)
    12981330        q = gluNewQuadric()
    1299         gluSphere(q,radius,20,20)
     1331        gluSphere(q,radius,20,10)
    13001332        glPopMatrix()
    13011333       
    13021334    def RenderEllipsoid(x,y,z,ellipseProb,E,R4,color):
    13031335        s1,s2,s3 = E
    1304         glLightfv(GL_LIGHT0,GL_DIFFUSE,[.7,.7,.7,1])       
    13051336        glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,color)
    13061337        glPushMatrix()
     
    13081339        glMultMatrixf(B4mat.T)
    13091340        glMultMatrixf(R4.T)
    1310         glEnable(GL_RESCALE_NORMAL)
     1341        glEnable(GL_NORMALIZE)
    13111342        glScale(s1,s2,s3)
    13121343        q = gluNewQuadric()
    1313         gluSphere(q,ellipseProb,20,20)
    1314         glDisable(GL_RESCALE_NORMAL)
     1344        gluSphere(q,ellipseProb,20,10)
     1345        glDisable(GL_NORMALIZE)
    13151346        glPopMatrix()
    1316         glLightfv(GL_LIGHT0,GL_DIFFUSE,[1,1,1,1])       
    1317        
    1318     def RenderBonds(x,y,z,Bonds,radius,color):
     1347       
     1348    def RenderBonds(x,y,z,Bonds,radius,color,slice=20):
    13191349        glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,color)
    13201350        glPushMatrix()
     
    13301360            glRotate(phi,1,0,0)
    13311361            q = gluNewQuadric()
    1332             gluCylinder(q,radius,radius,Z,20,2)
     1362            gluCylinder(q,radius,radius,Z,slice,2)
    13331363            glPopMatrix()           
    13341364        glPopMatrix()
    1335        
     1365               
    13361366    def RenderLines(x,y,z,Bonds,color):
     1367        xyz = np.array([x,y,z])
    13371368        glEnable(GL_COLOR_MATERIAL)
     1369        glColor4fv(color)
    13381370        glPushMatrix()
    1339         glTranslate(x,y,z)
    13401371        glBegin(GL_LINES)
    13411372        for bond in Bonds:
    1342             glColor4fv(color)
    1343             glVertex3fv([0,0,0])
    1344             glVertex3fv(bond)
     1373            glVertex3fv(xyz)
     1374            glVertex3fv(xyz+bond)
    13451375        glEnd()
    13461376        glColor4ubv([0,0,0,0])
     
    13561386        for face,norm in Faces:
    13571387            glPolygonMode(GL_FRONT,GL_FILL)
    1358             glColor3fv(color[:3])
     1388            glNormal3fv(norm)
    13591389            glBegin(GL_TRIANGLES)
    1360             glNormal3fv(norm)
    13611390            for vert in face:
    13621391                glVertex3fv(vert)
    13631392            glEnd()
    13641393        glPopMatrix()
     1394       
     1395    def RenderBackbone(Backbone,BackboneColor,radius):
     1396        glPushMatrix()
     1397        glMultMatrixf(B4mat.T)
     1398        glEnable(GL_COLOR_MATERIAL)
     1399        glShadeModel(GL_SMOOTH)
     1400        gleSetJoinStyle(TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP)
     1401        glePolyCylinder(Backbone,BackboneColor,radius)
     1402        glPopMatrix()       
     1403        glDisable(GL_COLOR_MATERIAL)
    13651404       
    13661405    def RenderLabel(x,y,z,label,r):       
     
    13781417    def Draw():
    13791418        import numpy.linalg as nl
     1419        Ind = GetSelectedAtoms()
     1420        x,y,z = drawingData['testPos']
     1421        self.G2plotNB.status.SetStatusText('test point %.4f,%.4f,%.4f'%(x,y,z),1)
    13801422        VS = np.array(Page.canvas.GetSize())
    13811423        aspect = float(VS[0])/float(VS[1])
    13821424        cPos = drawingData['cameraPos']
    13831425        Zclip = drawingData['Zclip']*cPos/200.
    1384         anglex,angley,anglez, = drawingData['Rotation'][:3]
     1426        anglex,angley,anglez = drawingData['Rotation'][:3]
    13851427        Tx,Ty,Tz = drawingData['viewPoint'][0]
    13861428        cx,ct,cs = drawingData['atomPtrs']
     
    14011443        gluLookAt(0,0,cPos,0,0,0,0,1,0)
    14021444        SetLights()           
    1403         if drawingData['depthFog']:
    1404             glEnable(GL_FOG)
    1405             SetFog()
    1406         else:
    1407             glDisable(GL_FOG)
    1408        
     1445           
    14091446        glMatrixMode(GL_MODELVIEW)
    14101447        glLoadIdentity()
     1448        glRotate(anglex,cosd(anglez),-sind(anglez),0)
     1449        glRotate(angley,sind(anglez),cosd(anglez),0)
    14111450        glRotate(anglez,0,0,1)
    1412         glRotate(anglex,1,0,0)
    1413         glRotate(angley,0,1,0)
    14141451        glMultMatrixf(A4mat.T)
    14151452        glTranslate(-Tx,-Ty,-Tz)
     
    14171454            RenderBox()
    14181455        if drawingData['showABC']:
    1419             glPushMatrix()
    1420             glTranslate(-.1,-.1,-.1)
    1421             glScalef(1/cell[0],1/cell[1],1/cell[2])
    1422             RenderUnitVectors()
    1423             glPopMatrix()
     1456            x,y,z = drawingData['testPos']
     1457            RenderUnitVectors(x,y,z)
     1458        Backbone = []
     1459        BackboneColor = []
    14241460        time0 = time.time()
    14251461        for iat,atom in enumerate(drawingData['Atoms']):
     
    14301466            CL.extend([255,])
    14311467            color = np.array(CL)/255.
     1468            if iat in Ind:
     1469                color = np.array(Gr)/255.
    14321470            radius = 0.5
    14331471            if 'balls' in atom[cs]:
     
    14661504                radius = 0.1
    14671505                RenderLines(x,y,z,Bonds,color)
     1506#                RenderBonds(x,y,z,Bonds,0.05,color,6)
    14681507            elif atom[cs] == 'sticks':
    14691508                radius = 0.1
     
    14821521                            Faces.append([face,norm])
    14831522                    RenderPolyhedra(x,y,z,Faces,color)
     1523            elif atom[cs] == 'backbone':
     1524                if atom[ct-1].split()[0] in ['C','N']:
     1525                    Backbone.append(list(np.inner(Amat,np.array([x,y,z]))))
     1526                    BackboneColor.append(list(color))
     1527                   
    14841528            if atom[cs+1] == 'type':
    14851529                RenderLabel(x,y,z,atom[ct],radius)
     
    14941538            elif atom[cs+1] == 'chain' and atom[ct-1] == 'CA':
    14951539                RenderLabel(x,y,z,atom[ct-2],radius)
    1496         print time.time()-time0   
     1540        if Backbone:
     1541            RenderBackbone(Backbone,BackboneColor,bondR)
     1542#        print time.time()-time0
    14971543        Page.canvas.SwapBuffers()
    14981544       
Note: See TracChangeset for help on using the changeset viewer.