Page Menu
Home
Search
Configure Global Search
Log In
Files
F4421
outliner_bytype.patch
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Leandro Inocencio (cesio)
Nov 13 2013, 1:16 PM
Size
16 KB
Subscribers
None
outliner_bytype.patch
View Options
Index: source/blender/makesdna/DNA_oops_types.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_oops_types.h,v
retrieving revision 1.11
diff -u -r1.11 DNA_oops_types.h
--- source/blender/makesdna/DNA_oops_types.h 7 Nov 2006 14:25:58 -0000 1.11
+++ source/blender/makesdna/DNA_oops_types.h 24 Mar 2007 17:41:22 -0000
@@ -72,12 +72,13 @@
} OopsLink;
/* oops->flag (1==SELECT) */
-#define OOPS_DOSELECT 2
-#define OOPS_REFER 4
+#define OOPS_DOSELECT 2
+#define OOPS_REFER 4
+
/* TreeStoreElem->flag */
#define TSE_CLOSED 1
-#define TSE_SELECTED 2
+#define TSE_SELECTED 2
#define TSE_TEXTBUT 4
/* TreeStoreElem types in BIF_outliner.h */
Index: source/blender/makesdna/DNA_space_types.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_space_types.h,v
retrieving revision 1.56
diff -u -r1.56 DNA_space_types.h
--- source/blender/makesdna/DNA_space_types.h 17 Jan 2007 03:24:21 -0000 1.56
+++ source/blender/makesdna/DNA_space_types.h 24 Mar 2007 17:41:23 -0000
@@ -529,16 +529,30 @@
#define OOPS_AR 8192
/* SpaceOops->outlinevis */
-#define SO_ALL_SCENES 0
-#define SO_CUR_SCENE 1
+#define SO_ALL_SCENES 0
+#define SO_CUR_SCENE 1
#define SO_VISIBLE 2
#define SO_SELECTED 3
#define SO_ACTIVE 4
-#define SO_SAME_TYPE 5
+#define SO_SAME_TYPE 5
#define SO_GROUPS 6
-#define SO_LIBRARIES 7
+#define SO_LIBRARIES 7
#define SO_VERSE_SESSION 8
#define SO_VERSE_MS 9
+
+/* SpaceOops->outlinevis By Type*/
+#define SO_EMPTY 10
+#define SO_MESH 11
+#define SO_CURVE 12
+#define SO_SURF 13
+#define SO_FONT 14
+#define SO_MBALL 15
+#define SO_LAMP 16
+#define SO_CAMERA 17
+#define SO_WAVE 18
+#define SO_LATTICE 19
+#define SO_ARMATURE 20
+
/* SpaceOops->storeflag */
#define SO_TREESTORE_CLEANUP 1
Index: source/blender/src/outliner.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/outliner.c,v
retrieving revision 1.99
diff -u -r1.99 outliner.c
--- source/blender/src/outliner.c 21 Mar 2007 20:40:18 -0000 1.99
+++ source/blender/src/outliner.c 24 Mar 2007 17:41:46 -0000
@@ -923,6 +923,7 @@
Object *ob;
TreeElement *te, *ten;
TreeStoreElem *tselem;
+
int show_opened= soops->treestore==NULL; /* on first view, we open scenes */
#ifdef WITH_VERSE
struct VerseSession *session;
@@ -937,147 +938,274 @@
/* clear ob id.new flags */
for(ob= G.main->object.first; ob; ob= ob->id.next) ob->id.newid= NULL;
+
/* options */
- if(soops->outlinevis == SO_LIBRARIES) {
- Library *lib;
+
+ switch(soops->outlinevis) {
+ case SO_LIBRARIES:
+ {
+ Library *lib;
+ for(lib= G.main->library.first; lib; lib= lib->id.next) {
+ ten= outliner_add_element(soops, &soops->tree, lib, NULL, 0, 0);
+ lib->id.newid= (ID *)ten;
+ }
+ /* make hierarchy */
+ ten= soops->tree.first;
+ while(ten) {
+ TreeElement *nten= ten->next, *par;
+ tselem= TREESTORE(ten);
+ lib= (Library *)tselem->id;
+ if(lib->parent) {
+ BLI_remlink(&soops->tree, ten);
+ par= (TreeElement *)lib->parent->id.newid;
+ BLI_addtail(&par->subtree, ten);
+ ten->parent= par;
+ }
+ ten= nten;
+ }
+ /* restore newid pointers */
+ for(lib= G.main->library.first; lib; lib= lib->id.next)
+ lib->id.newid= NULL;
+ }
+ break;
+
+ case SO_ALL_SCENES:
+ {
+ Scene *sce;
+ for(sce= G.main->scene.first; sce; sce= sce->id.next) {
+ te= outliner_add_element(soops, &soops->tree, sce, NULL, 0, 0);
+ tselem= TREESTORE(te);
+ if(sce==G.scene && show_opened)
+ tselem->flag &= ~TSE_CLOSED;
+
+ for(base= sce->base.first; base; base= base->next) {
+ ten= outliner_add_element(soops, &te->subtree, base->object, te, 0, 0);
+ ten->directdata= base;
+ }
+ outliner_make_hierarchy(soops, &te->subtree);
+ /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */
+ for(base= sce->base.first; base; base= base->next) base->object->id.newid= NULL;
+ }
+ }
+ break;
+
+ case SO_CUR_SCENE:
+ outliner_add_scene_contents(soops, &soops->tree, G.scene, NULL);
- for(lib= G.main->library.first; lib; lib= lib->id.next) {
- ten= outliner_add_element(soops, &soops->tree, lib, NULL, 0, 0);
- lib->id.newid= (ID *)ten;
- }
- /* make hierarchy */
- ten= soops->tree.first;
- while(ten) {
- TreeElement *nten= ten->next, *par;
- tselem= TREESTORE(ten);
- lib= (Library *)tselem->id;
- if(lib->parent) {
- BLI_remlink(&soops->tree, ten);
- par= (TreeElement *)lib->parent->id.newid;
- BLI_addtail(&par->subtree, ten);
- ten->parent= par;
- }
- ten= nten;
- }
- /* restore newid pointers */
- for(lib= G.main->library.first; lib; lib= lib->id.next)
- lib->id.newid= NULL;
-
- }
- else if(soops->outlinevis == SO_ALL_SCENES) {
- Scene *sce;
- for(sce= G.main->scene.first; sce; sce= sce->id.next) {
- te= outliner_add_element(soops, &soops->tree, sce, NULL, 0, 0);
- tselem= TREESTORE(te);
- if(sce==G.scene && show_opened)
- tselem->flag &= ~TSE_CLOSED;
-
- for(base= sce->base.first; base; base= base->next) {
- ten= outliner_add_element(soops, &te->subtree, base->object, te, 0, 0);
+ for(base= G.scene->base.first; base; base= base->next) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
ten->directdata= base;
}
- outliner_make_hierarchy(soops, &te->subtree);
- /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */
- for(base= sce->base.first; base; base= base->next) base->object->id.newid= NULL;
- }
- }
- else if(soops->outlinevis == SO_CUR_SCENE) {
-
- outliner_add_scene_contents(soops, &soops->tree, G.scene, NULL);
-
- for(base= G.scene->base.first; base; base= base->next) {
- ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
- ten->directdata= base;
- }
- outliner_make_hierarchy(soops, &soops->tree);
- }
- else if(soops->outlinevis == SO_VISIBLE) {
- for(base= G.scene->base.first; base; base= base->next) {
- if(base->lay & G.scene->lay)
- outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
- }
- outliner_make_hierarchy(soops, &soops->tree);
- }
- else if(soops->outlinevis == SO_GROUPS) {
- Group *group;
- GroupObject *go;
-
- for(group= G.main->group.first; group; group= group->id.next) {
- if(group->id.us) {
- te= outliner_add_element(soops, &soops->tree, group, NULL, 0, 0);
- tselem= TREESTORE(te);
-
- for(go= group->gobject.first; go; go= go->next) {
- ten= outliner_add_element(soops, &te->subtree, go->ob, te, 0, 0);
- ten->directdata= NULL; /* eh, why? */
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ case SO_VISIBLE:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->lay & G.scene->lay)
+ outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ case SO_GROUPS:
+ {
+ Group *group;
+ GroupObject *go;
+ for(group= G.main->group.first; group; group= group->id.next) {
+ if(group->id.us) {
+ te= outliner_add_element(soops, &soops->tree, group, NULL, 0, 0);
+ tselem= TREESTORE(te);
+
+ for(go= group->gobject.first; go; go= go->next) {
+ ten= outliner_add_element(soops, &te->subtree, go->ob, te, 0, 0);
+ ten->directdata= NULL; /* eh, why? */
+ }
+ outliner_make_hierarchy(soops, &te->subtree);
+ /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */
+ for(go= group->gobject.first; go; go= go->next) go->ob->id.newid= NULL;
+ }
+ }
+ }
+ break;
+
+ case SO_SAME_TYPE:
+ {
+ Object *ob= OBACT;
+
+ if(ob) {
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==ob->type) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
}
- outliner_make_hierarchy(soops, &te->subtree);
- /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */
- for(go= group->gobject.first; go; go= go->next) go->ob->id.newid= NULL;
}
- }
- }
- else if(soops->outlinevis == SO_SAME_TYPE) {
- Object *ob= OBACT;
- if(ob) {
+ break;
+
+ case SO_SELECTED:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->lay & G.scene->lay) {
+ if(base==BASACT || (base->flag & SELECT)) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+#ifdef WITH_VERSE
+ case SO_VERSE_SESSION:
+ /* add all session to the "root" of hierarchy */
+ for(session=session_list.first; session; session = session->next) {
+ struct VNode *vnode;
+ if(session->flag & VERSE_CONNECTED) {
+ te= outliner_add_element(soops, &soops->tree, session, NULL, ID_VS, 0);
+ /* add all object nodes as childreen of session */
+ for(vnode=session->nodes.lb.first; vnode; vnode=vnode->next) {
+ if(vnode->type==V_NT_OBJECT) {
+ ten= outliner_add_element(soops, &te->subtree, vnode, te, ID_VN, 0);
+ ten->directdata= vnode;
+ }
+ else if(vnode->type==V_NT_BITMAP) {
+ ten= outliner_add_element(soops, &te->subtree, vnode, te, ID_VN, 0);
+ ten->directdata= vnode;
+ }
+ }
+ }
+ }
+ break;
+
+ case SO_VERSE_MS:
+ te= outliner_add_element(soops, &soops->tree, "MS", NULL, ID_MS, 0);
+ if(server_list.first!=NULL) {
+ struct VerseServer *server;
+ /* add one main entry to root of hierarchy */
+ for(server=server_list.first; server; server=server->next) {
+ ten= outliner_add_element(soops, &te->subtree, server, te, ID_SS, 0);
+ ten->directdata= server;
+ }
+ }
+ break;
+#endif
+
+/*Show By Type */
+
+ case SO_EMPTY:
for(base= G.scene->base.first; base; base= base->next) {
- if(base->object->type==ob->type) {
+ if(base->object->type==OB_EMPTY) {
ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
ten->directdata= base;
}
}
+
outliner_make_hierarchy(soops, &soops->tree);
- }
- }
- else if(soops->outlinevis == SO_SELECTED) {
- for(base= G.scene->base.first; base; base= base->next) {
- if(base->lay & G.scene->lay) {
- if(base==BASACT || (base->flag & SELECT)) {
+ break;
+
+ case SO_MESH:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_MESH) {
ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
ten->directdata= base;
}
}
- }
- outliner_make_hierarchy(soops, &soops->tree);
- }
-#ifdef WITH_VERSE
- else if(soops->outlinevis == SO_VERSE_SESSION) {
- /* add all session to the "root" of hierarchy */
- for(session=session_list.first; session; session = session->next) {
- struct VNode *vnode;
- if(session->flag & VERSE_CONNECTED) {
- te= outliner_add_element(soops, &soops->tree, session, NULL, ID_VS, 0);
- /* add all object nodes as childreen of session */
- for(vnode=session->nodes.lb.first; vnode; vnode=vnode->next) {
- if(vnode->type==V_NT_OBJECT) {
- ten= outliner_add_element(soops, &te->subtree, vnode, te, ID_VN, 0);
- ten->directdata= vnode;
- }
- else if(vnode->type==V_NT_BITMAP) {
- ten= outliner_add_element(soops, &te->subtree, vnode, te, ID_VN, 0);
- ten->directdata= vnode;
- }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ case SO_CURVE:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_CURVE) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
}
}
- }
- }
- else if(soops->outlinevis == SO_VERSE_MS) {
- te= outliner_add_element(soops, &soops->tree, "MS", NULL, ID_MS, 0);
- if(server_list.first!=NULL) {
- struct VerseServer *server;
- /* add one main entry to root of hierarchy */
- for(server=server_list.first; server; server=server->next) {
- ten= outliner_add_element(soops, &te->subtree, server, te, ID_SS, 0);
- ten->directdata= server;
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ case SO_SURF:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_SURF) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
}
- }
- }
-#endif
- else {
- ten= outliner_add_element(soops, &soops->tree, OBACT, NULL, 0, 0);
- if(ten) ten->directdata= BASACT;
- }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ case SO_FONT:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_FONT) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ case SO_MBALL:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_MBALL) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+ case SO_LAMP:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_LAMP) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+ case SO_CAMERA:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_CAMERA) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+ case SO_WAVE:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_WAVE) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+ case SO_LATTICE:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_LATTICE) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ case SO_ARMATURE:
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(base->object->type==OB_ARMATURE) {
+ ten= outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
+ ten->directdata= base;
+ }
+ }
+ outliner_make_hierarchy(soops, &soops->tree);
+ break;
+
+ default:
+ ten= outliner_add_element(soops, &soops->tree, OBACT, NULL, 0, 0);
+ if(ten) ten->directdata= BASACT;
+ break;
+ }
outliner_sort(soops, &soops->tree);
}
@@ -2258,6 +2386,22 @@
BIF_undo_push("Outliner show hierarchy");
}
+void outliner_show_bytype(struct ScrArea *sa)
+{
+ short val;
+ SpaceOops *soops = sa->spacedata.first;
+
+ val= pupmenu("Show By Type%t|Empty %x10|Mesh %x11|Curve %x12|Surface %x13|Font %x14|Metaball %x15|Lamp %x16|Camera %x17|Wave %x18|Lattice %x19|Armature %x20");
+ soops->outlinevis = val;
+
+ scrarea_queue_redraw(sa);
+
+ BIF_undo_push("Outliner show By Type");
+}
+
+
+
+
static void do_outliner_select(SpaceOops *soops, ListBase *lb, float y1, float y2, short *selecting)
{
TreeElement *te;
@@ -3250,7 +3394,7 @@
soops->v2d.mask.xmax-(OL_TOG_RESTRICT_VIEWX+SCROLLB),
soops->v2d.cur.ymin);
- /* render */
+ /* selectr */
fdrawline(soops->v2d.mask.xmax-(OL_TOG_RESTRICT_SELECTX+SCROLLB),
soops->v2d.tot.ymax,
soops->v2d.mask.xmax-(OL_TOG_RESTRICT_SELECTX+SCROLLB),
Index: source/blender/src/space.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/space.c,v
retrieving revision 1.461
diff -u -r1.461 space.c
--- source/blender/src/space.c 24 Mar 2007 11:56:10 -0000 1.461
+++ source/blender/src/space.c 24 Mar 2007 17:42:00 -0000
@@ -4945,6 +4945,9 @@
outliner_find_panel(sa, again, search_flags);
}
break;
+ case TKEY:
+ outliner_show_bytype(sa);
+ break;
case XKEY:
case DELKEY:
outliner_del(sa);
File Metadata
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
4f/9e/53dbd58ef843f81c8ecc2a04d8fe
Event Timeline
Log In to Comment