Пример #1
0
    def initialize(self):
        # Bring used components
        self.registerVtkWebProtocol(protocols.vtkWebMouseHandler())
        self.registerVtkWebProtocol(protocols.vtkWebViewPort())
        self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery())

        # Update authentication key to use
        self.updateSecret(_WebMolecule.authKey)

        # Create default pipeline (Only once for all the session)
        if not self.view:
            self.reader = vtk.vtkCMLMoleculeReader()
            #self.reader.SetFileName('/home/cjh/work/VTKData/Data/porphyrin.cml')
            self.mapper = vtk.vtkMoleculeMapper()
            self.mapper.SetInputConnection(self.reader.GetOutputPort())
            self.mapper.UseBallAndStickSettings()

            self.actor = vtk.vtkActor()
            self.actor.SetMapper(self.mapper)

            self.renderer = vtk.vtkRenderer()
            self.window = vtk.vtkRenderWindow()
            self.window.AddRenderer(self.renderer)

            interactor = vtk.vtkRenderWindowInteractor()
            interactor.SetRenderWindow(self.window)
            interactor.GetInteractorStyle().SetCurrentStyleToTrackballCamera()

            self.renderer.AddActor(self.actor)
            self.renderer.SetBackground(1, 1, 1)

            # VTK Web application specific
            _WebMolecule.view = self.window
            self.Application.GetObjectIdMap().SetActiveObject(
                "VIEW", self.window)
Пример #2
0
    def create_structure(self):
        import vtk  # REQUIRES VTK < 9.0!!!
        # molecule
        mol = vtk.vtkMolecule()

        # hardcoded structure CO2
        a1 = mol.AppendAtom(6, 0.0, 0.0, 0.0)
        a2 = mol.AppendAtom(8, 0.0, 0.0, -1.0)
        a3 = mol.AppendAtom(8, 0.0, 0.0, 1.0)
        mol.AppendBond(a2, a1, 1)
        mol.AppendBond(a3, a1, 1)

        # hardcoded cell, cubic 10x10x10
        vector = vtk.vtkMatrix3x3()
        vector.DeepCopy([10, 0, 0, 0, 10, 0, 0, 0, 10])
        mol.SetLattice(vector)

        # Change lattice origin so molecule is in the centre
        mol.SetLatticeOrigin(vtk.vtkVector3d(-5.0, -5.0, -5.0))

        # Create a mapper and actor
        mapper = vtk.vtkMoleculeMapper()
        mapper.SetInputData(mol)

        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        self.fbo.addActors([actor])

        self.fbo.update()
Пример #3
0
    def load(self, inchikey):

        self.reader = vtk.vtkCMLMoleculeReader()
        #self.reader.SetFileName('/home/cjh/work/VTKData/Data/porphyrin.cml')
        self.mapper = vtk.vtkMoleculeMapper()
        self.mapper.SetInputConnection(self.reader.GetOutputPort())
        self.mapper.UseBallAndStickSettings()

        self.actor = vtk.vtkActor()
        self.actor.SetMapper(self.mapper)

        self.renderer = vtk.vtkRenderer()
        self.window = vtk.vtkRenderWindow()
        self.window.AddRenderer(self.renderer)

        interactor = vtk.vtkRenderWindowInteractor()
        interactor.SetRenderWindow(self.window)
        interactor.GetInteractorStyle().SetCurrentStyleToTrackballCamera()

        self.renderer.AddActor(self.actor)
        self.renderer.SetBackground(1, 1, 1)

        # VTK Web application specific
        _WebMolecule.view = self.window

        # VTK Web application specific
        _WebMolecule.view = self.window
        self.Application.GetObjectIdMap().SetActiveObject("VIEW", self.window)

        try:
            path = converter.inchikey_to_cml_file(inchikey)
            self.reader.SetFileName(path)
            self.reader.Update()
            bounds = [0, 0, 0, 0, 0, 0]
            self.mapper.GetBounds(bounds)
            os.remove(path)
            self.renderer.ResetCamera(bounds)
            self.renderer.GetActiveCamera().Zoom(1.5)
        except:
            print traceback.format_exc()
Пример #4
0
def main():
    filename = get_program_parameters()

    cml_source = vtk.vtkCMLMoleculeReader()
    cml_source.SetFileName(filename)

    molmapper = vtk.vtkMoleculeMapper()
    molmapper.SetInputConnection(cml_source.GetOutputPort())

    molmapper.UseBallAndStickSettings()

    colors = vtk.vtkNamedColors()

    actor = vtk.vtkActor()
    actor.SetMapper(molmapper)
    actor.GetProperty().SetDiffuse(.7)
    actor.GetProperty().SetSpecular(.5)
    actor.GetProperty().SetSpecularPower(20.0)

    renderer = vtk.vtkRenderer()
    renderer.AddActor(actor)

    render_window = vtk.vtkRenderWindow()
    render_window.AddRenderer(renderer)
    render_window_interactor = vtk.vtkRenderWindowInteractor()
    render_window_interactor.SetRenderWindow(render_window)

    render_window.SetSize(640, 480)
    render_window.Render()
    renderer.GetActiveCamera().Zoom(2.0)
    renderer.SetBackground(colors.GetColor3d("Silver"))

    # Finally render the scene
    render_window.SetMultiSamples(0)
    render_window.GetInteractor().Initialize()
    render_window.GetInteractor().Start()
atom_points.SetNumberOfPoints(nat)

vectors = vtk.vtkFloatArray()
vectors.SetNumberOfComponents(3)
vectors.SetNumberOfTuples(nat)

for i in range(nat):
    a = coordinates[i]
    atom_points.InsertPoint(i, a[0], a[1], a[2])
    vectors.SetTuple(i, gradients[i])

grid = vtk.vtkUnstructuredGrid()
grid.SetPoints(atom_points)
grid.GetPointData().SetVectors(vectors)

molMapper = vtk.vtkMoleculeMapper()
molMapper.SetInputData(molecule)

molActor = vtk.vtkActor()
molActor.SetMapper(molMapper)

arrow = vtk.vtkArrowSource()

glyph = vtk.vtkGlyph3D()
glyph.SetInputData(grid)
glyph.SetSourceConnection(arrow.GetOutputPort())
glyph.SetScaleModeToScaleByVector()
glyph.SetScaleFactor(30.0)

glyphMapper = vtk.vtkPolyDataMapper()
glyphMapper.SetInputConnection(glyph.GetOutputPort())