def export(self, filename, visu=None): """ Export the crystalline structure on file filename. Args: filename: String specifying the file path and the file format. The format is defined by the file extension. filename="prefix.xsf", for example, will produce a file in XSF format. An *empty* prefix, e.g. ".xsf" makes the code use a temporary file. visu: `Visualizer` subclass. By default, this method returns the first available visualizer that supports the given file format. If visu is not None, an instance of visu is returned. See :class:`Visualizer` for the list of applications and formats supported. Returns: Instance of :class:`Visualizer` """ if "." not in filename: raise ValueError("Cannot detect extension in filename %s: " % filename) tokens = filename.strip().split(".") ext = tokens[-1] if not tokens[0]: # filename == ".ext" ==> Create temporary file. import tempfile filename = tempfile.mkstemp(suffix="." + ext, text=True)[1] with open(filename, mode="w") as fh: if ext == "xsf": # xcrysden xsf.xsf_write_structure(fh, structures=[self]) else: raise Visualizer.Error("extension %s is not supported." % ext) if visu is None: return Visualizer.from_file(filename) else: return visu(filename)