[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34744] branches/particles-2010/source/ blender: More cleanup: removed all except the basic 3 socket types (value, vector, rgba) used by compo/mat/tex trees.

Lukas Toenne lukas.toenne at googlemail.com
Wed Feb 9 16:38:52 CET 2011


Revision: 34744
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34744
Author:   lukastoenne
Date:     2011-02-09 15:38:50 +0000 (Wed, 09 Feb 2011)
Log Message:
-----------
More cleanup: removed all except the basic 3 socket types (value, vector, rgba) used by compo/mat/tex trees. New node tree types will use a separate type system.
Added basic files and bNodeTreeType struct for particle node trees.
Fixed increased user count in new_node_tree operator.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/editors/space_node/drawnode.c
    branches/particles-2010/source/blender/editors/space_node/node_buttons.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/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/nodes/CMakeLists.txt
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_alphaOver.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_bilateralblur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_blur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_brightness.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_channelMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_composite.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_crop.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_curves.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_dilate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_directionalblur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_distanceMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_filter.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_flip.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_gamma.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_glare.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_idMask.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_image.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_invert.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_lensdist.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_levels.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_lummaMatte.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mapUV.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mapValue.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_math.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_mixrgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_normal.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_premulkey.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_rgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_rotate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_scale.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombRGBA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombYCCA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_sepcombYUVA.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_setalpha.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_splitViewer.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_texture.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_translate.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_value.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_vecBlur.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_viewer.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_zcombine.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodetree.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/SHD_nodes/SHD_camera.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_curves.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_geom.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_mapping.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_material.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_math.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_normal.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_output.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_rgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_sepcombRGB.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_squeeze.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_value.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_at.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_checker.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_compose.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_coord.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_decompose.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_distance.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_hueSatVal.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_image.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_invert.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_math.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_output.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_proc.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_scale.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_translate.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodes/TEX_viewer.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/node_util.c
    branches/particles-2010/source/blender/nodes/intern/node_util.h

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-02-09 15:38:49 UTC (rev 34743)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-02-09 15:38:50 UTC (rev 34744)
@@ -66,17 +66,12 @@
 struct uiLayout;
 struct Object;
 struct DerivedMesh;
+struct ParticleSystem;
 
-struct SimContext;
-struct SimDataContext;
-struct SimExecData;
-struct SimNodeStack;
-struct SimSocketStack;
-
 /* ************** NODE TYPE DEFINITIONS ***** */
 
 /* Compact definition of a static node socket */
