Revision: 36253
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36253
Author:   lukastoenne
Date:     2011-04-20 20:56:15 +0000 (Wed, 20 Apr 2011)
Log Message:
-----------
Revived the socket type struct for collecting info and functions for socket 
types. Implemented a basic system for doing type conversions by selecting on 
the input side.

Modified Paths:
--------------
    branches/particles-2010/release/scripts/ui/properties_modifier_node.py
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/blenloader/intern/readfile.c
    branches/particles-2010/source/blender/blenloader/intern/writefile.c
    branches/particles-2010/source/blender/editors/space_node/drawnode.c
    branches/particles-2010/source/blender/editors/space_node/node_draw.c
    branches/particles-2010/source/blender/editors/space_node/node_edit.c
    branches/particles-2010/source/blender/editors/space_node/node_intern.h
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/RNA_access.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
    branches/particles-2010/source/blender/nodes/CMakeLists.txt
    branches/particles-2010/source/blender/nodes/MOD_node.h
    branches/particles-2010/source/blender/nodes/intern/CMP_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/MOD_exec.c
    branches/particles-2010/source/blender/nodes/intern/MOD_exec.h
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_common.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_join.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_mesh.c
    
branches/particles-2010/source/blender/nodes/intern/MOD_nodes/MOD_transform.c
    branches/particles-2010/source/blender/nodes/intern/MOD_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/MOD_util.h
    branches/particles-2010/source/blender/nodes/intern/node_common.c
    branches/particles-2010/source/blender/nodes/intern/node_common.h
    branches/particles-2010/source/blender/nodes/intern/node_exec.c
    branches/particles-2010/source/blender/nodes/intern/node_exec.h
    branches/particles-2010/source/blender/nodes/intern/node_socket.c
    branches/particles-2010/source/blender/nodes/intern/node_socket.h

Modified: branches/particles-2010/release/scripts/ui/properties_modifier_node.py
===================================================================
--- branches/particles-2010/release/scripts/ui/properties_modifier_node.py      
2011-04-20 20:46:02 UTC (rev 36252)
+++ branches/particles-2010/release/scripts/ui/properties_modifier_node.py      
2011-04-20 20:56:15 UTC (rev 36253)
@@ -49,13 +49,7 @@
             col.template_ID(node, "external_mesh")
 
     def TRANSFORM(self, layout, node):
-        col = layout.column()
-        row = col.row(align=1)
-        row.prop(node, "translate")
-        row = col.row(align=1)
-        row.prop(node, "rotate")
-        row = col.row(align=1)
-        row.prop(node, "scale")
+        pass
 
     def JOIN(self, layout, node):
         pass

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h        
2011-04-20 20:46:02 UTC (rev 36252)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h        
2011-04-20 20:56:15 UTC (rev 36253)
@@ -41,6 +41,8 @@
 
 #include "BKE_opencl.h"
 
+#include "RNA_types.h"
+
 /* not very important, but the stack solver likes to know a maximum */
 #define MAX_SOCKET     64
 
@@ -73,6 +75,8 @@
 struct Object;
 struct DerivedMesh;
 struct ParticleSystem;
+struct bNodeDataReader;
+struct bNodeDataSource;
 
 /* ************** NODE TYPE DEFINITIONS ***** */
 
@@ -87,10 +91,8 @@
        struct bNodeSocket *sock;               /* used to hold verified socket 
*/
 } bNodeSocketTemplate;
 
