Revision: 22631
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22631
Author:   blendix
Date:     2009-08-19 14:35:40 +0200 (Wed, 19 Aug 2009)

Log Message:
-----------
2.5: Restored statistics in the info header.

Implementation:
* NC_SCENE or NC_OBJECT cause scene->stats to be cleared.
* NC_INFO is sent to tag info headers for redraw.
* In UI scene.statistics() creates scene->stats if it is
  NULLd, and then returns the string.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/space_info.py
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    branches/blender2.5/blender/source/blender/editors/space_info/space_info.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/editors/include/ED_info.h
    branches/blender2.5/blender/source/blender/editors/space_info/info_stats.c

Modified: branches/blender2.5/blender/release/ui/space_info.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_info.py        2009-08-19 
11:18:52 UTC (rev 22630)
+++ branches/blender2.5/blender/release/ui/space_info.py        2009-08-19 
12:35:40 UTC (rev 22631)
@@ -8,7 +8,8 @@
                layout = self.layout
                
                st = context.space_data
-               rd = context.scene.render_data
+               scene = context.scene
+               rd = scene.render_data
 
                row = layout.row(align=True)
                row.template_header()
@@ -33,6 +34,8 @@
 
                layout.template_operator_search()
                layout.template_running_jobs()
+
+               layout.itemL(text=scene.statistics())
                        
 class INFO_MT_file(bpy.types.Menu):
        __space_type__ = "INFO"

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-08-19 11:18:52 UTC (rev 22630)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-08-19 12:35:40 UTC (rev 22631)
@@ -155,6 +155,7 @@
                scen->theDag= NULL;
                scen->obedit= NULL;
                scen->toolsettings= MEM_dupallocN(sce->toolsettings);
+               scen->stats= NULL;
 
                ts= scen->toolsettings;
                if(ts) {
@@ -299,6 +300,9 @@
                ntreeFreeTree(sce->nodetree);
                MEM_freeN(sce->nodetree);
        }
+
+       if(sce->stats)
+               MEM_freeN(sce->stats);
 }
 
 Scene *add_scene(char *name)

Modified: 
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2009-08-19 11:18:52 UTC (rev 22630)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2009-08-19 12:35:40 UTC (rev 22631)
@@ -4134,6 +4134,7 @@
        sce->theDag = NULL;
        sce->dagisvalid = 0;
        sce->obedit= NULL;
+       sce->stats= 0;
 
        memset(&sce->sound_handles, 0, sizeof(sce->sound_handles));
 

Added: branches/blender2.5/blender/source/blender/editors/include/ED_info.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_info.h        
                        (rev 0)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_info.h        
2009-08-19 12:35:40 UTC (rev 22631)
@@ -0,0 +1,32 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009, Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef ED_INFO_H
+#define ED_INFO_H
+
+/* info_stats.c */
+void ED_info_stats_clear(struct Scene *scene);
+char *ED_info_stats_string(struct Scene *scene);
+
+#endif /*  ED_INFO_H */


Property changes on: 
branches/blender2.5/blender/source/blender/editors/include/ED_info.h
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    2009-08-19 11:18:52 UTC (rev 22630)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    2009-08-19 12:35:40 UTC (rev 22631)
@@ -835,9 +835,11 @@
 //     else transopts= ui_translate_buttons();
        
        /* cut string in 2 parts - only for menu entries */
