[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19328] branches/bmesh/blender/source/ blender: fixed issue in connect vert, had to make a numerical error compensation value absurdly high for some reason I need to investigate .
Joseph Eagar
joeedh at gmail.com
Wed Mar 18 18:30:34 CET 2009
Revision: 19328
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19328
Author: joeedh
Date: 2009-03-18 18:30:33 +0100 (Wed, 18 Mar 2009)
Log Message:
-----------
fixed issue in connect vert, had to make a numerical error compensation value absurdly high for some reason I need to investigate. also removed constraints to produce nice tesselations from the ear clipper, since it doesn't really matter for what we do with it.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
branches/bmesh/blender/source/blender/bmesh/intern/editmesh_to_bmesh.c
branches/bmesh/blender/source/blender/editors/mesh/editmesh.c
branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c 2009-03-18 10:58:18 UTC (rev 19327)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c 2009-03-18 17:30:33 UTC (rev 19328)
@@ -275,7 +275,10 @@
BMFace *nf;
nf = bmesh_sfme(bm,f,v1,v2,nl);
- if (nf) BM_Copy_Attributes(bm, bm, f, nf);
+ if (nf) {
+ BM_Copy_Attributes(bm, bm, f, nf);
+ VECCOPY(nf->no, f->no);
+ }
return nf;
}
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c 2009-03-18 10:58:18 UTC (rev 19327)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c 2009-03-18 17:30:33 UTC (rev 19328)
@@ -444,12 +444,35 @@
{
int w1, w2, w3, w4, w5;
- /*w1 = winding(v1, v3, v4);
- w2 = winding(v2, v3, v4);
- w3 = winding(v3, v1, v2);
- w4 = winding(v4, v1, v2);
+/* int test1_a, test1_a, test2_a, test2_a;
+
+ test1_a = check_tri_clock_dir(l1p1, l1p2, l2p1);
+ test1_b = check_tri_clock_dir(l1p1, l1p2, l2p2);
+ if (test1_a != test1_b)
+ {
+ test2_a = check_tri_clock_dir(l2p1, l2p2, l1p1);
+ test2_b = check_tri_clock_dir(l2p1, l2p2, l1p2);
+ if (test2_a != test2_b)
+ {
+ return 1;
+ }
+ }*/
+ /*w1 = testedgesidef(v1, v2, v3);
+ w2 = testedgesidef(v1, v2, v4);
+ if(w1 != w2) {
+ w3 = testedgesidef(v3, v4, v1);
+ w4 = testedgesidef(v3, v4, v2);
+ if (w3 != w4) return 1;
+ }
+
+ return 0;*/
+
+ /*w1 = testedgesidef(v1, v3, v4);
+ w2 = testedgesidef(v2, v3, v4);
+ w3 = testedgesidef(v3, v1, v2);
+ w4 = testedgesidef(v4, v1, v2);
- return (w1 == w2) && (w3 == w4);*/
+ return (w1 == w2) && (w2 == w3) && (w3 == w4);*/
w1 = testedgesidef(v1, v3, v2);
w2 = testedgesidef(v2, v4, v1);
@@ -525,9 +548,9 @@
if (isear && !goodline(verts, f, v1->head.eflag2, v2->head.eflag2,
v3->head.eflag2, nvert))
isear = 0;
-
+
if(isear) {
- angle = VecAngle3(verts[v1->head.eflag2], verts[v2->head.eflag2], verts[v3->head.eflag2]);
+ /*angle = VecAngle3(verts[v1->head.eflag2], verts[v2->head.eflag2], verts[v3->head.eflag2]);
if(!bestear || ABS(angle-45.0f) < bestangle) {
bestear = l;
bestangle = ABS(45.0f-angle);
@@ -535,7 +558,9 @@
if (angle > 20 && angle < 90) break;
if (angle < 100 && i > 5) break;
- i += 1;
+ i += 1;*/
+ bestear = l;
+ break;
}
l = (BMLoop*)(l->head.next);
}
@@ -664,6 +689,7 @@
float edgevertsstack[200][3];
float (*projverts)[3] = projectverts;
float (*edgeverts)[3] = edgevertsstack;
+ float fac1 = 1.0000001f, fac2 = 0.9f; //9999f; //0.999f;
int i, j, a=0, clen;
if (f->len > 100) projverts = MEM_mallocN(sizeof(float)*3*f->len, "projvertsb");
@@ -681,7 +707,7 @@
VECCOPY(v1, loops[i][0]->v->co);
VECCOPY(v2, loops[i][1]->v->co);
- shrink_edgef(v1, v2, 0.9999f);
+ shrink_edgef(v1, v2, fac2);
VECCOPY(edgeverts[a], v1);
a++;
@@ -693,12 +719,17 @@
poly_rotate_plane(no, projverts, f->len);
poly_rotate_plane(no, edgeverts, len*2);
+ l = f->loopbase;
for (i=0; i<f->len; i++) {
p1 = projverts[i];
- out[0] = MAX2(out[0], p1[0]) + 0.01;
- out[1] = MAX2(out[1], p1[1]) + 0.01;
+ out[0] = MAX2(out[0], p1[0]) + 0.01f;
+ out[1] = MAX2(out[1], p1[1]) + 0.01f;
out[2] = 0.0f;
p1[2] = 0.0f;
+
+ //VECCOPY(l->v->co, p1);
+
+ l = (BMLoop*) l->head.next;
}
for (i=0; i<len; i++) {
@@ -708,10 +739,7 @@
/*do convexity test*/
for (i=0; i<len; i++) {
- l = (BMLoop*)loops[i][0];
VECCOPY(v2, edgeverts[i*2]);
-
- l = (BMLoop*)loops[i][1];
VECCOPY(v3, edgeverts[i*2+1]);
VecAddf(mid, v2, v3);
@@ -725,7 +753,7 @@
VECCOPY(v1, p1);
VECCOPY(v2, p2);
- shrink_edgef(v1, v2, 1.00001f);
+ shrink_edgef(v1, v2, fac1);
if (linecrossesf(p1, p2, mid, out)) clen++;
}
@@ -739,14 +767,19 @@
for (i=0; i<f->len; i++) {
p1 = projverts[i];
p2 = projverts[(i+1)%f->len];
+
+ VECCOPY(v1, p1);
+ VECCOPY(v2, p2);
+
+ shrink_edgef(v1, v2, fac1);
+
for (j=0; j<len; j++) {
if (!loops[j][0]) continue;
p3 = edgeverts[j*2];
p4 = edgeverts[j*2+1];
- if (linecrossesf(p1, p2, p3, p4) ||
- linecrossesf(p2, p1, p4, p3))
+ if (linecrossesf(v1, v2, p3, p4))
{
loops[j][0] = NULL;
}
@@ -755,7 +788,7 @@
for (i=0; i<len; i++) {
for (j=0; j<len; j++) {
- if (j != i) continue;
+ if (j == i) continue;
if (!loops[i][0]) continue;
if (!loops[j][0]) continue;
@@ -764,7 +797,14 @@
p3 = edgeverts[j*2];
p4 = edgeverts[j*2+1];
- if (linecrossesf(p1, p2, p3, p4)) loops[i][0]=NULL;
+ VECCOPY(v1, p1);
+ VECCOPY(v2, p2);
+
+ shrink_edgef(v1, v2, fac1);
+
+ if (linecrossesf(v1, v2, p3, p4)) {
+ loops[i][0]=NULL;
+ }
}
}
Modified: branches/bmesh/blender/source/blender/bmesh/intern/editmesh_to_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/editmesh_to_bmesh.c 2009-03-18 10:58:18 UTC (rev 19327)
+++ branches/bmesh/blender/source/blender/bmesh/intern/editmesh_to_bmesh.c 2009-03-18 17:30:33 UTC (rev 19328)
@@ -1,3 +1,4 @@
+
#include "MEM_guardedalloc.h"
#include "BKE_customdata.h"
#include "DNA_listBase.h"
@@ -189,6 +190,8 @@
v2 = efa->v2->tmp.p;
f = BM_Make_Ngon(bm, v1, v2, edar, len, 0);
+
+ VECCOPY(f->no, efa->n);
BMO_Insert_MapPointer(bm, op, BMOP_FROM_EDITMESH_MAP, efa, f);
@@ -370,6 +373,8 @@
EditVert *eve;
EditEdge *eed;
EditFace *efa;
+ BMEdge *e;
+ BMIter iter;
int allocsize[4] = {512,512,2048,512}, numTex, numCol;
/*make sure to update FGon flags*/
@@ -416,6 +421,11 @@
/*convert f-gons*/
BM_fgonconvert(bm, op, em, numCol, numTex);
+ /*clean up any dangling fgon flags*/
+ for (e=BMIter_New(&iter, bm, BM_EDGES, NULL); e; e=BMIter_Step(&iter)){
+ e->head.flag &= ~BM_FGON;
+ }
+
/*do quads + triangles*/
for(efa = em->faces.first; efa; efa = efa->next){
if(!efa->tmp.l) editface_to_BMFace(bm, op, em, efa, numCol, numTex);
Modified: branches/bmesh/blender/source/blender/editors/mesh/editmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/editmesh.c 2009-03-18 10:58:18 UTC (rev 19327)
+++ branches/bmesh/blender/source/blender/editors/mesh/editmesh.c 2009-03-18 17:30:33 UTC (rev 19328)
@@ -1976,3 +1976,11 @@
}
}
+void EM_beginEditMesh(Object *ob)
+{
+ return ((Mesh *)ob->data)->edit_mesh;
+}
+
+void EM_endEditMesh(Object *ob, EditMesh *em)
+{
+}
Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h 2009-03-18 10:58:18 UTC (rev 19327)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_intern.h 2009-03-18 17:30:33 UTC (rev 19328)
@@ -67,6 +67,9 @@
/* ******************* editmesh.c */
+void EM_beginEditMesh(struct Object *ob);
+void EM_endEditMesh(struct Object *ob, EditMesh *em);
+
extern void free_editvert(EditMesh *em, EditVert *eve);
extern void free_editedge(EditMesh *em, EditEdge *eed);
extern void free_editface(EditMesh *em, EditFace *efa);
More information about the Bf-blender-cvs
mailing list