[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23004] branches/blender2.5/blender/source /blender: 2.5

Brecht Van Lommel brecht at blender.org
Fri Sep 4 23:02:43 CEST 2009


Revision: 23004
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23004
Author:   blendix
Date:     2009-09-04 23:02:43 +0200 (Fri, 04 Sep 2009)

Log Message:
-----------
2.5

Make local and make single user are back for ID template.

Internally these calls got unified, id_make_local and
id_copy are now used to do these operations for all types
that support it. Also reveals that for some ID types the
implementation is still missing.

Further, some small changes:

* unlink_text is now in blenkernel.
* copy_group was implemented.
* ID template now has an open operator again.
* fix preview to not change material reference count,
  even if temporary it shows up with threaded preview.
* id_unlink unifies unlink for text, object and group.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_armature.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_group.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sca.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_scene.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_text.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/group.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/library.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/sca.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/text.c
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_buttons.c
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/preview/previewrender.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_intern.h
    branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui_api.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_armature.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_armature.h	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_armature.h	2009-09-04 21:02:43 UTC (rev 23004)
@@ -74,7 +74,6 @@
 struct bArmature *get_armature(struct Object *ob);
 void free_boneChildren(struct Bone *bone);
 void free_bones (struct bArmature *arm);
-void unlink_armature(struct bArmature *arm);
 void free_armature(struct bArmature *arm);
 void make_local_armature(struct bArmature *arm);
 struct bArmature *copy_armature(struct bArmature *arm);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_group.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_group.h	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_group.h	2009-09-04 21:02:43 UTC (rev 23004)
@@ -41,6 +41,7 @@
 void		free_group(struct Group *group);
 void		unlink_group(struct Group *group);
 struct Group *add_group(char *name);
+struct Group *copy_group(struct Group *group);
 void		add_to_group(struct Group *group, struct Object *ob);
 int			rem_from_group(struct Group *group, struct Object *ob);
 struct Group *find_group(struct Object *ob, struct Group *group);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h	2009-09-04 21:02:43 UTC (rev 23004)
@@ -46,6 +46,9 @@
 void id_lib_extern(struct ID *id);
 void id_us_plus(struct ID *id);
 void id_us_min(struct ID *id);
+int id_make_local(struct ID *id, int test);
+int id_copy(struct ID *id, struct ID **newid, int test);
+int id_unlink(struct ID *id, int test);
 
 int check_for_dupid(struct ListBase *lb, struct ID *id, char *name);
 int new_id(struct ListBase *lb, struct ID *id, const char *name);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sca.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sca.h	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sca.h	2009-09-04 21:02:43 UTC (rev 23004)
@@ -47,7 +47,6 @@
 void free_actuator(struct bActuator *act);
 void free_actuators(struct ListBase *lb);
 
-void free_text_controllers(struct Text *txt);
 void free_sensor(struct bSensor *sens);
 void free_sensors(struct ListBase *lb);
 struct bSensor *copy_sensor(struct bSensor *sens);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_scene.h	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_scene.h	2009-09-04 21:02:43 UTC (rev 23004)
@@ -84,7 +84,5 @@
 int get_render_shadow_samples(struct RenderData *r, int samples);
 float get_render_aosss_error(struct RenderData *r, float error);
 
-void free_dome_warp_text(struct Text *txt);
-
 #endif
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_text.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_text.h	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_text.h	2009-09-04 21:02:43 UTC (rev 23004)
@@ -35,6 +35,7 @@
 extern "C" {
 #endif
 
+struct Main;
 struct Text;
 struct TextLine;
 struct SpaceText;
@@ -46,6 +47,7 @@
 int	            reopen_text		(struct Text *text);
 struct Text*	add_text		(char *file, const char *relpath); 
 struct Text*	copy_text		(struct Text *ta);
+void			unlink_text		(struct Main *bmain, struct Text *text);
 
 char*	txt_to_buf			(struct Text *text);
 void	txt_clean_text		(struct Text *text);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/group.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/group.c	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/group.c	2009-09-04 21:02:43 UTC (rev 23004)
@@ -142,6 +142,16 @@
 	return group;
 }
 
