[Bf-extensions-cvs] [6f40579] master: Added Basic Nodes support by Lanuhum

Maurice Raybaud noreply at git.blender.org
Sun Jan 29 21:29:08 CET 2017


Commit: 6f40579d5bd29e235b8aa372297de5eabf23aab7
Author: Maurice Raybaud
Date:   Sun Jan 29 21:28:41 2017 +0100
Branches: master
https://developer.blender.org/rBA6f40579d5bd29e235b8aa372297de5eabf23aab7

Added Basic Nodes support by Lanuhum

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

M	render_povray/__init__.py
A	render_povray/nodes.py
M	render_povray/primitives.py
M	render_povray/render.py
M	render_povray/shading.py
M	render_povray/ui.py

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

diff --git a/render_povray/__init__.py b/render_povray/__init__.py
index 31b7671..85c4e60 100644
--- a/render_povray/__init__.py
+++ b/render_povray/__init__.py
@@ -1,4 +1,4 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
+# ##### BEGIN GPL LICENSE BLOCK #####
 #
 #  This program is free software; you can redistribute it and/or
 #  modify it under the terms of the GNU General Public License
@@ -19,7 +19,7 @@
 # <pep8 compliant>
 
 bl_info = {
-    "name": "POV-Ray 3.7",
+    "name": "POVRAY-3.7",
     "author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, "
               "Constantin Rahn, Bastien Montagne, Leonid Desyatkov",
     "version": (0, 0, 9),
@@ -41,10 +41,12 @@ if "bpy" in locals():
 else:
     import bpy
     import addon_utils # To use some other addons
+    import nodeitems_utils #for Nodes
+    from nodeitems_utils import NodeCategory, NodeItem #for Nodes
     from bpy.types import (
             AddonPreferences,
             PropertyGroup,
-            Operator,
+            #Operator,
             )
     from bpy.props import (
             StringProperty,
@@ -450,6 +452,548 @@ class RenderPovSettingsMaterial(PropertyGroup):
             default="")
 
 
+
+            # NODES
+        
+    def use_material_nodes_callback(self, context):
+        if hasattr(context.space_data, "tree_type"):
+            context.space_data.tree_type = 'ObjectNodeTree'
+        mat=context.object.active_material
+        if mat.pov.material_use_nodes:
+            mat.use_nodes=True
+            tree = mat.node_tree
+            tree.name=mat.name
+            links = tree.links
+            default = True
+            if len(tree.nodes) == 2:
+                o = 0
+                m = 0
+                for node in tree.nodes:
+                    if node.type in {"OUTPUT","MATERIAL"}:
+                        tree.nodes.remove(node)
+                        default = True
+                for node in tree.nodes:
+                    if node.bl_idname == 'PovrayOutputNode':
+                        o+=1
+                    if node.bl_idname == 'PovrayTextureNode':
+                        m+=1
+                if o == 1 and m == 1:
+                    default = False
+            elif len(tree.nodes) == 0:
+                default = True
+            else:
+                default = False
+            if default:
+                output = tree.nodes.new('PovrayOutputNode')
+                output.location = 200,200
+                tmap = tree.nodes.new('PovrayTextureNode')
+                tmap.location = 0,200
+                links.new(tmap.outputs[0],output.inputs[0])
+                tmap.select = True
+                tree.nodes.active = tmap                
+        else:
+            mat.use_nodes=False
+
+
+    def use_texture_nodes_callback(self, context):
+        tex=context.object.active_material.active_texture
+        if tex.pov.texture_use_nodes:
+            tex.use_nodes=True
+            if len(tex.node_tree.nodes)==2:
+                for node in tex.node_tree.nodes:
+                    if node.type in {"OUTPUT","CHECKER"}:
+                        tex.node_tree.nodes.remove(node)
+        else:
+            tex.use_nodes=False
+
+    def node_active_callback(self, context):
+        items = []
+        mat=context.material
+        mat.node_tree.nodes
+        for node in mat.node_tree.nodes:
+            node.select=False
+        for node in mat.node_tree.nodes:
+            if node.name==mat.pov.material_active_node:
+                node.select=True
+                mat.node_tree.nodes.active=node
+
+                return node
+
+    def node_enum_callback(self, context):
+        items = []
+        mat=context.material
+        nodes=mat.node_tree.nodes
+        for node in nodes:
+            items.append(("%s"%node.name,"%s"%node.name,""))
+        return items
+
+    def pigment_normal_callback(self, context):
+        render = context.scene.pov.render
+        items = [("pigment", "Pigment", ""),("normal", "Normal", "")]
+        if render == 'hgpovray':
+            items = [("pigment", "Pigment", ""),("normal", "Normal", ""),("modulation", "Modulation", "")]
+        return items
+
+    def glow_callback(self, context):
+        scene = context.scene
+        ob = context.object
+        ob.pov.mesh_write_as_old = ob.pov.mesh_write_as
+        if scene.pov.render == 'uberpov' and ob.pov.glow:
+            ob.pov.mesh_write_as = 'NONE'
+        else:
+            ob.pov.mesh_write_as = ob.pov.mesh_write_as_old
+
+    material_use_nodes = BoolProperty(name="Use nodes", description="", update=use_material_nodes_callback, default=False)
+    material_active_node = EnumProperty(name="Active node", description="", items=node_enum_callback, update=node_active_callback)
+    preview_settings = BoolProperty(name="Preview Settings", description="",default=False)
+    object_preview_transform = BoolProperty(name="Transform object", description="",default=False)
+    object_preview_scale = FloatProperty(name="XYZ", min=0.5, max=2.0, default=1.0)
+    object_preview_rotate = FloatVectorProperty(name="Rotate", description="", min=-180.0, max=180.0,default=(0.0,0.0,0.0), subtype='XYZ')
+    object_preview_bgcontrast = FloatProperty(name="Contrast", min=0.0, max=1.0, default=0.5)    
+    
+        
+###############################################################################
+# Povray Nodes 
+###############################################################################        
+class PovraySocketUniversal(bpy.types.NodeSocket):
+    bl_idname = 'PovraySocketUniversal'
+    bl_label = 'Povray Socket'
+    value_unlimited = bpy.props.FloatProperty(default=0.0)
+    value_0_1 = bpy.props.FloatProperty(min=0.0,max=1.0,default=0.0)
+    value_0_10 = bpy.props.FloatProperty(min=0.0,max=10.0,default=0.0)
+    value_000001_10 = bpy.props.FloatProperty(min=0.000001,max=10.0,default=0.0)
+    value_1_9 = bpy.props.IntProperty(min=1,max=9,default=1)
+    value_0_255 = bpy.props.IntProperty(min=0,max=255,default=0)
+    percent = bpy.props.FloatProperty(min=0.0,max=100.0,default=0.0)
+    def draw(self, context, layout, node, text):
+        space = context.space_data
+        tree = space.edit_tree
+        links=tree.links
+        if self.is_linked:
+            value=[]
+            for link in links:
+                if link.from_node==node:
+                    inps=link.to_node.inputs
+                    for inp in inps: 
+                        if inp.bl_idname=="PovraySocketFloat_0_1" and inp.is_linked:
+                            prop="value_0_1"
+                            if prop not in value:
+                                value.append(prop)
+                        if inp.bl_idname=="PovraySocketFloat_000001_10" and inp.is_linked:
+                            prop="value_000001_10"
+                            if prop not in value:
+                                value.append(prop)
+                        if inp.bl_idname=="PovraySocketFloat_0_10" and inp.is_linked:
+                            prop="value_0_10"
+                            if prop not in value:
+                                value.append(prop)
+                        if inp.bl_idname=="PovraySocketInt_1_9" and inp.is_linked:
+                            prop="value_1_9"
+                            if prop not in value:
+                                value.append(prop)
+                        if inp.bl_idname=="PovraySocketInt_0_255" and inp.is_linked:
+                            prop="value_0_255"
+                            if prop not in value:
+                                value.append(prop)
+                        if inp.bl_idname=="PovraySocketFloatUnlimited" and inp.is_linked:
+                            prop="value_unlimited"
+                            if prop not in value:
+                                value.append(prop)
+            if len(value)==1:
+                layout.prop(self, "%s"%value[0], text=text)
+            else:
+                layout.prop(self, "percent", text="Percent")
+        else:
+            layout.prop(self, "percent", text=text)
+    def draw_color(self, context, node):
+        return (1, 0, 0, 1)
+
+class PovraySocketFloat_0_1(bpy.types.NodeSocket):
+    bl_idname = 'PovraySocketFloat_0_1'
+    bl_label = 'Povray Socket'
+    default_value = bpy.props.FloatProperty(description="Input node Value_0_1",min=0,max=1,default=0)
+    def draw(self, context, layout, node, text):
+        if self.is_linked:
+            layout.label(text)
+        else:
+            layout.prop(self, "default_value", text=text, slider=True)
+
+    def draw_color(self, context, node):
+        return (0.5, 0.7, 0.7, 1)
+
+class PovraySocketFloat_0_10(bpy.types.NodeSocket):
+    bl_idname = 'PovraySocketFloat_0_10'
+    bl_label = 'Povray Socket'
+    default_value = bpy.props.FloatProperty(description="Input node Value_0_10",min=0,max=10,default=0)
+    def draw(self, context, layout, node, text):
+        if node.bl_idname == 'ShaderNormalMapNode' and node.inputs[2].is_linked:
+            layout.label('')
+            self.hide_value=True
+        if self.is_linked:
+            layout.label(text)
+        else:
+            layout.prop(self, "default_value", text=text, slider=True)
+    def draw_color(self, context, node):
+        return (0.65, 0.65, 0.65, 1)
+
+class PovraySocketFloat_10(bpy.types.NodeSocket):
+    bl_idname = 'PovraySocketFloat_10'
+    bl_label = 'Povray Socket'
+    default_value = bpy.props.FloatProperty(description="Input node Value_10",min=-10,max=10,default=0)
+    def draw(self, context, layout, node, text):
+        if node.bl_idname == 'ShaderNormalMapNode' and node.inputs[2].is_linked:
+            layout.label('')
+            self.hide_value=True
+        if self.is_linked:
+            layout.label(text)
+        else:
+            layout.prop(self, "default_value", text=text, slider=True)
+    def draw_color(self, context, node):
+        return (0.65, 0.65, 0.65, 1)
+
+class PovraySocketFloatPositive(bpy.types.NodeSocket):
+    bl_idname = 'PovraySocketFloatPositive'
+    bl_label = 'Povray Socket'
+    default_value = bpy.props.FloatProperty(description="Input Node

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list