-typedef struct bNodeSocketDefinition {
+typedef struct bNodeSocketTemplate {
 	int type, limit;
 	char name[32];
 	float val1, val2, val3, val4;	/* default alloc value for inputs */
@@ -84,7 +79,7 @@
 	
 	/* after this line is used internal only */
 	struct bNodeSocket *sock;		/* used to hold verified socket */
-} bNodeSocketDefinition;
+} bNodeSocketTemplate;
 
 /* Symbols for sockets */
 typedef enum NodeSocketSymbol {
@@ -94,19 +89,6 @@
 
 /* Type definition for sockets */
 typedef struct bNodeSocketType {
-	int type;
-	const char *identifier;
-	const char *ui_name;
-	const char *ui_description;
-	NodeSocketSymbol symbol;
-	int color[4];
-	
-	int data_size;
-	
-	void (*data_set_default)(void *data);
-	
-	void (*uifunc_input)(struct uiLayout *, struct bContext *C, struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
-	void (*uifunc_output)(struct uiLayout *, struct bContext *C, struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
 } bNodeSocketType;
 
 typedef struct bNodeType {
@@ -116,7 +98,7 @@
 	float width, minwidth, maxwidth;
 	short nclass, flag;
 	
-	bNodeSocketDefinition *inputs, *outputs;
+	bNodeSocketTemplate *inputs, *outputs;
 	
 	char storagename[64];			/* struct name for DNA */
 	
@@ -144,16 +126,6 @@
 
 	/* called when the node is updated (e.g. linked) in the editor. */
 	void (*updatefunc)(struct bNodeTree *ntree, struct bNode *node);
-	/* called when adaptable socket has been changed and types should be resolved */
-	void (*adaptSocketTypes)(struct bNodeTree *ntree, struct bNode *node);
-	/* list of types the node can adapt (if no custom function is used) */
-	int *adapt_types;
-
-	/* simulation nodes */
-	char *(*generate_source)(struct SimNodeStack *node);
-	void (*initexec)(struct SimNodeStack *node);
-	void (*freeexec)(struct SimNodeStack *node);
-	int (*enqueue)(struct SimExecData *execdata, struct SimNodeStack *node, struct SimDataContext *self, int exec);
 } bNodeType;
 
 /* node->exec, now in use for composites (#define for break is same as ready yes) */
@@ -200,8 +172,6 @@
 	char id_name[24];				/* id name for RNA identification */
 	
 	ListBase node_types;			/* type definitions */
-	bNodeSocketType *sock_types;	/* socket types */
-	int num_sock_types;
 	
 	/* callbacks */
 	void (*freeCache)(struct bNodeTree *ntree);
@@ -222,7 +192,6 @@
 /* ************** GENERIC API, TREES *************** */
 
 bNodeTreeType	*ntreeGetType(int type);
-bNodeSocketType*	ntreeGetSocketType(int treetype, int socktype);
 
 struct bNodeTree *ntreeAddTree(const char *name, int type, const short is_group);
 void			ntreeInitTypes(struct bNodeTree *ntree);
@@ -332,7 +301,7 @@
 
 /* Init a new node type struct with default values and callbacks */
 void			node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass, short flag,
-							   struct bNodeSocketDefinition *inputs, struct bNodeSocketDefinition *outputs);
+							   struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs);
 void			node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth);
 void			node_type_init(struct bNodeType *ntype, void (*initfunc)(struct bNode *));
 void			node_type_storage(struct bNodeType *ntype,
@@ -586,13 +555,16 @@
 struct DerivedMesh *ntreeModifierExecTree(struct bNodeTree *ntree, struct Scene *scene, struct Object *ob, float (*inputVertexCos)[3]);
 
 
-/**/
+/* ************** PARTICLE NODES *************** */
 
+void ntreeParticleExecTree(struct bNodeTree *ntree, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
+
+
+/*************************************************/
+
 void init_nodesystem(void);
 void free_nodesystem(void);
 
-/**/
-
 void clear_scene_in_nodes(struct Main *bmain, struct Scene *sce);
 
 #endif

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-02-09 15:38:49 UTC (rev 34743)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-02-09 15:38:50 UTC (rev 34744)
@@ -70,6 +70,7 @@
 #include "SHD_node.h"
 #include "TEX_node.h"
 #include "MOD_node.h"
+#include "PAR_node.h"
 
 
 bNodeTreeType *ntreeGetType(int type)
@@ -81,6 +82,7 @@
 		types[NTREE_COMPOSIT] = &ntreeType_Composite;
 		types[NTREE_TEXTURE] = &ntreeType_Texture;
 		types[NTREE_MODIFIER] = &ntreeType_Modifier;
+		types[NTREE_PARTICLE] = &ntreeType_Particle;
 		types_init = 0;
 	}
 	
@@ -92,11 +94,6 @@
 	}
 }
 
-bNodeSocketType *ntreeGetSocketType(int treetype, int socktype)
-{
-	return &ntreeGetType(treetype)->sock_types[socktype];
-}
-
 static bNodeType *node_get_type(bNodeTree *ntree, int type, ID *id)
  {
 	bNodeType *ntype = ntreeGetType(ntree->type)->node_types.first;
@@ -144,26 +141,16 @@
 	ntree->init |= NTREE_TYPE_INIT;
 }
 
-static bNodeSocket *make_socket(bNodeTree *ntree, int in_out, const char *name, int type)
+static bNodeSocket *make_socket(bNodeTree *UNUSED(ntree), int in_out, const char *name, int type)
 {
 	bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
-	bNodeSocketType *sti= ntreeGetSocketType(ntree->type, type);
 	
 	BLI_strncpy(sock->name, name, NODE_MAXSTR);
 	sock->limit = (in_out==SOCK_IN ? 1 : 0xFFF);
 	sock->type= type;
 	sock->intern = 1;
-	if (type == SOCK_ANY)
-		sock->flag |= SOCK_ADAPT_TYPE;
-	sock->flag |= SOCK_ADAPT_CONTEXT;
 	sock->storage = NULL;
 	
-	if (sti->data_size > 0) {
-		sock->inputdata = MEM_callocN((size_t)sti->data_size, "Node socket input data");
-		if (sti->data_set_default)
-			sti->data_set_default(sock->inputdata);
-	}
-	
 	return sock;
 }
 
