[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12317] branches/bmesh/source/blender: -> Vertex Smooth

Geoffrey Bantle hairbat at yahoo.com
Sun Oct 21 07:16:37 CEST 2007


Revision: 12317
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12317
Author:   briggs
Date:     2007-10-21 07:16:37 +0200 (Sun, 21 Oct 2007)

Log Message:
-----------
-> Vertex Smooth

Simple port of old vertex smooth code.

Doesn't integrate with mirror modifier yet, since 
modifiers arnt ported over and working anyway...

Modified Paths:
--------------
    branches/bmesh/source/blender/blenkernel/BKE_bmesh.h
    branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
    branches/bmesh/source/blender/include/editbmesh.h
    branches/bmesh/source/blender/src/editbmesh_tools.c
    branches/bmesh/source/blender/src/editobject.c
    branches/bmesh/source/blender/src/header_view3d.c
    branches/bmesh/source/blender/src/space.c

Modified: branches/bmesh/source/blender/blenkernel/BKE_bmesh.h
===================================================================
--- branches/bmesh/source/blender/blenkernel/BKE_bmesh.h	2007-10-21 03:04:30 UTC (rev 12316)
+++ branches/bmesh/source/blender/blenkernel/BKE_bmesh.h	2007-10-21 05:16:37 UTC (rev 12317)
@@ -258,6 +258,7 @@
 void BME_extrude_mesh(struct BME_Mesh *bm, int type);
 int BME_make_edgeface(struct BME_Mesh *bm);
 void BME_split_mesh(struct BME_Mesh *bm);
+void BME_vertex_smooth(BME_Mesh *bm);
 
 /*BME_traversals. c*/
 #define BME_RESTRICTWIRE 1

Modified: branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_tools.c	2007-10-21 03:04:30 UTC (rev 12316)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_tools.c	2007-10-21 05:16:37 UTC (rev 12317)
@@ -1503,3 +1503,73 @@
 	remove_tagged_edges(bm);
 	remove_tagged_verts(bm);
 }
+
+
+
+void BME_vertex_smooth(BME_Mesh *bm)
+{
+	BME_Vert *v;
+	BME_Edge *e;
+	float *adror, *adr, fac;
+	float fvec[3];
+	int selected=0;
+	GHash *vhash;
+
+	/* count */
+	for(v=BME_first(bm,BME_VERT);v;v=BME_next(bm,BME_VERT,v)){
+		if(BME_SELECTED(v)) selected++;
+	}
+	
+	if(!selected) return 0;
+	
+	vhash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
+	adr=adror= (float *)MEM_callocN(3*sizeof(float *)*selected, "vertsmooth");
+	for(v=BME_first(bm,BME_VERT);v;v=BME_next(bm,BME_VERT,v)){
+		if(BME_SELECTED(v)){
+			BLI_ghash_insert(vhash,v,adr);
+			adr+= 3;
+		}
+	}
+
+	for(e=BME_first(bm,BME_EDGE);e;e=BME_next(bm,BME_EDGE,e)){
+		if((BME_SELECTED(e->v1)) || (BME_SELECTED(e->v2))){
+			fvec[0]= (e->v1->co[0]+e->v2->co[0])/2.0;
+			fvec[1]= (e->v1->co[1]+e->v2->co[1])/2.0;
+			fvec[2]= (e->v1->co[2]+e->v2->co[2])/2.0;
+			
+			if((BME_SELECTED(e->v1)) && e->v1->tflag1<255){
+				e->v1->tflag1++;
+				VecAddf(BLI_ghash_lookup(vhash,e->v1), BLI_ghash_lookup(vhash,e->v1), fvec);				
+			}
+			if((BME_SELECTED(e->v2)) && e->v2->tflag1<255){
+				e->v2->tflag1++;
+				VecAddf(BLI_ghash_lookup(vhash,e->v2), BLI_ghash_lookup(vhash,e->v2), fvec);
+			}
+		}
+	}
+	
+	for(e=BME_first(bm,BME_EDGE);e;e=BME_next(bm,BME_EDGE,e)){
+		if( (BME_SELECTED(e->v1)) || (BME_SELECTED(e->v2)) ){
+			fvec[0]= (e->v1->co[0]+e->v2->co[0])/2.0;
+			fvec[1]= (e->v1->co[1]+e->v2->co[1])/2.0;
+			fvec[2]= (e->v1->co[2]+e->v2->co[2])/2.0;
+		}
+	}
+	
+	for(v=BME_first(bm,BME_VERT);v;v=BME_next(bm,BME_VERT,v)){
+		if( (BME_SELECTED(v)) ){
+			if(v->tflag1){
+				adr = BLI_ghash_lookup(vhash,v);
+				fac= 0.5/(float)v->tflag1;
+				
+				v->co[0]= 0.5*v->co[0]+fac*adr[0];
+				v->co[1]= 0.5*v->co[1]+fac*adr[1];
+				v->co[2]= 0.5*v->co[2]+fac*adr[2];
+			}
+		}
+	}
+	BLI_ghash_free(vhash,NULL, NULL);
+	MEM_freeN(adror);
+
+	//recalc_editnormals(); replace me!
+}