-typedef struct bNodeSocketConverter {
-       char ui_name[32];
-} bNodeSocketConverter;
-
+/* visitor function for socket converters */
+typedef void (*SocketConvWalkFunc)(void *userdata, int converter, const char 
*name);
 typedef struct bNodeSocketType {
        int type;
        char ui_name[32];
@@ -98,7 +100,17 @@
        int ui_icon;
        char ui_color[4];
        
-       int (*get_converters)(int type, struct bNodeSocketConverter **conv, int 
*totconv);
+       int value_size;
+       
+       void (*foreach_converter)(void *userdata, int type, SocketConvWalkFunc 
cb);
+       
+       /* functions for sources of this type */
+       void *(*source_read)(struct bNodeDataSource *source, int key);
+       void (*source_write)(struct bNodeDataSource *source, int key, void 
*data);
+       /* get function pointers for readers of this type */
+       void (*make_reader_buffer)(struct bNodeDataReader *reader, int 
converter);
+       void (*make_reader_delegate)(struct bNodeDataReader *reader, int 
converter);
+       int (*reader_size)(struct bNodeDataReader *reader);
 } bNodeSocketType;
 
 typedef struct bNodeTemplate {
@@ -286,8 +298,8 @@
 
 /* ************** GENERIC API, NODES *************** */
 
-struct bNodeSocket *nodeAddSocket(struct bNodeTree *ntree, struct bNode *node, 
int in_out, const char *name, int type);
-struct bNodeSocket *nodeInsertSocket(struct bNodeTree *ntree, struct bNode 
*node, int in_out, struct bNodeSocket *next_sock, const char *name, int type);
+struct bNodeSocket *nodeAddSocket(struct bNodeTree *ntree, struct bNode *node, 
int in_out, const char *name, int type, PropertySubType subtype);
+struct bNodeSocket *nodeInsertSocket(struct bNodeTree *ntree, struct bNode 
*node, int in_out, struct bNodeSocket *next_sock, const char *name, int type, 
PropertySubType subtype);
 void nodeRemoveSocket(struct bNodeTree *ntree, struct bNode *node, struct 
bNodeSocket *sock);
 void nodeRemoveAllSockets(struct bNodeTree *ntree, struct bNode *node);
 
@@ -316,6 +328,7 @@
 struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, 
struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
 void                   nodeRemLink(struct bNodeTree *ntree, struct bNodeLink 
*link);
 void                   nodeRemSocketLinks(struct bNodeTree *ntree, struct 
bNodeSocket *sock);
+void                   nodeInitLinkConverter(struct bNodeLink *link);
 
 void                   nodeSpaceCoords(struct bNode *node, float *locx, float 
*locy);
 void                   nodeAttachNode(struct bNode *node, struct bNode 
*parent);
@@ -637,12 +650,14 @@
 
 /* input */
 #define MOD_NODE_MESH                          1000
+#define MOD_NODE_VERTEXGROUP           1001
 
 /* transform */
 #define MOD_NODE_TRANSFORM                     1100
 
 /* combine */
-#define MOD_NODE_JOIN                  1200
+#define MOD_NODE_JOIN                          1200
+#define MOD_NODE_MORPH                         1201
 
 /* API */
 struct DerivedMesh *ntreeModifierExecTree(struct bNodeTree *ntree, struct 
Scene *scene, struct Object *ob, float (*inputVertexCos)[3]);

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c     
2011-04-20 20:46:02 UTC (rev 36252)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c     
2011-04-20 20:56:15 UTC (rev 36253)
@@ -164,28 +164,45 @@
        ntree->init |= NTREE_TYPE_INIT;
 }
 
-static bNodeSocket *make_socket(bNodeTree *UNUSED(ntree), int in_out, const 
char *name, int type)
+static bNodeSocket *make_socket(bNodeTree *ntree, int in_out, const char 
*name, int type, int subtype)
 {
-       bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
+       bNodeSocketType *stype= ntreeGetSocketType(type);
+       bNodeSocket *sock;
+       PropertyRNA *prop;
+       PointerRNA ptr;
        
+       sock= MEM_callocN(sizeof(bNodeSocket), "sock");
+       
        BLI_strncpy(sock->name, name, NODE_MAXSTR);
        sock->limit = (in_out==SOCK_IN ? 1 : 0xFFF);
        sock->type= type;
+       sock->subtype = subtype;
        sock->storage = NULL;
        
+       if (stype->value_size > 0) {
+               /* NB: all necessary properties for RNA refine have been set! */
+               RNA_pointer_create((ID*)ntree, &RNA_NodeSocket, sock, &ptr);
+               prop = RNA_struct_find_property(&ptr, "default_value");
+               if (prop) {
+                       int index, len= RNA_property_array_length(&ptr, prop);
+                       
+                       sock->default_value = MEM_callocN(stype->value_size, 
"default value");
+                       
+                       /* reset to default value */
+                       for (index=0; index < len; ++index)
+                               RNA_property_reset(&ptr, prop, index);
+               }
+       }
        zero_v4(sock->ns.vec);
        sock->ns.min = -FLT_MAX;        /* _not_ FLT_MIN, that would be the 
smallest possible float > 0 */
        sock->ns.max = FLT_MAX;
-       sock->ns.ival = 0;
-       sock->ns.imin = INT_MIN;
-       sock->ns.imax = INT_MAX;
        
        return sock;
 }
 
-bNodeSocket *nodeAddSocket(bNodeTree *ntree, bNode *node, int in_out, const 
char *name, int type)
+bNodeSocket *nodeAddSocket(bNodeTree *ntree, bNode *node, int in_out, const 
char *name, int type, PropertySubType subtype)
 {
-       bNodeSocket *sock = make_socket(ntree, in_out, name, type);
+       bNodeSocket *sock = make_socket(ntree, in_out, name, type, subtype);
        if (in_out==SOCK_IN)
                BLI_addtail(&node->inputs, sock);
        else if (in_out==SOCK_OUT)
@@ -196,9 +213,9 @@
        return sock;
 }
 
