[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