Modified: branches/bmesh/source/blender/include/editbmesh.h
===================================================================
--- branches/bmesh/source/blender/include/editbmesh.h	2007-10-21 03:04:30 UTC (rev 12316)
+++ branches/bmesh/source/blender/include/editbmesh.h	2007-10-21 05:16:37 UTC (rev 12317)
@@ -37,6 +37,7 @@
 void EM_bevel(void);
 void EM_collapse_edges(void);
 void EM_split_mesh(void);
+void EM_vertex_smooth(void);
 
 /*editbmesh_select.c*/
 void EM_deselectall_mesh(void);

Modified: branches/bmesh/source/blender/src/editbmesh_tools.c
===================================================================
--- branches/bmesh/source/blender/src/editbmesh_tools.c	2007-10-21 03:04:30 UTC (rev 12316)
+++ branches/bmesh/source/blender/src/editbmesh_tools.c	2007-10-21 05:16:37 UTC (rev 12317)
@@ -333,3 +333,13 @@
 	DAG_object_flush_update(G.scene,G.obedit,OB_RECALC_DATA);
 	allqueue(REDRAWVIEW3D,0);	
 }
+
+void EM_vertex_smooth(void){
+	BME_Mesh *bm = G.editMesh;
+	BME_model_begin(bm);
+	BME_vertex_smooth(bm);
+	BME_model_end(bm);
+	countall();
+	DAG_object_flush_update(G.scene,G.obedit,OB_RECALC_DATA);
+	allqueue(REDRAWVIEW3D,0);
+}

Modified: branches/bmesh/source/blender/src/editobject.c
===================================================================
--- branches/bmesh/source/blender/src/editobject.c	2007-10-21 03:04:30 UTC (rev 12316)
+++ branches/bmesh/source/blender/src/editobject.c	2007-10-21 05:16:37 UTC (rev 12317)
@@ -2333,7 +2333,7 @@
 	else if(G.obedit->type==OB_MESH) {
 
 		if(G.scene->selectmode == SCE_SELECT_VERTEX)
-			nr= pupmenu("Specials%t|Connect%x100|Extrude%x105|Merge%x102|Remove Doubles%x103|Delete%x104");
+			nr= pupmenu("Specials%t|Connect%x100|Extrude%x105|Merge%x102|Smooth%x105|Remove Doubles%x103|Delete%x104");
 		else if(G.scene->selectmode == SCE_SELECT_EDGE)
 			nr= pupmenu("Specials%t|Bevel%x200|Cut%x201|Cut Multi%x202|Connect%x203|Collapse%x204|Dissolve%x205|Extrude%x207|Subdivide%x209|Subdivide Multi%x210|Delete%x208");	
 		else if(G.scene->selectmode == SCE_SELECT_FACE)
@@ -2384,8 +2384,13 @@
 				BIF_undo_push("Remove Doubles");
 			}
 			break;
+		case 105:
+			{
+				EM_vertex_smooth();
+				BIF_undo_push("Vertex Smooth");
+			}
 		}
-			
+		
 		DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
 		
 	}

Modified: branches/bmesh/source/blender/src/header_view3d.c
===================================================================
--- branches/bmesh/source/blender/src/header_view3d.c	2007-10-21 03:04:30 UTC (rev 12316)
+++ branches/bmesh/source/blender/src/header_view3d.c	2007-10-21 05:16:37 UTC (rev 12317)
@@ -2501,7 +2501,7 @@
 		//EDITBMESHGREP separate_mesh();
 		break;
 	case 4: /*split */
-		//EDITBMESHGREP split_mesh();
+		EM_split_mesh();
 		break;
 	case 5: /*merge */
 		//EDITBMESHGREP mergemenu();

Modified: branches/bmesh/source/blender/src/space.c
===================================================================
--- branches/bmesh/source/blender/src/space.c	2007-10-21 03:04:30 UTC (rev 12316)
+++ branches/bmesh/source/blender/src/space.c	2007-10-21 05:16:37 UTC (rev 12317)
@@ -2385,7 +2385,7 @@
 				break;
 			case YKEY:
 				if((G.qual==0) && (G.obedit)) {
-					//EDITBMESHGREP if(G.obedit->type==OB_MESH) split_mesh();
+					if(G.obedit->type==OB_MESH) EM_split_mesh();
 				}
 				break;
 			case ZKEY:





More information about the Bf-blender-cvs mailing list