[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19044] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Thu Feb 19 20:03:53 CET 2009


Revision: 19044
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19044
Author:   ton
Date:     2009-02-19 20:03:53 +0100 (Thu, 19 Feb 2009)

Log Message:
-----------
2.5

- Mesh Rip back (Vkey). For those who keep wondering how
  it works: just put mouse cursor somewhere close to the
  selection, press V and mouse mouse away from it. Feels
  like real rip!

- Made extrude sorta work, no menu/options yet though.
  But it does transform!

- Added an short event->mval[2] with region coords, 
  easier coding for the guys :)

- Fill operator standard delivers 'beauty' now

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-02-19 18:53:43 UTC (rev 19043)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-02-19 19:03:53 UTC (rev 19044)
@@ -90,6 +90,8 @@
 void viewray(struct ARegion *ar, struct View3D *v3d, short mval[2], float ray_start[3], float ray_normal[3]);
 
 int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
+void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);
+void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]);
 
 /* drawobject.c itterators */
 void mesh_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, int clipVerts);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c	2009-02-19 18:53:43 UTC (rev 19043)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c	2009-02-19 19:03:53 UTC (rev 19044)
@@ -124,13 +124,9 @@
 	EditVert *eve, *v1;
 	float min[3], max[3];
 	int done= 0;
-	short mval[2];
 	
 	em_setup_viewcontext(C, &vc);
 	
-	mval[0]= event->x - vc.ar->winrct.xmin;
-	mval[1]= event->y - vc.ar->winrct.ymin;
-	
 	INIT_MINMAX(min, max);
 	
 	for(v1= vc.em->verts.first;v1; v1=v1->next) {
@@ -164,7 +160,7 @@
 		VECCOPY(min, cent);
 		
 		Mat4MulVecfl(vc.obedit->obmat, min);	// view space
-		view3d_get_view_aligned_coordinate(&vc, min, mval);
+		view3d_get_view_aligned_coordinate(&vc, min, event->mval);
 		Mat4Invert(vc.obedit->imat, vc.obedit->obmat); 
 		Mat4MulVecfl(vc.obedit->imat, min); // back in object space
 		
@@ -206,7 +202,7 @@
 		float *curs= give_cursor(vc.scene, vc.v3d);
 		
 		VECCOPY(min, curs);
-		view3d_get_view_aligned_coordinate(&vc, min, mval);
+		view3d_get_view_aligned_coordinate(&vc, min, event->mval);
 		
 		eve= addvertlist(vc.em, 0, NULL);
 

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-02-19 18:53:43 UTC (rev 19043)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-02-19 19:03:53 UTC (rev 19044)
@@ -2024,15 +2024,10 @@
 
 static int mesh_loop_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-	ARegion *ar= CTX_wm_region(C);
-	short mval[2];	
 	
-	mval[0]= event->x - ar->winrct.xmin;
-	mval[1]= event->y - ar->winrct.ymin;
-	
 	view3d_operator_needs_opengl(C);
 	
-	mouse_mesh_loop(C, mval, RNA_boolean_get(op->ptr, "extend"),
+	mouse_mesh_loop(C, event->mval, RNA_boolean_get(op->ptr, "extend"),
 					RNA_boolean_get(op->ptr, "ring"));
 	
 	/* cannot do tweaks for as long this keymap is after transform map */
@@ -2130,15 +2125,10 @@
 
 static int mesh_shortest_path_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-	ARegion *ar= CTX_wm_region(C);
-	short mval[2];	
 	
-	mval[0]= event->x - ar->winrct.xmin;
-	mval[1]= event->y - ar->winrct.ymin;
-	
 	view3d_operator_needs_opengl(C);
 
-	mouse_mesh_shortest_path(C, mval);
+	mouse_mesh_shortest_path(C, event->mval);
 	
 	return OPERATOR_FINISHED;
 }
@@ -2365,8 +2355,8 @@
 	
 	if(vc.em->edges.first==0) return OPERATOR_CANCELLED;
 	
-	vc.mval[0]= event->x - vc.ar->winrct.xmin;
-	vc.mval[1]= event->y - vc.ar->winrct.ymin;
+	vc.mval[0]= event->mval[0];
+	vc.mval[1]= event->mval[1];
 	
 	/* return warning! */
 	if(limit) {

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-02-19 18:53:43 UTC (rev 19043)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-02-19 19:03:53 UTC (rev 19044)
@@ -88,6 +88,7 @@
 #include "ED_view3d.h"
 #include "ED_util.h"
 #include "ED_screen.h"
+#include "BIF_transform.h"
 
 #include "UI_interface.h"
 
@@ -632,26 +633,26 @@
 		else if(em->totvertsel==1) nr= 4;
 		else if(em->totedgesel==0) nr= 4;
 		else if(em->totfacesel==0) 
-			nr= pupmenu("Extrude %t|Only Edges%x3|Only Vertices%x4");
+			nr= 3; // pupmenu("Extrude %t|Only Edges%x3|Only Vertices%x4");
 		else if(em->totfacesel==1)
-			nr= pupmenu("Extrude %t|Region %x1|Only Edges%x3|Only Vertices%x4");
+			nr= 1; // pupmenu("Extrude %t|Region %x1|Only Edges%x3|Only Vertices%x4");
 		else 
-			nr= pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3|Only Vertices%x4");
+			nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3|Only Vertices%x4");
 	}
 	else if(em->selectmode & SCE_SELECT_EDGE) {
 		if (em->totedgesel==0) nr = 0;
 		else if (em->totedgesel==1) nr = 3;
 		else if(em->totfacesel==0) nr = 3;
 		else if(em->totfacesel==1)
-			nr= pupmenu("Extrude %t|Region %x1|Only Edges%x3");
+			nr= 1; // pupmenu("Extrude %t|Region %x1|Only Edges%x3");
 		else
-			nr= pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3");
+			nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3");
 	}
 	else {
 		if (em->totfacesel == 0) nr = 0;
 		else if (em->totfacesel == 1) nr = 1;
 		else
-			nr= pupmenu("Extrude %t|Region %x1||Individual Faces %x2");
+			nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2");
 	}
 		
 	if(nr<1) return;
@@ -696,18 +697,35 @@
 }
 
 // XXX should be a menu item
