[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