예제 #1
0
    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()
예제 #2
0
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())
예제 #3
0
파일: render.py 프로젝트: uu1477/MyAse
 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()
예제 #4
0
 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()
예제 #5
0
def test_povray_io(povray_executable):
    H2 = molecule('H2')
    write_pov('H2', H2)
    check_call([povray_executable, 'H2.pov'], stderr=DEVNULL)
예제 #6
0
def test_deprecated(testdir):
    with pytest.warns(FutureWarning):
        write_pov('tmp.pov', molecule('H2'), run_povray=True)