diff --git a/vapory/config.py b/vapory/config.py index 4a45def..ff720ce 100644 --- a/vapory/config.py +++ b/vapory/config.py @@ -1,6 +1,8 @@ import os -POVRAY_BINARY = ("povray.exe" if os.name=='nt' else "povray") +POVRAY_BINARY = os.environ.get('POVRAY_BINARY') or ( + "povray.exe" if os.name == 'nt' else "povray" +) GLOBAL_SCENE_SETTINGS = { "charset" : "ascii", diff --git a/vapory/io.py b/vapory/io.py index 62f6c27..f86c0ee 100644 --- a/vapory/io.py +++ b/vapory/io.py @@ -54,7 +54,8 @@ def ppm_to_numpy(filename=None, buffer=None, byteorder='>'): def render_povstring(string, outfile=None, height=None, width=None, quality=None, antialiasing=None, remove_temp=True, - show_window=False, tempfile=None, includedirs=None): + show_window=False, tempfile=None, includedirs=None, + alpha=None, additional_args=None): """ Renders the provided scene description with POV-Ray. @@ -108,6 +109,10 @@ def render_povstring(string, outfile=None, height=None, width=None, cmd.append('+L%s'%dir) cmd.append("Output_File_Type=%s"%format_type) cmd.append("+O%s"%outfile) + if alpha: + cmd.append("Output_Alpha=on") + + cmd += additional_args or [] process = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdin=subprocess.PIPE, stdout=subprocess.PIPE) diff --git a/vapory/vapory.py b/vapory/vapory.py index 99f99eb..6f60955 100644 --- a/vapory/vapory.py +++ b/vapory/vapory.py @@ -1,5 +1,6 @@ import webbrowser # <= to open the POVRay help from copy import deepcopy +from itertools import chain import re from .io import render_povstring @@ -37,7 +38,7 @@ def __str__(self): global_settings = ["global_settings{\n%s\n}"%("\n".join( [str(e) for e in self.global_settings]))] return '\n'.join([str(e) - for l in [included, declares, self.objects, [self.camera], + for l in [included, declares, defaults, self.objects, [self.camera], self.atmospheric, global_settings] for e in l]) @@ -50,15 +51,14 @@ def set_camera(self, new_camera): return new def add_objects(self, objs): - new = self.copy() - new.objects += objs + new.objects += objs return new def render(self, outfile=None, height=None, width=None, quality=None, antialiasing=None, remove_temp=True, auto_camera_angle=True, show_window=False, tempfile=None, - includedirs=None): + includedirs=None, alpha=None, additional_args=None): """ Renders the scene to a PNG, a numpy array, or the IPython Notebook. @@ -84,12 +84,17 @@ def render(self, outfile=None, height=None, width=None, return render_povstring(str(self), outfile, height, width, quality, antialiasing, remove_temp, show_window, - tempfile, includedirs) + tempfile, includedirs, + alpha=alpha, + additional_args=additional_args) class POVRayElement: - def __init__(self, *args): - self.args = list(args) + def __init__(self, *args, **kwargs): + args = list(args) + # flat key arguments - Obj(value='x') -> Obj('value', 'x') + args += list(chain.from_iterable(kwargs.items())) + self.args = args def copy(self): return deepcopy(self) diff --git a/vapory/version.py b/vapory/version.py index faa7b74..ff4ba4c 100644 --- a/vapory/version.py +++ b/vapory/version.py @@ -1 +1 @@ -__version__ = "0.1.01" +__version__ = "0.1.02"