Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
BlenderPhi
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
raas
BlenderPhi
Commits
9c5729e6
Commit
9c5729e6
authored
Jun 9, 2013
by
Lukas Toenne
Browse files
Options
Downloads
Patches
Plain Diff
Fix for unintended commit of python template file ...
parent
3fe01ecf
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
release/scripts/templates_py/custom_nodes_groups.py
+0
-178
0 additions, 178 deletions
release/scripts/templates_py/custom_nodes_groups.py
with
0 additions
and
178 deletions
release/scripts/templates_py/custom_nodes_groups.py
deleted
100644 → 0
+
0
−
178
View file @
3fe01ecf
import
bpy
from
bpy_types
import
NodeTree
,
Node
,
NodeSocket
# Implementation of custom nodes from Python
# Shortcut for node type menu
def
add_nodetype
(
layout
,
type
):
layout
.
operator
(
"
node.add_node
"
,
text
=
type
.
bl_label
).
type
=
type
.
bl_rna
.
identifier
# Derived from the NodeTree base type, similar to Menu, Operator, Panel, etc.
class
MyCustomTree
(
NodeTree
):
# Description string
'''
A custom node tree type that will show up in the node editor header
'''
# Optional identifier string. If not explicitly defined, the python class name is used.
bl_idname
=
'
CustomTreeType
'
# Label for nice name display
bl_label
=
'
Custom Node Tree
'
# Icon identifier
# NOTE: If no icon is defined, the node tree will not show up in the editor header!
# This can be used to make additional tree types for groups and similar nodes (see below)
# Only one base tree class is needed in the editor for selecting the general category
bl_icon
=
'
NODETREE
'
def
draw_add_menu
(
self
,
context
,
layout
):
layout
.
label
(
"
Hello World!
"
)
add_nodetype
(
layout
,
bpy
.
types
.
CustomNodeType
)
add_nodetype
(
layout
,
bpy
.
types
.
MyCustomGroup
)
# Custom socket type
class
MyCustomSocket
(
NodeSocket
):
# Description string
'''
Custom node socket type
'''
# Optional identifier string. If not explicitly defined, the python class name is used.
bl_idname
=
'
CustomSocketType
'
# Label for nice name display
bl_label
=
'
Custom Node Socket
'
# Enum items list
my_items
=
[
(
"
DOWN
"
,
"
Down
"
,
"
Where your feet are
"
),
(
"
UP
"
,
"
Up
"
,
"
Where your head should be
"
),
(
"
LEFT
"
,
"
Left
"
,
"
Not right
"
),
(
"
RIGHT
"
,
"
Right
"
,
"
Not left
"
)
]
myEnumProperty
=
bpy
.
props
.
EnumProperty
(
name
=
"
Direction
"
,
description
=
"
Just an example
"
,
items
=
my_items
,
default
=
'
UP
'
)
# Optional function for drawing the socket input value
def
draw
(
self
,
context
,
layout
,
node
,
text
):
if
self
.
is_linked
:
layout
.
label
(
text
)
else
:
layout
.
prop
(
self
,
"
myEnumProperty
"
,
text
=
text
)
# Socket color
def
draw_color
(
self
,
context
,
node
):
return
(
1.0
,
0.4
,
0.216
,
0.5
)
# Mix-in class for all custom nodes in this tree type.
# Defines a poll function to enable instantiation.
class
MyCustomTreeNode
:
@classmethod
def
poll
(
cls
,
ntree
):
return
ntree
.
bl_idname
==
'
CustomTreeType
'
# Derived from the Node base type.
class
MyCustomNode
(
Node
,
MyCustomTreeNode
):
# === Basics ===
# Description string
'''
A custom node
'''
# Optional identifier string. If not explicitly defined, the python class name is used.
bl_idname
=
'
CustomNodeType
'
# Label for nice name display
bl_label
=
'
Custom Node
'
# Icon identifier
bl_icon
=
'
SOUND
'
# === Custom Properties ===
# These work just like custom properties in ID data blocks
# Extensive information can be found under
# http://wiki.blender.org/index.php/Doc:2.6/Manual/Extensions/Python/Properties
myStringProperty
=
bpy
.
props
.
StringProperty
()
myFloatProperty
=
bpy
.
props
.
FloatProperty
(
default
=
3.1415926
)
# === Optional Functions ===
# Initialization function, called when a new node is created.
# This is the most common place to create the sockets for a node, as shown below.
# NOTE: this is not the same as the standard __init__ function in Python, which is
# a purely internal Python method and unknown to the node system!
def
init
(
self
,
context
):
self
.
inputs
.
new
(
'
CustomSocketType
'
,
"
Hello
"
)
self
.
inputs
.
new
(
'
NodeSocketFloat
'
,
"
World
"
)
self
.
inputs
.
new
(
'
NodeSocketVector
'
,
"
!
"
)
self
.
outputs
.
new
(
'
NodeSocketColor
'
,
"
How
"
)
self
.
outputs
.
new
(
'
NodeSocketColor
'
,
"
are
"
)
self
.
outputs
.
new
(
'
NodeSocketFloat
'
,
"
you
"
)
# Copy function to initialize a copied node from an existing one.
def
copy
(
self
,
node
):
print
(
"
Copying from node
"
,
node
)
# Free function to clean up on removal.
def
free
(
self
):
print
(
"
Removing node
"
,
self
,
"
, Goodbye!
"
)
# Additional buttons displayed on the node.
def
draw_buttons
(
self
,
context
,
layout
):
layout
.
label
(
"
Node settings
"
)
layout
.
prop
(
self
,
"
myFloatProperty
"
)
# Detail buttons in the sidebar.
# If this function is not defined, the draw_buttons function is used instead
def
draw_buttons_ext
(
self
,
context
,
layout
):
layout
.
prop
(
self
,
"
myFloatProperty
"
)
# myStringProperty button will only be visible in the sidebar
layout
.
prop
(
self
,
"
myStringProperty
"
)
### Node Categories ###
# Node categories are a python system for automatically
# extending the Add menu, toolbar panels and search operator.
# For more examples see release/scripts/startup/nodeitems_builtins.py
import
nodeitems_utils
from
nodeitems_utils
import
NodeCategory
,
NodeItem
# our own base class with an appropriate poll function,
# so the categories only show up in our own tree type
class
MyNodeCategory
(
NodeCategory
):
@classmethod
def
poll
(
cls
,
context
):
return
context
.
space_data
.
tree_type
==
'
CustomTreeType
'
# all categories in a list
node_categories
=
[
# identifier, label, items list
MyNodeCategory
(
"
SOMENODES
"
,
"
Some Nodes
"
,
items
=
[
# our basic node
NodeItem
(
"
CustomNodeType
"
),
]),
MyNodeCategory
(
"
OTHERNODES
"
,
"
Other Nodes
"
,
items
=
[
# the node item can have additional settings,
# which are applied to new nodes
# NB: settings values are stored as string expressions,
# for this reason they should be converted to strings using repr()
NodeItem
(
"
CustomNodeType
"
,
label
=
"
Node A
"
,
settings
=
{
"
myStringProperty
"
:
repr
(
"
Lorem ipsum dolor sit amet
"
),
"
myFloatProperty
"
:
repr
(
1.0
),
}),
NodeItem
(
"
CustomNodeType
"
,
label
=
"
Node B
"
,
settings
=
{
"
myStringProperty
"
:
repr
(
"
consectetur adipisicing elit
"
),
"
myFloatProperty
"
:
repr
(
2.0
),
}),
]),
]
def
register
():
bpy
.
utils
.
register_class
(
MyCustomTree
)
bpy
.
utils
.
register_class
(
MyCustomSocket
)
bpy
.
utils
.
register_class
(
MyCustomNode
)
nodeitems_utils
.
register_node_categories
(
"
CUSTOM_NODES
"
,
node_categories
)
def
unregister
():
nodeitems_utils
.
unregister_node_categories
(
"
CUSTOM_NODES
"
)
bpy
.
utils
.
unregister_class
(
MyCustomTree
)
bpy
.
utils
.
unregister_class
(
MyCustomSocket
)
bpy
.
utils
.
unregister_class
(
MyCustomNode
)
if
__name__
==
"
__main__
"
:
register
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment