[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