+Group *copy_group(Group *group)
+{
+	Group *groupn;
+
+	groupn= MEM_dupallocN(group);
+	BLI_duplicatelist(&groupn->gobject, &group->gobject);
+
+	return groupn;
+}
+
 /* external */
 void add_to_group(Group *group, Object *ob)
 {

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/library.c	2009-09-04 20:57:50 UTC (rev 23003)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/library.c	2009-09-04 21:02:43 UTC (rev 23004)
@@ -119,6 +119,13 @@
 
 #define MAX_IDPUP		60	/* was 24 */
 
+/* GS reads the memory pointed at in a specific ordering. 
+   only use this definition, makes little and big endian systems
+   work fine, in conjunction with MAKE_ID */
+
+/* from blendef: */
+#define GS(a)	(*((short *)(a)))
+
 /* ************* general ************************ */
 
 void id_lib_extern(ID *id)
@@ -148,6 +155,217 @@
 		id->us--;
 }
 
+int id_make_local(ID *id, int test)
+{
+	if(id->flag & LIB_INDIRECT)
+		return 0;
+
+	switch(GS(id->name)) {
+		case ID_SCE:
+			return 0; /* not implemented */
+		case ID_LI:
+			return 0; /* can't be linked */
+		case ID_OB:
+			if(!test) make_local_object((Object*)id);
+			return 1;
+		case ID_ME:
+			if(!test) {
+				make_local_mesh((Mesh*)id);
+				make_local_key(((Mesh*)id)->key);
+			}
+			return 1;
+		case ID_CU:
+			if(!test) {
+				make_local_curve((Curve*)id);
+				make_local_key(((Curve*)id)->key);
+			}
+			return 1;
+		case ID_MB:
+			if(!test) make_local_mball((MetaBall*)id);
+			return 1;
+		case ID_MA:
+			if(!test) make_local_material((Material*)id);
+			return 1;
+		case ID_TE:
+			if(!test) make_local_texture((Tex*)id);
+			return 1;
+		case ID_IM:
+			return 0; /* not implemented */
+		case ID_WV:
+			return 0; /* deprecated */
+		case ID_LT:
+			if(!test) make_local_lattice((Lattice*)id);
+			return 1;
+		case ID_LA:
+			if(!test) make_local_lamp((Lamp*)id);
+			return 1;
+		case ID_CA:
+			if(!test) make_local_camera((Camera*)id);
+			return 1;
+		case ID_IP:
+			return 0; /* deprecated */
+		case ID_KE:
+			if(!test) make_local_key((Key*)id);
+			return 1;
+		case ID_WO:
+			if(!test) make_local_world((World*)id);
+			return 1;
+		case ID_SCR:
+			return 0; /* can't be linked */
+		case ID_VF:
+			return 0; /* not implemented */
+		case ID_TXT:
+			return 0; /* not implemented */
+		case ID_SCRIPT:
+			return 0; /* deprecated */
+		case ID_SO:
+			return 0; /* not implemented */
+		case ID_GR:
+			return 0; /* not implemented */
+		case ID_AR:
+			if(!test) make_local_armature((bArmature*)id);
+			return 1;
+		case ID_AC:
+			if(!test) make_local_action((bAction*)id);
+			return 1;
+		case ID_NT:
+			return 0; /* not implemented */
+		case ID_BR:
+			if(!test) make_local_brush((Brush*)id);
+			return 1;
+		case ID_PA:
+			if(!test) make_local_particlesettings((ParticleSettings*)id);
+			return 1;
+		case ID_WM:
+			return 0; /* can't be linked */
+		case ID_GD:
+			return 0; /* not implemented */
+	}
+
+	return 0;
+}
+
+int id_copy(ID *id, ID **newid, int test)
+{
+	if(!test) *newid= NULL;
+
+	/* conventions:
+	 * - make shallow copy, only this ID block
+	 * - id.us of the new ID is set to 1 */
+	switch(GS(id->name)) {
+		case ID_SCE:
+			return 0; /* can't be copied from here */
+		case ID_LI:
+			return 0; /* can't be copied from here */
+		case ID_OB:
+			if(!test) *newid= (ID*)copy_object((Object*)id);
+			return 1;
+		case ID_ME:
+			if(!test) *newid= (ID*)copy_mesh((Mesh*)id);
+			return 1;
+		case ID_CU:
+			if(!test) *newid= (ID*)copy_curve((Curve*)id);
+			return 1;
+		case ID_MB:
+			if(!test) *newid= (ID*)copy_mball((MetaBall*)id);
+			return 1;
+		case ID_MA:
+			if(!test) *newid= (ID*)copy_material((Material*)id);
+			return 1;
+		case ID_TE:
+			if(!test) *newid= (ID*)copy_texture((Tex*)id);
+			return 1;
+		case ID_IM:
+			return 0; /* not implemented */
+		case ID_WV:
+			return 0; /* deprecated */
+		case ID_LT:
+			if(!test) *newid= (ID*)copy_lattice((Lattice*)id);
+			return 1;
+		case ID_LA:
+			if(!test) *newid= (ID*)copy_lamp((Lamp*)id);
+			return 1;
+		case ID_CA:
+			if(!test) *newid= (ID*)copy_camera((Camera*)id);
+			return 1;
+		case ID_IP:
+			return 0; /* deprecated */
+		case ID_KE:
+			if(!test) *newid= (ID*)copy_key((Key*)id);
+			return 1;
+		case ID_WO:
+			if(!test) *newid= (ID*)copy_world((World*)id);
+			return 1;
+		case ID_SCR:
+			return 0; /* can't be copied from here */
+		case ID_VF:
+			return 0; /* not implemented */
+		case ID_TXT:
+			if(!test) *newid= (ID*)copy_text((Text*)id);
+			return 1;
+		case ID_SCRIPT:
+			return 0; /* deprecated */
+		case ID_SO:
+			return 0; /* not implemented */
+		case ID_GR:
+			if(!test) *newid= (ID*)copy_group((Group*)id);
+			return 1;
+		case ID_AR:
+			if(!test) *newid= (ID*)copy_armature((bArmature*)id);
+			return 1;
+		case ID_AC:
+			if(!test) *newid= (ID*)copy_action((bAction*)id);
+			return 1;
+		case ID_NT:
+			if(!test) *newid= (ID*)ntreeCopyTree((bNodeTree*)id, 0);
+			return 1;
+		case ID_BR:
+			if(!test) *newid= (ID*)copy_brush((Brush*)id);
+			return 1;
+		case ID_PA:
+			if(!test) *newid= (ID*)psys_copy_settings((ParticleSettings*)id);
+			return 1;
+		case ID_WM:
+			return 0; /* can't be copied from here */
+		case ID_GD:
+			return 0; /* not implemented */
+	}
+	
+	return 0;
+}
+
+int id_unlink(ID *id, int test)
+{
+	Main *mainlib= G.main;
+	ListBase *lb;
+
+	switch(GS(id->name)) {
+		case ID_TXT:
+			if(test) return 1;
+			unlink_text(mainlib, (Text*)id);
+			break;
+		case ID_GR:
+			if(test) return 1;
+			unlink_group((Group*)id);
+			break;
+		case ID_OB:
+			if(test) return 1;
+			unlink_object(NULL, (Object*)id);
+			break;
+	}
+
+	if(id->us == 0) {
+		if(test) return 1;
+
+		lb= wich_libbase(mainlib, GS(id->name));
+		free_libblock(lb, id);
+
+		return 1;
+	}
+
+	return 0;
+}
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list