-static int mesh_extrude_exec(bContext *C, wmOperator *op)
+static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
 	Object *obedit= CTX_data_edit_object(C);
 	EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
 
 	extrude_mesh(obedit,em, op);
-		
+	
+	RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
+	WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
+
 	WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
 	
 	return OPERATOR_FINISHED;	
 }
 
+/* extrude without transform */
+static int mesh_extrude_exec(bContext *C, wmOperator *op)
+{
+	Object *obedit= CTX_data_edit_object(C);
+	EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
+	
+	extrude_mesh(obedit,em, op);
+	
+	WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
+	
+	return OPERATOR_FINISHED;	
+}
+
+
 void MESH_OT_extrude(wmOperatorType *ot)
 {
 	/* identifiers */
@@ -715,11 +733,15 @@
 	ot->idname= "MESH_OT_extrude";
 	
 	/* api callbacks */
+	ot->invoke= mesh_extrude_invoke;
 	ot->exec= mesh_extrude_exec;
 	ot->poll= ED_operator_editmesh;
 	
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	/* to give to transform */
+	RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
 }
 
 static int split_mesh(bContext *C, wmOperator *op)
@@ -1258,88 +1280,7 @@
 	RNA_def_enum(ot->srna, "type", prop_mesh_delete_types, 10, "Type", "Method used for deleting mesh data");
 }
 
