[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