-bNodeSocket *nodeInsertSocket(bNodeTree *ntree, bNode *node, int in_out, 
bNodeSocket *next_sock, const char *name, int type)
+bNodeSocket *nodeInsertSocket(bNodeTree *ntree, bNode *node, int in_out, 
bNodeSocket *next_sock, const char *name, int type, PropertySubType subtype)
 {
-       bNodeSocket *sock = make_socket(ntree, in_out, name, type);
+       bNodeSocket *sock = make_socket(ntree, in_out, name, type, subtype);
        if (in_out==SOCK_IN)
                BLI_insertlinkbefore(&node->inputs, next_sock, sock);
        else if (in_out==SOCK_OUT)
@@ -223,6 +240,9 @@
        /* this is fast, this way we don't need an in_out argument */
        BLI_remlink(&node->inputs, sock);
        BLI_remlink(&node->outputs, sock);
+       
+       if (sock->default_value)
+               MEM_freeN(sock->default_value);
        MEM_freeN(sock);
        
        ntree->update |= NTREE_UPDATE_NODES;
@@ -230,6 +250,7 @@
 
 void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node)
 {
+       bNodeSocket *sock;
        bNodeLink *link, *next;
        
        for(link= ntree->links.first; link; link= next) {
@@ -239,7 +260,14 @@
                }
        }
        
+       for (sock=node->inputs.first; sock; sock=sock->next)
+               if (sock->default_value)
+                       MEM_freeN(sock->default_value);
        BLI_freelistN(&node->inputs);
+       for (sock=node->outputs.first; sock; sock=sock->next)
+               if (sock->default_value)
+                       MEM_freeN(sock->default_value);
+       
        BLI_freelistN(&node->outputs);
        
        ntree->update |= NTREE_UPDATE_NODES;
@@ -458,7 +486,7 @@
        if(ntype->inputs) {
                sockdef= ntype->inputs;
                while(sockdef->type != -1) {
-                       sock = nodeAddSocket(ntree, node, SOCK_IN, 
sockdef->name, sockdef->type);
+                       sock = nodeAddSocket(ntree, node, SOCK_IN, 
sockdef->name, sockdef->type, PROP_NONE);
                        /* tag socket as static */
                        sock->flag |= SOCK_STATIC;
                        
@@ -469,9 +497,6 @@
                        sock->ns.vec[3] = sockdef->val4;
                        sock->ns.min = sockdef->min;
                        sock->ns.max = sockdef->max;
-                       sock->ns.ival = (int)sockdef->val1;
-                       sock->ns.imin = (int)sockdef->min;
-                       sock->ns.imax = (int)sockdef->max;
                        
                        sockdef++;
                }
@@ -479,7 +504,7 @@
        if(ntype->outputs) {
                sockdef= ntype->outputs;
                while(sockdef->type != -1) {
-                       sock = nodeAddSocket(ntree, node, SOCK_OUT, 
sockdef->name, sockdef->type);
+                       sock = nodeAddSocket(ntree, node, SOCK_OUT, 
sockdef->name, sockdef->type, PROP_NONE);
                        /* tag socket as static */
                        sock->flag |= SOCK_STATIC;
                        
@@ -490,9 +515,6 @@
                        sock->ns.vec[3] = sockdef->val4;
                        sock->ns.min = sockdef->min;
                        sock->ns.max = sockdef->max;
-                       sock->ns.ival = (int)sockdef->val1;
-                       sock->ns.imin = (int)sockdef->min;
-                       sock->ns.imax = (int)sockdef->max;
                        
                        sockdef++;
                }
@@ -622,7 +644,6 @@
        return nnode;
 }
 
-/* fromsock and tosock can be NULL */
 /* also used via rna api, so we check for proper input output direction */
 bNodeLink *nodeAddLink(bNodeTree *ntree, bNode *fromnode, bNodeSocket 
*fromsock, bNode *tonode, bNodeSocket *tosock)
 {
@@ -645,6 +666,21 @@
                                from= -1; /* OK but flip */
                }
        }
+       else {
+               /* check tree sockets */
+               for(sock= ntree->inputs.first; sock; sock= sock->next)
+                       if(sock==fromsock)
+                               break;
+               if(sock)
+                       from= 1; /* OK */
+               else {
+                       for(sock= ntree->outputs.first; sock; sock= sock->next)
+                               if(sock==fromsock)
+                                       break;
+                       if(sock)
+                               from= -1; /* OK but flip */
+               }
+       }
        if(tonode) {
                for(sock= tonode->inputs.first; sock; sock= sock->next)
                        if(sock==tosock)
@@ -659,8 +695,22 @@
                                to= -1; /* OK but flip */
                }
        }
+       else {
+               /* check tree sockets */
+               for(sock= ntree->outputs.first; sock; sock= sock->next)
+                       if(sock==tosock)
+                               break;
+               if(sock)
+                       to= 1; /* OK */
+               else {
+                       for(sock= ntree->inputs.first; sock; sock= sock->next)
+                               if(sock==tosock)
+                                       break;
+                       if(sock)
+                               to= -1; /* OK but flip */
+               }
+       }
        
-       /* this allows NULL sockets to work */
        if(from >= 0 && to >= 0) {
                link= MEM_callocN(sizeof(bNodeLink), "link");
                BLI_addtail(&ntree->links, link);

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to