[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20270] branches/bmesh/blender: some stability stuff related to undo, and more extrude stuff works
Joseph Eagar
joeedh at gmail.com
Tue May 19 02:33:55 CEST 2009
Revision: 20270
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20270
Author: joeedh
Date: 2009-05-19 02:33:54 +0200 (Tue, 19 May 2009)
Log Message:
-----------
some stability stuff related to undo, and more extrude stuff works
Modified Paths:
--------------
branches/bmesh/blender/intern/guardedalloc/MEM_guardedalloc.h
branches/bmesh/blender/intern/guardedalloc/Makefile
branches/bmesh/blender/intern/guardedalloc/SConscript
branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c
branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
branches/bmesh/blender/source/blender/editors/mesh/editmesh_tools.c
branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h
Modified: branches/bmesh/blender/intern/guardedalloc/MEM_guardedalloc.h
===================================================================
--- branches/bmesh/blender/intern/guardedalloc/MEM_guardedalloc.h 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/intern/guardedalloc/MEM_guardedalloc.h 2009-05-19 00:33:54 UTC (rev 20270)
@@ -74,7 +74,11 @@
* Release memory previously allocatred by this module.
*/
short MEM_freeN(void *vmemh);
-
+ short WMEM_freeN(void *vmemh);
+
+ short _MEM_freeN(void *vmemh, char *file, int line);
+ #define MEM_freeN(vmemh) _MEM_freeN(vmemh, __FILE__, __LINE__)
+
/**
* Duplicates a block of memory, and returns a pointer to the
* newly allocated block. */
@@ -130,6 +134,44 @@
uintptr_t MEM_get_mapped_memory_in_use(void);
int MEM_get_memory_blocks_in_use(void);
+/********* Internal structs. They're only here for the MEM_OVERHEAD macro.*********/
+
+/* --------------------------------------------------------------------- */
+/* Data definition */
+/* --------------------------------------------------------------------- */
+/* all memory chunks are put in linked lists */
+typedef struct localLink
+{
+ struct localLink *next,*prev;
+} localLink;
+
+typedef struct localListBase
+{
+ void *first, *last;
+} localListBase;
+
+ /* note: keep this struct aligned (e.g., irix/gcc) - Hos */
+typedef struct MemHead {
+ int tag1;
+ int len;
+ struct MemHead *next,*prev;
+ const char * name;
+ const char * nextname;
+ int tag2;
+ int mmap; /* if true, memory was mmapped */
+} MemHead;
+
+typedef struct MemTail {
+ int tag3, pad;
+} MemTail;
+
+/*memory bias to hopefully account
+ for allocation overhead from
+ the system allocator.*/
+#define MEM_OVERHEADBIAS 32
+
+#define MEM_OVERHEAD (sizeof(MemHead) + sizeof(MemTail) + MEM_OVERHEADBIAS)
+
#ifdef __cplusplus
}
#endif
Modified: branches/bmesh/blender/intern/guardedalloc/Makefile
===================================================================
--- branches/bmesh/blender/intern/guardedalloc/Makefile 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/intern/guardedalloc/Makefile 2009-05-19 00:33:54 UTC (rev 20270)
@@ -1,5 +1,3 @@
-# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
-# vim: tabstop=8
#
# $Id$
#
@@ -24,7 +22,7 @@
#
# The Original Code is: all of this file.
#
-# Contributor(s): Hans Lambermont, GSR
+# Contributor(s): Hans Lambermont
#
# ***** END GPL LICENSE BLOCK *****
# decimation main makefile.
@@ -40,13 +38,16 @@
include nan_subdirs.mk
-install: $(ALL_OR_DEBUG)
+install: all debug
@[ -d $(NAN_GUARDEDALLOC) ] || mkdir $(NAN_GUARDEDALLOC)
@[ -d $(NAN_GUARDEDALLOC)/include ] || mkdir $(NAN_GUARDEDALLOC)/include
- @[ -d $(NAN_GUARDEDALLOC)/lib/$(DEBUG_DIR) ] || mkdir $(NAN_GUARDEDALLOC)/lib/$(DEBUG_DIR)
- @../tools/cpifdiff.sh $(DIR)/$(DEBUG_DIR)libguardedalloc.a $(NAN_GUARDEDALLOC)/lib/$(DEBUG_DIR)
+ @[ -d $(NAN_GUARDEDALLOC)/lib ] || mkdir $(NAN_GUARDEDALLOC)/lib
+ @[ -d $(NAN_GUARDEDALLOC)/lib/debug ] || mkdir $(NAN_GUARDEDALLOC)/lib/debug
+ @../tools/cpifdiff.sh $(DIR)/libguardedalloc.a $(NAN_GUARDEDALLOC)/lib/
+ @../tools/cpifdiff.sh $(DIR)/debug/libguardedalloc.a $(NAN_GUARDEDALLOC)/lib/debug/
ifeq ($(OS),darwin)
- ranlib $(NAN_GUARDEDALLOC)/lib/$(DEBUG_DIR)libguardedalloc.a
+ ranlib $(NAN_GUARDEDALLOC)/lib/libguardedalloc.a
+ ranlib $(NAN_GUARDEDALLOC)/lib/debug/libguardedalloc.a
endif
@../tools/cpifdiff.sh *.h $(NAN_GUARDEDALLOC)/include/
Modified: branches/bmesh/blender/intern/guardedalloc/SConscript
===================================================================
--- branches/bmesh/blender/intern/guardedalloc/SConscript 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/intern/guardedalloc/SConscript 2009-05-19 00:33:54 UTC (rev 20270)
@@ -5,4 +5,4 @@
sources = env.Glob('intern/*.c')
incs = '.'
-env.BlenderLib ('bf_guardedalloc', sources, Split(incs), defines=[], libtype=['intern', 'player'], priority = [5, 175] )
+env.BlenderLib ('bf_guardedalloc', sources, Split(incs), defines=[], libtype=['intern', 'player'], priority = [10, 175] )
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2009-05-19 00:33:54 UTC (rev 20270)
@@ -107,10 +107,13 @@
tm2->derivedCage = tm2->derivedFinal = NULL;
tm2->act_face = NULL;
-
+
+ tm2->looptris = NULL;
tm2->bm = BM_Copy_Mesh(tm->bm);
TM_RecalcTesselation(tm2);
+ tm2->vert_index = tm2->edge_index = tm2->face_index = NULL;
+
return tm2;
}
@@ -123,6 +126,8 @@
BMFace *f;
BMLoop *l;
int i = 0;
+
+ if (tm->looptris) MEM_freeN(tm->looptris);
f = BMIter_New(&iter, bm, BM_FACES_OF_MESH, NULL);
for ( ; f; f=BMIter_Step(&iter)) {
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2009-05-19 00:33:54 UTC (rev 20270)
@@ -3,6 +3,16 @@
#include <stdio.h>
+BMOpDefine def_extrudeverts_indiv = {
+ "extrude_vert_indiv",
+ {{BMOP_OPSLOT_ELEMENT_BUF, "verts"},
+ {BMOP_OPSLOT_ELEMENT_BUF, "edgeout"},
+ {BMOP_OPSLOT_ELEMENT_BUF, "vertout"},
+ {0} /*null-terminating sentinel*/},
+ extrude_vert_indiv_exec,
+ 0
+};
+
#if 0
BMOpDefine def_makeprim = {
"makeprim",
@@ -156,6 +166,7 @@
&def_extrudefaceregion,
&def_connectverts,
//&def_makeprim,
+ &def_extrudeverts_indiv,
};
int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h 2009-05-19 00:33:54 UTC (rev 20270)
@@ -20,5 +20,6 @@
void extrude_edge_context_exec(BMesh *bm, BMOperator *op);
void connectverts_exec(BMesh *bm, BMOperator *op);
void makeprim_exec(BMesh *bm, BMOperator *op);
+void extrude_vert_indiv_exec(BMesh *bm, BMOperator *op);
#endif
Modified: branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c 2009-05-19 00:33:54 UTC (rev 20270)
@@ -14,6 +14,28 @@
#define EXT_KEEP 2
#define EXT_DEL 4
+void extrude_vert_indiv_exec(BMesh *bm, BMOperator *op)
+{
+ BMOIter siter;
+ BMVert *v, *dupev;
+ BMEdge *e;
+
+ v = BMO_IterNew(&siter, bm, op, "verts");
+ for (; v; v=BMO_IterStep(&siter)) {
+ dupev = BM_Make_Vert(bm, v->co, NULL);
+ VECCOPY(dupev->no, v->no);
+ BM_Copy_Attributes(bm, bm, v, dupev);
+
+ e = BM_Make_Edge(bm, v, dupev, NULL, 0);
+
+ BMO_SetFlag(bm, e, EXT_KEEP);
+ BMO_SetFlag(bm, dupev, EXT_KEEP);
+ }
+
+ BMO_Flag_To_Slot(bm, op, "vertout", EXT_KEEP, BM_VERT);
+ BMO_Flag_To_Slot(bm, op, "edgeout", EXT_KEEP, BM_EDGE);
+}
+
void extrude_edge_context_exec(BMesh *bm, BMOperator *op)
{
BMOperator dupeop, delop;
Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2009-05-18 21:32:03 UTC (rev 20269)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2009-05-19 00:33:54 UTC (rev 20270)
@@ -441,28 +441,33 @@
}
/* extrudes individual vertices */
-short EDBM_Extrude_verts_indiv(BMEditMesh *em, short flag, float *nor)
+short EDBM_Extrude_verts_indiv(BMEditMesh *em, wmOperator *op, short flag, float *nor)
{
-#if 0
- EditVert *eve;
-
- /* make the edges */
- for(eve= em->verts.first; eve; eve= eve->next) {
- if(eve->f & flag) {
- eve->tmp.v = addvertlist(em, eve->co, eve);
- addedgelist(em, eve, eve->tmp.v, NULL);
+ BMIter iter;
+ BMVert *v, **verts = NULL;
+ V_DECLARE(verts);
+ int i=0;
+
+ /*kindof hackish way of deselecting the original vertices, but
+ oh well.*/
+ v = BMIter_New(&iter, em->bm, BM_VERTS_OF_MESH, NULL);
+ for ( ; v; v=BMIter_Step(&iter)) {
+ if (BM_TestHFlag(v, BM_SELECT)) {
+ V_GROW(verts);
+ verts[i++] = v;
}
- else eve->tmp.v = NULL;
}
+
+ EDBM_CallOpf(em, op, "extrude_vert_indiv verts=%hv", flag);
- /* set correct selection */
- EM_clear_flag_all(em, SELECT);
+ i--;
+ while (i >= 0) {
+ BM_Select(em->bm, verts[i], 0);
+ i--;
+ }
- for(eve= em->verts.last; eve; eve= eve->prev)
- if (eve->tmp.v)
- eve->tmp.v->f |= flag;
+ V_FREE(verts);
-#endif
return 'g'; // g is grab
}
@@ -600,11 +605,19 @@
eed = BMIter_New(&iter, em->bm, BM_EDGES_OF_MESH, NULL);
for ( ; eed; eed=BMIter_Step(&iter)) {
if (BM_TestHFlag(eed, flag)) {
- BM_SetHFlag(eed->v1, flag);
- BM_SetHFlag(eed->v2, flag);
+ if (flag != BM_SELECT) {
+ BM_SetHFlag(eed->v1, flag);
+ BM_SetHFlag(eed->v2, flag);
+ } else {
+ BM_Select(em->bm, eed->v1, 1);
+ BM_Select(em->bm, eed->v2, 1);
+ }
} else {
- if (BM_TestHFlag(eed->v1, flag) && BM_TestHFlag(eed->v2, flag))
- BM_SetHFlag(eed, flag);
+ if (BM_TestHFlag(eed->v1, flag) && BM_TestHFlag(eed->v2, flag)) {
+ if (flag != BM_SELECT)
+ BM_SetHFlag(eed, flag);
+ else BM_Select(em->bm, eed, 1);
+ }
}
}
@@ -719,7 +732,7 @@
if(nr<1) return;
if(nr==1) transmode= EDBM_Extrude(obedit, em, SELECT, nor);
- else if(nr==4) transmode= EDBM_Extrude_verts_indiv(em, SELECT, nor);
+ else if(nr==4) transmode= EDBM_Extrude_verts_indiv(em, op, SELECT, nor);
else if(nr==3) transmode= EDBM_Extrude_edges_indiv(em, SELECT, nor);
else transmode= EDBM_Extrude_face_indiv(em, SELECT, nor);
Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c 2009-05-18 21:32:03 UTC (rev 20269)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list