def ok(self, *args): print("Rendering with povray:") guiwidth, guiheight = self.get_guisize() width = self.width_widget.value height = self.height_widget.value # (Do width/height become inconsistent upon gui resize? Not critical) scale = self.gui.scale * height / guiheight bbox = np.empty(4) size = np.array([width, height]) / scale bbox[0:2] = np.dot(self.gui.center, self.gui.axes[:, :2]) - size / 2 bbox[2:] = bbox[:2] + size povray_settings = { 'run_povray': self.run_povray_widget.value, 'bbox': bbox, 'rotation': self.gui.axes, 'show_unit_cell': self.cell_widget.value, 'display': self.show_output_widget.value, 'transparent': self.transparent.value, 'camera_type': self.camera_widget.value, 'camera_dist': self.camera_distance_widget.value, 'canvas_width': width, 'celllinewidth': self.linewidth_widget.value, 'exportconstraints': self.constraints_widget.value, } multiframe = bool(self.frames_widget.value) if multiframe: assert len(self.gui.images) > 1 if multiframe: frames = range(len(self.gui.images)) else: frames = [self.gui.frame] initial_frame = self.gui.frame for frame in frames: self.gui.set_frame(frame) povray_settings['textures'] = self.get_textures() povray_settings['colors'] = self.gui.get_colors(rgb=True) atoms = self.gui.images.get_atoms(frame) radii_scale = 1 # atom size multiplier if self.gui.window[ 'toggle-show-bonds']: # self.gui.config['show_bonds'] is always False print(" | Building bonds") povray_settings['bondatoms'] = get_bondpairs(atoms) radii_scale = 0.65 # value from draw method of View class filename = self.update_outputname() print(" | Writing files for image", filename, "...") write_pov(filename, atoms, radii=radii_scale * self.gui.get_covalent_radii(), **povray_settings) if not self.keep_files_widget.value: print(" | Deleting temporary file ", filename) system("rm " + filename) filename = filename[:-4] + '.ini' print(" | Deleting temporary file ", filename) system("rm " + filename) self.gui.set_frame(initial_frame) self.update_outputname()
def test_povray_highorder(testdir, povray_executable): atoms = molecule('CH4') radii = [0.2] * len(atoms) bondpairs = get_bondpairs(atoms, radius=1.0) assert len(bondpairs) == 4 high_bondorder_pairs = {} def setbond(target, order): high_bondorder_pairs[(0, target)] = ((0, 0, 0), order, (0.1, -0.2, 0)) setbond(2, 2) setbond(3, 3) bondpairs = set_high_bondorder_pairs(bondpairs, high_bondorder_pairs) renderer = write_pov( 'atoms.pov', atoms, povray_settings=dict(canvas_width=50, bondatoms=bondpairs), radii=radii, ) # XXX Not sure how to test that the bondpairs data processing is correct. pngfile = renderer.render() assert pngfile.is_file() print(pngfile.absolute())
def ok(self, *args): print("Rendering povray image(s): ") scale = self.gui.scale * self.height.get_value() / self.gui.height bbox = np.empty(4) size = np.array([self.width.get_value(), self.height.get_value()]) / scale bbox[0:2] = np.dot(self.gui.center, self.gui.axes[:, :2]) - size / 2 bbox[2:] = bbox[:2] + size povray_settings = { 'run_povray': self.run_povray.get_active(), 'bbox': bbox, 'rotation': self.gui.axes, 'show_unit_cell': self.render_cell.get_active(), 'display': self.window_open.get_active(), 'transparent': self.transparent.get_active(), 'camera_type': self.cameras[self.camera_style.get_active()], 'camera_dist': self.camera_distance.get_value(), 'canvas_width': self.width.get_value(), 'celllinewidth': self.line_width.get_value(), 'textures': self.set_textures(), 'exportconstraints': self.render_constraints.get_active() } if self.single_frame.get_active(): frames = [self.gui.frame] else: frames = range(self.nimages) initial_frame = self.gui.frame for frame in frames: self.gui.set_frame(frame) povray_settings['colors'] = self.get_colors() atoms = self.gui.images.get_atoms(frame) self.set_outputname() filename = self.outputname.get_text() print(" | Writing files for image", filename, "...") write_pov(filename, atoms, radii=self.gui.images.r, **povray_settings) if not self.keep_files.get_active(): print(" | Deleting temporary file ", filename) system("rm " + filename) filename = filename[:-4] + '.ini' print(" | Deleting temporary file ", filename) system("rm " + filename) self.gui.set_frame(initial_frame) self.set_outputname()
def ok(self, *args): print("Rendering povray image(s): ") scale = self.gui.scale * self.height.get_value() / self.gui.height bbox = np.empty(4) size = np.array( [self.width.get_value(), self.height.get_value()]) / scale bbox[0:2] = np.dot(self.gui.center, self.gui.axes[:, :2]) - size / 2 bbox[2:] = bbox[:2] + size povray_settings = { 'run_povray': self.run_povray.get_active(), 'bbox': bbox, 'rotation': self.gui.axes, 'show_unit_cell': self.render_cell.get_active(), 'display': self.window_open.get_active(), 'transparent': self.transparent.get_active(), 'camera_type': self.cameras[self.camera_style.get_active()], 'camera_dist': self.camera_distance.get_value(), 'canvas_width': self.width.get_value(), 'celllinewidth': self.line_width.get_value(), 'textures': self.set_textures(), 'exportconstraints': self.render_constraints.get_active() } if self.single_frame.get_active(): frames = [self.gui.frame] else: frames = range(self.nimages) initial_frame = self.gui.frame for frame in frames: self.gui.set_frame(frame) povray_settings['colors'] = self.get_colors() atoms = self.gui.images.get_atoms(frame) self.set_outputname() filename = self.outputname.get_text() print(" | Writing files for image", filename, "...") write_pov( filename, atoms, radii=self.gui.get_covalent_radii(), **povray_settings) if not self.keep_files.get_active(): print(" | Deleting temporary file ", filename) system("rm " + filename) filename = filename[:-4] + '.ini' print(" | Deleting temporary file ", filename) system("rm " + filename) self.gui.set_frame(initial_frame) self.set_outputname()
def test_povray_io(povray_executable): H2 = molecule('H2') write_pov('H2', H2) check_call([povray_executable, 'H2.pov'], stderr=DEVNULL)
def test_deprecated(testdir): with pytest.warns(FutureWarning): write_pov('tmp.pov', molecule('H2'), run_povray=True)