[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36600] branches/bmesh/blender/source/ blender: =bmesh= fixed a crasher from last commit

Joseph Eagar joeedh at gmail.com
Tue May 10 19:26:37 CEST 2011


Revision: 36600
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36600
Author:   joeedh
Date:     2011-05-10 17:26:37 +0000 (Tue, 10 May 2011)
Log Message:
-----------
=bmesh= fixed a crasher from last commit

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
    branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2011-05-10 17:01:26 UTC (rev 36599)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2011-05-10 17:26:37 UTC (rev 36600)
@@ -1834,7 +1834,8 @@
 	int layer_index = CustomData_get_layer_index_n(data, type, n);
 
 	if(layer_index < 0) return 0;
-
+	if (!name) return 0;
+	
 	strcpy(data->layers[layer_index].name, name);
 	
 	return 1;

Modified: branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c	2011-05-10 17:01:26 UTC (rev 36599)
+++ branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c	2011-05-10 17:26:37 UTC (rev 36600)
@@ -260,8 +260,6 @@
 				continue;
 			}
 
-			BMO_SetFlag(bm, l->e, EDGE_DEL);
-
 			nextl = (BMLoop*) l->next;
 			prevl = (BMLoop*) l->prev;
 			

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-05-10 17:01:26 UTC (rev 36599)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-05-10 17:26:37 UTC (rev 36600)
@@ -2689,28 +2689,6 @@
 }
 /********************** Rip Operator *************************/
 
-#if 0
-/* helper for below */
-static void mesh_rip_setface(EditMesh *em, EditFace *sefa)
-{
-	/* put new vertices & edges in best face */
-	if(sefa->v1->tmp.v) sefa->v1= sefa->v1->tmp.v;
-	if(sefa->v2->tmp.v) sefa->v2= sefa->v2->tmp.v;
-	if(sefa->v3->tmp.v) sefa->v3= sefa->v3->tmp.v;
-	if(sefa->v4 && sefa->v4->tmp.v) sefa->v4= sefa->v4->tmp.v;
-
-	sefa->e1= addedgelist(em, sefa->v1, sefa->v2, sefa->e1);
-	sefa->e2= addedgelist(em, sefa->v2, sefa->v3, sefa->e2);
-	if(sefa->v4) {
-		sefa->e3= addedgelist(em, sefa->v3, sefa->v4, sefa->e3);
-		sefa->e4= addedgelist(em, sefa->v4, sefa->v1, sefa->e4);
-	}
-	else
-		sefa->e3= addedgelist(em, sefa->v3, sefa->v1, sefa->e3);
-
-}
-#endif
-
 /* helper to find edge for edge_rip */
 static float mesh_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *co2, short *mval)
 {
@@ -2870,7 +2848,7 @@
 			}
 		}
 	}
-
+	
 	EDBM_clear_flag_all(em, BM_SELECT);
 	BMO_HeaderFlag_Buffer(em->bm, &bmop, side?"edgeout2":"edgeout1", BM_SELECT, BM_EDGE);
 
@@ -2912,211 +2890,6 @@
 	WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
 
 	return OPERATOR_FINISHED;
