[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25789] trunk/blender/source/blender/ windowmanager/intern/wm_gesture.c: Replaced lasso gesture filling code with scanfill, not 100% as nice, but simpler and more compatible.

joe joeedh at gmail.com
Thu Jan 7 14:18:20 CET 2010


Eh? It's not like this is at all related to editmesh, it just reuses
the structs.

On Thu, Jan 7, 2010 at 2:48 AM, Campbell Barton <ideasman42 at gmail.com> wrote:
> I feel so dirty to thinking that its using horrid EditVerts for lasso drawing.
>
> On Thu, Jan 7, 2010 at 2:27 AM, Matt Ebb <matt at mke3.net> wrote:
>> Revision: 25789
>>          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25789
>> Author:   broken
>> Date:     2010-01-07 02:27:10 +0100 (Thu, 07 Jan 2010)
>>
>> Log Message:
>> -----------
>> Replaced lasso gesture filling code with scanfill, not 100% as nice, but simpler and more compatible.
>>
>> Modified Paths:
>> --------------
>>    trunk/blender/source/blender/windowmanager/intern/wm_gesture.c
>>
>> Modified: trunk/blender/source/blender/windowmanager/intern/wm_gesture.c
>> ===================================================================
>> --- trunk/blender/source/blender/windowmanager/intern/wm_gesture.c      2010-01-06 22:42:13 UTC (rev 25788)
>> +++ trunk/blender/source/blender/windowmanager/intern/wm_gesture.c      2010-01-07 01:27:10 UTC (rev 25789)
>> @@ -37,6 +37,8 @@
>>  #include "MEM_guardedalloc.h"
>>
>>  #include "BLI_blenlib.h"
>> +#include "BLI_editVert.h"      /* lasso tessellation */
>> +#include "BLI_scanfill.h"      /* lasso tessellation */
>>
>>  #include "BKE_context.h"
>>  #include "BKE_utildefines.h"
>> @@ -209,70 +211,48 @@
>>
>>  }
>>
>> -#ifndef WIN32
>> -/* Disabled for now, causing problems on Windows.. */
>> -
>> -/* more than 64 intersections will just leak.. not much and not a likely scenario */
>> -typedef struct TessData { int num; short *intersections[64]; } TessData;
>> -
>> -static void combine_cb(GLdouble coords[3], GLdouble *vertex_data[4], GLfloat weight[4], void **dataOut, void *data)
>> +static void draw_filled_lasso(wmGesture *gt)
>>  {
>> -       short *vertex;
>> -       TessData *td = (TessData *)data;
>> -       vertex = (short *)malloc(2*sizeof(short));
>> -       vertex[0] = (short)coords[0];
>> -       vertex[1] = (short)coords[1];
>> -       *dataOut = vertex;
>> -
>> -       if (td->num < 64) {
>> -               td->intersections[td->num++] = vertex;
>> -       }
>> -}
>> -
>> -static void free_tess_data(GLUtesselator *tess, TessData *td)
>> -{
>> +       EditVert *v, *lastv=NULL, *firstv=NULL;
>> +       EditEdge *e;
>> +       EditFace *efa;
>> +       short *lasso= (short *)gt->customdata;
>>        int i;
>> -       for (i=0; i<td->num; i++) {
>> -               free(td->intersections[i]);
>> +
>> +       for (i=0; i<gt->points; i++, lasso+=2) {
>> +               float co[3] = {(float)lasso[0], (float)lasso[1], 0.f};
>> +
>> +               v = BLI_addfillvert(co);
>> +               if (lastv)
>> +                       e = BLI_addfilledge(lastv, v);
>> +               lastv = v;
>> +        if (firstv==NULL) firstv = v;
>>        }
>> -       MEM_freeN(td);
>> -       td = NULL;
>> -       gluDeleteTess(tess);
>> +
>> +       BLI_addfilledge(firstv, v);
>> +       BLI_edgefill(0, 0);
>> +
>> +       glEnable(GL_BLEND);
>> +       glColor4f(1.0, 1.0, 1.0, 0.05);
>> +       glBegin(GL_TRIANGLES);
>> +       for (efa = fillfacebase.first; efa; efa=efa->next) {
>> +               glVertex2f(efa->v1->co[0], efa->v1->co[1]);
>> +               glVertex2f(efa->v2->co[0], efa->v2->co[1]);
>> +               glVertex2f(efa->v3->co[0], efa->v3->co[1]);
>> +       }
>> +       glEnd();
>> +       glDisable(GL_BLEND);
>> +
>> +       BLI_end_edgefill();
>>  }
>>
>> -#endif
>> -
>>  static void wm_gesture_draw_lasso(wmWindow *win, wmGesture *gt)
>>  {
>>        short *lasso= (short *)gt->customdata;
>>        int i;
>>
>> -#ifndef WIN32
>> -       TessData *data=MEM_callocN(sizeof(TessData), "tesselation data");
>> -       GLUtesselator *tess = gluNewTess();
>> +       draw_filled_lasso(gt);
>>
>> -       /* use GLU tesselator to draw a filled lasso shape */
>> -       gluTessCallback(tess, GLU_TESS_BEGIN, glBegin);
>> -       gluTessCallback(tess, GLU_TESS_VERTEX, glVertex2sv);
>> -       gluTessCallback(tess, GLU_TESS_END, glEnd);
>> -       gluTessCallback(tess, GLU_TESS_COMBINE_DATA, combine_cb);
>> -
>> -       glEnable(GL_BLEND);
>> -       glColor4f(1.0, 1.0, 1.0, 0.05);
>> -       gluTessBeginPolygon (tess, data);
>> -       gluTessBeginContour (tess);
>> -       for (i=0; i<gt->points; i++, lasso+=2) {
>> -               GLdouble d_lasso[2] = {(GLdouble)lasso[0], (GLdouble)lasso[1]};
>> -               gluTessVertex (tess, d_lasso, lasso);
>> -       }
>> -       gluTessEndContour (tess);
>> -       gluTessEndPolygon (tess);
>> -       glDisable(GL_BLEND);
>> -
>> -       free_tess_data(tess, data);
>> -
>> -#endif
>> -
>>        glEnable(GL_LINE_STIPPLE);
>>        glColor3ub(96, 96, 96);
>>        glLineStipple(1, 0xAAAA);
>>
>>
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>
>
>
>
> --
> - Campbell
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>


More information about the Bf-committers mailing list