Page MenuHome

select_object.txt

select_object.txt

? .git
? user-config.py
? tools/Blender.pyc
? tools/__init__.pyc
? tools/bcolors.pyc
? tools/btools.pyc
Index: source/blender/blenkernel/BKE_group.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/BKE_group.h,v
retrieving revision 1.7
diff -u -r1.7 BKE_group.h
--- source/blender/blenkernel/BKE_group.h 11 Mar 2007 16:25:13 -0000 1.7
+++ source/blender/blenkernel/BKE_group.h 12 Mar 2007 23:26:53 -0000
@@ -46,6 +46,7 @@
void add_to_group(struct Group *group, struct Object *ob);
void rem_from_group(struct Group *group, struct Object *ob);
struct Group *find_group(struct Object *ob);
+int find_group_number ( struct Object *ob, int *names_len );
int object_in_group(struct Object *ob, struct Group *group);
void group_tag_recalc(struct Group *group);
Index: source/blender/blenkernel/intern/group.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/group.c,v
retrieving revision 1.8
diff -u -r1.8 group.c
--- source/blender/blenkernel/intern/group.c 11 Mar 2007 16:25:13 -0000 1.8
+++ source/blender/blenkernel/intern/group.c 12 Mar 2007 23:26:54 -0000
@@ -176,6 +176,28 @@
return NULL;
}
+int find_group_number ( Object *ob, int *names_len )
+{
+ Group *group = G.main->group.first;
+ int ngrp, nlen;
+
+ ngrp = 0;
+ nlen = 0;
+ while (group) {
+ if (object_in_group (ob, group)) {
+ nlen += strlen (group->id.name);
+ ngrp++;
+ }
+
+ group = group->id.next;
+ }
+
+ if (names_len)
+ (*names_len) = (nlen+1); /* the NULL character. */
+
+ return (ngrp);
+}
+
void group_tag_recalc(Group *group)
{
GroupObject *go;
Index: source/blender/src/space.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/space.c,v
retrieving revision 1.454
diff -u -r1.454 space.c
--- source/blender/src/space.c 8 Mar 2007 05:54:39 -0000 1.454
+++ source/blender/src/space.c 12 Mar 2007 23:27:04 -0000
@@ -695,10 +695,87 @@
static void select_same_group(Object *ob) /* Select objects in the same group as the active */
{
Base *base;
- Group *group= find_group(ob);
- if (!group || !ob)
+ Group *group;
+ char *str;
+ int ngr, nstr, menu, i, e, j;
+
+ if (!ob)
return;
-
+
+ nstr = 0;
+ ngr = find_group_number (ob, &nstr);
+ if (ngr == 0)
+ return;
+ else if (ngr == 1) {
+ group = find_group (ob);
+ for (base= FIRSTBASE; base; base= base->next) {
+ if (!(base->flag & SELECT) && object_in_group(base->object, group)) {
+ base->flag |= SELECT;
+ base->object->flag |= SELECT;
+ }
+ }
+ return;
+ }
+
+ if (nstr > 9)
+ nstr += (5 * ngr);
+ else
+ nstr += (4 * ngr);
+
+ nstr += 9;
+ str = MEM_mallocN (nstr, "select_groupmenu");
+ sprintf (str, "Groups%%t|");
+ e = strlen (str);
+
+ /* build the menu. */
+ group = G.main->group.first;
+ i = 0;
+ while (group) {
+ if (object_in_group (ob, group)) {
+ for (j = 0; j < strlen (group->id.name); j++) {
+ str[e] = group->id.name[j];
+ e++;
+ }
+
+ str[e] = '%';
+ e++;
+ str[e] = 'x';
+ e++;
+ if (i > 9) {
+ str[e] = (i/10) + 48;
+ e++;
+ str[e] = (i%10) + 48;
+ } else
+ str[e] = i + 48;
+
+ e++;
+ str[e] = '|';
+ i++;
+ e++;
+ }
+ if (i > ngr)
+ break;
+ group = group->id.next;
+ }
+
+ str[e] = '\0';
+ menu = pupmenu (str);
+ MEM_freeN (str);
+
+ group = G.main->group.first;
+ i = 0;
+ while (group) {
+ if (object_in_group (ob, group)) {
+ if (i == menu)
+ break;
+ i++;
+ }
+ group = group->id.next;
+ }
+
+ if (!group)
+ return;
+
for (base= FIRSTBASE; base; base= base->next) {
if (!(base->flag & SELECT) && object_in_group(base->object, group)) {
base->flag |= SELECT;

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
b1/14/b1ce1653c3ca9ee0bdaf1db9c510

Event Timeline