Wrapped node input and output sockets in RNA.
This allows you to set and animate the values of socket inputs and outputs, for example the value node. It's also a step on the way to manipulating node trees via python (i.e. linking node sockets to each other). This fixes [#19841] RGB Node in compositor not working
This commit is contained in:
parent
0807bc176a
commit
f0fc007c4b
@ -1867,7 +1867,7 @@ static void dummy_olddraw_gpencil ()
|
||||
strcpy(treetype, "Material");
|
||||
sprintf(name, "Nodes:%s", treetype);
|
||||
|
||||
special= ICON_NODE;
|
||||
special= ICON_NODETREE;
|
||||
}
|
||||
break;
|
||||
case SPACE_SEQ:
|
||||
|
@ -54,8 +54,8 @@ DEF_ICON(ICON_BLANK005)
|
||||
DEF_ICON(ICON_GO_LEFT)
|
||||
DEF_ICON(ICON_PLUG)
|
||||
DEF_ICON(ICON_UI)
|
||||
DEF_ICON(ICON_TEXNODE)
|
||||
DEF_ICON(ICON_TEXNODE_SEL)
|
||||
DEF_ICON(ICON_NODE)
|
||||
DEF_ICON(ICON_NODE_SEL)
|
||||
|
||||
/* ui */
|
||||
DEF_ICON(ICON_FULLSCREEN)
|
||||
@ -157,7 +157,7 @@ DEF_ICON(ICON_ACTION)
|
||||
DEF_ICON(ICON_NLA)
|
||||
DEF_ICON(ICON_SCRIPTWIN)
|
||||
DEF_ICON(ICON_TIME)
|
||||
DEF_ICON(ICON_NODE)
|
||||
DEF_ICON(ICON_NODETREE)
|
||||
DEF_ICON(ICON_LOGIC)
|
||||
DEF_ICON(ICON_CONSOLE)
|
||||
DEF_ICON(ICON_PREFERENCES)
|
||||
|
@ -197,40 +197,30 @@ static void node_buts_group(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
|
||||
static void node_buts_value(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
uiBlock *block= uiLayoutAbsoluteBlock(layout);
|
||||
bNode *node= ptr->data;
|
||||
rctf *butr= &node->butr;
|
||||
bNodeSocket *sock= node->outputs.first; /* first socket stores value */
|
||||
PointerRNA sockptr;
|
||||
PropertyRNA *prop;
|
||||
|
||||
uiDefButF(block, NUM, B_NODE_EXEC, "",
|
||||
(short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 20,
|
||||
sock->ns.vec, sock->ns.min, sock->ns.max, 10, 2, "");
|
||||
/* first socket stores value */
|
||||
prop = RNA_struct_find_property(ptr, "outputs");
|
||||
RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr);
|
||||
|
||||
uiItemR(layout, "", 0, &sockptr, "default_value", 0);
|
||||
}
|
||||
|
||||
static void node_buts_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
uiBlock *block= uiLayoutAbsoluteBlock(layout);
|
||||
uiLayout *col;
|
||||
bNode *node= ptr->data;
|
||||
rctf *butr= &node->butr;
|
||||
bNodeSocket *sock= node->outputs.first; /* first socket stores value */
|
||||
|
||||
if(sock) {
|
||||
/* enforce square box drawing */
|
||||
uiBlockSetEmboss(block, UI_EMBOSSP);
|
||||
|
||||
uiDefButF(block, HSVCUBE, B_NODE_EXEC, "",
|
||||
(short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 12,
|
||||
sock->ns.vec, 0.0f, 1.0f, 3, 0, "");
|
||||
uiDefButF(block, HSVCUBE, B_NODE_EXEC, "",
|
||||
(short)butr->xmin, (short)butr->ymin+15, butr->xmax-butr->xmin, butr->xmax-butr->xmin -15 -15,
|
||||
sock->ns.vec, 0.0f, 1.0f, 2, 0, "");
|
||||
uiDefButF(block, COL, B_NOP, "",
|
||||
(short)butr->xmin, (short)butr->ymax-12, butr->xmax-butr->xmin, 12,
|
||||
sock->ns.vec, 0.0, 0.0, -1, 0, "");
|
||||
/* the -1 above prevents col button to popup a color picker */
|
||||
|
||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||
}
|
||||
PointerRNA sockptr;
|
||||
PropertyRNA *prop;
|
||||
|
||||
/* first socket stores value */
|
||||
prop = RNA_struct_find_property(ptr, "outputs");
|
||||
RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr);
|
||||
|
||||
col = uiLayoutColumn(layout, 0);
|
||||
uiItemR(col, "", 0, &sockptr, "default_value", 0);
|
||||
}
|
||||
|
||||
static void node_buts_mix_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
|
@ -548,55 +548,25 @@ static void node_sync_cb(bContext *C, void *snode_v, void *node_v)
|
||||
|
||||
/* ************** Socket callbacks *********** */
|
||||
|
||||
static void socket_vector_menu_cb(bContext *C, void *node_v, void *ntree_v)
|
||||
{
|
||||
if(node_v && ntree_v) {
|
||||
NodeTagChanged(ntree_v, node_v);
|
||||
// addqueue(curarea->win, UI_BUT_EVENT, B_NODE_EXEC); XXX
|
||||
}
|
||||
}
|
||||
|
||||
/* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */
|
||||
static uiBlock *socket_vector_menu(bContext *C, ARegion *ar, void *socket_v)
|
||||
{
|
||||
SpaceNode *snode= CTX_wm_space_node(C);
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
bNode *node;
|
||||
bNodeSocket *sock= socket_v;
|
||||
bNodeStack *ns= &sock->ns;
|
||||
uiBlock *block;
|
||||
uiBut *bt;
|
||||
|
||||
/* a bit ugly... retrieve the node the socket comes from */
|
||||
for(node= snode->nodetree->nodes.first; node; node= node->next) {
|
||||
bNodeSocket *sockt;
|
||||
for(sockt= node->inputs.first; sockt; sockt= sockt->next)
|
||||
if(sockt==sock)
|
||||
break;
|
||||
if(sockt)
|
||||
break;
|
||||
}
|
||||
SpaceNode *snode= CTX_wm_space_node(C);
|
||||
bNodeTree *ntree = snode->nodetree;
|
||||
PointerRNA ptr;
|
||||
uiLayout *layout;
|
||||
|
||||
RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr);
|
||||
|
||||
block= uiBeginBlock(C, ar, "socket menu", UI_EMBOSS);
|
||||
uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN);
|
||||
|
||||
/* use this for a fake extra empy space around the buttons */
|
||||
uiDefBut(block, LABEL, 0, "", -4, -4, 188, 68, NULL, 0, 0, 0, 0, "");
|
||||
|
||||
uiBlockBeginAlign(block);
|
||||
bt= uiDefButF(block, NUMSLI, 0, "X ", 0,40,180,20, ns->vec, ns->min, ns->max, 10, 0, "");
|
||||
uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree);
|
||||
bt= uiDefButF(block, NUMSLI, 0, "Y ", 0,20,180,20, ns->vec+1, ns->min, ns->max, 10, 0, "");
|
||||
uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree);
|
||||
bt= uiDefButF(block, NUMSLI, 0, "Z ", 0,0,180,20, ns->vec+2, ns->min, ns->max, 10, 0, "");
|
||||
uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree);
|
||||
layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, sock->locx, sock->locy-8, 140, 20, U.uistyles.first), 0);
|
||||
|
||||
uiBlockSetDirection(block, UI_TOP);
|
||||
uiEndBlock(C, block);
|
||||
|
||||
ED_area_tag_redraw(sa);
|
||||
|
||||
return block;
|
||||
uiItemR(layout, "", 0, &ptr, "default_value", UI_ITEM_R_EXPAND);
|
||||
}
|
||||
|
||||
/* not a callback */
|
||||
@ -671,6 +641,8 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
int /*ofs,*/ color_id= node_get_colorid(node);
|
||||
char showname[128]; /* 128 used below */
|
||||
View2D *v2d = &ar->v2d;
|
||||
bNodeTree *ntree = snode->nodetree;
|
||||
PointerRNA ptr;
|
||||
|
||||
uiSetRoundBox(15-4);
|
||||
ui_dropshadow(rct, BASIS_RAD, snode->aspect, node->flag & SELECT);
|
||||
@ -705,10 +677,10 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
glEnable(GL_BLEND);
|
||||
if(node->id->lib) {
|
||||
float rgb[3] = {1.0f, 0.7f, 0.3f};
|
||||
UI_icon_draw_aspect_color(iconofs, rct->ymax-NODE_DY, ICON_NODE, snode->aspect, rgb);
|
||||
UI_icon_draw_aspect_color(iconofs, rct->ymax-NODE_DY, ICON_NODETREE, snode->aspect, rgb);
|
||||
}
|
||||
else {
|
||||
UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, ICON_NODE, snode->aspect, 0.5f);
|
||||
UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, ICON_NODETREE, snode->aspect, 0.5f);
|
||||
}
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
@ -789,13 +761,15 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL))) {
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
|
||||
RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr);
|
||||
|
||||
if(node->block && sock->link==NULL) {
|
||||
float *butpoin= sock->ns.vec;
|
||||
|
||||
if(sock->type==SOCK_VALUE) {
|
||||
bt= uiDefButF(node->block, NUM, B_NODE_EXEC, sock->name,
|
||||
(short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17,
|
||||
butpoin, sock->ns.min, sock->ns.max, 10, 2, "");
|
||||
bt=uiDefButR(node->block, NUM, B_NODE_EXEC, sock->name,
|
||||
(short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17,
|
||||
&ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL);
|
||||
uiButSetFunc(bt, node_sync_cb, snode, node);
|
||||
}
|
||||
else if(sock->type==SOCK_VECTOR) {
|
||||
@ -808,9 +782,9 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
|
||||
if(labelw>0) width= 40; else width= (short)node->width-NODE_DY;
|
||||
|
||||
bt= uiDefButF(node->block, COL, B_NODE_EXEC, "",
|
||||
(short)(sock->locx+NODE_DYS), (short)sock->locy-8, width, 15,
|
||||
butpoin, 0, 0, 0, 0, "");
|
||||
bt=uiDefButR(node->block, COL, B_NODE_EXEC, "",
|
||||
(short)sock->locx+NODE_DYS, (short)(sock->locy)-8, width, 15,
|
||||
&ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL);
|
||||
uiButSetFunc(bt, node_sync_cb, snode, node);
|
||||
|
||||
if(labelw>0) uiDefBut(node->block, LABEL, 0, sock->name,
|
||||
@ -820,7 +794,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
}
|
||||
else {
|
||||
|
||||
uiDefBut(node->block, LABEL, 0, sock->name, (short)(sock->locx+3.0f), (short)(sock->locy-9.0f),
|
||||
uiDefBut(node->block, LABEL, 0, sock->name, (short)(sock->locx+7), (short)(sock->locy-9.0f),
|
||||
(short)(node->width-NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, "");
|
||||
}
|
||||
}
|
||||
|
@ -310,6 +310,7 @@ extern StructRNA RNA_NlaStrip;
|
||||
extern StructRNA RNA_NlaTrack;
|
||||
extern StructRNA RNA_Node;
|
||||
extern StructRNA RNA_NodeTree;
|
||||
extern StructRNA RNA_NodeSocket;
|
||||
extern StructRNA RNA_NoiseTexture;
|
||||
extern StructRNA RNA_NorController;
|
||||
extern StructRNA RNA_Nurb;
|
||||
@ -358,6 +359,7 @@ extern StructRNA RNA_RenderEngine;
|
||||
extern StructRNA RNA_RenderLayer;
|
||||
extern StructRNA RNA_RenderPass;
|
||||
extern StructRNA RNA_RenderResult;
|
||||
extern StructRNA RNA_RGBANodeSocket;
|
||||
extern StructRNA RNA_RigidBodyJointConstraint;
|
||||
extern StructRNA RNA_Scene;
|
||||
extern StructRNA RNA_SceneGameData;
|
||||
@ -515,7 +517,9 @@ extern StructRNA RNA_UserPreferencesFilePaths;
|
||||
extern StructRNA RNA_UserPreferencesSystem;
|
||||
extern StructRNA RNA_UserPreferencesView;
|
||||
extern StructRNA RNA_UserSolidLight;
|
||||
extern StructRNA RNA_ValueNodeSocket;
|
||||
extern StructRNA RNA_VectorFont;
|
||||
extern StructRNA RNA_VectorNodeSocket;
|
||||
extern StructRNA RNA_VertexGroup;
|
||||
extern StructRNA RNA_VertexGroupElement;
|
||||
extern StructRNA RNA_VertexPaint;
|
||||
|
@ -53,7 +53,7 @@ EnumPropertyItem id_type_items[] = {
|
||||
{ID_MA, "MATERIAL", ICON_MATERIAL_DATA, "Material", ""},
|
||||
{ID_MB, "META", ICON_META_DATA, "MetaBall", ""},
|
||||
{ID_ME, "MESH", ICON_MESH_DATA, "Mesh", ""},
|
||||
{ID_NT, "NODETREE", ICON_NODE, "NodeTree", ""},
|
||||
{ID_NT, "NODETREE", ICON_NODETREE, "NodeTree", ""},
|
||||
{ID_OB, "OBJECT", ICON_OBJECT_DATA, "Object", ""},
|
||||
{ID_PA, "PARTICLE", ICON_PARTICLE_DATA, "Particle", ""},
|
||||
{ID_SCE, "SCENE", ICON_SCENE_DATA, "Scene", ""},
|
||||
|
@ -145,15 +145,59 @@ static StructRNA *rna_Node_refine(struct PointerRNA *ptr)
|
||||
}
|
||||
}
|
||||
|
||||
static StructRNA *rna_NodeSocketType_refine(struct PointerRNA *ptr)
|
||||
{
|
||||
bNodeSocket *ns= (bNodeSocket*)ptr->data;
|
||||
|
||||
switch(ns->type) {
|
||||
case SOCK_VALUE:
|
||||
return &RNA_ValueNodeSocket;
|
||||
case SOCK_VECTOR:
|
||||
return &RNA_VectorNodeSocket;
|
||||
case SOCK_RGBA:
|
||||
return &RNA_RGBANodeSocket;
|
||||
default:
|
||||
return &RNA_UnknownType;
|
||||
}
|
||||
}
|
||||
|
||||
static char *rna_Node_path(PointerRNA *ptr)
|
||||
{
|
||||
bNodeTree *ntree= (bNodeTree*)ptr->id.data;
|
||||
bNode *node= (bNode*)ptr->data;
|
||||
int index = BLI_findindex(&ntree->nodes, node);
|
||||
|
||||
/* XXX: node index (and therefore path) gets changed around depending on order of nodetree!
|
||||
* This means that node animation can switch from one node to another if you rearrange them.
|
||||
* Needs a fix to make the path based on unique names/ids! */
|
||||
return BLI_sprintfN("nodes[%d]", index);
|
||||
}
|
||||
|
||||
static char *rna_NodeSocket_path(PointerRNA *ptr)
|
||||
{
|
||||
bNodeTree *ntree= (bNodeTree*)ptr->id.data;
|
||||
bNodeSocket *sock= (bNodeSocket*)ptr->data;
|
||||
bNode *node;
|
||||
|
||||
int socketindex, nodeindex;
|
||||
|
||||
if (!nodeFindNode(ntree, sock, &node, NULL)) return;
|
||||
|
||||
/* XXX: node index (and therefore path) gets changed around depending on order of nodetree!
|
||||
* This means that node animation can switch from one node to another if you rearrange them.
|
||||
* Needs a fix to make the path based on unique names/ids! */
|
||||
nodeindex = BLI_findindex(&ntree->nodes, node);
|
||||
|
||||
socketindex = BLI_findindex(&node->inputs, sock);
|
||||
if (socketindex != -1)
|
||||
return BLI_sprintfN("nodes[%d].inputs[%d]", nodeindex, socketindex);
|
||||
|
||||
socketindex = BLI_findindex(&node->outputs, sock);
|
||||
if (socketindex != -1)
|
||||
return BLI_sprintfN("nodes[%d].outputs[%d]", nodeindex, socketindex);
|
||||
|
||||
}
|
||||
|
||||
static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
|
||||
{
|
||||
bNode *node;
|
||||
@ -192,29 +236,35 @@ static void rna_Matte_t2_set(PointerRNA *ptr, float value)
|
||||
chroma->t2 = value;
|
||||
}
|
||||
|
||||
static void rna_Node_update(bContext *C, PointerRNA *ptr)
|
||||
static void node_update(bContext *C, bNodeTree *ntree, bNode *node)
|
||||
{
|
||||
Main *bmain= CTX_data_main(C);
|
||||
bNodeTree *ntree= (bNodeTree*)ptr->id.data;
|
||||
bNode *node= (bNode*)ptr->data;
|
||||
Material *ma;
|
||||
Tex *tex;
|
||||
Scene *sce;
|
||||
|
||||
|
||||
/* look through all datablocks, to support groups */
|
||||
for(ma=bmain->mat.first; ma; ma=ma->id.next)
|
||||
if(ma->nodetree && ma->use_nodes && has_nodetree(ma->nodetree, ntree))
|
||||
ED_node_changed_update(&ma->id, node);
|
||||
|
||||
|
||||
for(tex=bmain->tex.first; tex; tex=tex->id.next)
|
||||
if(tex->nodetree && tex->use_nodes && has_nodetree(tex->nodetree, ntree))
|
||||
ED_node_changed_update(&tex->id, node);
|
||||
|
||||
|
||||
for(sce=bmain->scene.first; sce; sce=sce->id.next)
|
||||
if(sce->nodetree && sce->use_nodes && has_nodetree(sce->nodetree, ntree))
|
||||
ED_node_changed_update(&sce->id, node);
|
||||
}
|
||||
|
||||
static void rna_Node_update(bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
bNodeTree *ntree= (bNodeTree*)ptr->id.data;
|
||||
bNode *node= (bNode*)ptr->data;
|
||||
|
||||
node_update(C, ntree, node);
|
||||
}
|
||||
|
||||
static void rna_Node_update_name(bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
bNode *node= (bNode*)ptr->data;
|
||||
@ -255,6 +305,24 @@ static void rna_Node_update_name(bContext *C, PointerRNA *ptr)
|
||||
rna_Node_update(C, ptr);
|
||||
}
|
||||
|
||||
static void rna_NodeSocket_update(bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
bNodeTree *ntree= (bNodeTree*)ptr->id.data;
|
||||
bNodeSocket *sock= (bNodeSocket*)ptr->data;
|
||||
bNode *node;
|
||||
|
||||
if (nodeFindNode(ntree, sock, &node, NULL))
|
||||
node_update(C, ntree, node);
|
||||
}
|
||||
|
||||
static void rna_NodeSocket_defvalue_range(PointerRNA *ptr, float *min, float *max)
|
||||
{
|
||||
bNodeSocket *sock= (bNodeSocket*)ptr->data;
|
||||
|
||||
*min = sock->ns.min;
|
||||
*max = sock->ns.max;
|
||||
}
|
||||
|
||||
static void rna_Node_mapping_update(bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
bNode *node= (bNode*)ptr->data;
|
||||
@ -418,15 +486,9 @@ typedef struct NodeInfo
|
||||
|
||||
static NodeInfo nodes[MaxNodes];
|
||||
|
||||
static void reg_node(
|
||||
int ID,
|
||||
int category,
|
||||
const char *enum_name,
|
||||
const char *struct_name,
|
||||
const char *base_name,
|
||||
const char *ui_name,
|
||||
const char *ui_desc
|
||||
){
|
||||
static void reg_node(int ID, int category, const char *enum_name, const char *struct_name,
|
||||
const char *base_name, const char *ui_name, const char *ui_desc)
|
||||
{
|
||||
NodeInfo *ni = nodes + ID;
|
||||
|
||||
ni->defined = 1;
|
||||
@ -1861,6 +1923,91 @@ static void rna_def_texture_node(BlenderRNA *brna)
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
static void rna_def_node_socket(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
|
||||
srna = RNA_def_struct(brna, "NodeSocket", NULL);
|
||||
RNA_def_struct_ui_text(srna, "Node Socket", "Input or output socket of a node");
|
||||
RNA_def_struct_refine_func(srna, "rna_NodeSocketType_refine");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
RNA_def_struct_ui_icon(srna, ICON_PLUG);
|
||||
RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
|
||||
|
||||
}
|
||||
|
||||
static void rna_def_node_socket_value(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
srna = RNA_def_struct(brna, "ValueNodeSocket", NULL);
|
||||
RNA_def_struct_ui_text(srna, "Value Node Socket", "Input or output socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
RNA_def_struct_ui_icon(srna, ICON_PLUG);
|
||||
RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
|
||||
|
||||
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "Name", "Socket name.");
|
||||
RNA_def_struct_name_property(srna, prop);
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "ns.vec");
|
||||
RNA_def_property_array(prop, 1);
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached.");
|
||||
RNA_def_property_update(prop, 0, "rna_NodeSocket_update");
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocket_defvalue_range");
|
||||
}
|
||||
|
||||
static void rna_def_node_socket_vector(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
srna = RNA_def_struct(brna, "VectorNodeSocket", NULL);
|
||||
RNA_def_struct_ui_text(srna, "Vector Node Socket", "Input or output socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
RNA_def_struct_ui_icon(srna, ICON_PLUG);
|
||||
RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
|
||||
|
||||
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "Name", "Socket name.");
|
||||
RNA_def_struct_name_property(srna, prop);
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_XYZ);
|
||||
RNA_def_property_float_sdna(prop, NULL, "ns.vec");
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached.");
|
||||
RNA_def_property_update(prop, 0, "rna_NodeSocket_update");
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocket_defvalue_range");
|
||||
}
|
||||
|
||||
static void rna_def_node_socket_rgba(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
srna = RNA_def_struct(brna, "RGBANodeSocket", NULL);
|
||||
RNA_def_struct_ui_text(srna, "RGBA Node Socket", "Input or output socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
RNA_def_struct_ui_icon(srna, ICON_PLUG);
|
||||
RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
|
||||
|
||||
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "Name", "Socket name.");
|
||||
RNA_def_struct_name_property(srna, prop);
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR);
|
||||
RNA_def_property_float_sdna(prop, NULL, "ns.vec");
|
||||
RNA_def_property_array(prop, 4);
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached.");
|
||||
RNA_def_property_update(prop, 0, "rna_NodeSocket_update");
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocket_defvalue_range");
|
||||
}
|
||||
|
||||
static void rna_def_node(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
@ -1869,6 +2016,7 @@ static void rna_def_node(BlenderRNA *brna)
|
||||
srna = RNA_def_struct(brna, "Node", NULL);
|
||||
RNA_def_struct_ui_text(srna, "Node", "Node in a node tree.");
|
||||
RNA_def_struct_sdna(srna, "bNode");
|
||||
RNA_def_struct_ui_icon(srna, ICON_NODE);
|
||||
RNA_def_struct_refine_func(srna, "rna_Node_refine");
|
||||
RNA_def_struct_path_func(srna, "rna_Node_path");
|
||||
|
||||
@ -1881,6 +2029,16 @@ static void rna_def_node(BlenderRNA *brna)
|
||||
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_ui_text(prop, "Name", "Node name.");
|
||||
RNA_def_struct_name_property(srna, prop);
|
||||
|
||||
prop = RNA_def_property(srna, "inputs", PROP_COLLECTION, PROP_NONE);
|
||||
RNA_def_property_collection_sdna(prop, NULL, "inputs", NULL);
|
||||
RNA_def_property_struct_type(prop, "NodeSocket");
|
||||
RNA_def_property_ui_text(prop, "Inputs", "");
|
||||
|
||||
prop = RNA_def_property(srna, "outputs", PROP_COLLECTION, PROP_NONE);
|
||||
RNA_def_property_collection_sdna(prop, NULL, "outputs", NULL);
|
||||
RNA_def_property_struct_type(prop, "NodeSocket");
|
||||
RNA_def_property_ui_text(prop, "Outputs", "");
|
||||
}
|
||||
|
||||
static void rna_def_nodetree(BlenderRNA *brna)
|
||||
@ -1891,7 +2049,7 @@ static void rna_def_nodetree(BlenderRNA *brna)
|
||||
srna = RNA_def_struct(brna, "NodeTree", "ID");
|
||||
RNA_def_struct_ui_text(srna, "Node Tree", "Node tree consisting of linked nodes used for materials, textures and compositing.");
|
||||
RNA_def_struct_sdna(srna, "bNodeTree");
|
||||
RNA_def_struct_ui_icon(srna, ICON_NODE);
|
||||
RNA_def_struct_ui_icon(srna, ICON_NODETREE);
|
||||
|
||||
rna_def_animdata_common(srna);
|
||||
|
||||
@ -1913,6 +2071,10 @@ void RNA_def_nodetree(BlenderRNA *brna)
|
||||
{
|
||||
init();
|
||||
rna_def_nodetree(brna);
|
||||
rna_def_node_socket(brna);
|
||||
rna_def_node_socket_value(brna);
|
||||
rna_def_node_socket_vector(brna);
|
||||
rna_def_node_socket_rgba(brna);
|
||||
rna_def_node(brna);
|
||||
rna_def_shader_node(brna);
|
||||
rna_def_compositor_node(brna);
|
||||
|
@ -1434,7 +1434,7 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
|
||||
{8, "PROPERTIES", ICON_BUTS, "Properties", ""},
|
||||
{9, "TEXT_EDITOR", ICON_TEXT, "Text Editor", ""},
|
||||
{10, "TIMELINE", ICON_TIME, "Timeline", ""},
|
||||
{11, "NODE_EDITOR", ICON_NODE, "Node Editor", ""},
|
||||
{11, "NODE_EDITOR", ICON_NODETREE, "Node Editor", ""},
|
||||
{12, "LOGIC_EDITOR", ICON_LOGIC, "Logic Editor", ""},
|
||||
{13, "OUTLINER", ICON_OOPS, "Outliner", ""},
|
||||
{14, "INFO", ICON_INFO, "Info", ""},
|
||||
|
Loading…
Reference in New Issue
Block a user