[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18231] branches/bmesh/bmesh: disabled option added in last commit to not allocate a flag layer
Joseph Eagar
joeedh at gmail.com
Fri Jan 2 00:45:56 CET 2009
Revision: 18231
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18231
Author: joeedh
Date: 2009-01-02 00:45:56 +0100 (Fri, 02 Jan 2009)
Log Message:
-----------
disabled option added in last commit to not allocate a flag layer
Modified Paths:
--------------
branches/bmesh/bmesh/bmesh_operators.h
branches/bmesh/bmesh/intern/bmesh_operators.c
branches/bmesh/bmesh/operators/subdivideop.c
Modified: branches/bmesh/bmesh/bmesh_operators.h
===================================================================
--- branches/bmesh/bmesh/bmesh_operators.h 2009-01-01 23:32:49 UTC (rev 18230)
+++ branches/bmesh/bmesh/bmesh_operators.h 2009-01-01 23:45:56 UTC (rev 18231)
@@ -69,7 +69,7 @@
void BMO_Flag_Buffer(struct BMesh *bm, struct BMOperator *op, int slotcode, int flag);
/*operator option flags*/
-#define NEEDFLAGS 1
+#define NEEDFLAGS 1 /*note: doesn't do anything*/
/*--------------------begin operator defines------------------------*/
/*split op*/
Modified: branches/bmesh/bmesh/intern/bmesh_operators.c
===================================================================
--- branches/bmesh/bmesh/intern/bmesh_operators.c 2009-01-01 23:32:49 UTC (rev 18230)
+++ branches/bmesh/bmesh/intern/bmesh_operators.c 2009-01-01 23:45:56 UTC (rev 18231)
@@ -48,7 +48,7 @@
bm->currentop = op;
/*add flag layer, if appropriate*/
- if(bm->stackdepth > 1 && op->needflag)
+ if(bm->stackdepth > 1)
alloc_flag_layer(bm);
}
@@ -64,7 +64,7 @@
void BMO_pop(BMesh *bm)
{
bm->stackdepth--;
- if(bm->stackdepth > 1 && bm->currentop->needflag)
+ if(bm->stackdepth > 1)
free_flag_layer(bm);
}
Modified: branches/bmesh/bmesh/operators/subdivideop.c
===================================================================
--- branches/bmesh/bmesh/operators/subdivideop.c 2009-01-01 23:32:49 UTC (rev 18230)
+++ branches/bmesh/bmesh/operators/subdivideop.c 2009-01-01 23:45:56 UTC (rev 18231)
@@ -41,7 +41,15 @@
int len; /*total number of verts*/
} subdpattern;
+/*generic subdivision rules:
+
+ * two selected edges in a face should make a link
+ between them.
+ * one edge should do, what? make pretty topology, or just
+ split the edge only?
+*/
+
/*note: the patterns are rotated as necassary to
match the input geometry. they're also based on the
post-splitted state of the faces. note that
@@ -105,10 +113,74 @@
6
};
+/*
+ e3
+v4---------v3
+| |
+|e4 | e2
+| |
+|e0 e1 |
+v0---v1----v2
+
+connect v1 to v4 and v3
+
+*/
+subdpattern q_1edge = {
+ {1, 1, 0, 0, 0},
+ {-1, 3, -1, -1, 1},
+ NULL,
+ NULL,
+ 5
+};
+
+/*
+ e4
+v5---------v4
+| |
+|e5 | e3
+| |v3
+|e0 e1 | e2
+v0---v1----v2
+
+connect v1 to v3
+
+*/
+subdpattern q_2adjedge = {
+ {1, 1, 1, 1, 0, 0},
+ {-1, 3, -1, -1, -1, -1},
+ NULL,
+ NULL,
+ 6
+};
+
+
+/*
+ e4 v4 e3
+v5---------v3
+| |
+|e5 |
+| | e2
+| e0 e1 |
+v0---v1----v2
+
+connect v1 to v4
+
+*/
+subdpattern q_2opedge = {
+ {1, 1, 0, 1, 1, 0},
+ {-1, 4, -1, -1, -1, -1},
+ NULL,
+ NULL,
+ 6
+};
+
subdpattern *patterns[] = {
&t_1edge,
&t_2edge,
&t_3edge,
+ &q_1edge,
+ &q_2adjedge,
+ &q_2opedge,
};
#define PLEN (sizeof(patterns) / sizeof(void*))
@@ -121,7 +193,7 @@
BMOpSlot *einput;
BMEdge *edge, *nedge, *edges[MAX_FACE];
BMFace *face;
- BMLoop *nl;
+ BMLoop *nl, *loop;
BMVert *v1, *verts[MAX_FACE], *lastv;
BMIter fiter, eiter;
subdpattern *pat;
@@ -149,15 +221,17 @@
if (patterns[i]->len != face->len) continue;
lastv = NULL;
for (j=0; j<patterns[i]->len; j++) {
- for (a=0, edge=BMIter_New(&eiter, bmesh, BM_EDGES_OF_FACE, face); edge; a++, edge=BMIter_Step(&eiter)) {
- verts[a] = edge->v1 == lastv? edge->v2 : edge->v1;
+ for (a=0, loop=BMIter_New(&eiter, bmesh, BM_LOOPS_OF_FACE,face); loop; a++, loop=BMIter_Step(&eiter)) {
+ edge = loop->e;
+ verts[a] = loop->v;
edges[a] = edge;
b = (j + a) % patterns[i]->len;
- if (!(patterns[i]->seledges[b] == BMOP_TestFlag(bmesh, edge, SUBD_SPLIT))) break;
+ if (!(patterns[i]->seledges[b] && BMOP_TestFlag(bmesh, edge, SUBD_SPLIT))) break;
lastv = verts[a];
}
+
if (a == face->len) {
matched = 1;
pat = patterns[i];
@@ -194,6 +268,7 @@
}
}
} else { /*no match in the pattern*/
+ /*this should do some sort of generic subdivision*/
}
}
}
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list