[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12316] branches/bmesh/source/blender: -> Split Tool
Geoffrey Bantle
hairbat at yahoo.com
Sun Oct 21 05:04:31 CEST 2007
Revision: 12316
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12316
Author: briggs
Date: 2007-10-21 05:04:30 +0200 (Sun, 21 Oct 2007)
Log Message:
-----------
-> Split Tool
Return of the split tool.
Also added some new stuff to BME_traversals.c for walking over the
edges of a vertex and the faces of a vertex. Trying to get rid of
duplicated code....
Modified Paths:
--------------
branches/bmesh/source/blender/blenkernel/BKE_bmesh.h
branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c
branches/bmesh/source/blender/blenkernel/intern/BME_structure.c
branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
branches/bmesh/source/blender/blenkernel/intern/BME_traversals.c
branches/bmesh/source/blender/include/editbmesh.h
branches/bmesh/source/blender/src/buttons_editing.c
branches/bmesh/source/blender/src/editbmesh_tools.c
Modified: branches/bmesh/source/blender/blenkernel/BKE_bmesh.h
===================================================================
--- branches/bmesh/source/blender/blenkernel/BKE_bmesh.h 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/blenkernel/BKE_bmesh.h 2007-10-21 03:04:30 UTC (rev 12316)
@@ -257,6 +257,7 @@
void BME_duplicate(struct BME_Mesh *bm);
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);
/*BME_traversals. c*/
#define BME_RESTRICTWIRE 1
@@ -268,6 +269,8 @@
struct BME_Edge *BME_edgeshell_nextedge(void *userData, struct BME_Edge *e, struct BME_Vert *sv);
void BME_MeshRing_walk(struct BME_Mesh *bm, struct BME_Edge *se, void*(*func)(void *userData, struct BME_Loop *walkloop), void *userData, short restrictflag);
struct BME_Edge *BME_edgering_nextedge(void *userData, struct BME_Loop *walkloop);
+void BME_VertEdgeWalk(struct BME_Mesh *bm, struct BME_Vert *v, void(*func)(void *userData, struct BME_Edge *apply), void *userData);
+void BME_VertFaceWalk(struct BME_Mesh *bm, struct BME_Vert *v, void(*func)(void *userData, struct BME_Poly *apply), void *userData);
/* bevel tool defines */
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c 2007-10-21 03:04:30 UTC (rev 12316)
@@ -59,7 +59,6 @@
#include "BSE_edit.h"
-
/*
* BME FIRST
*
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_structure.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_structure.c 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_structure.c 2007-10-21 03:04:30 UTC (rev 12316)
@@ -46,7 +46,7 @@
#include "BKE_customdata.h"
/**
- * MISC utility functions.
+ * MISC utility functions. Split these off into BME_utilities.c?
*
*/
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_tools.c 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_tools.c 2007-10-21 03:04:30 UTC (rev 12316)
@@ -958,6 +958,7 @@
}
/*finds out if any of the faces connected to any of the verts have all other vertices in varr as well. */
+/*this can be MUCH more compact if we just use BME_VertFaceWalk from BME_traversals.c*/
static int exist_face_overlaps(BME_Mesh *bm, BME_Vert **varr, int len){
BME_Edge *curedge;
BME_Loop *curloop, *l;
@@ -1469,3 +1470,36 @@
BME_selectmode_flush(bm);
}
+void BME_split_mesh(BME_Mesh *bm){
+ BME_Vert *v;
+ BME_Edge *e;
+ BME_Poly *f;
+
+ /*first mark all selected elements*/
+ for(v=BME_first(bm,BME_VERT);v;v=BME_next(bm,BME_VERT,v)){
+ if(BME_SELECTED(v)) v->tflag1 = 1;
+ }
+ for(e=BME_first(bm,BME_EDGE);e;e=BME_next(bm,BME_EDGE,e)){
+ if(BME_SELECTED(e)) e->tflag1 = 1;
+ }
+ for(f=BME_first(bm,BME_POLY);f;f=BME_next(bm,BME_POLY,f)){
+ if(BME_SELECTED(f)) f->tflag1 = 1;
+ }
+
+ BME_duplicate(bm); //dupe the selected parts.
+ BME_clear_flag_all(bm,BME_VISITED); //clear visited flags set in the duplicate function
+ /*now go through and visit all the previously selected parts and delete them*/
+ for(v=BME_first(bm,BME_VERT);v;v=BME_next(bm,BME_VERT,v)){
+ if(v->tflag1) BME_VISIT(v);
+ }
+ for(e=BME_first(bm,BME_EDGE);e;e=BME_next(bm,BME_EDGE,e)){
+ if(e->tflag1) BME_VISIT(e);
+ }
+ for(f=BME_first(bm,BME_POLY);f;f=BME_next(bm,BME_POLY,f)){
+ if(f->tflag1) BME_VISIT(f);
+ }
+
+ remove_tagged_polys(bm);
+ remove_tagged_edges(bm);
+ remove_tagged_verts(bm);
+}
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_traversals.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_traversals.c 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_traversals.c 2007-10-21 03:04:30 UTC (rev 12316)
@@ -111,7 +111,38 @@
}
}
+void BME_VertEdgeWalk(BME_Mesh *bm, BME_Vert *v, void(*func)(void *userData, BME_Edge *apply), void *userData)
+{
+ BME_Edge *curedge;
+ if(v->edge){
+ curedge = v->edge;
+ do{
+ func(userData,curedge);
+ curedge = BME_disk_nextedge(curedge,v);
+ }while(curedge!=v->edge);
+ }
+}
+void BME_VertFaceWalk(BME_Mesh *bm, BME_Vert *v, void(*func)(void *userData, BME_Poly *apply), void *userData)
+{
+ BME_Edge *curedge;
+ BME_Loop *l;
+
+ if(v->edge){
+ curedge = v->edge;
+ do{
+ if(curedge->loop){
+ l=curedge->loop;
+ do{
+ func(userData,l->f);
+ l = BME_radial_nextloop(l);
+ }while(l!=curedge->loop);
+ }
+ curedge = BME_disk_nextedge(curedge,v);
+ }while(curedge!=v->edge);
+ }
+}
+
/*Edge Loop Callback for BME_MeshLoop_walk*/
BME_Edge *BME_edgeloop_nextedge(void *userData, BME_Edge *e, BME_Vert *sv)
{
Modified: branches/bmesh/source/blender/include/editbmesh.h
===================================================================
--- branches/bmesh/source/blender/include/editbmesh.h 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/include/editbmesh.h 2007-10-21 03:04:30 UTC (rev 12316)
@@ -36,8 +36,8 @@
void EM_remove_doubles(void);
void EM_bevel(void);
void EM_collapse_edges(void);
+void EM_split_mesh(void);
-
/*editbmesh_select.c*/
void EM_deselectall_mesh(void);
void EM_selectconnected_mesh(int qual);
Modified: branches/bmesh/source/blender/src/buttons_editing.c
===================================================================
--- branches/bmesh/source/blender/src/buttons_editing.c 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/src/buttons_editing.c 2007-10-21 03:04:30 UTC (rev 12316)
@@ -4224,7 +4224,7 @@
break;
case B_SPLIT:
G.f |= G_DISABLE_OK;
- split_mesh();
+ EM_split_mesh();
G.f -= G_DISABLE_OK;
break;
case B_REMDOUB:
Modified: branches/bmesh/source/blender/src/editbmesh_tools.c
===================================================================
--- branches/bmesh/source/blender/src/editbmesh_tools.c 2007-10-21 02:14:21 UTC (rev 12315)
+++ branches/bmesh/source/blender/src/editbmesh_tools.c 2007-10-21 03:04:30 UTC (rev 12316)
@@ -322,4 +322,14 @@
countall();
DAG_object_flush_update(G.scene,G.obedit,OB_RECALC_DATA);
allqueue(REDRAWVIEW3D,0);
-}
\ No newline at end of file
+}
+
+void EM_split_mesh(void){
+ BME_Mesh *bm = G.editMesh;
+ BME_model_begin(bm);
+ BME_split_mesh(bm);
+ BME_model_end(bm);
+ countall();
+ DAG_object_flush_update(G.scene,G.obedit,OB_RECALC_DATA);
+ allqueue(REDRAWVIEW3D,0);
+}
More information about the Bf-blender-cvs
mailing list