[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