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()
def transform_scalars(self, dataset): """Reconstruct atomic positions""" atomic_numbers = [6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1] positions = [ -0.9853672723415879, 0.9853672723415879, 0.0, -1.765101316934915, 1.765101316934915, 0.0, -1.346036726076389, -0.3606694537348005, 0.0, -2.411173239186462, -0.6460719222515465, 0.0, -0.3606694537348005, -1.346036726076389, 0.0, -0.6460719222515465, -2.411173239186462, 0.0, 0.9853672723415879, -0.9853672723415879, 0.0, 1.765101316934915, -1.765101316934915, 0.0, 1.346036726076389, 0.3606694537348005, 0.0, 2.411173239186462, 0.6460719222515465, 0.0, 0.3606694537348005, 1.346036726076389, 0.0, 0.6460719222515465, 2.411173239186462, 0.0 ] bonds = [ 0, 1, 0, 2, 0, 10, 2, 3, 2, 4, 4, 5, 4, 6, 6, 7, 6, 8, 8, 9, 8, 10, 10, 11 ] bonds_order = [1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1] molecule = vtk.vtkMolecule() for i in range(len(atomic_numbers)): pos = np.array(positions[i * 3:i * 3 + 3]) # pos *= 30 pos += [150, 150, 40] molecule.AppendAtom(atomic_numbers[i], pos[0], pos[1], pos[2]) for i in range(len(bonds_order)): molecule.AppendBond(bonds[i * 2], bonds[i * 2 + 1], bonds_order[i]) return {"molecule": molecule}
def testCreation(self): "Testing if molecules can be created/modified." mol = vtk.vtkMolecule() self.assertEqual(mol.GetNumberOfAtoms(), 0, "Number of atoms incorrect") self.assertEqual(mol.GetNumberOfBonds(), 0, "Number of atoms incorrect") h1 = mol.AppendAtom(1, 0.0, 0.0, -0.5) h2 = mol.AppendAtom(1, 0.0, 0.0, 0.5) b = mol.AppendBond(h1, h2, 1) self.assertEqual(mol.GetNumberOfAtoms(), 2, "Number of atoms incorrect") self.assertEqual(mol.GetNumberOfBonds(), 1, "Number of atoms incorrect")
grad = [] l = f.readline() for i in range(n): l = f.readline().split() sym.append(int(l[1])) coord.append((lambda x: float(x) / 0.529177209, l[2:5])) grad.append((l[5:8])) return sym, N.array(coord), N.array(grad) symbols, coordinates, gradients = read_xyz(argv[1]) nat = len(symbols) molecule = vtk.vtkMolecule() for i in range(nat): s = symbols[i] a = coordinates[i] molecule.AppendAtom(s, a[0], a[1], a[2]) for i in range(nat): a = coordinates[i] for j in range(i + 1, nat): b = coordinates[j] d = N.sqrt(N.sum((a - b)**2)) if d < 3.0: molecule.AppendBond(i, j, 1) atom_points = vtk.vtkPoints()