[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