-       if(ELEM5(but->type, SLI, NUM, TEX, NUMSLI, NUMABS)==0) {
-               cpoin= strchr(but->drawstr, '|');
-               if(cpoin) *cpoin= 0;            
+       if((but->block->flag & UI_BLOCK_LOOP)) {
+               if(ELEM5(but->type, SLI, NUM, TEX, NUMSLI, NUMABS)==0) {
+                       cpoin= strchr(but->drawstr, '|');
+                       if(cpoin) *cpoin= 0;            
+               }
        }
        
        glColor3ubv((unsigned char*)wcol->text);

Added: 
branches/blender2.5/blender/source/blender/editors/space_info/info_stats.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_info/info_stats.c  
                        (rev 0)
+++ branches/blender2.5/blender/source/blender/editors/space_info/info_stats.c  
2009-08-19 12:35:40 UTC (rev 22631)
@@ -0,0 +1,434 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_action_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_curve_types.h"
+#include "DNA_group_types.h"
+#include "DNA_lattice_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meta_types.h"
+#include "DNA_object_types.h"
+#include "DNA_particle_types.h"
+#include "DNA_scene_types.h"
+
+#include "BKE_anim.h"
+#include "BKE_context.h"
+#include "BKE_displist.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_key.h"
+#include "BKE_mesh.h"
+#include "BKE_particle.h"
+#include "BKE_utildefines.h"
+
+#include "ED_armature.h"
+#include "ED_mesh.h"
+
+#include "BLI_editVert.h"
+
+typedef struct SceneStats {
+       int totvert, totvertsel;
+       int totedge, totedgesel;
+       int totface, totfacesel;
+       int totbone, totbonesel;
+       int totobj, totobjsel;
+       int totmesh, totlamp, totcurve;
+
+       char infostr[512];
+} SceneStats;
+
+static void stats_object(Object *ob, int sel, int totob, SceneStats *stats)
+{
+       switch(ob->type) {
+       case OB_MESH: {
+               /* we assume derivedmesh is already built, this strictly does 
stats now. */
+               DerivedMesh *dm= ob->derivedFinal;
+               int totvert, totedge, totface;
+
+               stats->totmesh +=totob;
+
+               if(dm) {
+                       totvert = dm->getNumVerts(dm);
+                       totedge = dm->getNumEdges(dm);
+                       totface = dm->getNumFaces(dm);
+
+                       stats->totvert += totvert*totob;
+                       stats->totedge += totedge*totob;
+                       stats->totface += totface*totob;
+
+                       if(sel) {
+                               stats->totvertsel += totvert;
+                               stats->totfacesel += totface;
+                       }
+               }
+               break;
+       }
+       case OB_LAMP:
+               stats->totlamp += totob;
+               break;
+       case OB_SURF:
+       case OB_CURVE:
+       case OB_FONT: {
+               Curve *cu= ob->data;
+               int tot= 0, totf= 0;
+
+               stats->totcurve += totob;
+
+               if(cu->disp.first)
+                       count_displist(&cu->disp, &tot, &totf);
+
+               tot *= totob;
+               totf *= totob;
+
+               stats->totvert+= tot;
+               stats->totface+= totf;
+
+               if(sel) {
+                       stats->totvertsel += tot;
+                       stats->totfacesel += totf;
+               }
+               break;
+       }
+       case OB_MBALL: {
+               int tot= 0, totf= 0;
+
+               count_displist(&ob->disp, &tot, &totf);
+
+               tot *= totob;
+               totf *= totob;
+
+               stats->totvert += tot;
+               stats->totface += totf;
+
+               if(sel) {
+                       stats->totvertsel += tot;
+                       stats->totfacesel += totf;
+               }
+               break;
+       }
+       }
+}
+
+static void stats_object_edit(Object *obedit, SceneStats *stats)
+{
+       if(obedit->type==OB_MESH) {
+               /* Mesh Edit */
+               EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
+               EditVert *eve;
+               EditEdge *eed;
+               EditFace *efa;
+               
+               for(eve= em->verts.first; eve; eve=eve->next) {
+                       stats->totvert++;
+                       if(eve->f & SELECT) stats->totvertsel++;
+               }
+               for(eed= em->edges.first; eed; eed=eed->next) {
+                       stats->totedge++;
+                       if(eed->f & SELECT) stats->totedgesel++;
+               }
+               for(efa= em->faces.first; efa; efa=efa->next) {
+                       stats->totface++;
+                       if(efa->f & SELECT) stats->totfacesel++;
+               }
+               
+               EM_validate_selections(em);
+       }
+       else if(obedit->type==OB_ARMATURE){
+               /* Armature Edit */
+               bArmature *arm= obedit->data;
+               EditBone *ebo;
+
+               for(ebo=arm->edbo->first; ebo; ebo=ebo->next){
+                       stats->totbone++;
+                       
+                       if((ebo->flag & BONE_CONNECTED) && ebo->parent)
+                               stats->totvert--;
+                       
+                       if(ebo->flag & BONE_TIPSEL)
+                               stats->totvertsel++;
+                       if(ebo->flag & BONE_ROOTSEL)
+                               stats->totvertsel++;
+                       
+                       if(ebo->flag & BONE_SELECTED) stats->totbonesel++;
+
+                       /* if this is a connected child and it's parent is 
being moved, remove our root */
+                       if((ebo->flag & BONE_CONNECTED)&& (ebo->flag & 
BONE_ROOTSEL) && ebo->parent && (ebo->parent->flag & BONE_TIPSEL))
+                               stats->totvertsel--;
+
+                       stats->totvert+=2;
+               }
+       }
+       else if ELEM3(obedit->type, OB_CURVE, OB_SURF, OB_FONT) {
+               /* Curve Edit */
+               Curve *cu= obedit->data;
+               Nurb *nu;
+               BezTriple *bezt;
+               BPoint *bp;
+               int a;
+
+               for(nu=cu->editnurb->first; nu; nu=nu->next) {
+                       if((nu->type & 7)==CU_BEZIER) {
+                               bezt= nu->bezt;
+                               a= nu->pntsu;
+                               while(a--) {
+                                       stats->totvert+=3;
+                                       if(bezt->f1) stats->totvertsel++;
+                                       if(bezt->f2) stats->totvertsel++;
+                                       if(bezt->f3) stats->totvertsel++;
+                                       bezt++;
+                               }
+                       }
+                       else {
+                               bp= nu->bp;
+                               a= nu->pntsu*nu->pntsv;
+                               while(a--) {
+                                       stats->totvert++;
+                                       if(bp->f1 & SELECT) stats->totvertsel++;
+                                       bp++;
+                               }
+                       }
+               }
+       }
+       else if(obedit->type==OB_MBALL) {
+               /* MetaBall Edit */
+               MetaBall *mball= obedit->data;
+               MetaElem *ml;
+               
+               for(ml= mball->editelems->first; ml; ml=ml->next) {
+                       stats->totvert++;
+                       if(ml->flag & SELECT) stats->totvertsel++;
+               }
+       }
+       else if(obedit->type==OB_LATTICE) {
+               /* Lattice Edit */
+               Lattice *lt= obedit->data;
+               Lattice *editlatt= lt->editlatt;
+               BPoint *bp;
+               int a;
+
+               bp= editlatt->def;
+               

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to