[Bf-extensions-cvs] [795b722b] master: *Added capsule Metaball as cylinder blob pov primitive *Added the following pov keywords to object properties tab: hollow, double_illuminate, sturm (for Metaballs and lathe), no_shadow, no_image, no_reflection, no_radiosity, inverse, hierarchy *fixed hair location bug.

Maurice Raybaud noreply at git.blender.org
Wed Aug 16 01:05:37 CEST 2017


Commit: 795b722bde29f07d062c82c0942d75db9e3d3221
Author: Maurice Raybaud
Date:   Wed Aug 16 01:05:23 2017 +0200
Branches: master
https://developer.blender.org/rBA795b722bde29f07d062c82c0942d75db9e3d3221

*Added capsule Metaball as cylinder blob pov primitive
*Added the following pov keywords to object properties tab:
hollow, double_illuminate, sturm (for Metaballs and lathe), no_shadow, no_image, no_reflection, no_radiosity, inverse, hierarchy
*fixed hair location bug.

===================================================================

M	render_povray/__init__.py
M	render_povray/render.py
M	render_povray/ui.py

===================================================================

diff --git a/render_povray/__init__.py b/render_povray/__init__.py
index 0c0aee46..1b222665 100644
--- a/render_povray/__init__.py
+++ b/render_povray/__init__.py
@@ -1664,7 +1664,8 @@ class RenderPovSettingsObject(PropertyGroup):
         default=(0.0, 0.0, 2.0))
 
     unlock_parameters = BoolProperty(name="Lock",default = False)
