示例#1
0
static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track,
                                 MovieTrackingPlaneMarker *plane_marker, bool is_active_track,
                                 bool draw_outline, int width, int height)
{
	bool tiny = (sc->flag & SC_SHOW_TINY_MARKER) != 0;
	bool is_selected_track = plane_track->flag & SELECT;
	bool draw_plane_quad = plane_track->image == NULL || plane_track->image_opacity == 0.0f;
	float px[2];

	if (draw_outline) {
		UI_ThemeColor(TH_MARKER_OUTLINE);
	}
	else {
		float color[3], selected_color[3];
		plane_track_colors(is_active_track, color, selected_color);
		if (is_selected_track) {
			glColor3fv(selected_color);
		}
		else {
			glColor3fv(color);
		}
	}

	px[0] = 1.0f / width / sc->zoom;
	px[1] = 1.0f / height / sc->zoom;

	/* Draw image */
	if (draw_outline == false) {
		draw_plane_marker_image(scene, plane_track, plane_marker);
	}

	if (draw_outline) {
		if (!tiny) {
			glLineWidth(3.0f);
		}
	}
	else if (tiny) {
		glLineStipple(3, 0xaaaa);
		glEnable(GL_LINE_STIPPLE);
	}

	if (draw_plane_quad) {
		/* Draw rectangle itself. */
		glBegin(GL_LINE_LOOP);
		glVertex2fv(plane_marker->corners[0]);
		glVertex2fv(plane_marker->corners[1]);
		glVertex2fv(plane_marker->corners[2]);
		glVertex2fv(plane_marker->corners[3]);
		glEnd();

		/* Draw axis. */
		if (!draw_outline) {
			float end_point[2];
			glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT);

			getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[1], end_point);
			glColor3f(1.0, 0.0, 0.0f);
			glBegin(GL_LINES);
			glVertex2fv(plane_marker->corners[0]);
			glVertex2fv(end_point);
			glEnd();

			getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[3], end_point);
			glColor3f(0.0, 1.0, 0.0f);
			glBegin(GL_LINES);
			glVertex2fv(plane_marker->corners[0]);
			glVertex2fv(end_point);
			glEnd();

			glPopAttrib();
		}
	}

	/* Draw sliders. */
	if (is_selected_track) {
		int i;
		for (i = 0; i < 4; i++) {
			draw_marker_slide_square(plane_marker->corners[i][0], plane_marker->corners[i][1],
			                         3.0f * px[0], 3.0f * px[1], draw_outline, px);
		}
	}

	if (draw_outline) {
		if (!tiny) {
			glLineWidth(1.0f);
		}
	}
	else if (tiny) {
		glDisable(GL_LINE_STIPPLE);
	}
}
示例#2
0
static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker,
                                    const float marker_pos[2], int outline, int sel, int act, int width, int height)
{
	float dx, dy, patdx, patdy, searchdx, searchdy;
	int tiny = sc->flag & SC_SHOW_TINY_MARKER;
	float col[3], scol[3], px[2], side;

	if ((tiny && outline) || (marker->flag & MARKER_DISABLED))
		return;

	if (!TRACK_VIEW_SELECTED(sc, track) || track->flag & TRACK_LOCKED)
		return;

	track_colors(track, act, col, scol);

	if (outline) {
		glLineWidth(3.0f);
		UI_ThemeColor(TH_MARKER_OUTLINE);
	}

	glPushMatrix();
	glTranslatef(marker_pos[0], marker_pos[1], 0);

	dx = 6.0f / width / sc->zoom;
	dy = 6.0f / height / sc->zoom;

	side = get_shortest_pattern_side(marker);
	patdx = min_ff(dx * 2.0f / 3.0f, side / 6.0f) * UI_DPI_FAC;
	patdy = min_ff(dy * 2.0f / 3.0f, side * width / height / 6.0f) * UI_DPI_FAC;

	searchdx = min_ff(dx, (marker->search_max[0] - marker->search_min[0]) / 6.0f) * UI_DPI_FAC;
	searchdy = min_ff(dy, (marker->search_max[1] - marker->search_min[1]) / 6.0f) * UI_DPI_FAC;

	px[0] = 1.0f / sc->zoom / width / sc->scale;
	px[1] = 1.0f / sc->zoom / height / sc->scale;

	if ((sc->flag & SC_SHOW_MARKER_SEARCH) && ((track->search_flag & SELECT) == sel || outline)) {
		if (!outline) {
			if (track->search_flag & SELECT)
				glColor3fv(scol);
			else
				glColor3fv(col);
		}

		/* search offset square */
		draw_marker_slide_square(marker->search_min[0], marker->search_max[1], searchdx, searchdy, outline, px);

		/* search re-sizing triangle */
		draw_marker_slide_triangle(marker->search_max[0], marker->search_min[1], searchdx, searchdy, outline, px);
	}

	if ((sc->flag & SC_SHOW_MARKER_PATTERN) && ((track->pat_flag & SELECT) == sel || outline)) {
		int i;
		float pat_min[2], pat_max[2];
/*		float dx = 12.0f / width, dy = 12.0f / height;*/ /* XXX UNUSED */
		float tilt_ctrl[2];

		if (!outline) {
			if (track->pat_flag & SELECT)
				glColor3fv(scol);
			else
				glColor3fv(col);
		}

		/* pattern's corners sliding squares */
		for (i = 0; i < 4; i++) {
			draw_marker_slide_square(marker->pattern_corners[i][0], marker->pattern_corners[i][1],
			                         patdx / 1.5f, patdy / 1.5f, outline, px);
		}

		/* ** sliders to control overall pattern  ** */
		add_v2_v2v2(tilt_ctrl, marker->pattern_corners[1], marker->pattern_corners[2]);

		BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);

		glEnable(GL_LINE_STIPPLE);
		glLineStipple(3, 0xaaaa);

#if 0
		/* TODO: disable for now, needs better approach visualizing this */

		glBegin(GL_LINE_LOOP);
		glVertex2f(pat_min[0] - dx, pat_min[1] - dy);
		glVertex2f(pat_max[0] + dx, pat_min[1] - dy);
		glVertex2f(pat_max[0] + dx, pat_max[1] + dy);
		glVertex2f(pat_min[0] - dx, pat_max[1] + dy);
		glEnd();

		/* marker's offset slider */
		draw_marker_slide_square(pat_min[0] - dx, pat_max[1] + dy, patdx, patdy, outline, px);

		/* pattern re-sizing triangle */
		draw_marker_slide_triangle(pat_max[0] + dx, pat_min[1] - dy, patdx, patdy, outline, px);
#endif

		glBegin(GL_LINES);
		glVertex2f(0.0f, 0.0f);
		glVertex2fv(tilt_ctrl);
		glEnd();

		glDisable(GL_LINE_STIPPLE);


		/* slider to control pattern tilt */
		draw_marker_slide_square(tilt_ctrl[0], tilt_ctrl[1], patdx, patdy, outline, px);
	}

	glPopMatrix();

	if (outline)
		glLineWidth(1.0f);
}
示例#3
0
static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track,
                                 MovieTrackingPlaneMarker *plane_marker, bool is_active_track,
                                 bool draw_outline, int width, int height)
{
	bool tiny = (sc->flag & SC_SHOW_TINY_MARKER) != 0;
	bool is_selected_track = (plane_track->flag & SELECT) != 0;
	const bool has_image = plane_track->image != NULL &&
	                       BKE_image_has_ibuf(plane_track->image, NULL);
	const bool draw_plane_quad = !has_image || plane_track->image_opacity == 0.0f;
	float px[2];

	if (draw_outline) {
		UI_ThemeColor(TH_MARKER_OUTLINE);
	}
	else {
		float color[3], selected_color[3];
		plane_track_colors(is_active_track, color, selected_color);
		if (is_selected_track) {
			glColor3fv(selected_color);
		}
		else {
			glColor3fv(color);
		}
	}

	px[0] = 1.0f / width / sc->zoom;
	px[1] = 1.0f / height / sc->zoom;

	/* Draw image */
	if (draw_outline == false) {
		draw_plane_marker_image(scene, plane_track, plane_marker);
	}

	if (draw_plane_quad) {

		const bool stipple = !draw_outline && tiny;
		const bool thick = draw_outline && !tiny;

		if (stipple) {
			GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
			GPU_basic_shader_line_stipple(3, 0xAAAA);
		}
		else {
			GPU_basic_shader_bind_enable(GPU_SHADER_LINE);
		}

		GPU_basic_shader_line_width(thick ? 3.0f : 1.0f);

		/* Draw rectangle itself. */
		glBegin(GL_LINE_LOOP);
		glVertex2fv(plane_marker->corners[0]);
		glVertex2fv(plane_marker->corners[1]);
		glVertex2fv(plane_marker->corners[2]);
		glVertex2fv(plane_marker->corners[3]);
		glEnd();

		/* Draw axis. */
		if (!draw_outline) {
			float end_point[2];
			glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT);

			glBegin(GL_LINES);

			getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[1], end_point);
			glColor3f(1.0, 0.0, 0.0f);
			glVertex2fv(plane_marker->corners[0]);
			glVertex2fv(end_point);

			getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[3], end_point);
			glColor3f(0.0, 1.0, 0.0f);
			glVertex2fv(plane_marker->corners[0]);
			glVertex2fv(end_point);

			glEnd();

			glPopAttrib();
		}

		if (stipple) {
			GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
		}
		else {
			GPU_basic_shader_bind_disable(GPU_SHADER_LINE);
		}
	}

	/* Draw sliders. */
	if (is_selected_track) {
		int i;
		for (i = 0; i < 4; i++) {
			draw_marker_slide_square(plane_marker->corners[i][0], plane_marker->corners[i][1],
			                         3.0f * px[0], 3.0f * px[1], draw_outline, px);
		}
	}
}