[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16405] trunk/blender/source/blender: Grease Pencil - Stick to View for Sequencer:
Joshua Leung
aligorith at gmail.com
Sun Sep 7 13:36:52 CEST 2008
Revision: 16405
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16405
Author: aligorith
Date: 2008-09-07 13:36:52 +0200 (Sun, 07 Sep 2008)
Log Message:
-----------
Grease Pencil - Stick to View for Sequencer:
The 'Stick to View' feature now works in the sequencer (image previews)
Modified Paths:
--------------
trunk/blender/source/blender/include/BIF_drawseq.h
trunk/blender/source/blender/src/drawgpencil.c
trunk/blender/source/blender/src/drawseq.c
trunk/blender/source/blender/src/gpencil.c
Modified: trunk/blender/source/blender/include/BIF_drawseq.h
===================================================================
--- trunk/blender/source/blender/include/BIF_drawseq.h 2008-09-07 10:47:33 UTC (rev 16404)
+++ trunk/blender/source/blender/include/BIF_drawseq.h 2008-09-07 11:36:52 UTC (rev 16405)
@@ -33,6 +33,8 @@
struct ScrArea;
struct Sequence;
+#define SEQ_ZOOM_FAC(szoom) (szoom > 0)? (szoom) : (szoom == 0)? (1.0) : (-1.0/szoom)
+
void drawprefetchseqspace(struct ScrArea *sa, void *spacedata);
void drawseqspace(struct ScrArea *sa, void *spacedata);
void set_special_seq_update(int val);
Modified: trunk/blender/source/blender/src/drawgpencil.c
===================================================================
--- trunk/blender/source/blender/src/drawgpencil.c 2008-09-07 10:47:33 UTC (rev 16404)
+++ trunk/blender/source/blender/src/drawgpencil.c 2008-09-07 11:36:52 UTC (rev 16405)
@@ -60,6 +60,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "BIF_butspace.h"
+#include "BIF_drawseq.h"
#include "BIF_graphics.h"
#include "BIF_interface.h"
#include "BIF_mywindow.h"
@@ -310,7 +311,7 @@
/* 'view align' button (naming depends on context) */
if (sa->spacetype == SPACE_VIEW3D)
uiDefButBitI(block, TOG, GP_DATA_VIEWALIGN, B_REDR, "Sketch in 3D", 170, 205, 150, 20, &gpd->flag, 0, 0, 0, 0, "New strokes are added in 3D-space");
- else if (sa->spacetype != SPACE_SEQ) /* not available for sequencer yet */
+ else
uiDefButBitI(block, TOG, GP_DATA_VIEWALIGN, B_REDR, "Stick to View", 170, 205, 150, 20, &gpd->flag, 0, 0, 0, 0, "New strokes are added on 2d-canvas");
}
@@ -411,8 +412,8 @@
co[1]= points->y;
}
else if (sflag & GP_STROKE_2DIMAGE) {
- co[0]= points->x;
- co[1]= points->y;
+ co[0]= (points->x * winx) + offsx;
+ co[1]= (points->y * winy) + offsy;
}
else {
co[0]= (points->x / 1000 * winx);
@@ -480,8 +481,12 @@
static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, short dflag, short sflag,
short debug, int offsx, int offsy, int winx, int winy)
{
- /* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, 'smooth' opengl lines look better */
- if ((thickness < GP_DRAWTHICKNESS_SPECIAL) || (dflag & GP_DRAWDATA_ONLYI2D)) {
+ /* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, 'smooth' opengl lines look better
+ * - but NOT if Image Editor 'image-based' stroke
+ */
+ if ( (thickness < GP_DRAWTHICKNESS_SPECIAL) ||
+ ((curarea->spacetype==SPACE_IMAGE) && (dflag & GP_DRAWDATA_ONLYV2D)) )
+ {
bGPDspoint *pt;
int i;
@@ -491,8 +496,8 @@
glVertex2f(pt->x, pt->y);
}
else if (sflag & GP_STROKE_2DIMAGE) {
- const float x= pt->x;
- const float y= pt->y;
+ const float x= (pt->x * winx) + offsx;
+ const float y= (pt->y * winy) + offsy;
glVertex2f(x, y);
}
@@ -505,7 +510,10 @@
}
glEnd();
}
- else { /* tesselation code: currently only enabled with rt != 0 */
+
+ /* tesselation code: currently only enabled with rt != 0 */
+ else
+ {
bGPDspoint *pt1, *pt2;
float pm[2];
int i;
@@ -526,8 +534,10 @@
s1[0]= pt2->x; s1[1]= pt2->y;
}
else if (sflag & GP_STROKE_2DIMAGE) {
- s0[0]= pt1->x; s0[1]= pt1->y;
- s1[0]= pt2->x; s1[1]= pt2->y;
+ s0[0]= (pt1->x * winx) + offsx;
+ s0[1]= (pt1->y * winy) + offsy;
+ s1[0]= (pt2->x * winx) + offsx;
+ s1[1]= (pt2->y * winy) + offsy;
}
else {
s0[0]= (pt1->x / 1000 * winx);
@@ -672,9 +682,8 @@
glVertex2f(pt->x, pt->y);
}
else if (sflag & GP_STROKE_2DIMAGE) {
- // fixme
- const float x= pt->x;
- const float y= pt->y;
+ const float x= (pt->x * winx) + offsx;
+ const float y= (pt->y * winy) + offsy;
glVertex2f(x, y);
}
@@ -889,7 +898,7 @@
{
bGPdata *gpd;
int offsx, offsy, sizex, sizey;
- int dflag = 0;
+ int dflag = GP_DRAWDATA_NOSTATUS;
/* check that we have grease-pencil stuff to draw */
if (ELEM(NULL, sa, ibuf)) return;
@@ -902,27 +911,54 @@
{
SpaceImage *sima= (SpaceImage *)sa->spacedata.first;
- // fixme... are these settings still needed?
+ /* just draw using standard scaling (settings here are currently ignored anyways) */
+ // FIXME: the opengl poly-strokes don't draw at right thickness when done this way, so disabled
offsx= 0;
offsy= 0;
sizex= sa->winx;
sizey= sa->winy;
myortho2(sima->v2d.cur.xmin, sima->v2d.cur.xmax, sima->v2d.cur.ymin, sima->v2d.cur.ymax);
+
+ dflag |= GP_DRAWDATA_ONLYV2D;
}
break;
+ case SPACE_SEQ: /* sequence */
+ {
+ SpaceSeq *sseq= (SpaceSeq *)sa->spacedata.first;
+ float zoom, zoomx, zoomy;
+
+ /* calculate accessory values */
+ zoom= SEQ_ZOOM_FAC(sseq->zoom);
+ if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
+ zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
+ zoomy = zoom;
+ }
+ else
+ zoomx = zoomy = zoom;
+
+ sizex= zoomx * ibuf->x;
+ sizey= zoomy * ibuf->y;
+ offsx= (sa->winx-sizex)/2 + sseq->xof;
+ offsy= (sa->winy-sizey)/2 + sseq->yof;
+
+ dflag |= GP_DRAWDATA_ONLYI2D;
+ }
+ break;
+
default: /* for spacetype not yet handled */
offsx= 0;
offsy= 0;
sizex= sa->winx;
sizey= sa->winy;
+
+ dflag |= GP_DRAWDATA_ONLYI2D;
break;
}
/* draw it! */
- dflag = (GP_DRAWDATA_ONLYI2D|GP_DRAWDATA_NOSTATUS);
gp_draw_data(gpd, offsx, offsy, sizex, sizey, dflag);
}
Modified: trunk/blender/source/blender/src/drawseq.c
===================================================================
--- trunk/blender/source/blender/src/drawseq.c 2008-09-07 10:47:33 UTC (rev 16404)
+++ trunk/blender/source/blender/src/drawseq.c 2008-09-07 11:36:52 UTC (rev 16405)
@@ -922,17 +922,11 @@
if(ibuf->rect_float && ibuf->rect==NULL)
IMB_rect_from_float(ibuf);
-
- if (sseq->zoom > 0) {
- zoom = sseq->zoom;
- } else if (sseq->zoom == 0) {
- zoom = 1.0;
- } else {
- zoom = -1.0/sseq->zoom;
- }
-
+
/* needed for gla draw */
glaDefine2DArea(&curarea->winrct);
+
+ zoom= SEQ_ZOOM_FAC(sseq->zoom);
if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
zoomy = zoom;
@@ -976,8 +970,11 @@
setlinestyle(0);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
+
+ /* draw grease-pencil (image aligned) */
+ if (sseq->flag & SEQ_DRAW_GPENCIL)
+ draw_gpencil_2dimage(sa, ibuf);
-
if (free_ibuf) {
IMB_freeImBuf(ibuf);
}
Modified: trunk/blender/source/blender/src/gpencil.c
===================================================================
--- trunk/blender/source/blender/src/gpencil.c 2008-09-07 10:47:33 UTC (rev 16404)
+++ trunk/blender/source/blender/src/gpencil.c 2008-09-07 11:36:52 UTC (rev 16405)
@@ -67,6 +67,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "BIF_butspace.h"
+#include "BIF_drawseq.h"
#include "BIF_editarmature.h"
#include "BIF_editview.h"
#include "BIF_graphics.h"
@@ -694,7 +695,6 @@
{
if (gps->flag & GP_STROKE_3DSPACE) {
/* directly use 3d-coordinates */
- // FIXME: maybe we need to counterotate this for object rotation?
VecCopyf(p3d, &pt->x);
}
else {
@@ -1246,17 +1246,45 @@
out[1]= y;
}
- /* 2d - on image 'canvas' (asume that p->v2d is set) */
- else if ( (gpd->sbuffer_sflag & GP_STROKE_2DIMAGE) &&
- (p->v2d) && (p->ibuf) )
+ /* 2d - on image 'canvas' (assume that p->v2d is set) */
+ else if ( (gpd->sbuffer_sflag & GP_STROKE_2DIMAGE) && (p->v2d) )
{
- float x, y;
-
- /* convert to 'canvas' coordinates (not need to adjust to canvas) */
- areamouseco_to_ipoco(p->v2d, mval, &x, &y);
-
- out[0]= x;
- out[1]= y;
+ /* for now - space specific */
+ switch (p->sa->spacetype) {
+ case SPACE_SEQ: /* sequencer */
+ {
+ SpaceSeq *sseq= (SpaceSeq *)p->sa->spacedata.first;
+ int sizex, sizey, offsx, offsy, rectx, recty;
+ float zoom, zoomx, zoomy;
+
+ /* calculate zoom factor */
+ zoom= SEQ_ZOOM_FAC(sseq->zoom);
+ if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
+ zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
+ zoomy = zoom;
+ }
+ else
+ zoomx = zoomy = zoom;
+
+ /* calculate rect size */
+ rectx= (G.scene->r.size*G.scene->r.xsch)/100;
+ recty= (G.scene->r.size*G.scene->r.ysch)/100;
+ sizex= zoomx * rectx;
+ sizey= zoomy * recty;
+ offsx= (p->sa->winx-sizex)/2 + sseq->xof;
+ offsy= (p->sa->winy-sizey)/2 + sseq->yof;
+
+ /* calculate new points */
+ out[0]= (float)(mval[0] - offsx) / (float)sizex;
+ out[1]= (float)(mval[1] - offsy) / (float)sizey;
+ }
+ break;
+
+ default: /* just use raw mouse coordinates - BAD! */
+ out[0]= mval[0];
+ out[1]= mval[1];
+ break;
+ }
}
/* 2d - relative to screen (viewport area) */
@@ -1487,6 +1515,11 @@
x0= xyval[0];
y0= xyval[1];
}
+ else if (gps->flag & GP_STROKE_2DIMAGE) {
+ ipoco_to_areaco_noclip(p->v2d, &gps->points->x, xyval);
+ x0= xyval[0];
+ y0= xyval[1];
+ }
else {
x0= (gps->points->x / 1000 * p->sa->winx);
y0= (gps->points->y / 1000 * p->sa->winy);
@@ -1530,6 +1563,15 @@
x1= xyval[0];
y1= xyval[1];
}
+ else if (gps->flag & GP_STROKE_2DIMAGE) {
+ ipoco_to_areaco_noclip(p->v2d, &pt1->x, xyval);
+ x0= xyval[0];
+ y0= xyval[1];
+
+ ipoco_to_areaco_noclip(p->v2d, &pt2->x, xyval);
+ x1= xyval[0];
+ y1= xyval[1];
+ }
else {
x0= (pt1->x / 1000 * p->sa->winx);
y0= (pt1->y / 1000 * p->sa->winy);
@@ -1553,8 +1595,6 @@
}
}
-/* -------- */
-
/* erase strokes which fall under the eraser strokes */
static void gp_stroke_doeraser (tGPsdata *p)
{
@@ -1626,14 +1666,14 @@
case SPACE_SEQ:
{
/* for now, this is not applicable here... */
- //p->gpd->sbuffer_sflag |= GP_STROKE_2DIMAGE;
+ p->gpd->sbuffer_sflag |= GP_STROKE_2DIMAGE;
}
break;
case SPACE_IMAGE:
{
/* check if any ibuf available */
if (p->ibuf)
- p->gpd->sbuffer_sflag |= GP_STROKE_2DIMAGE;
+ p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE;
}
break;
}
More information about the Bf-blender-cvs
mailing list