-/* Got this from scanfill.c. You will need to juggle around the
- * callbacks for the scanfill.c code a bit for this to work. */
-void fill_mesh(EditMesh *em)
-{
-	EditVert *eve,*v1;
-	EditEdge *eed,*e1,*nexted;
-	EditFace *efa,*nextvl, *efan;
-	short ok;
 
-	if(em==NULL) return;
-	waitcursor(1);
-
-	/* copy all selected vertices */
-	eve= em->verts.first;
-	while(eve) {
-		if(eve->f & SELECT) {
-			v1= BLI_addfillvert(eve->co);
-			eve->tmp.v= v1;
-			v1->tmp.v= eve;
-			v1->xs= 0;	// used for counting edges
-		}
-		eve= eve->next;
-	}
-	/* copy all selected edges */
-	eed= em->edges.first;
-	while(eed) {
-		if( (eed->v1->f & SELECT) && (eed->v2->f & SELECT) ) {
-			e1= BLI_addfilledge(eed->v1->tmp.v, eed->v2->tmp.v);
-			e1->v1->xs++; 
-			e1->v2->xs++;
-		}
-		eed= eed->next;
-	}
-	/* from all selected faces: remove vertices and edges to prevent doubles */
-	/* all edges add values, faces subtract,
-	   then remove edges with vertices ->xs<2 */
-	efa= em->faces.first;
-	ok= 0;
-	while(efa) {
-		nextvl= efa->next;
-		if( faceselectedAND(efa, 1) ) {
-			efa->v1->tmp.v->xs--;
-			efa->v2->tmp.v->xs--;
-			efa->v3->tmp.v->xs--;
-			if(efa->v4) efa->v4->tmp.v->xs--;
-			ok= 1;
-			
-		}
-		efa= nextvl;
-	}
-	if(ok) {	/* there are faces selected */
-		eed= filledgebase.first;
-		while(eed) {
-			nexted= eed->next;
-			if(eed->v1->xs<2 || eed->v2->xs<2) {
-				BLI_remlink(&filledgebase,eed);
-			}
-			eed= nexted;
-		}
-	}
-
-	if(BLI_edgefill(0, em->mat_nr)) {
-		efa= fillfacebase.first;
-		while(efa) {
-			/* normals default pointing up */
-			efan= addfacelist(em, efa->v3->tmp.v, efa->v2->tmp.v, 
-							  efa->v1->tmp.v, 0, NULL, NULL);
-			if(efan) EM_select_face(efan, 1);
-			efa= efa->next;
-		}
-	}
-
-	BLI_end_edgefill();
-
-	// XXX option beautyfill */
-
-	WM_cursor_wait(0);
-	EM_select_flush(em);
-//	DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
-
-}
-
 /*GB*/
 /*-------------------------------------------------------------------------------*/
 /*--------------------------- Edge Based Subdivide ------------------------------*/
@@ -3104,173 +3045,7 @@
 	}	
 }	
 
-/* note; the EM_selectmode_set() calls here illustrate how badly constructed it all is... from before the
-   edge/face flags, with very mixed results.... */
-void beauty_fill(EditMesh *em)
-{
-	EditVert *v1, *v2, *v3, *v4;
-	EditEdge *eed, *nexted;
-	EditEdge dia1, dia2;
-	EditFace *efa, *w;
-	// void **efaar, **efaa;
-	EVPTuple *efaar;
-	EVPtr *efaa;
-	float len1, len2, len3, len4, len5, len6, opp1, opp2, fac1, fac2;
-	int totedge, ok, notbeauty=8, onedone, vindex[4];
-	
-	/* - all selected edges with two faces
-		* - find the faces: store them in edges (using datablock)
-		* - per edge: - test convex
-		*			   - test edge: flip?
-		*			   - if true: remedge,  addedge, all edges at the edge get new face pointers
-		*/
-	
-	EM_selectmode_set(em);	// makes sure in selectmode 'face' the edges of selected faces are selected too 
 
-	totedge = count_selected_edges(em->edges.first);
-	if(totedge==0) return;
-
-	/* temp block with face pointers */
-	efaar= (EVPTuple *) MEM_callocN(totedge * sizeof(EVPTuple), "beautyfill");
-
-	while (notbeauty) {
-		notbeauty--;
-

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list