[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23798] trunk/blender/source/blender: Project option for snap to faces.

Martin Poirier theeth at yahoo.com
Tue Oct 13 00:33:34 CEST 2009


Revision: 23798
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23798
Author:   theeth
Date:     2009-10-13 00:33:32 +0200 (Tue, 13 Oct 2009)

Log Message:
-----------
Project option for snap to faces.

This is similar to the old retopo all option but uses the snapping code and not the openGL depth buffer (it's thus more precise).

Not sure if making it available as a snap option is sensible, this is up for discussion.

NOTE: it will get slow fast on large meshes, we need to plug in an acceleration structure into snapping.

This will need an icon too.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/armature/editarmature_sketch.c
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/space_view3d/view3d_header.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/editors/transform/transform_ops.c
    trunk/blender/source/blender/editors/transform/transform_snap.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/RNA_enum_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/editors/armature/editarmature_sketch.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature_sketch.c	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/armature/editarmature_sketch.c	2009-10-12 22:33:32 UTC (rev 23798)
@@ -1174,6 +1174,7 @@
 		SK_Stroke *snap_stk;
 		float vec[3];
 		float no[3];
+		float mval[2];
 		int found = 0;
 		int dist = SNAP_MIN_DISTANCE; // Use a user defined value here
 
@@ -1197,9 +1198,12 @@
 				point_added = 1;
 			}
 		}
+		
+		mval[0] = dd->mval[0];
+		mval[1] = dd->mval[1];
 
 		/* try to snap to closer object */
-		found = snapObjectsContext(C, dd->mval, &dist, vec, no, SNAP_NOT_SELECTED);
+		found = snapObjectsContext(C, mval, &dist, vec, no, SNAP_NOT_SELECTED);
 		if (found == 1)
 		{
 			pt->type = dd->type;

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2009-10-12 22:33:32 UTC (rev 23798)
@@ -166,10 +166,10 @@
 
 #define SNAP_MIN_DISTANCE 30
 
-int peelObjectsTransForm(struct TransInfo *t, struct ListBase *depth_peels, short mval[2]);
-int peelObjectsContext(struct bContext *C, struct ListBase *depth_peels, short mval[2]);
-int snapObjectsTransform(struct TransInfo *t, short mval[2], int *dist, float *loc, float *no, SnapMode mode);
-int snapObjectsContext(struct bContext *C, short mval[2], int *dist, float *loc, float *no, SnapMode mode);
+int peelObjectsTransForm(struct TransInfo *t, struct ListBase *depth_peels, float mval[2]);
+int peelObjectsContext(struct bContext *C, struct ListBase *depth_peels, float mval[2]);
+int snapObjectsTransform(struct TransInfo *t, float mval[2], int *dist, float *loc, float *no, SnapMode mode);
+int snapObjectsContext(struct bContext *C, float mval[2], int *dist, float *loc, float *no, SnapMode mode);
 
 #endif
 

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2009-10-12 22:33:32 UTC (rev 23798)
@@ -88,8 +88,8 @@
 void project_float(struct ARegion *ar, float *vec, float *adr);
 void project_float_noclip(struct ARegion *ar, float *vec, float *adr);
 
-void viewline(struct ARegion *ar, struct View3D *v3d, short mval[2], float ray_start[3], float ray_end[3]);
-void viewray(struct ARegion *ar, struct View3D *v3d, short mval[2], float ray_start[3], float ray_normal[3]);
+void viewline(struct ARegion *ar, struct View3D *v3d, float mval[2], float ray_start[3], float ray_end[3]);
+void viewray(struct ARegion *ar, struct View3D *v3d, float 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);
 int get_view3d_ortho(struct View3D *v3d, struct RegionView3D *rv3d);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2009-10-12 22:33:32 UTC (rev 23798)
@@ -2144,6 +2144,10 @@
 					uiDefIconButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_REDR, ICON_SNAP_PEEL_OBJECT,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Consider objects as whole when finding volume center");	
 					xco+= XIC;
 				}
+				if (ts->snap_mode == SCE_SNAP_MODE_FACE) {
+					uiDefIconButBitS(block, TOG, SCE_SNAP_PROJECT, B_REDR, ICON_ROTATECOLLECTION,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Project elements instead of snapping them");
+					xco+= XIC;
+				}
 				uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SNAP_VERTEX, snapmode_pup(), xco,yco,XIC+10,YIC, &(ts->snap_mode), 0.0, 0.0, 0, 0, "Snapping mode");
 				xco+= XIC + 10;
 				uiDefButS(block, MENU, B_NOP, "Snap Mode%t|Closest%x0|Center%x1|Median%x2|Active%x3",xco,yco,70,YIC, &ts->snap_target, 0, 0, 0, 0, "Snap Target Mode");

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2009-10-12 22:33:32 UTC (rev 23798)
@@ -482,7 +482,7 @@
 /* ********************************** */
 
 /* create intersection coordinates in view Z direction at mouse coordinates */
-void viewline(ARegion *ar, View3D *v3d, short mval[2], float ray_start[3], float ray_end[3])
+void viewline(ARegion *ar, View3D *v3d, float mval[2], float ray_start[3], float ray_end[3])
 {
 	RegionView3D *rv3d= ar->regiondata;
 	float vec[4];
@@ -517,7 +517,7 @@
 }
 
 /* create intersection ray in view Z direction at mouse coordinates */
