[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4162] trunk/py/scripts/addons/ render_povray: add userprefs for povray binary location.

Campbell Barton ideasman42 at gmail.com
Mon Jan 14 11:55:00 CET 2013


Revision: 4162
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4162
Author:   campbellbarton
Date:     2013-01-14 10:54:57 +0000 (Mon, 14 Jan 2013)
Log Message:
-----------
add userprefs for povray binary location.

Modified Paths:
--------------
    trunk/py/scripts/addons/render_povray/__init__.py
    trunk/py/scripts/addons/render_povray/render.py

Modified: trunk/py/scripts/addons/render_povray/__init__.py
===================================================================
--- trunk/py/scripts/addons/render_povray/__init__.py	2013-01-14 10:22:23 UTC (rev 4161)
+++ trunk/py/scripts/addons/render_povray/__init__.py	2013-01-14 10:54:57 UTC (rev 4162)
@@ -40,6 +40,9 @@
 
 else:
     import bpy
+    from bpy.types import (AddonPreferences,
+                           PropertyGroup,
+                           )
     from bpy.props import (StringProperty,
                            BoolProperty,
                            IntProperty,
@@ -57,7 +60,7 @@
 ###############################################################################
 # Scene POV properties.
 ###############################################################################
-class RenderPovSettingsScene(bpy.types.PropertyGroup):
+class RenderPovSettingsScene(PropertyGroup):
     # File Options
     tempfiles_enable = BoolProperty(
             name="Enable Tempfiles",
@@ -290,7 +293,7 @@
 ###############################################################################
 # Material POV properties.
 ###############################################################################
-class RenderPovSettingsMaterial(bpy.types.PropertyGroup):
+class RenderPovSettingsMaterial(PropertyGroup):
     irid_enable = BoolProperty(
             name="Enable Iridescence",
             description="Newton's thin film interference (like an oil slick on a puddle of "
@@ -393,7 +396,7 @@
 ###############################################################################
 # Texture POV properties.
 ###############################################################################
-class RenderPovSettingsTexture(bpy.types.PropertyGroup):
+class RenderPovSettingsTexture(PropertyGroup):
     #Custom texture gamma
     tex_gamma_enable = BoolProperty(
             name="Enable custom texture gamma",
@@ -419,7 +422,7 @@
 ###############################################################################
 # Object POV properties.
 ###############################################################################
-class RenderPovSettingsObject(bpy.types.PropertyGroup):
+class RenderPovSettingsObject(PropertyGroup):
     # Importance sampling
     importance_value = FloatProperty(
             name="Radiosity Importance",
@@ -456,7 +459,7 @@
 ###############################################################################
 # Camera POV properties.
 ###############################################################################
-class RenderPovSettingsCamera(bpy.types.PropertyGroup):
+class RenderPovSettingsCamera(PropertyGroup):
     #DOF Toggle
     dof_enable = BoolProperty(
             name="Depth Of Field", description="EnablePOV-Ray Depth Of Field ",
@@ -504,13 +507,29 @@
 ###############################################################################
 # Text POV properties.
 ###############################################################################
-class RenderPovSettingsText(bpy.types.PropertyGroup):
+class RenderPovSettingsText(PropertyGroup):
     custom_code = BoolProperty(
             name="Custom Code",
             description="Add this text at the top of the exported POV-Ray file",
             default=False)
 
 
+###############################################################################
+# Povray Preferences.
+###############################################################################
+class PovrayPreferences(AddonPreferences):
+    bl_idname = __name__
+
+    filepath_povray = StringProperty(
+                name="Povray Location",
+                description="Path to renderer executable",
+                subtype='FILE_PATH',
+                )
+    def draw(self, context):
+        layout = self.layout
+        layout.prop(self, "filepath_povray")
+
+
 def register():
     bpy.utils.register_module(__name__)
 

Modified: trunk/py/scripts/addons/render_povray/render.py
===================================================================
--- trunk/py/scripts/addons/render_povray/render.py	2013-01-14 10:22:23 UTC (rev 4161)
+++ trunk/py/scripts/addons/render_povray/render.py	2013-01-14 10:54:57 UTC (rev 4162)
@@ -2042,6 +2042,7 @@
         write_pov(self._temp_file_in, scene, info_callback)
 
     def _render(self, scene):
+        addon_prefs = bpy.context.user_preferences.addons[__package__].preferences
 
         try:
             os.remove(self._temp_file_out)  # so as not to load the old file
@@ -2052,7 +2053,16 @@
 
         print ("***-STARTING-***")
 
-        pov_binary = "povray"
+        # Use the system preference if its set.
+        pov_binary = addon_prefs.filepath_povray
+        pov_binary_default = "povray"
+        if pov_binary:
+            pov_binary_found = os.path.exists(pov_binary)
+        else:
+            pov_binary = pov_binary_default
+            pov_binary_found = False
+            
+        
 
         extra_args = []
 
@@ -2079,7 +2089,8 @@
             # 64 bits blender
             if bitness == 64:
                 try:
-                    pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine64"
+                    if not pov_binary_found:
+                        pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine64"
                     self._process = subprocess.Popen(
                             [pov_binary, self._temp_file_ini] + extra_args,
                             stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
@@ -2089,7 +2100,8 @@
                 except OSError:
                     # someone might run povray 32 bits on a 64 bits blender machine
                     try:
-                        pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine"
+                        if not pov_binary_found:
+                            pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine"
                         self._process = subprocess.Popen(
                                 [pov_binary, self._temp_file_ini] + extra_args,
                                 stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
@@ -2116,7 +2128,8 @@
             #32 bits blender
             else:
                 try:
-                    pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine"
+                    if not pov_binary_found:
+                        pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine"
                     self._process = subprocess.Popen(
                             [pov_binary, self._temp_file_ini] + extra_args,
                             stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
@@ -2124,7 +2137,8 @@
                 # someone might also run povray 64 bits with a 32 bits build of blender.
                 except OSError:
                     try:
-                        pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine64"
+                        if not pov_binary_found:
+                            pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine64"
                         self._process = subprocess.Popen(
                                 [pov_binary, self._temp_file_ini] + extra_args,
                                 stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
@@ -2153,21 +2167,24 @@
             # DH - added -d option to prevent render window popup which leads to segfault on linux
             extra_args.append("-d")
 
-            isExists = False
-            sysPathList = os.getenv("PATH").split(':')
-            sysPathList.append("")
+            if not pov_binary_found:
+                pov_binary_found = False
+                sysPathList = os.getenv("PATH").split(':')
+                sysPathList.append("")
 
-            for dirName in sysPathList:
-                if (os.path.exists(os.path.join(dirName, pov_binary))):
-                    isExists = True
-                    break
+                for dirName in sysPathList:
+                    fn = os.path.join(dirName, pov_binary_default)
+                    if os.path.exists(fn):
+                        pov_binary = fn
+                        pov_binary_found = True
+                        break
 
-            if not isExists:
-                print("POV-Ray 3.7: could not found execute '%s' - not if PATH" % pov_binary)
-                import traceback
-                traceback.print_exc()
-                print ("***-DONE-***")
-                return False
+                if not pov_binary_found:
+                    print("POV-Ray 3.7: could not found execute '%s' - not if PATH" % pov_binary)
+                    import traceback
+                    traceback.print_exc()
+                    print ("***-DONE-***")
+                    return False
 
             try:
                 self._process = subprocess.Popen([pov_binary, self._temp_file_ini] + extra_args,



More information about the Bf-extensions-cvs mailing list