[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53770] trunk/blender/source/blender/ editors/transform/transform.c: optimization for calcNonProportionalEdgeSlide(), avoid matrix multiply for each vertex.
Campbell Barton
ideasman42 at gmail.com
Sun Jan 13 15:49:08 CET 2013
Revision: 53770
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53770
Author: campbellbarton
Date: 2013-01-13 14:49:04 +0000 (Sun, 13 Jan 2013)
Log Message:
-----------
optimization for calcNonProportionalEdgeSlide(), avoid matrix multiply for each vertex.
Modified Paths:
--------------
trunk/blender/source/blender/editors/transform/transform.c
Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c 2013-01-13 14:36:50 UTC (rev 53769)
+++ trunk/blender/source/blender/editors/transform/transform.c 2013-01-13 14:49:04 UTC (rev 53770)
@@ -4944,24 +4944,38 @@
TransDataEdgeSlideVert *sv = sld->sv;
if (sld->totsv > 0) {
+ ARegion *ar = t->ar;
+ RegionView3D *rv3d = NULL;
+ float projectMat[4][4];
+
int i = 0;
- float v_proj[3];
+ float v_proj[2];
float dist = 0;
float min_dist = FLT_MAX;
+ if (t->spacetype == SPACE_VIEW3D) {
+ /* background mode support */
+ rv3d = t->ar ? t->ar->regiondata : NULL;
+ }
+
+ if (!rv3d) {
+ /* ok, let's try to survive this */
+ unit_m4(projectMat);
+ }
+ else {
+ ED_view3d_ob_project_mat_get(rv3d, t->obedit, projectMat);
+ }
+
for (i = 0; i < sld->totsv; i++, sv++) {
/* Set length */
sv->edge_len = len_v3v3(sv->upvec, sv->downvec);
- mul_v3_m4v3(v_proj, t->obedit->obmat, sv->v->co);
- /* allow points behind the view [#33643] */
- if (ED_view3d_project_float_global(t->ar, v_proj, v_proj, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
- dist = len_squared_v2v2(mval, v_proj);
- if (dist < min_dist) {
- min_dist = dist;
- sld->curr_sv_index = i;
- }
+ ED_view3d_project_float_v2_m4(ar, sv->v->co, v_proj, projectMat);
+ dist = len_squared_v2v2(mval, v_proj);
+ if (dist < min_dist) {
+ min_dist = dist;
+ sld->curr_sv_index = i;
}
}
}
More information about the Bf-blender-cvs
mailing list