Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

#$Id: vtkAdaptor.py 142 2013-07-08 22:53:51Z sarkiss $ 

""" This modules contains  vtkAdaptor class that provides  

functions required to interface PyRx with PMV. We are extending   

vtkAdaptor from ePMV/epmvAdaptor and customize it for VTK.  

 

""" 

from ePMV.epmvAdaptor import epmvAdaptor, loadMoleculeInHost 

from Pmv.moleculeViewer import MoleculeViewer 

from Pmv.moleculeViewer import DeleteGeomsEvent, AddGeomsEvent, EditGeomsEvent 

from Pmv.moleculeViewer import DeleteAtomsEvent, EditAtomsEvent 

#Pmv Color Palette 

from Pmv.pmvPalettes import AtomElements 

from Pmv.pmvPalettes import DavidGoodsell, DavidGoodsellSortedKeys 

from Pmv.pmvPalettes import RasmolAmino, RasmolAminoSortedKeys 

from Pmv.pmvPalettes import Shapely 

from Pmv.pmvPalettes import SecondaryStructureType 

from Pmv.pmvPalettes import DnaElements 

import vtk 

 

class vtkAdaptor(epmvAdaptor): 

    """This is a class similar to ePMV/epmvAdaptor 

    We'll use minimal features required for secondaryStructureCommands. 

    """ 

    def __init__(self): 

        "Constructor for epmvAdaptor" 

        self.mv = MoleculeViewer(logMode = 'overwrite', customizer='./.empty', master=None,title='pmv', withShell= 0,verbose=False, gui = False) 

        self.mv.browseCommands('fileCommands', package="Pmv", topCommand=0) 

        self.mv.browseCommands("secondaryStructureCommands", package="Pmv", topCommand=0) 

        self.mv.browseCommands('bondsCommands',package='Pmv', topCommand=0) 

        self.mv.browseCommands('colorCommands',package='Pmv', topCommand=0) 

        self.mv.browseCommands('hbondCommands', commands=['buildHBonds'],  package="Pmv", topCommand=0) 

        self.setupMV() 

        self.useLog = False 

        self.colorProxyObject = False 

        self.duplicatemol = False 

        self.center_mol = False 

        self.useModeller = False 

        self.doCloud = False 

        self.doCamera = False 

        self.doLight = False 

        self.use_progressBar = False 

        self.helper = Helper() 

        self.host = 'pyrx' 

        self.meshes = {} 

        if not hasattr(self.mv,'molDispl') : self.mv.molDispl={} 

        if not hasattr(self.mv,'MolSelection') : self.mv.MolSelection={} 

        if not hasattr(self.mv,'selections') : self.mv.selections={} 

        if not hasattr(self.mv,'iMolData') :self.mv.iMolData={} 

 

    def setupMV(self): 

        #define the listener     

        self.mv.addCommand(loadMoleculeInHost(self),'_loadMol',None) 

        self.mv.registerListener(DeleteGeomsEvent, self.updateGeom) 

        self.mv.registerListener(AddGeomsEvent, self.updateGeom) 

        self.mv.registerListener(EditGeomsEvent, self.updateGeom) 

        self.mv.registerListener(DeleteAtomsEvent, self.updateModel) 

        self.mv.undoableDelete__ = True 

 

    def _getCurrentScene(self): 

        pass 

 

    def _newEmpty(self, name, **kw): 

        return vtk.vtkAssembly() 

 

    def _addObjectToScene(self, sc,master, **kw): 

        pass 

 

    def _getObjectName(self, o): 

        return  o.GetClassName() 

 

    def  _toggleDisplay(self, obj,display): 

        pass 

 

    def _getObject(self, name): 

        pass 

 

    def _createsNmesh(self, name,vertices,vnormals,faces,color=None, **kw): 

        polyData = vtk.vtkPolyData() 

        points = vtk.vtkPoints() 

        polys = vtk.vtkCellArray() 

        points.SetDataTypeToFloat() 

        points.SetNumberOfPoints(len(vertices)) 

        for i, vertex in enumerate(vertices): 

            points.SetPoint(i, vertex) 

 

        for i, face in enumerate(faces): 

             polys.InsertNextCell(4) 

             polys.InsertCellPoint(face[0]) 

             polys.InsertCellPoint(face[1]) 

             polys.InsertCellPoint(face[3]) 

             polys.InsertCellPoint(face[2]) 

 

        polyData.SetPoints(points) 

        polyData.SetStrips(polys) 

        names = name.split("_") 

        if len(names) > 3: 

            molName = "_".join(names[:-2]) 

        else: 

            molName = names[0] 

        mol = self.mv.getMolFromName(molName) 

        chain = mol.childByName[names[-2]] 

        assembly = chain.residues.atoms[0].assembly 

        if not hasattr(assembly, 'ribbons_assembly'): 

             assembly.ribbons_assembly = vtk.vtkAssembly() 

             assembly.AddPart(assembly.ribbons_assembly) 

 

        normals = vtk.vtkPolyDataNormals() 

        normals.SetInput(polyData) 

        ssMapper = vtk.vtkPolyDataMapper() 

        ssMapper.SetInput(normals.GetOutput()) 

        stripActor = vtk.vtkLODActor() 

        stripActor.SetMapper(ssMapper) 

        stripActor.GetProperty().SetRepresentationToSurface() 

        stripActor.name = name 

        for key in SecondaryStructureType.keys(): 

            if key in name: 

                stripActor.GetProperty().SetColor(SecondaryStructureType[key]) 

                break 

        assembly.ribbons_assembly.AddPart(stripActor) 

        self.meshes[name] = stripActor 

        polyData.name = name 

        return polyData, stripActor 

 

 

class Helper(): 

    def addMaterial(self,name,col): 

        pass 

 

    def getName(self, o): 

        if hasattr(o, 'name'): 

            return o.name 

        else: 

            return 'foo' 

 

    def colorMaterial(self,mat,color): 

        pass 

 

    def getMesh(self, mesh): 

        return mesh 

 

    def updateMesh(self, mesh, vertices,  faces): 

        #TODO: implement this 

 

        pass