-void viewray(ARegion *ar, View3D *v3d, short mval[2], float ray_start[3], float ray_normal[3])
+void viewray(ARegion *ar, View3D *v3d, float mval[2], float ray_start[3], float ray_normal[3])
 {
 	float ray_end[3];
 	

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/transform/transform.c	2009-10-12 22:33:32 UTC (rev 23798)
@@ -2605,7 +2605,6 @@
 			center = td->center;
 		}
 		else {
-			/* !TODO! Make this if not rely on G */
 			if(around==V3D_LOCAL && (t->settings->selectmode & SCE_SELECT_FACE)) {
 				center = td->center;
 			}

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/transform/transform.h	2009-10-12 22:33:32 UTC (rev 23798)
@@ -87,6 +87,7 @@
 	short	modeTarget;
 	short	mode;
 	short	align;
+	short	project;
 	short  	status;
 	float	snapPoint[3]; /* snapping from this point */
 	float	snapTarget[3]; /* to this point */
@@ -578,6 +579,7 @@
 void snapGridAction(TransInfo *t, float *val, GearsType action);
 
 void initSnapping(struct TransInfo *t, struct wmOperator *op);
+void applyProject(TransInfo *t);
 void applySnapping(TransInfo *t, float *vec);
 void resetSnapping(TransInfo *t);
 int  handleSnapping(TransInfo *t, struct wmEvent *event);

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-10-12 22:33:32 UTC (rev 23798)
@@ -125,7 +125,6 @@
 #include "ED_object.h"
 #include "ED_markers.h"
 #include "ED_mesh.h"
-#include "ED_retopo.h"
 #include "ED_types.h"
 #include "ED_uvedit.h"
 #include "ED_view3d.h"
@@ -4478,12 +4477,6 @@
 		if (t->obedit) {
 			if (cancelled==0) {
 				EM_automerge(t->scene, t->obedit, 1);
-#if 0 // TRANSFORM_FIX_ME
-				/* when snapping, delay retopo until after automerge */
-				if (G.qual & LR_CTRLKEY) {
-					retopo_do_all();
-				}
-#endif
 			}
 		}
 	}

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-12 21:12:30 UTC (rev 23797)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-12 22:33:32 UTC (rev 23798)
@@ -91,7 +91,6 @@
 #include "ED_keyframing.h"
 #include "ED_markers.h"
 #include "ED_mesh.h"
-#include "ED_retopo.h"
 #include "ED_particle.h"
 #include "ED_screen_types.h"
 #include "ED_space_api.h"
@@ -617,201 +616,201 @@
 			}
 		}
 	}
-	else if (t->obedit) {
-		if ELEM(t->obedit->type, OB_CURVE, OB_SURF) {
-			Curve *cu= t->obedit->data;
-			Nurb *nu= cu->editnurb->first;
-			
-			DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA);  /* sets recalc flags */
-			
-			if (t->state == TRANS_CANCEL) {
-				while(nu) {
-					calchandlesNurb(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */
-					nu= nu->next;
-				}
-			} else {
-				/* Normal updating */
-				while(nu) {
-					test2DNurb(nu);
-					calchandlesNurb(nu);
-					nu= nu->next;
-				}
-				/* TRANSFORM_FIX_ME */
-				// retopo_do_all();
-			}
+	else if (t->spacetype == SPACE_VIEW3D) {
+		
+		/* project */
+		if(t->state != TRANS_CANCEL) {
+			applyProject(t);
 		}
-		else if(t->obedit->type==OB_LATTICE) {
-			Lattice *la= t->obedit->data;
-			DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA);  /* sets recalc flags */
-
-			if(la->editlatt->flag & LT_OUTSIDE) outside_lattice(la->editlatt);
-		}
-		else if (t->obedit->type == OB_MESH) {
-			if(t->spacetype==SPACE_IMAGE) {
-				SpaceImage *sima= t->sa->spacedata.first;
+		
+		if (t->obedit) {
+			if ELEM(t->obedit->type, OB_CURVE, OB_SURF) {
+				Curve *cu= t->obedit->data;
+				Nurb *nu= cu->editnurb->first;
 				
-				flushTransUVs(t);
-				if(sima->flag & SI_LIVE_UNWRAP)
-					ED_uvedit_live_unwrap_re_solve();
+				DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA);  /* sets recalc flags */
 				
-				DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA);
-			} else {
-				EditMesh *em = ((Mesh*)t->obedit->data)->edit_mesh;
-				/* mirror modifier clipping? */
-				if(t->state != TRANS_CANCEL) {
-					/* TRANSFORM_FIX_ME */
-//					if ((G.qual & LR_CTRLKEY)==0) {
-//						/* Only retopo if not snapping, Note, this is the only case of G.qual being used, but we have no T_SHIFT_MOD - Campbell */
-//						retopo_do_all();
-//					}
-					clipMirrorModifier(t, t->obedit);
+				if (t->state == TRANS_CANCEL) {
+					while(nu) {
+						calchandlesNurb(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */
+						nu= nu->next;
+					}
+				} else {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list