-#if 0 //BMESH_TODO
-	ARegion *ar= CTX_wm_region(C);
-	RegionView3D *rv3d= ar->regiondata;
-	Object *obedit= CTX_data_edit_object(C);
-	EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
-	EditVert *eve, *nextve;
-	EditEdge *eed, *seed= NULL;
-	EditFace *efa, *sefa= NULL;
-	float projectMat[4][4], vec[3], dist, mindist;
-	short doit= 1, *mval= event->mval;
-
-	/* select flush... vertices are important */
-	EM_selectmode_set(em);
-
-	view3d_get_object_project_mat(rv3d, obedit, projectMat);
-
-	/* find best face, exclude triangles and break on face select or faces with 2 edges select */
-	mindist= 1000000.0f;
-	for(efa= em->faces.first; efa; efa=efa->next) {
-		if( efa->f & 1)
-			break;
-		if(efa->v4 && faceselectedOR(efa, SELECT) ) {
-			int totsel=0;
-
-			if(efa->e1->f & SELECT) totsel++;
-			if(efa->e2->f & SELECT) totsel++;
-			if(efa->e3->f & SELECT) totsel++;
-			if(efa->e4->f & SELECT) totsel++;
-
-			if(totsel>1)
-				break;
-			view3d_project_float(ar, efa->cent, vec, projectMat);
-			dist= sqrt( (vec[0]-mval[0])*(vec[0]-mval[0]) + (vec[1]-mval[1])*(vec[1]-mval[1]) );
-			if(dist<mindist) {
-				mindist= dist;
-				sefa= efa;
-			}
-		}
-	}
-
-	if(efa) {
-		BKE_report(op->reports, RPT_ERROR, "Can't perform ripping with faces selected this way");
-		BKE_mesh_end_editmesh(obedit->data, em);
-		return OPERATOR_CANCELLED;
-	}
-	if(sefa==NULL) {
-		BKE_report(op->reports, RPT_ERROR, "No proper selection or faces included");
-		BKE_mesh_end_editmesh(obedit->data, em);
-		return OPERATOR_CANCELLED;
-	}
-
-
-	/* duplicate vertices, new vertices get selected */
-	for(eve = em->verts.last; eve; eve= eve->prev) {
-		eve->tmp.v = NULL;
-		if(eve->f & SELECT) {
-			eve->tmp.v = addvertlist(em, eve->co, eve);
-			eve->f &= ~SELECT;
-			eve->tmp.v->f |= SELECT;
-		}
-	}
-
-	/* find the best candidate edge */
-	/* or one of sefa edges is selected... */
-	if(sefa->e1->f & SELECT) seed= sefa->e2;
-	if(sefa->e2->f & SELECT) seed= sefa->e1;
-	if(sefa->e3->f & SELECT) seed= sefa->e2;
-	if(sefa->e4 && sefa->e4->f & SELECT) seed= sefa->e3;
-
-	/* or we do the distance trick */
-	if(seed==NULL) {
-		mindist= 1000000.0f;
-		if(sefa->e1->v1->tmp.v || sefa->e1->v2->tmp.v) {
-			dist = mesh_rip_edgedist(ar, projectMat,
-									 sefa->e1->v1->co,
-									 sefa->e1->v2->co, mval);
-			if(dist<mindist) {
-				seed= sefa->e1;
-				mindist= dist;
-			}
-		}
-		if(sefa->e2->v1->tmp.v || sefa->e2->v2->tmp.v) {
-			dist = mesh_rip_edgedist(ar, projectMat,
-									 sefa->e2->v1->co,
-									 sefa->e2->v2->co, mval);
-			if(dist<mindist) {
-				seed= sefa->e2;
-				mindist= dist;
-			}
-		}
-		if(sefa->e3->v1->tmp.v || sefa->e3->v2->tmp.v) {
-			dist= mesh_rip_edgedist(ar, projectMat,
-									sefa->e3->v1->co,
-									sefa->e3->v2->co, mval);
-			if(dist<mindist) {
-				seed= sefa->e3;
-				mindist= dist;
-			}
-		}
-		if(sefa->e4 && (sefa->e4->v1->tmp.v || sefa->e4->v2->tmp.v)) {
-			dist= mesh_rip_edgedist(ar, projectMat,
-									sefa->e4->v1->co,
-									sefa->e4->v2->co, mval);
-			if(dist<mindist) {
-				seed= sefa->e4;
-				mindist= dist;
-			}
-		}
-	}
-
-	if(seed==NULL) {	// never happens?
-		BKE_report(op->reports, RPT_ERROR, "No proper edge found to start");
-		BKE_mesh_end_editmesh(obedit->data, em);
-		return OPERATOR_CANCELLED;
-	}
-
-	faceloop_select(em, seed, 2);	// tmp abuse for finding all edges that need duplicated, returns OK faces with f1
-
-	/* duplicate edges in the loop, with at least 1 vertex selected, needed for selection flip */
-	for(eed = em->edges.last; eed; eed= eed->prev) {
-		eed->tmp.v = NULL;
-		if((eed->v1->tmp.v) || (eed->v2->tmp.v)) {
-			EditEdge *newed;
-
-			newed= addedgelist(em, eed->v1->tmp.v?eed->v1->tmp.v:eed->v1,
-							   eed->v2->tmp.v?eed->v2->tmp.v:eed->v2, eed);
-			if(eed->f & SELECT) {
-				EM_select_edge(eed, 0);
-				EM_remove_selection(em, eed, EDITEDGE);
-				EM_select_edge(newed, 1);
-			}
-			eed->tmp.v = (EditVert *)newed;
-		}
-	}
-
-	/* first clear edges to help finding neighbours */
-	for(eed = em->edges.last; eed; eed= eed->prev) eed->f1= 0;
-
-	/* put new vertices & edges && flag in best face */
-	mesh_rip_setface(em, sefa);
-
-	/* starting with neighbours of best face, we loop over the seam */
-	sefa->f1= 2;
-	doit= 1;
-	while(doit) {
-		doit= 0;
-
-		for(efa= em->faces.first; efa; efa=efa->next) {
-			/* new vert in face */
-			if (efa->v1->tmp.v || efa->v2->tmp.v ||
-				efa->v3->tmp.v || (efa->v4 && efa->v4->tmp.v)) {
-				/* face is tagged with loop */
-				if(efa->f1==1) {
-					mesh_rip_setface(em, efa);
-					efa->f1= 2;
-					doit= 1;
-				}
-			}
-		}
-	}
-
-	/* remove loose edges, that were part of a ripped face */
-	for(eve = em->verts.first; eve; eve= eve->next) eve->f1= 0;
-	for(eed = em->edges.last; eed; eed= eed->prev) eed->f1= 0;
-	for(efa= em->faces.first; efa; efa=efa->next) {
-		efa->e1->f1= 1;
-		efa->e2->f1= 1;
-		efa->e3->f1= 1;
-		if(efa->e4) efa->e4->f1= 1;
-	}
-
-	for(eed = em->edges.last; eed; eed= seed) {
-		seed= eed->prev;
-		if(eed->f1==0) {
-			if(eed->v1->tmp.v || eed->v2->tmp.v ||
-			   (eed->v1->f & SELECT) || (eed->v2->f & SELECT)) {
-				remedge(em, eed);
-				free_editedge(em, eed);
-				eed= NULL;
-			}
-		}
-		if(eed) {
-			eed->v1->f1= 1;
-			eed->v2->f1= 1;
-		}
-	}
-
-	/* and remove loose selected vertices, that got duplicated accidentally */
-	for(eve = em->verts.first; eve; eve= nextve) {
-		nextve= eve->next;
-		if(eve->f1==0 && (eve->tmp.v || (eve->f & SELECT))) {
-			BLI_remlink(&em->verts,eve);
-			free_editvert(em, eve);
-		}
-	}
-
-	DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
-	WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
-
-	BKE_mesh_end_editmesh(obedit->data, em);
-
-//	RNA_enum_set(op->ptr, "proportional", 0);
-//	RNA_boolean_set(op->ptr, "mirror", 0);
-//	WM_operator_name_call(C, "TRANSFORM_OT_translate", WM_OP_INVOKE_REGION_WIN, op->ptr);
-#endif
 }
 
 void MESH_OT_rip(wmOperatorType *ot)




More information about the Bf-blender-cvs mailing list