[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11466] branches/bmesh/source/blender: -> Cut Tool and new specials menu
Geoffrey Bantle
hairbat at yahoo.com
Wed Aug 1 20:54:23 CEST 2007
Revision: 11466
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11466
Author: briggs
Date: 2007-08-01 20:54:23 +0200 (Wed, 01 Aug 2007)
Log Message:
-----------
-> Cut Tool and new specials menu
Added a simple cut tool along with menu entries for some other tools
that should be coming along soon. Also fixed a bug in mesh iterators
introduced by last commit.
Modified Paths:
--------------
branches/bmesh/source/blender/blenkernel/BKE_bmesh.h
branches/bmesh/source/blender/blenkernel/intern/BME_eulers.c
branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c
branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
branches/bmesh/source/blender/include/editbmesh.h
branches/bmesh/source/blender/src/editbmesh_interface.c
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-01 18:04:44 UTC (rev 11465)
+++ branches/bmesh/source/blender/blenkernel/BKE_bmesh.h 2007-08-01 18:54:23 UTC (rev 11466)
@@ -48,99 +48,99 @@
struct RetopoPaintData;
struct DerivedMesh;
+/*defines for mesh iterators*/
#define BME_VERT 1
#define BME_EDGE 2
#define BME_POLY 3
#define BME_LOOP 4
+#define SELECT 1
+/*defines for element->flag*/
+#define BME_VISITED 2 /*for traversal/selection functions*/
+#define BME_NEW 4 /*for tools*/
typedef struct BME_CycleNode{
- struct BME_CycleNode *next, *prev;
- void *data;
+ struct BME_CycleNode *next, *prev;
+ void *data;
} BME_CycleNode;
typedef struct BME_Mesh
{
- ListBase verts, edges, polys, loops;
- int lock; /*if set, all calls to eulers will fail.*/
- struct BME_Mesh *backup; /*full copy of the mesh*/
- int totvert, totedge, totpoly, totloop; /*record keeping*/
- int nextv, nexte, nextp, nextl; /*Next element ID for verts/edges/faces/loops. Never reused*/
- struct CustomData vdata, edata, pdata, ldata; /*Custom Data Layer information*/
- struct DerivedMesh *derivedFinal, *derivedCage;
- struct RetopoPaintData *retopo_paint_data; /*here for temporary code compatibility only*/
- //BME_ElementList selection;
- int lastDataMask;
+ ListBase verts, edges, polys, loops;
+ int lock; /*if set, all calls to eulers will fail.*/
+ struct BME_Mesh *backup; /*full copy of the mesh*/
+ int totvert, totedge, totpoly, totloop; /*record keeping*/
+ int nextv, nexte, nextp, nextl; /*Next element ID for verts/edges/faces/loops. Never reused*/
+ struct CustomData vdata, edata, pdata, ldata; /*Custom Data Layer information*/
+ struct DerivedMesh *derivedFinal, *derivedCage; /*Derived Meshes for this bmesh*/
+ struct RetopoPaintData *retopo_paint_data; /*here for temporary code compatibility only*/
+ int lastDataMask;
} BME_Mesh;
-//60, 52, 52, 12 704
-//60, 52, 84
-
-/*only defined to make certain things easier*/
+/*Beginning of all mesh elements should share this layout!*/
typedef struct BME_Element
{
- struct BME_Element *next, *prev;
- int EID;
- unsigned short flag,h;
-
+ struct BME_Element *next, *prev;
+ int EID;
+ unsigned short flag,h;
+ int eflag1, eflag2; //eflag and tflag will be going away...
+ int tflag1, tflag2;
} BME_Element;
typedef struct BME_Vert
{
- struct BME_Vert *next, *prev;
- int EID;
- unsigned short flag, h;
- float co[3]; /*vertex location. Actually pointer to custom data block*/
- float no[3]; /*vertex normal. Actually pointer to custom data block*/
- struct BME_Edge *edge; /*first edge in the disk cycle for this vertex*/
- void *data; /*custom vertex data*/
- int eflag1, eflag2; /*reserved for use by eulers*/
- int tflag1, tflag2; /*reserved for use by tools*/
-
+ struct BME_Vert *next, *prev;
+ int EID;
+ unsigned short flag, h;
+ int eflag1, eflag2; /*reserved for use by eulers*/
+ int tflag1, tflag2; /*reserved for use by tools*/
+ float co[3]; /*vertex location. Actually pointer to custom data block*/
+ float no[3]; /*vertex normal. Actually pointer to custom data block*/
+ struct BME_Edge *edge; /*first edge in the disk cycle for this vertex*/
+ void *data; /*custom vertex data*/
} BME_Vert;
typedef struct BME_Edge
{
- struct BME_Edge *next, *prev;
- int EID;
- unsigned short flag, h;
- struct BME_Vert *v1, *v2; /*note that order of vertex pointers means nothing to eulers*/
- struct BME_CycleNode d1, d2; /*disk cycle nodes for v1 and v2 respectivley*/
- struct BME_Loop *loop; /*first BME_Loop in the radial cycle around this edge*/
- void *data; /*custom edge data*/
- int eflag1, eflag2; /*reserved for use by eulers*/
- int tflag1, tflag2; /*reserved for use by tools*/
+ struct BME_Edge *next, *prev;
+ int EID;
+ unsigned short flag, h;
+ int eflag1, eflag2; /*reserved for use by eulers*/
+ int tflag1, tflag2; /*reserved for use by tools*/
+ struct BME_Vert *v1, *v2; /*note that order of vertex pointers means nothing to eulers*/
+ struct BME_CycleNode d1, d2; /*disk cycle nodes for v1 and v2 respectivley*/
+ struct BME_Loop *loop; /*first BME_Loop in the radial cycle around this edge*/
+ void *data; /*custom edge data*/
float crease;
} BME_Edge;
typedef struct BME_Loop
{
- struct BME_Loop *next, *prev; /*circularly linked list around face*/
- int EID;
- unsigned short flag, h;
- struct BME_CycleNode radial; /*circularly linked list used to find faces around an edge*/
- struct BME_CycleNode *gref; /*pointer to loop ref. Nasty.*/
- struct BME_Vert *v; /*vertex that this loop starts at.*/
- struct BME_Edge *e; /*edge this loop belongs to*/
- struct BME_Poly *f; /*face this loop belongs to*/
- void *data; /*custom per face vertex data*/
- int eflag1, eflag2; /*reserved for use by eulers*/
- int tflag1, tflag2; /*reserved for use by tools*/
-
+ struct BME_Loop *next, *prev; /*circularly linked list around face*/
+ int EID;
+ unsigned short flag, h;
+ int eflag1, eflag2; /*reserved for use by eulers*/
+ int tflag1, tflag2; /*reserved for use by tools*/
+ struct BME_CycleNode radial; /*circularly linked list used to find faces around an edge*/
+ struct BME_CycleNode *gref; /*pointer to loop ref. Nasty.*/
+ struct BME_Vert *v; /*vertex that this loop starts at.*/
+ struct BME_Edge *e; /*edge this loop belongs to*/
+ struct BME_Poly *f; /*face this loop belongs to*/
+ void *data; /*custom per face vertex data*/
} BME_Loop;
typedef struct BME_Poly
{
- struct BME_Poly *next, *prev;
- int EID;
- unsigned short flag, h;
- unsigned short mat_nr;
- struct BME_Loop *loopbase; /*First editloop around Polygon.*/
- struct ListBase holes; /*list of inner loops in the face*/
- unsigned int len; /*total length of the face. Eulers should preserve this data*/
- void *data; /*custom face data*/
- int eflag1, eflag2; /*reserved for use by eulers*/
- int tflag1, tflag2; /*reserved for use by tools*/
+ struct BME_Poly *next, *prev;
+ int EID;
+ int eflag1, eflag2; /*reserved for use by eulers*/
+ int tflag1, tflag2; /*reserved for use by tools*/
+ unsigned short flag, h;
+ unsigned short mat_nr;
+ struct BME_Loop *loopbase; /*First editloop around Polygon.*/
+ struct ListBase holes; /*list of inner loops in the face*/
+ unsigned int len; /*total length of the face. Eulers should preserve this data*/
+ void *data; /*custom face data*/
} BME_Poly;
@@ -199,6 +199,8 @@
#define BME_SELECTED(element) (element->flag & SELECT)
/*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);
#endif
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_eulers.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_eulers.c 2007-08-01 18:04:44 UTC (rev 11465)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_eulers.c 2007-08-01 18:54:23 UTC (rev 11466)
@@ -48,7 +48,7 @@
#include "BLI_ghash.h"
/*********************************************************
- * "Euler API" *
+ * "Euler API" *
* *
* *
* Primitive construction operators for mesh tools. *
@@ -85,6 +85,9 @@
TODO:
-Finish inserting 'strict' validation in all Eulers
+ -Add in proper handling of propogation of selection flags
+ -Fix lack of custom data handling for new loops with BME_SFME.
+ -Add in flagging of new elements with BME_NEW bitflag.
*/
#define RETCLEAR(bm) {bm->rval->v = bm->rval->e = bm->rval->f = bm->rva->l = NULL;}
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c 2007-08-01 18:04:44 UTC (rev 11465)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_mesh.c 2007-08-01 18:54:23 UTC (rev 11466)
@@ -86,7 +86,8 @@
if(type == BME_VERT) return ((BME_Vert*)element)->next;
else if(type == BME_EDGE) return ((BME_Edge*)element)->next;
else if(type == BME_POLY) return ((BME_Poly*)element)->next;
- else if(type == BME_LOOP) return ((BME_Loop*)element)->gref->next->data;
+ else if(type == BME_LOOP && ((BME_Loop*)element)->gref->next)
+ return ((BME_Loop*)element)->gref->next->data;
return NULL;
}
@@ -223,16 +224,22 @@
*
*/
+static void BME_clear_flag(BME_Mesh *bm, BME_Element *elem){
+ elem->tflag1 = elem->tflag2 = 0;
+ elem->flag &= ~BME_VISITED;
+ elem->flag &= ~BME_NEW;
+}
+
int BME_model_begin(BME_Mesh *bm){
BME_Vert *v;
BME_Edge *e;
BME_Poly *f;
BME_Loop *l;
- for(v=BME_first(bm,BME_VERT); v; v=BME_next(bm,BME_VERT,v)) v->tflag1 = v->tflag2 = 0;
- for(e=BME_first(bm,BME_EDGE); e; e=BME_next(bm,BME_EDGE,e)) e->tflag1 = e->tflag2 = 0;
- for(f=BME_first(bm,BME_POLY); f; f=BME_next(bm,BME_POLY,f)) f->tflag1 = f->tflag2 = 0;
- for(l=BME_first(bm,BME_LOOP); l; l=BME_next(bm,BME_LOOP,l)) l->tflag1 = l->tflag2 = 0;
+ for(v=BME_first(bm,BME_VERT); v; v=BME_next(bm,BME_VERT,v)) BME_clear_flag(bm,v);
+ for(e=BME_first(bm,BME_EDGE); e; e=BME_next(bm,BME_EDGE,e)) BME_clear_flag(bm,e);
+ for(f=BME_first(bm,BME_POLY); f; f=BME_next(bm,BME_POLY,f)) BME_clear_flag(bm,f);
+ for(l=BME_first(bm,BME_LOOP); l; l=BME_next(bm,BME_LOOP,l)) BME_clear_flag(bm,l);
}
void BME_model_end(BME_Mesh *bm){
Modified: branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
===================================================================
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list