[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11469] branches/bmesh/source/blender: -> Dissolve Tool
Geoffrey Bantle
hairbat at yahoo.com
Thu Aug 2 09:52:41 CEST 2007
Revision: 11469
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11469
Author: briggs
Date: 2007-08-02 09:52:40 +0200 (Thu, 02 Aug 2007)
Log Message:
-----------
-> Dissolve Tool
Added a 'dissolve edge' tool that joins two adjacent faces into one.
Also selection flags should be propogated automatically to split faces/
edges now along with all new elements created between a
BME_model_begin/end marked with a bitflag BME_NEW (test for with
BME_NEWELEM macro)
Modified Paths:
--------------
branches/bmesh/source/blender/blenkernel/BKE_bmesh.h
branches/bmesh/source/blender/blenkernel/intern/BME_structure.c
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
Modified: branches/bmesh/source/blender/blenkernel/BKE_bmesh.h
===================================================================
--- branches/bmesh/source/blender/blenkernel/BKE_bmesh.h 2007-08-02 01:38:42 UTC (rev 11468)
+++ branches/bmesh/source/blender/blenkernel/BKE_bmesh.h 2007-08-02 07:52:40 UTC (rev 11469)
@@ -197,10 +197,12 @@
void BME_select_edge(struct BME_Mesh *bm, struct BME_Edge *e, int select);
void BME_select_poly(struct BME_Mesh *bm, struct BME_Poly *f, int select);
#define BME_SELECTED(element) (element->flag & SELECT)
+#define BME_NEWELEM(element) (element->flag & BME_NEW)
/*TOOLS CODE*/
void BME_cut_edge(struct BME_Mesh *bm, BME_Edge *e, int numcuts);
void BME_cut_edges(struct BME_Mesh *bm, int numcuts);
struct BME_Loop *BME_inset_edge(struct BME_Mesh *bm, struct BME_Loop *l, struct BME_Poly *f);
struct BME_Poly *BME_inset_poly(struct BME_Mesh *bm, struct BME_Poly *f);
+void BME_dissolve_edges(struct BME_Mesh *bm);
#endif
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_structure.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_structure.c 2007-08-02 01:38:42 UTC (rev 11468)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_structure.c 2007-08-02 07:52:40 UTC (rev 11469)
@@ -91,6 +91,8 @@
v = MEM_callocN(sizeof(BME_Vert), "BME Vertex");
BLI_addtail(&(bm->verts), v);
v->EID = bm->nextv;
+ v->flag |= BME_NEW;
+ if(example && (example->flag & SELECT))v->flag |=SELECT;
bm->nextv++;
bm->totvert++;
@@ -111,6 +113,8 @@
e->d1.data = e;
e->d2.data = e;
e->EID = bm->nexte;
+ e->flag |= BME_NEW;
+ if(example && (example->flag & SELECT))e->flag |=SELECT;
bm->nexte++;
bm->totedge++;
BLI_addtail(&(bm->edges), e);
@@ -134,6 +138,7 @@
l->f = f;
l->EID = bm->nextl;
l->gref = loopnode;
+ l->flag |= BME_NEW;
loopnode->data = l;
BLI_addtail(&(bm->loops),loopnode);
bm->nextl++;
@@ -153,6 +158,8 @@
f= MEM_callocN(sizeof(BME_Poly),"BME_Poly");
BLI_addtail(&(bm->polys),f);
f->EID = bm->nextp;
+ f->flag |= BME_NEW;
+ if(example && (example->flag & SELECT))f->flag|=SELECT;
bm->nextp++;
bm->totpoly++;
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_tools.c 2007-08-02 01:38:42 UTC (rev 11468)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_tools.c 2007-08-02 07:52:40 UTC (rev 11469)
@@ -57,6 +57,25 @@
* Returns -
*/
+void BME_dissolve_edges(BME_Mesh *bm)
+{
+ BME_Edge *e,*nexte;
+ BME_Poly *f1, *f2;
+ BME_Loop *next;
+
+ e=BME_first(bm,BME_EDGE);
+ while(e){
+ nexte = BME_next(bm,BME_EDGE,e);
+ if(BME_SELECTED(e)){
+ f1 = e->loop->f;
+ next = BME_radial_nextloop(e->loop);
+ f2 = next->f;
+ BME_JFKE(bm,f1,f2,e);
+ }
+ e = nexte;
+ }
+}
+
/**
* BME_cut_edge
*
@@ -65,7 +84,8 @@
*
*/
-void BME_cut_edge(BME_Mesh *bm, BME_Edge *e, int numcuts){
+void BME_cut_edge(BME_Mesh *bm, BME_Edge *e, int numcuts)
+{
int i;
float percent, step,length, vt1[3], v2[3];
BME_Vert *nv;
@@ -106,7 +126,7 @@
{
BME_Edge *e;
for(e=BME_first(bm,BME_EDGE); e; e=BME_next(bm,BME_EDGE,e)){
- if(BME_SELECTED(e))
+ if(BME_SELECTED(e) && !(BME_NEWELEM(e)))
BME_cut_edge(bm,e,numcuts);
}
}
Modified: branches/bmesh/source/blender/include/editbmesh.h
===================================================================
--- branches/bmesh/source/blender/include/editbmesh.h 2007-08-02 01:38:42 UTC (rev 11468)
+++ branches/bmesh/source/blender/include/editbmesh.h 2007-08-02 07:52:40 UTC (rev 11469)
@@ -26,4 +26,5 @@
/*editbmesh_tools.c*/
-void EM_cut_edges(int numcuts);
\ No newline at end of file
+void EM_cut_edges(int numcuts);
+void EM_dissolve_edges(void);
\ No newline at end of file
Modified: branches/bmesh/source/blender/src/editbmesh_tools.c
===================================================================
--- branches/bmesh/source/blender/src/editbmesh_tools.c 2007-08-02 01:38:42 UTC (rev 11468)
+++ branches/bmesh/source/blender/src/editbmesh_tools.c 2007-08-02 07:52:40 UTC (rev 11469)
@@ -76,4 +76,12 @@
BME_model_end(G.editMesh);
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
+}
+
+void EM_dissolve_edges(void){
+ BME_model_begin(G.editMesh);
+ BME_dissolve_edges(G.editMesh);
+ BME_model_end(G.editMesh);
+ DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ allqueue(REDRAWVIEW3D, 0);
}
\ No newline at end of file
Modified: branches/bmesh/source/blender/src/editobject.c
===================================================================
--- branches/bmesh/source/blender/src/editobject.c 2007-08-02 01:38:42 UTC (rev 11468)
+++ branches/bmesh/source/blender/src/editobject.c 2007-08-02 07:52:40 UTC (rev 11469)
@@ -2346,8 +2346,14 @@
{
EM_cut_edges(1);
BIF_undo_push("Cut Edges");
- break;
}
+ break;
+ case 205:
+ {
+ EM_dissolve_edges();
+ BIF_undo_push("Dissolve Edges");
+ }
+ break;
}
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
More information about the Bf-blender-cvs
mailing list