@@ -1109,7 +1096,7 @@
 /* ************** Add stuff ********** */
 void nodeAddSocketsFromType(bNodeTree *ntree, bNode *node, bNodeType *ntype)
 {
-	bNodeSocketDefinition *sockdef;
+	bNodeSocketTemplate *sockdef;
 	bNodeSocket *sock;
 	float default_value[4];
 
@@ -1211,7 +1198,6 @@
 	node->flag= NODE_SELECT|ntype->flag;
 	node->width= ntype->width;
 	node->miniwidth= 42.0f;		/* small value only, allows print of first chars */
-	node->restype = SOCK_ANY;
 
 	if(type==NODE_GROUP)
 		node->id= (ID *)ngroup;
@@ -2293,7 +2279,7 @@
 /* ************* node definition init ********** */
 
 void node_type_base(bNodeType *ntype, int type, const char *name, short nclass, short flag,
-					struct bNodeSocketDefinition *inputs, struct bNodeSocketDefinition *outputs)
+					struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs)
 {
 	memset(ntype, 0, sizeof(bNodeType));
 	

Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c	2011-02-09 15:38:49 UTC (rev 34743)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c	2011-02-09 15:38:50 UTC (rev 34744)
@@ -281,53 +281,6 @@
 	uiItemR(layout, ptr, "operation", 0, "", ICON_NULL);
 }
 
-/* socket button functions */
-
-/* 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)
-{
-	bNodeSocket *sock= socket_v;
-	uiBlock *block;
-	
-	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);
-	
-	layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, sock->locx, sock->locy-8, 140, 20, U.uistyles.first), 0);
-	
-	uiItemR(layout, &ptr, "default_value", UI_ITEM_R_EXPAND, "", ICON_NULL);
-	
-	return block;
-}
-
-static void socket_default_input(uiLayout *layout, bContext *UNUSED(C), bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock)
-{
-	uiLayout *row, *col;
-	PointerRNA ptr;
-	RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr);
-	
-	row = uiLayoutRow(layout, 1);
-	uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_LEFT);
-	uiItemL(row, sock->name, 0);
-	col = uiLayoutColumn(row, 0);
-	uiItemR(col, &ptr, "default_value", 0, "", 0);
-}
-
-static void socket_menu_input(uiLayout *layout, bContext *UNUSED(C), bNodeTree *UNUSED(ntree), bNode *UNUSED(node), bNodeSocket *sock)
-{
-	uiBlock *block= uiLayoutGetBlock(layout);
-	
-	uiDefBlockBut(block, socket_vector_menu, sock, sock->name, 
-				  (short)sock->locx+NODE_DYS, (short)sock->locy-9, 140, 17, 
-				  "");
-}
-
 /* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */
 
 static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
@@ -515,11 +468,6 @@
 	}
 }
 
-static void node_shader_init_socktype(bNodeSocketType *UNUSED(socktype))
-{
-	
-}
-
 /* ****************** BUTTON CALLBACKS FOR COMPOSITE NODES ***************** */
 
 static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -1227,11 +1175,6 @@
 	}
 }
 
-static void node_composit_init_socktype(bNodeSocketType *UNUSED(socktype))
-{
-	
-}
-
 /* ****************** BUTTON CALLBACKS FOR TEXTURE NODES ***************** */
 
 static void node_texture_buts_bricks(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
@@ -1360,36 +1303,8 @@
 	}
 }
 
-static void node_texture_init_socktype(bNodeSocketType *UNUSED(socktype))
-{
-	
-}
-
 /* ****************** BUTTON CALLBACKS FOR MODIFIER NODES ***************** */
 
-static void node_modifier_init_socktype(bNodeSocketType *socktype)
-{
-	/* clear */
-	socktype->uifunc_input = NULL;
-	socktype->uifunc_output = NULL;
-	
-	switch (socktype->type) {
-	case SOCK_FLOAT:
-	case SOCK_INT:
-	case SOCK_BOOL:
-	case SOCK_RGBA:
-	case SOCK_STRING:
-		socktype->uifunc_input = socket_default_input;
-		break;
-	
-	case SOCK_VECTOR:
-	case SOCK_QUAT:
-	case SOCK_MATRIX:

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list