[Bf-blender-cvs] [9bb94192199] custom-manipulators: Merge branch 'blender2.8' into custom-manipulators

Campbell Barton noreply at git.blender.org
Mon Apr 3 05:18:15 CEST 2017


Commit: 9bb94192199e2b35734ee123e09dc56ce81b3da0
Author: Campbell Barton
Date:   Mon Apr 3 13:05:54 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rB9bb94192199e2b35734ee123e09dc56ce81b3da0

Merge branch 'blender2.8' into custom-manipulators

===================================================================



===================================================================

diff --cc source/blender/editors/space_view3d/view3d_draw_legacy.c
index 2566edb6183,3d43bc011e6..79eaa54881b
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@@ -2547,15 -2551,13 +2553,20 @@@ void view3d_main_region_draw_legacy(con
  	if (v3d->drawtype == OB_RENDER)
  		view3d_main_region_draw_engine(C, scene, ar, v3d, clip_border, &border_rect);
  
 +	VP_legacy_view3d_main_region_setup_view(scene, v3d, ar, NULL, NULL);
 +	glClear(GL_DEPTH_BUFFER_BIT);
 +
 +	WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_2D);
 +
 +	ED_region_pixelspace(ar);
 +
  	view3d_main_region_draw_info(C, scene, ar, v3d, grid_unit, render_border);
  
+ 	glMatrixMode(GL_PROJECTION);
+ 	gpuPopMatrix();
+ 	glMatrixMode(GL_MODELVIEW);
+ 	gpuPopMatrix();
+ 
  	v3d->flag |= V3D_INVALID_BACKBUF;
  
  	BLI_assert(BLI_listbase_is_empty(&v3d->afterdraw_transp));
