[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18208] branches/bmesh/bmesh/tools/ BME_bevel.c: did a pass on the bevel code.
Joseph Eagar
joeedh at gmail.com
Thu Jan 1 03:20:54 CET 2009
Revision: 18208
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18208
Author: joeedh
Date: 2009-01-01 03:20:49 +0100 (Thu, 01 Jan 2009)
Log Message:
-----------
did a pass on the bevel code. still much to do there, but later.
Modified Paths:
--------------
branches/bmesh/bmesh/tools/BME_bevel.c
Modified: branches/bmesh/bmesh/tools/BME_bevel.c
===================================================================
--- branches/bmesh/bmesh/tools/BME_bevel.c 2009-01-01 02:00:15 UTC (rev 18207)
+++ branches/bmesh/bmesh/tools/BME_bevel.c 2009-01-01 02:20:49 UTC (rev 18208)
@@ -68,7 +68,7 @@
MEM_freeN(td);
}
-BME_TransData *BME_assign_transdata(BME_TransData_Head *td, BME_Mesh *bm, BMVert *v,
+BME_TransData *BME_assign_transdata(BME_TransData_Head *td, BMesh *bm, BMVert *v,
float *co, float *org, float *vec, float *loc,
float factor, float weight, float maxfactor, float *max) {
BME_TransData *vtd;
@@ -113,7 +113,7 @@
return BLI_memarena_alloc(td->ma, sizeof(float));
}
-static int BME_bevel_is_split_vert(BME_Loop *l) {
+static int BME_bevel_is_split_vert(BMLoop *l) {
/* look for verts that have already been added to the edge when
* beveling other polys; this can be determined by testing the
* vert and the edges around it for originality
@@ -198,10 +198,10 @@
* using the vert and the loop passed, get or make the split vert, set its coordinates
* and transform properties, and set the max limits.
* Finally, return the split vert. */
-static BMVert *BME_bevel_split_edge(BME_Mesh *bm, BMVert *v, BMVert *v1, BME_Loop *l, float *up_vec, float value, BME_TransData_Head *td) {
+static BMVert *BME_bevel_split_edge(BMesh *bm, BMVert *v, BMVert *v1, BMLoop *l, float *up_vec, float value, BME_TransData_Head *td) {
BME_TransData *vtd, *vtd1, *vtd2;
BMVert *sv, *v2, *v3, *ov;
- BME_Loop *lv1, *lv2;
+ BMLoop *lv1, *lv2;
BMEdge *ne, *e1, *e2;
float maxfactor, scale, len, dis, vec1[3], vec2[3], t_up_vec[3];
int is_edge, forward, is_split_vert;
@@ -217,13 +217,13 @@
return NULL;
}
e1 = v->edge; /* we just use the first two edges */
- e2 = BME_disk_nextedge(v->edge, v);
+ e2 = bmesh_disk_nextedge(v->edge, v);
if (e1 == e2) {
//printf("You need at least two edges to use BME_bevel_split_edge()\n");
return NULL;
}
- v2 = BME_edge_getothervert(e1, v);
- v3 = BME_edge_getothervert(e2, v);
+ v2 = BM_OtherEdgeVert(e1, v);
+ v3 = BM_OtherEdgeVert(e2, v);
if (v1 != v2 && v1 != v3) {
//printf("Error: more than 2 edges in v's disk cycle, or v1 does not share an edge with v\n");
return NULL;
@@ -234,8 +234,8 @@
else {
e1 = e2;
}
- ov = BME_edge_getothervert(e1,v);
- sv = BME_split_edge(bm,v,e1,&ne,0);
+ ov = BM_OtherEdgeVert(e1,v);
+ sv = BM_Split_Face(bm,v,e1,&ne,0);
//BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /*this is technically wrong...*/
//BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25);
//BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25);
@@ -277,8 +277,8 @@
}
else {
is_split_vert = 0;
- ov = BME_edge_getothervert(l->e,v);
- sv = BME_split_edge(bm,v,l->e,&ne,0);
+ ov = BM_OtherEdgeVert(l->e,v);
+ sv = BM_Split_Face(bm,v,l->e,&ne,0);
//BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /*this is technically wrong...*/
//BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25);
//BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25);
@@ -395,11 +395,11 @@
return max;
}
-static BMVert *BME_bevel_wire(BME_Mesh *bm, BMVert *v, float value, int res, int options, BME_TransData_Head *td) {
+static BMVert *BME_bevel_wire(BMesh *bm, BMVert *v, float value, int res, int options, BME_TransData_Head *td) {
BMVert *ov1, *ov2, *v1, *v2;
- ov1 = BME_edge_getothervert(v->edge, v);
- ov2 = BME_edge_getothervert(BME_disk_nextedge(v->edge, v), v);
+ ov1 = BM_OtherEdgeVert(v->edge, v);
+ ov2 = BM_OtherEdgeVert(bmesh_disk_nextedge(v->edge, v), v);
/* split the edges */
v1 = BME_bevel_split_edge(bm,v,ov1,NULL,NULL,value,td);
@@ -414,15 +414,20 @@
/* remove the original vert */
if (res) {
- BME_JEKV(bm,v->edge,v);
+ bmesh_jekv;
+
+ //void BM_Collapse_Vert(BMesh *bm, BMEdge *ke, BMVert *kv, float fac, int calcnorm){
+ //hrm, why is there a fac here? it just removes a vert
+ BM_Collapse_Vert(bm, v->edge, v, 1.0, 0);
+ //bmesh_jekv(bm,v->edge,v);
}
return v1;
}
-static BME_Loop *BME_bevel_edge(BME_Mesh *bm, BME_Loop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
+static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
BMVert *v1, *v2, *kv;
- BME_Loop *kl=NULL, *nl;
+ BMLoop *kl=NULL, *nl;
BMEdge *e;
BMFace *f;
@@ -458,16 +463,16 @@
if (kv) {
l = l->next;
if (kl->v == kv) {
- BME_split_face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
- BME_JFKE(bm,((BME_Loop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
- BME_collapse_vert(bm, kl->e, kv, 1.0);
+ BM_Split_Face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
+ bmesh_jfke(bm,((BMLoop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
+ BM_Collapse_Vert(bm, kl->e, kv, 1.0);
//BME_JEKV(bm,kl->e,kv);
}
else {
- BME_split_face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
- BME_JFKE(bm,((BME_Loop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
- BME_collapse_vert(bm, kl->e, kv, 1.0);
+ BM_Split_Face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
+ bmesh_jfke(bm,((BMLoop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
+ BM_Collapse_Vert(bm, kl->e, kv, 1.0);
//BME_JEKV(bm,kl->e,kv);
}
l = l->prev;
@@ -495,21 +500,21 @@
/* if we need to clean up geometry... */
if (kv) {
if (kl->v == kv) {
- BME_split_face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
- BME_JFKE(bm,((BME_Loop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
- BME_collapse_vert(bm, kl->e, kv, 1.0);
+ BM_Split_Face(bm,kl->f,kl->prev->v,kl->next->v,&nl,kl->prev->e);
+ bmesh_jfke(bm,((BMLoop*)kl->prev->radial.next->data)->f,kl->f,kl->prev->e);
+ BM_Collapse_Vert(bm, kl->e, kv, 1.0);
//BME_JEKV(bm,kl->e,kv);
}
else {
- BME_split_face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
- BME_JFKE(bm,((BME_Loop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
- BME_collapse_vert(bm, kl->e, kv, 1.0);
+ BM_Split_Face(bm,kl->f,kl->next->next->v,kl->v,&nl,kl->next->e);
+ bmesh_jfke(bm,((BMLoop*)kl->next->radial.next->data)->f,kl->f,kl->next->e);
+ BM_Collapse_Vert(bm, kl->e, kv, 1.0);
//BME_JEKV(bm,kl->e,kv);
}
}
if ((v1->tflag1 & BME_BEVEL_NONMAN)==0 || (v2->tflag1 & BME_BEVEL_NONMAN)==0) {
- BME_split_face(bm,f,v2,v1,&l,e);
+ BM_Split_Face(bm,f,v2,v1,&l,e);
l->e->tflag1 = BME_BEVEL_BEVEL;
l = l->radial.next->data;
}
@@ -521,7 +526,7 @@
return l;
}
-static BME_Loop *BME_bevel_vert(BME_Mesh *bm, BME_Loop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
+static BMLoop *BME_bevel_vert(BMesh *bm, BMLoop *l, float value, int options, float *up_vec, BME_TransData_Head *td) {
BMVert *v1, *v2;
BMFace *f;
@@ -536,7 +541,7 @@
l = l->next->next;
/* "cut off" this corner */
- f = BME_split_face(bm,l->f,v2,v1,NULL,l->e);
+ f = BM_Split_Face(bm,l->f,v2,v1,NULL,l->e);
return l;
}
@@ -554,8 +559,8 @@
* Returns -
* A BMFace pointer to the resulting inner face.
*/
-static BMFace *BME_bevel_poly(BME_Mesh *bm, BMFace *f, float value, int options, BME_TransData_Head *td) {
- BME_Loop *l, *ol;
+static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BME_TransData_Head *td) {
+ BMLoop *l, *ol;
BME_TransData *vtd1, *vtd2;
float up_vec[3], vec1[3], vec2[3], vec3[3], fac1, fac2, max = -1;
int len, i;
@@ -640,7 +645,7 @@
return l->f;
}
-static void BME_bevel_add_vweight(BME_TransData_Head *td, BME_Mesh *bm, BMVert *v, float weight, float factor, int options) {
+static void BME_bevel_add_vweight(BME_TransData_Head *td, BMesh *bm, BMVert *v, float weight, float factor, int options) {
BME_TransData *vtd;
if (v->tflag1 & BME_BEVEL_NONMAN) return;
@@ -674,7 +679,7 @@
}
-static bevel_init_verts(BME_Mesh *bm, int options, BME_TransData_Head *td){
+static bevel_init_verts(BMesh *bm, int options, BME_TransData_Head *td){
BMVert *v;
float weight;
for(v=bm->verts.first; v; v=v->next){
@@ -692,7 +697,7 @@
}
}
}
-static bevel_init_edges(BME_Mesh *bm, int options, BME_TransData_Head *td){
+static bevel_init_edges(BMesh *bm, int options, BME_TransData_Head *td){
BMEdge *e;
int count;
float weight;
@@ -721,34 +726,36 @@
/*clean up edges with 2 faces that share more than one edge*/
for( e = BM_first_element(bm, BME_EDGE); e; e = BM_next_element(bm, BME_EDGE, e)){
if(e->tflag1 & BME_BEVEL_BEVEL){
- count = BM_face_sharededges(e->loop->f, ((BME_Loop*)e->loop->radial.next->data)->f);
+ count = BM_face_sharededges(e->loop->f, ((BMLoop*)e->loop->radial.next->data)->f);
if(count > 1) e->tflag1 &= ~BME_BEVEL_BEVEL;
}
}
}
-static BME_Mesh *BME_bevel_initialize(BME_Mesh *bm, int options, int defgrp_index, float angle, BME_TransData_Head *td){
+static BMesh *BME_bevel_initialize(BMesh *bm, int options, int defgrp_index, float angle, BME_TransData_Head *td){
BMVert *v, *v2;
BMEdge *e, *curedge;
BMFace *f;
+ BMIter iter;
int wire, len;
+
+ for (v = BMIter_New(&iter, bm, BM_VERTS, nm); v; v = BMIter_Step(&iter)) v->tflag1 = 0;
+ for (e = BMIter_New(&iter, bm, BM_EDGES, nm); e; e = BMIter_Step(&iter)) e->tflag1 = 0;
+ for (f = BMIter_New(&iter, bm, BM_FACES, nm); f; f = BMIter_Step(&iter)) f->tflag1 = 0;
- for( v = BM_first_element(bm, BME_VERT); v; v = BM_next_element(bm, BME_VERT, v)) v->tflag1 = 0;
- for( e = BM_first_element(bm, BME_EDGE); e; e = BM_next_element(bm, BME_EDGE, e)) e->tflag1 = 0;
- for( f = BM_first_element(bm, BME_POLY); f; f = BM_next_element(bm, BME_POLY, f)) f->tflag1 = 0;
-
/*tag non-manifold geometry*/
- for( v = BM_first_element(bm, BME_VERT); v; v = BM_next_element(bm, BME_VERT, v)){
+ for (v = BMIter_New(&iter, bm, BM_VERTS, nm); v; v = BMIter_Step(&iter)) {
v->tflag1 = BME_BEVEL_ORIG;
if(v->edge){
BME_assign_transdata(td, bm, v, v->co, v->co, NULL, NULL, 0, -1, -1, NULL);
- if (BME_is_nonmanifold_vert(bm,v)) v->tflag1 |= BME_BEVEL_NONMAN;
+ if (BM_Nonmanifold_Vert(bm,v)) v->tflag1 |= BME_BEVEL_NONMAN;
/*test wire vert*/
- len = BME_cycle_length(BME_disk_getpointer(v->edge,v));
+ len = bmesh_cycle_length(bmesh_disk_getpointer(v->edge,v));
if(len == 2 && BME_wirevert(bm, v)) v->tflag1 &= ~BME_BEVEL_NONMAN;
}else v->tflag1 |= BME_BEVEL_NONMAN;
}
- for( e = BM_first_element(bm, BME_EDGE); e; e = BM_next_element(bm, BME_EDGE, e)){
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list