Changeset 158
- Timestamp:
- Oct 1, 2010 12:36:31 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIgrid.py
r155 r158 11 11 12 12 [ 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)] 15 15 16 16 [ wxID_DRAWATOMSTYLE, wxID_DRAWATOMLABEL, wxID_DRAWVIEWPOINT, wxID_DRAWTRANSFORM, … … 68 68 69 69 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') 73 78 parent.Append(id=wxID_ATOMSEDITDELETE, kind=wx.ITEM_NORMAL,text='Delete atom', 74 79 help='Select atoms to delete first') -
trunk/GSASIIlattice.py
r155 r158 20 20 S = sec-3600*H-60*M 21 21 return '%d:%2d:%.2f'%(H,M,S) 22 23 def 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)]]) 22 33 23 34 def fillgmat(cell): … … 135 146 B = nl.inv(A) 136 147 return A,B 137 148 138 149 #def U2Uij(U): 139 150 # #returns the UIJ vector U11,U22,U33,U12,U13,U23 from tensor U -
trunk/GSASIIphsGUI.py
r157 r158 612 612 Atoms.SetCellStyle(row,ci,WHITE,False) 613 613 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): 615 630 atomData = data['Atoms'] 616 631 generalData = data['General'] 617 632 Ncol = Atoms.GetNumberCols() 618 633 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) 620 635 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]) 622 637 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]) 624 639 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) 626 645 FillAtomsGrid() 627 646 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): 630 659 indx = Atoms.GetSelectedRows() 631 660 if indx: … … 637 666 Sytsym,Mult = G2spc.SytSym([0,0,0],SGData) 638 667 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]) 640 669 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]) 642 671 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() 646 674 647 675 def AtomDelete(event): … … 739 767 AA1letter = ['A','R','N','D','C','Q','E','G','H','I', 740 768 '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, 742 770 '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]} 746 774 try: 747 775 drawingData = data['Drawing'] … … 774 802 775 803 def UpdateDrawAtoms(): 776 self.dataFrame.setSizePosLeft([600,300])777 804 generalData = data['General'] 778 805 SetupDrawingData() … … 789 816 colLabels = ['Residue','1-letter','Chain'] + colLabels 790 817 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'] 793 820 labelChoice = [' ','type','name','number','residue','1-letter','chain'] 794 821 Types[9] = wg.GRID_VALUE_CHOICE+": ,type,name,number,residue,1-letter,chain" … … 829 856 drawAtoms.SelectRow(row,True) 830 857 drawingData['selectedAtoms'].append(row) 858 G2plt.PlotStructure(self,data) 831 859 dlg.Destroy() 832 860 … … 859 887 atomData[r][c] = parms 860 888 drawAtoms.SetCellValue(r,c,parms) 861 G2plt.PlotStructure(self,data)862 889 dlg.Destroy() 863 890 elif drawAtoms.GetColLabelValue(c) == 'Residue': … … 879 906 atomData[r][c] = drawAtoms.GetCellValue(r,c) 880 907 FindBonds() 881 G2plt.PlotStructure(self,data)908 G2plt.PlotStructure(self,data) 882 909 883 910 def RowSelect(event): … … 900 927 drawingData['selectedAtoms'] = [] 901 928 drawingData['selectedAtoms'] = drawAtoms.GetSelectedRows() 929 G2plt.PlotStructure(self,data) 902 930 903 931 table = [] … … 926 954 attr.SetBackgroundColour(VERY_LIGHT_GREY) 927 955 drawAtoms.SetColAttr(c,attr) 956 self.dataFrame.setSizePosLeft([600,300]) 928 957 FindBonds() 929 958 G2plt.PlotStructure(self,data) … … 937 966 styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids','polyhedra'] 938 967 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'] 940 970 dlg = wx.SingleChoiceDialog(self,'Select','Atom drawing style',styleChoice) 941 971 if dlg.ShowModal() == wx.ID_OK: … … 1215 1245 i = atomA[0] 1216 1246 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]) 1222 1253 1223 1254 def DrawAtomsDelete(event): … … 1237 1268 import copy 1238 1269 import wx.lib.colourselect as wcs 1239 self.dataFrame.setSizePosLeft([300,4 70])1270 self.dataFrame.setSizePosLeft([300,430]) 1240 1271 generalData = data['General'] 1241 1272 SetupDrawingData() … … 1261 1292 G2plt.PlotStructure(self,data) 1262 1293 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)1271 1294 1272 1295 def OnBallScale(event): … … 1297 1320 drawingData['unitCellBox'] = unitCellBox.GetValue() 1298 1321 G2plt.PlotStructure(self,data) 1299 1300 def OnPacking(event):1301 drawingData['packing'] = packing.GetValue()1302 1322 1303 1323 def OnShowBadContacts(event): … … 1330 1350 1331 1351 slopSizer = wx.BoxSizer(wx.HORIZONTAL) 1332 slideSizer = wx.FlexGridSizer( 7,2,5,0)1352 slideSizer = wx.FlexGridSizer(6,2,5,0) 1333 1353 slideSizer.AddGrowableCol(1,1) 1334 1354 … … 1374 1394 slideSizer.Add(bondRadius,1,wx.EXPAND|wx.RIGHT) 1375 1395 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 1382 1396 slopSizer.Add(slideSizer,1,wx.EXPAND|wx.RIGHT) 1383 1397 slopSizer.Add((10,5),0) 1398 slopSizer.SetMinSize(wx.Size(300,180)) 1384 1399 mainSizer.Add(slopSizer,1,wx.EXPAND) 1385 1400 1386 flexSizer = wx.FlexGridSizer( 7,2,5,0)1401 flexSizer = wx.FlexGridSizer(6,2,5,0) 1387 1402 flexSizer.Add(wx.StaticText(dataDisplay,-1,'View Point: '),0,wx.ALIGN_CENTER_VERTICAL) 1388 1403 VP = drawingData['viewPoint'][0] … … 1392 1407 flexSizer.Add(viewPoint,0,wx.ALIGN_CENTER_VERTICAL) 1393 1408 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)1398 1409 lineSizer = wx.BoxSizer(wx.HORIZONTAL) 1399 1410 lineSizer.Add(wx.StaticText(dataDisplay,-1,'Background color:'),0,wx.ALIGN_CENTER_VERTICAL) … … 1403 1414 flexSizer.Add(lineSizer,0,) 1404 1415 1405 showABC = wx.CheckBox(dataDisplay,-1,label='Show cell vectors?')1416 showABC = wx.CheckBox(dataDisplay,-1,label='Show test point?') 1406 1417 showABC.Bind(wx.EVT_CHECKBOX, OnShowABC) 1407 1418 showABC.SetValue(drawingData['showABC']) … … 1412 1423 unitCellBox.SetValue(drawingData['unitCellBox']) 1413 1424 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)1419 1425 1420 1426 showBadContacts = wx.CheckBox(dataDisplay,-1,label='Show bad contacts?') … … 1445 1451 flexSizer.Add(pickItem,0,wx.ALIGN_CENTER_VERTICAL) 1446 1452 mainSizer.Add(flexSizer,0,) 1447 mainSizer.SetMinSize(wx.Size(300,370)) 1453 # mainSizer.SetMinSize(wx.Size(300,340)) #to get sliders long enough 1448 1454 1449 1455 dataDisplay.SetSizer(mainSizer) … … 1460 1466 if text == 'Atoms': 1461 1467 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) 1464 1472 self.dataFrame.Bind(wx.EVT_MENU, AtomDelete, id=G2gd.wxID_ATOMSEDITDELETE) 1465 1473 self.dataFrame.Bind(wx.EVT_MENU, AtomRefine, id=G2gd.wxID_ATOMSREFINE) -
trunk/GSASIIplot.py
r157 r158 20 20 from OpenGL.GLU import * 21 21 from OpenGL.GLUT import * 22 from OpenGL.GLE import * 22 23 from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas 23 24 from matplotlib.backends.backend_wxagg import NavigationToolbar2Wx as Toolbar … … 1134 1135 1135 1136 def OnMouseDown(event): 1136 drawingData['Rotation'][3] = event.GetPosition() 1137 xy = event.GetPosition() 1138 drawingData['Rotation'][3] = xy 1139 1137 1140 def OnMouseWheel(event): 1138 1141 drawingData['cameraPos'] += event.GetWheelRotation()/24 … … 1152 1155 names = [child.GetName() for child in panel] 1153 1156 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 1155 1165 def OnKey(event): 1156 1166 keyCode = event.GetKeyCode() 1167 if keyCode > 255: 1168 keyCode = 0 1157 1169 key,xyz = chr(keyCode),event.GetPosition() 1158 1170 indx = drawingData['selectedAtoms'] … … 1160 1172 if key in ['c','C']: 1161 1173 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,[]] 1163 1176 SetViewPointText(drawingData['viewPoint'][0]) 1164 1177 elif key in ['n','N']: … … 1202 1215 def OnMouseMove(event): 1203 1216 newxy = event.GetPosition() 1217 if event.ShiftDown() and drawingData['showABC']: 1218 if event.RightIsDown(): 1219 SetTestPos(newxy) 1204 1220 if event.Dragging(): 1205 1221 if event.LeftIsDown(): … … 1230 1246 glLightfv(GL_LIGHT0,GL_DIFFUSE,[1,1,1,1]) 1231 1247 1232 def SetFog(): #doesn't work for some reason1233 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 1241 1248 def SetTranslation(newxy): 1242 1249 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 1247 1259 drawingData['Rotation'][3] = newxy 1248 1260 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 1250 1277 def SetRotation(newxy): 1251 1278 anglex,angley,anglez,oldxy = drawingData['Rotation'] 1252 1279 dxy = newxy-oldxy 1253 anglex += dxy[1] 1254 angley += dxy[0] 1280 anglex += dxy[1]*.25 1281 angley += dxy[0]*.25 1255 1282 oldxy = newxy 1256 1283 drawingData['Rotation'] = [anglex,angley,anglez,oldxy] … … 1280 1307 glDisable(GL_COLOR_MATERIAL) 1281 1308 1282 def RenderUnitVectors(): 1309 def RenderUnitVectors(x,y,z): 1310 xyz = np.array([x,y,z]) 1283 1311 glEnable(GL_COLOR_MATERIAL) 1312 glPushMatrix() 1313 glTranslate(x,y,z) 1314 glScalef(1/cell[0],1/cell[1],1/cell[2]) 1284 1315 glBegin(GL_LINES) 1285 1316 for line,color in zip(uEdges,uColors)[:3]: … … 1288 1319 glVertex3fv(line[1]) 1289 1320 glEnd() 1321 glPopMatrix() 1290 1322 glColor4ubv([0,0,0,0]) 1291 1323 glDisable(GL_COLOR_MATERIAL) … … 1297 1329 glMultMatrixf(B4mat.T) 1298 1330 q = gluNewQuadric() 1299 gluSphere(q,radius,20, 20)1331 gluSphere(q,radius,20,10) 1300 1332 glPopMatrix() 1301 1333 1302 1334 def RenderEllipsoid(x,y,z,ellipseProb,E,R4,color): 1303 1335 s1,s2,s3 = E 1304 glLightfv(GL_LIGHT0,GL_DIFFUSE,[.7,.7,.7,1])1305 1336 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,color) 1306 1337 glPushMatrix() … … 1308 1339 glMultMatrixf(B4mat.T) 1309 1340 glMultMatrixf(R4.T) 1310 glEnable(GL_ RESCALE_NORMAL)1341 glEnable(GL_NORMALIZE) 1311 1342 glScale(s1,s2,s3) 1312 1343 q = gluNewQuadric() 1313 gluSphere(q,ellipseProb,20, 20)1314 glDisable(GL_ RESCALE_NORMAL)1344 gluSphere(q,ellipseProb,20,10) 1345 glDisable(GL_NORMALIZE) 1315 1346 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): 1319 1349 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,color) 1320 1350 glPushMatrix() … … 1330 1360 glRotate(phi,1,0,0) 1331 1361 q = gluNewQuadric() 1332 gluCylinder(q,radius,radius,Z, 20,2)1362 gluCylinder(q,radius,radius,Z,slice,2) 1333 1363 glPopMatrix() 1334 1364 glPopMatrix() 1335 1365 1336 1366 def RenderLines(x,y,z,Bonds,color): 1367 xyz = np.array([x,y,z]) 1337 1368 glEnable(GL_COLOR_MATERIAL) 1369 glColor4fv(color) 1338 1370 glPushMatrix() 1339 glTranslate(x,y,z)1340 1371 glBegin(GL_LINES) 1341 1372 for bond in Bonds: 1342 glColor4fv(color) 1343 glVertex3fv([0,0,0]) 1344 glVertex3fv(bond) 1373 glVertex3fv(xyz) 1374 glVertex3fv(xyz+bond) 1345 1375 glEnd() 1346 1376 glColor4ubv([0,0,0,0]) … … 1356 1386 for face,norm in Faces: 1357 1387 glPolygonMode(GL_FRONT,GL_FILL) 1358 gl Color3fv(color[:3])1388 glNormal3fv(norm) 1359 1389 glBegin(GL_TRIANGLES) 1360 glNormal3fv(norm)1361 1390 for vert in face: 1362 1391 glVertex3fv(vert) 1363 1392 glEnd() 1364 1393 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) 1365 1404 1366 1405 def RenderLabel(x,y,z,label,r): … … 1378 1417 def Draw(): 1379 1418 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) 1380 1422 VS = np.array(Page.canvas.GetSize()) 1381 1423 aspect = float(VS[0])/float(VS[1]) 1382 1424 cPos = drawingData['cameraPos'] 1383 1425 Zclip = drawingData['Zclip']*cPos/200. 1384 anglex,angley,anglez ,= drawingData['Rotation'][:3]1426 anglex,angley,anglez = drawingData['Rotation'][:3] 1385 1427 Tx,Ty,Tz = drawingData['viewPoint'][0] 1386 1428 cx,ct,cs = drawingData['atomPtrs'] … … 1401 1443 gluLookAt(0,0,cPos,0,0,0,0,1,0) 1402 1444 SetLights() 1403 if drawingData['depthFog']: 1404 glEnable(GL_FOG) 1405 SetFog() 1406 else: 1407 glDisable(GL_FOG) 1408 1445 1409 1446 glMatrixMode(GL_MODELVIEW) 1410 1447 glLoadIdentity() 1448 glRotate(anglex,cosd(anglez),-sind(anglez),0) 1449 glRotate(angley,sind(anglez),cosd(anglez),0) 1411 1450 glRotate(anglez,0,0,1) 1412 glRotate(anglex,1,0,0)1413 glRotate(angley,0,1,0)1414 1451 glMultMatrixf(A4mat.T) 1415 1452 glTranslate(-Tx,-Ty,-Tz) … … 1417 1454 RenderBox() 1418 1455 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 = [] 1424 1460 time0 = time.time() 1425 1461 for iat,atom in enumerate(drawingData['Atoms']): … … 1430 1466 CL.extend([255,]) 1431 1467 color = np.array(CL)/255. 1468 if iat in Ind: 1469 color = np.array(Gr)/255. 1432 1470 radius = 0.5 1433 1471 if 'balls' in atom[cs]: … … 1466 1504 radius = 0.1 1467 1505 RenderLines(x,y,z,Bonds,color) 1506 # RenderBonds(x,y,z,Bonds,0.05,color,6) 1468 1507 elif atom[cs] == 'sticks': 1469 1508 radius = 0.1 … … 1482 1521 Faces.append([face,norm]) 1483 1522 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 1484 1528 if atom[cs+1] == 'type': 1485 1529 RenderLabel(x,y,z,atom[ct],radius) … … 1494 1538 elif atom[cs+1] == 'chain' and atom[ct-1] == 'CA': 1495 1539 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 1497 1543 Page.canvas.SwapBuffers() 1498 1544
Note: See TracChangeset
for help on using the changeset viewer.