diff --cc source/blender/editors/transform/transform_manipulator.c
index a459b3a071b,a9b3363e0c8..1563328a963
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@@ -1005,62 -703,101 +1005,62 @@@ static void drawflags_posemode(Object *
  	}
  }
  
 -
 -/* ******************** DRAWING STUFFIES *********** */
 -
 -static float screen_aligned(RegionView3D *rv3d, float mat[4][4])
 +static void drawflags_editmode(Object *obedit, View3D *v3d, RegionView3D *rv3d)
  {
 -	gpuTranslate3fv(mat[3]);
 -
 -	/* sets view screen aligned */
 -	gpuRotate3f(-360.0f * saacos(rv3d->viewquat[0]) / (float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]);
 -
 -	return len_v3(mat[0]); /* draw scale */
 -}
 -
 +	if ((obedit->lay & v3d->lay) == 0)
 +		return;
  
 -/* radring = radius of doughnut rings
 - * radhole = radius hole
 - * start = starting segment (based on nrings)
 - * end   = end segment
 - * nsides = amount of points in ring
 - * nrigns = amount of rings
 - */
 -static void partial_doughnut(unsigned int pos, float radring, float radhole, int start, int end, int nsides, int nrings)
 -{
 -	float theta, phi, theta1;
 -	float cos_theta, sin_theta;
 -	float cos_theta1, sin_theta1;
 -	float ring_delta, side_delta;
 -	int i, j, do_caps = true;
 -
 -	if (start == 0 && end == nrings) do_caps = false;
 -
 -	ring_delta = 2.0f * (float)M_PI / (float)nrings;
 -	side_delta = 2.0f * (float)M_PI / (float)nsides;
 -
 -	theta = (float)M_PI + 0.5f * ring_delta;
 -	cos_theta = cosf(theta);
 -	sin_theta = sinf(theta);
 -
 -	for (i = nrings - 1; i >= 0; i--) {
 -		theta1 = theta + ring_delta;
 -		cos_theta1 = cosf(theta1);
 -		sin_theta1 = sinf(theta1);
 -
 -		if (do_caps && i == start) {  // cap
 -			immBegin(GL_TRIANGLE_FAN, nsides+1);
 -			phi = 0.0;
 -			for (j = nsides; j >= 0; j--) {
 -				float cos_phi, sin_phi, dist;
 -
 -				phi += side_delta;
 -				cos_phi = cosf(phi);
 -				sin_phi = sinf(phi);
 -				dist = radhole + radring * cos_phi;
 -
 -				immVertex3f(pos, cos_theta1 * dist, -sin_theta1 * dist,  radring * sin_phi);
 -			}
 -			immEnd();
 +	if (obedit->type == OB_ARMATURE) {
 +		const bArmature *arm = obedit->data;
 +		EditBone *ebo;
 +		if ((v3d->around == V3D_AROUND_ACTIVE) && (ebo = arm->act_edbone)) {
 +			if (ebo->flag & BONE_EDITMODE_LOCKED)
 +				protectflag_to_drawflags(OB_LOCK_LOC | OB_LOCK_ROT | OB_LOCK_SCALE, &rv3d->twdrawflag);
  		}
 -		if (i >= start && i <= end) {
 -			immBegin(GL_TRIANGLE_STRIP, (nsides+1) * 2);
 -			phi = 0.0;
 -			for (j = nsides; j >= 0; j--) {
 -				float cos_phi, sin_phi, dist;
 -
 -				phi += side_delta;
 -				cos_phi = cosf(phi);
 -				sin_phi = sinf(phi);
 -				dist = radhole + radring * cos_phi;
 -
 -				immVertex3f(pos, cos_theta1 * dist, -sin_theta1 * dist, radring * sin_phi);
 -				immVertex3f(pos, cos_theta * dist, -sin_theta * dist,  radring * sin_phi);
 +		else {
 +			for (ebo = arm->edbo->first; ebo; ebo = ebo->next) {
 +				if (EBONE_VISIBLE(arm, ebo)) {
 +					if (ebo->flag & BONE_SELECTED) {
 +						if (ebo->flag & BONE_EDITMODE_LOCKED)
 +							protectflag_to_drawflags(OB_LOCK_LOC | OB_LOCK_ROT | OB_LOCK_SCALE, &rv3d->twdrawflag);
 +					}
 +				}
  			}
 -			immEnd();
  		}
 +	}
 +}
  
 -		if (do_caps && i == end) {    // cap
 -			immBegin(GL_TRIANGLE_FAN, nsides+1);
 -			phi = 0.0;
 -			for (j = nsides; j >= 0; j--) {
 -				float cos_phi, sin_phi, dist;
 +/**
 + * Refresh RegionView3D.twdrawflag based on protect-flags.
 + */
 +static void manipulator_drawflags_refresh(const bContext *C, View3D *v3d, RegionView3D *rv3d)
 +{
- 	Scene *scene = CTX_data_scene(C);
- 	Object *ob = OBACT, *obedit = CTX_data_edit_object(C);
++	SceneLayer *sl = CTX_data_scene_layer(C);
++	Object *ob = OBACT_NEW, *obedit = CTX_data_edit_object(C);
 +	bGPdata *gpd = CTX_data_gpencil_data(C);
 +	const bool is_gp_edit = ((gpd) && (gpd->flag & GP_DATA_STROKE_EDITMODE));
  
 -				phi -= side_delta;
 -				cos_phi = cosf(phi);
 -				sin_phi = sinf(phi);
 -				dist = radhole + radring * cos_phi;
 +	/* all enabled */
 +	rv3d->twdrawflag = 0xFFFF;
  
 -				immVertex3f(pos, cos_theta * dist, -sin_theta * dist,  radring * sin_phi);
 +	if (is_gp_edit) {
 +		/* pass */
 +	}
 +	else if (obedit) {
 +		drawflags_editmode(obedit, v3d, rv3d);
 +	}
 +	else if (ob && (ob->mode & OB_MODE_POSE)) {
 +		drawflags_posemode(ob, v3d, rv3d);
 +	}
 +	else if (ob && (ob->mode & OB_MODE_ALL_PAINT)) {
 +		/* pass */
 +	}
 +	else {
- 		for (Base *base = scene->base.first; base; base = base->next) {
- 			if (TESTBASELIB(v3d, base)) {
++		for (Base *base = sl->object_bases.first; base; base = base->next) {
++			if (TESTBASELIB_NEW(base)) {
 +				protectflag_to_drawflags(base->object->protectflag, &rv3d->twdrawflag);
  			}
 -			immEnd();
  		}
 -
 -
 -		theta = theta1;
 -		cos_theta = cos_theta1;
 -		sin_theta = sin_theta1;
  	}
  }
  
@@@ -1074,61 -814,119 +1074,62 @@@ static void manipulator_get_idot(Region
  	}
  }
  
 -/* three colors can be set:
 - * gray for ghosting
 - * moving: in transform theme color
 - * else the red/green/blue
 - */
 -static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned char alpha)
 +static void manipulator_prepare_mat(const bContext *C, View3D *v3d, RegionView3D *rv3d)
  {
 -	unsigned char col[4] = {0};
 -	col[3] = alpha;
 +	Scene *scene = CTX_data_scene(C);
++	SceneLayer *sl = CTX_data_scene_layer(C);
  
 -	if (colcode == MAN_GHOST) {
 -		col[3] = 70;
 -	}
 -	else if (colcode == MAN_MOVECOL) {
 -		UI_GetThemeColor3ubv(TH_TRANSFORM, col);
 -	}
 -	else {
 -		switch (axis) {
 -			case 'C':
 -				UI_GetThemeColor3ubv(TH_TRANSFORM, col);
 -				if (v3d->twmode == V3D_MANIP_LOCAL) {
 -					col[0] = col[0] > 200 ? 255 : col[0] + 55;
 -					col[1] = col[1] > 200 ? 255 : col[1] + 55;
 -					col[2] = col[2] > 200 ? 255 : col[2] + 55;
 +	switch (v3d->around) {
 +		case V3D_AROUND_CENTER_BOUNDS:
 +		case V3D_AROUND_ACTIVE:
 +		{
 +				bGPdata *gpd = CTX_data_gpencil_data(C);
- 				Object *ob = OBACT;
++				Object *ob = OBACT_NEW;
 +
 +				if (((v3d->around == V3D_AROUND_ACTIVE) && (scene->obedit == NULL)) &&
 +				    ((gpd == NULL) || !(gpd->flag & GP_DATA_STROKE_EDITMODE)) &&
 +				    (!(ob->mode & OB_MODE_POSE)))
 +				{
 +					copy_v3_v3(rv3d->twmat[3], ob->obmat[3]);
  				}
 -				else if (v3d->twmode == V3D_MANIP_NORMAL) {
 -					col[0] = col[0] < 55 ? 0 : col[0] - 55;
 -					col[1] = col[1] < 55 ? 0 : col[1] - 55;
 -					col[2] = col[2] < 55 ? 0 : col[2] - 55;
 +				else {
 +					mid_v3_v3v3(rv3d->twmat[3], scene->twmin, scene->twmax);
  				}
  				break;
 -			case 'X':
 -				UI_GetThemeColor3ubv(TH_AXIS_X, col);
 -				break;
 -			case 'Y':
 -				UI_GetThemeColor3ubv(TH_AXIS_Y, col);
 -				break;
 -			case 'Z':
 -				UI_GetThemeColor3ubv(TH_AXIS_Z, col);
 -				break;
 -			default:
 -				BLI_assert(0);
 -				break;
  		}
 +		case V3D_AROUND_LOCAL_ORIGINS:
 +		case V3D_AROUND_CENTER_MEAN:
 +			copy_v3_v3(rv3d->twmat[3], scene->twcent);
 +			break;
 +		case V3D_AROUND_CURSOR:
 +			copy_v3_v3(rv3d->twmat[3], ED_view3d_cursor3d_get(scene, v3d));
 +			break;
  	}
 -
 -	immUniformColor4ubv(col);
  }
  
 -static void manipulator_axis_order(RegionView3D *rv3d, int r_axis_order[3])
 +/**
 + * Sets up \a r_start and \a r_len to define arrow line range.
 + * Needed to adjust line drawing for combined manipulator axis types.
 + */
 +static void manipulator_line_range(const View3D *v3d, const short axis_type, float *r_start, float *r_len)
  {
 -	float axis_values[3];
 -	float vec[3];
 +	const float ofs = 0.2f;
  
 -	ED_view3d_global_to_vector(rv3d, rv3d->twmat[3], vec);
 +	*r_start = 0.2f;
 +	*r_len = 1.0f;
  
 -	axis_values[0] = -dot_v3v3(rv3d->twmat[0], vec);
 -	axis_values[1] = -dot_v3v3(rv3d->twmat[1], vec);
 -	axis_values[2] = -dot_v3v3(rv3d->twmat[2], vec);
 -
 -	axis_sort_v3(axis_values, r_axis_order);
 -}
 -
 -/* viewmatrix should have been set OK, also no shademode! */
 -static void draw_manipulator_axes_single(View3D *v3d, RegionView3D *rv3d, int colcode,
 -                                         int flagx, int flagy, int flagz, int axis,
 -                                         const bool is_picksel, unsigned int pos)
 -{
 -	switch (axis) {
 -		case 0:
 -			/* axes */
 -			if (flagx) {
 -				if (is_picksel) {
 -					if      (flagx & MAN_SCALE_X) GPU_select_load_id(MAN_SCALE_X);
 -					else if (flagx & MAN_TRANS_X) GPU_select_load_id(MAN_TRANS_X);
 -				}
 -				else {
 -					manipulator_setcolor(v3d, 'X', colcode, axisBlendAngle(rv3d->tw_idot[0]));
 -				}
 -				immBegin(GL_LINES, 2);
 -				immVertex3f(pos, 0.2f, 0.0f, 0.0f);
 -				immVertex3f(pos, 1.0f, 0.0f, 0.0f);
 -				immEnd();
 +	switch (axis_type) {
 +		case MAN_AXES_TRANSLATE:
 +			if (v3d->twtype & V3D_MANIP_SCALE) {
 +				*r_start = *r_len - ofs + 0.075f;
  			}
 -			break;
 -		case 1:
 -			if (flagy) {
 -				if (is_picksel) {
 -					if      (flagy & MAN_SCALE_Y) GPU_select_load_id(MAN_SCALE_Y);
 -					else if (flagy & MAN_TRANS_Y) GPU_select_load_id(MAN_TRANS_Y);
 -				}
 -				else {
 -					manipulator_setcolor(v3d, 'Y', colcode, axisBlendAngle(rv3d->tw_idot[1]));
 -				}
 -				immBegin(GL_LINES, 2);
 -				immVertex3f(pos, 0.0f, 0.2f, 0.0f);
 -				immVertex3f(pos, 0.0f, 1.0f, 0.0f);
 -				immEnd();
 +			if (v3d->twtype & V3D_MANIP_ROTATE) {
 +				*r

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list