-
+    
+    # not in UI yet but used for sor (lathe) / prism... pov primitives
     curveshape = EnumProperty(
             name="Povray Shape Type",
             items=(("birail", "Birail", ""),
diff --git a/render_povray/render.py b/render_povray/render.py
index c3ff42a6..17b368e3 100644
--- a/render_povray/render.py
+++ b/render_povray/render.py
@@ -288,23 +288,23 @@ def write_global_setting(scene,file):
 
 def write_object_modifiers(scene,ob,File):
     if ob.pov.hollow:
-        File.write("hollow\n")
+        File.write("\thollow\n")
     if ob.pov.double_illuminate:
-        File.write("double_illuminate\n")
+        File.write("\tdouble_illuminate\n")
     if ob.pov.sturm:
-        File.write("sturm\n")
+        File.write("\tsturm\n")
     if ob.pov.no_shadow:
-        File.write("no_shadow\n")
+        File.write("\tno_shadow\n")
     if ob.pov.no_image:
-        File.write("no_image\n")
+        File.write("\tno_image\n")
     if ob.pov.no_reflection:
-        File.write("no_reflection\n")
+        File.write("\tno_reflection\n")
     if ob.pov.no_radiosity:
-        File.write("no_radiosity\n")
+        File.write("\tno_radiosity\n")
     if ob.pov.inverse:
-        File.write("inverse\n")
+        File.write("\tinverse\n")
     if ob.pov.hierarchy:
-        File.write("hierarchy\n")
+        File.write("\thierarchy\n")
 
     # XXX, Commented definitions
     '''
@@ -1466,7 +1466,7 @@ def write_pov(filename, scene=None, info_callback=None):
 
 
                     tabWrite("}\n")
-
+            # below not used yet?
             if ob.pov.curveshape == 'sor':
                 for spl in ob.data.splines:
                     if spl.type in {'POLY','NURBS'}:
@@ -1608,7 +1608,7 @@ def write_pov(filename, scene=None, info_callback=None):
             prefix = ob.name.split(".")[0]
             if not prefix in meta_group:
                 meta_group[prefix] = ob  # .data.threshold
-            elems = [(elem, ob) for elem in ob.data.elements if elem.type in {'BALL', 'ELLIPSOID'}]
+            elems = [(elem, ob) for elem in ob.data.elements if elem.type in {'BALL', 'ELLIPSOID','CAPSULE'}]
             if prefix in meta_elems:
                 meta_elems[prefix].extend(elems)
             else:
@@ -1637,6 +1637,12 @@ def write_pov(filename, scene=None, info_callback=None):
                                          (loc.x / elem.size_x, loc.y / elem.size_y, loc.z / elem.size_z,
                                           elem.radius, stiffness))
                                 tabWrite("scale <%.6g, %.6g, %.6g>" % (elem.size_x, elem.size_y, elem.size_z))
+                            elif elem.type == 'CAPSULE':
+                                tabWrite("cylinder{ <%.6g, %.6g, %.6g>,<%.6g, %.6g, %.6g>,%.4g,%.4g " %
+                                         ((loc.x - elem.size_x), (loc.y), (loc.z),
+                                          (loc.x + elem.size_x), (loc.y), (loc.z),
+                                          elem.radius, stiffness))
+                                #tabWrite("scale <%.6g, %.6g, %.6g>" % (elem.size_x, elem.size_y, elem.size_z))                                
                             writeMatrix(global_matrix * elems[1].matrix_world)
                             tabWrite("}\n")
                         try:
@@ -2105,7 +2111,7 @@ def write_pov(filename, scene=None, info_callback=None):
                                                         #only overwrite variable for each competing texture for now
                                                         initColor=th.texture.evaluate((initCo[0],initCo[1],initCo[2]))
                                         for step in range(0, steps):
-                                            co = pSys.co_hair(ob, pindex, step)
+                                            co = ob.matrix_world.inverted()*(pSys.co_hair(ob, pindex, step))
                                         #for controlPoint in particle.hair_keys:
                                             if pSys.settings.clump_factor != 0:
                                                 hDiameter = pSys.settings.clump_factor / 200.0 * random.uniform(0.5, 1)
@@ -3184,11 +3190,13 @@ def write_pov(filename, scene=None, info_callback=None):
                                 writeObjectMaterial(material, ob)
                             except IndexError:
                                 print(me)
-
+                        
                         #Importance for radiosity sampling added here:
                         tabWrite("radiosity { \n")
                         tabWrite("importance %3g \n" % importance)
                         tabWrite("}\n")
+                        # POV object modifiers such as hollow / sturm / double_illuminate etc.
+                        write_object_modifiers(scene,ob,file)                        
 
                         tabWrite("}\n")  # End of mesh block
 
diff --git a/render_povray/ui.py b/render_povray/ui.py
index 6c12b0b8..1ac4bd1f 100644
--- a/render_povray/ui.py
+++ b/render_povray/ui.py
@@ -1284,6 +1284,12 @@ class TEXTURE_PT_povray_tex_gamma(TextureButtonsPanel, bpy.types.Panel):
 class OBJECT_PT_povray_obj_importance(ObjectButtonsPanel, bpy.types.Panel):
     bl_label = "POV-Ray"
     COMPAT_ENGINES = {'POVRAY_RENDER'}
+    
+    @classmethod
+    def poll(cls, context):
+
+        engine = context.scene.render.engine
+        return (engine in cls.COMPAT_ENGINES)
 
     def draw(self, context):
         layout = self.layout
@@ -1297,7 +1303,30 @@ class OBJECT_PT_povray_obj_importance(ObjectButtonsPanel, bpy.types.Panel):
         col.prop(obj.pov, "collect_photons", text="Receive Photon Caustics")
         if obj.pov.collect_photons:
             col.prop(obj.pov, "spacing_multiplier", text="Photons Spacing Multiplier")
+            
+        split = layout.split()
 
+        col = split.column()
+        col.prop(obj.pov,"hollow")
+        col.prop(obj.pov,"double_illuminate")
+
+     
+        if obj.type == 'META' or obj.pov.curveshape == 'lathe':
+        #if obj.pov.curveshape == 'sor'
+            col.prop(obj.pov,"sturm")
+        col.prop(obj.pov,"no_shadow")
+        col.prop(obj.pov,"no_image")
+        col.prop(obj.pov,"no_reflection")
+        col.prop(obj.pov,"no_radiosity")
+        col.prop(obj.pov,"inverse")
+        col.prop(obj.pov,"hierarchy")
+        # col.prop(obj.pov,"boundorclip",text="Bound / Clip")
+        # if obj.pov.boundorclip != "none":
+            # col.prop_search(obj.pov,"boundorclipob",context.blend_data,"objects",text="Object")
+            # text = "Clipped by"
+            # if obj.pov.boundorclip == "clipped_by":
+                # text = "Bounded by"
+            # col.prop(obj.pov,"addboundorclip",text=text)
 
 class OBJECT_PT_povray_obj_sphere(PovDataButtonsPanel, bpy.types.Panel):
     bl_label = "POV-Ray Sphere"



More information about the Bf-extensions-cvs mailing list