diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-11-16 23:57:20 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-11-16 23:57:20 +0400 |
commit | 3ed866d2fc69e7c398e4b5f9bc9e2c06758d06cf (patch) | |
tree | c979010be379535c253a1fff6307daf8e6826996 /source | |
parent | 93581ab8159a0422403de67c35aa9ce8a11e8122 (diff) | |
parent | 3dcc9aef9685388255d4cf9d646830d573aeb932 (diff) |
svn merge -r41926:41932 ^/trunk/blender
Diffstat (limited to 'source')
27 files changed, 160 insertions, 68 deletions
diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h index a4a810ba177..75b3c5b4f24 100644 --- a/source/blender/blenkernel/BKE_dynamicpaint.h +++ b/source/blender/blenkernel/BKE_dynamicpaint.h @@ -46,6 +46,7 @@ typedef struct PaintWavePoint { float height; float velocity; + float brush_isect; short state; } PaintWavePoint; @@ -82,6 +83,7 @@ void dynamicPaint_outputSurfaceImage(struct DynamicPaintSurface *surface, char* #define DPAINT_PAINT_NEW 2 /* PaintWavePoint state */ +#define DPAINT_WAVE_ISECT_CHANGED -1 #define DPAINT_WAVE_NONE 0 #define DPAINT_WAVE_OBSTACLE 1 #define DPAINT_WAVE_REFLECT_ONLY 2 diff --git a/source/blender/blenkernel/intern/BME_Customdata.c b/source/blender/blenkernel/intern/BME_Customdata.c index 94307968933..424af08f943 100644 --- a/source/blender/blenkernel/intern/BME_Customdata.c +++ b/source/blender/blenkernel/intern/BME_Customdata.c @@ -87,7 +87,7 @@ void BME_CD_Create(BME_CustomData *data, BME_CustomDataInit *init, int initalloc if(data->totlayer){ /*alloc memory*/ data->layers = MEM_callocN(sizeof(BME_CustomDataLayer)*data->totlayer, "BMesh Custom Data Layers"); - data->pool = BLI_mempool_create(data->totsize, initalloc, initalloc, 1); + data->pool = BLI_mempool_create(data->totsize, initalloc, initalloc, TRUE); /*initialize layer data*/ for(i=0; i < BME_CD_NUMTYPES; i++){ if(init->layout[i]){ diff --git a/source/blender/blenkernel/intern/BME_mesh.c b/source/blender/blenkernel/intern/BME_mesh.c index 89f9a6bc945..dcca2da5414 100644 --- a/source/blender/blenkernel/intern/BME_mesh.c +++ b/source/blender/blenkernel/intern/BME_mesh.c @@ -56,10 +56,10 @@ BME_Mesh *BME_make_mesh(int allocsize[4]) /*allocate the structure*/ BME_Mesh *bm = MEM_callocN(sizeof(BME_Mesh),"BMesh"); /*allocate the memory pools for the mesh elements*/ - bm->vpool = BLI_mempool_create(sizeof(BME_Vert), allocsize[0], allocsize[0], 1, 0); - bm->epool = BLI_mempool_create(sizeof(BME_Edge), allocsize[1], allocsize[1], 1, 0); - bm->lpool = BLI_mempool_create(sizeof(BME_Loop), allocsize[2], allocsize[2], 1, 0); - bm->ppool = BLI_mempool_create(sizeof(BME_Poly), allocsize[3], allocsize[3], 1, 0); + bm->vpool = BLI_mempool_create(sizeof(BME_Vert), allocsize[0], allocsize[0], TRUE, FALSE); + bm->epool = BLI_mempool_create(sizeof(BME_Edge), allocsize[1], allocsize[1], TRUE, FALSE); + bm->lpool = BLI_mempool_create(sizeof(BME_Loop), allocsize[2], allocsize[2], TRUE, FALSE); + bm->ppool = BLI_mempool_create(sizeof(BME_Poly), allocsize[3], allocsize[3], TRUE, FALSE); return bm; } /* diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index f0b93212766..e2f8c68e75f 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2360,7 +2360,7 @@ void CustomData_bmesh_init_pool(CustomData *data, int allocsize) /* If there are no layers, no pool is needed just yet */ if (data->totlayer) { - data->pool = BLI_mempool_create(data->totsize, allocsize, allocsize, 1, 0); + data->pool = BLI_mempool_create(data->totsize, allocsize, allocsize, TRUE, FALSE); } } diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index d43f114e2af..11fe79daa51 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -98,7 +98,8 @@ static int neighY[8] = {0,1,1, 1, 0,-1,-1,-1}; /* paint effect default movement per frame in global units */ #define EFF_MOVEMENT_PER_FRAME 0.05f /* initial wave time factor */ -#define WAVE_TIME_FAC 0.1 +#define WAVE_TIME_FAC (1.0f/24.f) +#define WAVE_INIT_SIZE 5.0f /* drying limits */ #define MIN_WETNESS 0.001f /* dissolve macro */ @@ -149,6 +150,7 @@ typedef struct PaintBakeData { int *s_num; /* num of realCoord samples */ Vec3f *realCoord; /* current pixel center world-space coordinates for each sample * ordered as (s_pos+s_num)*/ + Bounds3D mesh_bounds; /* adjacency info */ BakeNeighPoint *bNeighs; /* current global neighbour distances and directions, if required */ @@ -969,7 +971,7 @@ struct DynamicPaintSurface *dynamicPaint_createNewSurface(DynamicPaintCanvasSett surface->color_spread_speed = 1.0f; surface->shrink_speed = 1.0f; - surface->wave_damping = 0.05f; + surface->wave_damping = 0.04f; surface->wave_speed = 1.0f; surface->wave_timescale = 1.0f; surface->wave_spring = 0.20f; @@ -1037,6 +1039,7 @@ int dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, stru brush->particle_radius = 0.2f; brush->particle_smooth = 0.05f; + brush->wave_type = MOD_DPAINT_WAVEB_CHANGE; brush->wave_factor = 1.0f; brush->wave_clamp = 0.0f; brush->smudge_strength = 0.3f; @@ -2070,7 +2073,6 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) PaintUVPoint *tempPoints = NULL; Vec3f *tempWeights = NULL; - /* MVert *mvert = NULL; */ /* UNUSED */ MFace *mface = NULL; MTFace *tface = NULL; Bounds2D *faceBB = NULL; @@ -2081,7 +2083,6 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ) return setError(canvas, "Can't bake non-\"image sequence\" formats."); numOfFaces = dm->getNumFaces(dm); - /* mvert = dm->getVertArray(dm); */ /* UNUSED */ mface = dm->getTessFaceArray(dm); /* get uv layer */ @@ -2859,7 +2860,12 @@ static void dynamicPaint_mixPaintColors(DynamicPaintSurface *surface, int index, /* applies given brush intersection value for wave surface */ static void dynamicPaint_mixWaveHeight(PaintWavePoint *wPoint, DynamicPaintBrushSettings *brush, float isect_height) { + float isect_change = isect_height - wPoint->brush_isect; int hit = 0; + /* intersection marked regardless of brush type or hit */ + wPoint->brush_isect = isect_height; + wPoint->state = DPAINT_WAVE_ISECT_CHANGED; + isect_height *= brush->wave_factor; /* determine hit depending on wave_factor */ @@ -2878,6 +2884,10 @@ static void dynamicPaint_mixWaveHeight(PaintWavePoint *wPoint, DynamicPaintBrush wPoint->velocity = isect_height; else if (brush->wave_type == MOD_DPAINT_WAVEB_REFLECT) wPoint->state = DPAINT_WAVE_REFLECT_ONLY; + else if (brush->wave_type == MOD_DPAINT_WAVEB_CHANGE) { + if (isect_change < 0.0f) + wPoint->height += isect_change*brush->wave_factor; + } } } @@ -4292,6 +4302,9 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale) float dt, min_dist, damp_factor; float wave_speed = surface->wave_speed; double average_dist = 0.0f; + Bounds3D *mb = &sData->bData->mesh_bounds; + float canvas_size = MAX3((mb->max[0]-mb->min[0]), (mb->max[1]-mb->min[1]), (mb->max[2]-mb->min[2])); + float wave_scale = WAVE_INIT_SIZE/canvas_size; /* allocate memory */ PaintWavePoint *prevPoint = MEM_mallocN(sData->total_points*sizeof(PaintWavePoint), "Temp previous points for wave simulation"); @@ -4307,11 +4320,11 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale) average_dist += bNeighs[sData->adj_data->n_index[index]+i].dist; } } - average_dist /= sData->adj_data->total_targets; + average_dist *= wave_scale/sData->adj_data->total_targets; /* determine number of required steps */ steps = (int)ceil((WAVE_TIME_FAC*timescale*surface->wave_timescale) / (average_dist/wave_speed/3)); - CLAMP(steps, 1, 15); + CLAMP(steps, 1, 20); timescale /= steps; /* apply simulation values for final timescale */ @@ -4332,12 +4345,12 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale) int numOfN = 0, numOfRN = 0; int i; - if (wPoint->state) continue; + if (wPoint->state > 0) continue; /* calculate force from surrounding points */ for (i=0; i<numOfNeighs; i++) { int n_index = sData->adj_data->n_index[index]+i; - float dist = bNeighs[n_index].dist; + float dist = bNeighs[n_index].dist*wave_scale; PaintWavePoint *tPoint = &prevPoint[sData->adj_data->n_target[n_index]]; if (!dist || tPoint->state>0) continue; @@ -4381,6 +4394,10 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale) #pragma omp parallel for schedule(static) for (index = 0; index < sData->total_points; index++) { PaintWavePoint *wPoint = &((PaintWavePoint*)sData->type_data)[index]; + /* if there wasnt any brush intersection, clear isect height */ + if (wPoint->state == DPAINT_WAVE_NONE) { + wPoint->brush_isect = 0.0f; + } wPoint->state = DPAINT_WAVE_NONE; } @@ -4594,10 +4611,11 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc /* * Make a transformed copy of canvas derived mesh vertices to avoid recalculation. */ - #pragma omp parallel for schedule(static) + bData->mesh_bounds.valid = 0; for (index=0; index<canvasNumOfVerts; index++) { copy_v3_v3(canvas_verts[index].v, mvert[index].co); mul_m4_v3(ob->obmat, canvas_verts[index].v); + boundInsert(&bData->mesh_bounds, canvas_verts[index].v); } /* diff --git a/source/blender/blenlib/intern/BLI_cellalloc.c b/source/blender/blenlib/intern/BLI_cellalloc.c index 47013535ce3..51a244b4bce 100644 --- a/source/blender/blenlib/intern/BLI_cellalloc.c +++ b/source/blender/blenlib/intern/BLI_cellalloc.c @@ -99,7 +99,7 @@ void *BLI_cellalloc_malloc(long size, const char *tag) } if (!pools[slot]) { - pools[slot] = BLI_mempool_create(slot, 1, 128, 1, 0); + pools[slot] = BLI_mempool_create(slot, 1, 128, TRUE, FALSE); } memh = BLI_mempool_alloc(pools[slot]); diff --git a/source/blender/blenlib/intern/BLI_ghash.c b/source/blender/blenlib/intern/BLI_ghash.c index 45edf6052d3..25b3da7a442 100644 --- a/source/blender/blenlib/intern/BLI_ghash.c +++ b/source/blender/blenlib/intern/BLI_ghash.c @@ -60,7 +60,7 @@ GHash *BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) { GHash *gh= MEM_mallocN(sizeof(*gh), info); gh->hashfp= hashfp; gh->cmpfp= cmpfp; - gh->entrypool = BLI_mempool_create(sizeof(Entry), 64, 64, 1, 0); + gh->entrypool = BLI_mempool_create(sizeof(Entry), 64, 64, TRUE, FALSE); gh->cursize= 0; gh->nentries= 0; diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c index 8a8c9054673..4b4bff7df78 100644 --- a/source/blender/blenlib/intern/edgehash.c +++ b/source/blender/blenlib/intern/edgehash.c @@ -49,7 +49,7 @@ EdgeHash *BLI_edgehash_new(void) { eh->nbuckets= _ehash_hashsizes[eh->cursize]; eh->buckets= MEM_callocN(eh->nbuckets*sizeof(*eh->buckets), "eh buckets 2"); - eh->epool = BLI_mempool_create(sizeof(EdgeEntry), 512, 512, 1, 0); + eh->epool = BLI_mempool_create(sizeof(EdgeEntry), 512, 512, TRUE, FALSE); return eh; } diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index 93de78200fb..7d42b3031ec 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -87,14 +87,14 @@ BMesh *BM_Make_Mesh(struct Object *ob, int allocsize[4]) bm->ob = ob; /*allocate the memory pools for the mesh elements*/ - bm->vpool = BLI_mempool_create(vsize, allocsize[0], allocsize[0], 0, 1); - bm->epool = BLI_mempool_create(esize, allocsize[1], allocsize[1], 0, 1); - bm->lpool = BLI_mempool_create(lsize, allocsize[2], allocsize[2], 0, 0); - bm->looplistpool = BLI_mempool_create(lstsize, allocsize[3], allocsize[3], 0, 0); - bm->fpool = BLI_mempool_create(fsize, allocsize[3], allocsize[3], 0, 1); + bm->vpool = BLI_mempool_create(vsize, allocsize[0], allocsize[0], FALSE, TRUE); + bm->epool = BLI_mempool_create(esize, allocsize[1], allocsize[1], FALSE, TRUE); + bm->lpool = BLI_mempool_create(lsize, allocsize[2], allocsize[2], FALSE, FALSE); + bm->looplistpool = BLI_mempool_create(lstsize, allocsize[3], allocsize[3], FALSE, FALSE); + bm->fpool = BLI_mempool_create(fsize, allocsize[3], allocsize[3], FALSE, TRUE); /*allocate one flag pool that we dont get rid of.*/ - bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer), 512, 512, 0, 0); + bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer), 512, 512, FALSE, FALSE); bm->stackdepth = 1; bm->totflags = 1; @@ -183,14 +183,14 @@ void BM_Clear_Mesh(BMesh *bm) bm->ob = ob; /*allocate the memory pools for the mesh elements*/ - bm->vpool = BLI_mempool_create(vsize, allocsize[0], allocsize[0], 0, 1); - bm->epool = BLI_mempool_create(esize, allocsize[1], allocsize[1], 0, 1); - bm->lpool = BLI_mempool_create(lsize, allocsize[2], allocsize[2], 0, 0); - bm->looplistpool = BLI_mempool_create(lstsize, allocsize[3], allocsize[3], 0, 0); - bm->fpool = BLI_mempool_create(fsize, allocsize[4], allocsize[4], 0, 1); + bm->vpool = BLI_mempool_create(vsize, allocsize[0], allocsize[0], FALSE, TRUE); + bm->epool = BLI_mempool_create(esize, allocsize[1], allocsize[1], FALSE, TRUE); + bm->lpool = BLI_mempool_create(lsize, allocsize[2], allocsize[2], FALSE, FALSE); + bm->looplistpool = BLI_mempool_create(lstsize, allocsize[3], allocsize[3], FALSE, FALSE); + bm->fpool = BLI_mempool_create(fsize, allocsize[4], allocsize[4], FALSE, TRUE); /*allocate one flag pool that we dont get rid of.*/ - bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer), 512, 512, 0, 0); + bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer), 512, 512, FALSE, FALSE); bm->stackdepth = 1; bm->totflags = 1; } diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c index 590863aba91..7c731f8aa56 100644 --- a/source/blender/bmesh/intern/bmesh_operators.c +++ b/source/blender/bmesh/intern/bmesh_operators.c @@ -821,7 +821,7 @@ static void alloc_flag_layer(BMesh *bm) bm->totflags++; /*allocate new flag pool*/ - bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer)*bm->totflags, 512, 512, 0, 0); + bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer)*bm->totflags, 512, 512, FALSE, FALSE); /*now go through and memcpy all the flags. Loops don't get a flag layer at this time...*/ for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BMIter_Step(&verts)){ @@ -858,7 +858,7 @@ static void free_flag_layer(BMesh *bm) /*de-increment the totflags first...*/ bm->totflags--; /*allocate new flag pool*/ - bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer)*bm->totflags, 512, 512, 1, 0); + bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer)*bm->totflags, 512, 512, TRUE, FALSE); /*now go through and memcpy all the flags*/ for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BMIter_Step(&verts)){ diff --git a/source/blender/bmesh/intern/bmesh_walkers.c b/source/blender/bmesh/intern/bmesh_walkers.c index 4bedba5f4e4..1bb71c50dd0 100644 --- a/source/blender/bmesh/intern/bmesh_walkers.c +++ b/source/blender/bmesh/intern/bmesh_walkers.c @@ -105,7 +105,7 @@ void BMW_Init(BMWalker *walker, BMesh *bm, int type, int searchmask, int flag) walker->order = bm_walker_types[type]->order; } - walker->worklist = BLI_mempool_create(walker->structsize, 100, 100, 1, 0); + walker->worklist = BLI_mempool_create(walker->structsize, 100, 100, TRUE, FALSE); walker->states.first = walker->states.last = NULL; } diff --git a/source/blender/bmesh/operators/createops.c b/source/blender/bmesh/operators/createops.c index 028756c9d57..6dd7283d4b0 100644 --- a/source/blender/bmesh/operators/createops.c +++ b/source/blender/bmesh/operators/createops.c @@ -590,8 +590,8 @@ static PathBase *edge_pathbase_new(void) { PathBase *pb = MEM_callocN(sizeof(PathBase), "PathBase"); - pb->nodepool = BLI_mempool_create(sizeof(EPathNode), 1, 512, 1, 0); - pb->pathpool = BLI_mempool_create(sizeof(EPath), 1, 512, 1, 0); + pb->nodepool = BLI_mempool_create(sizeof(EPathNode), 1, 512, TRUE, FALSE); + pb->pathpool = BLI_mempool_create(sizeof(EPath), 1, 512, TRUE, FALSE); return pb; } diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index b4a86e5d74c..8c699c840dc 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -1917,7 +1917,7 @@ static int animchannels_borderselect_exec(bContext *C, wmOperator *op) bAnimContext ac; rcti rect; short selectmode=0; - int gesture_mode; + int gesture_mode, extend; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -1928,8 +1928,13 @@ static int animchannels_borderselect_exec(bContext *C, wmOperator *op) rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); - + gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); + extend= RNA_boolean_get(op->ptr, "extend"); + + if(!extend) + ANIM_deselect_anim_channels(&ac, ac.data, ac.datatype, 1, ACHANNEL_SETFLAG_CLEAR); + if (gesture_mode == GESTURE_MODAL_SELECT) selectmode = ACHANNEL_SETFLAG_ADD; else @@ -1963,7 +1968,7 @@ static void ANIM_OT_channels_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); } /* ******************* Rename Operator ***************************** */ diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index aa1af231afd..cc1fae170d0 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -1147,6 +1147,7 @@ static int ed_marker_border_select_exec(bContext *C, wmOperator *op) int xmax= RNA_int_get(op->ptr, "xmax"); int ymin= RNA_int_get(op->ptr, "ymin"); int ymax= RNA_int_get(op->ptr, "ymax"); + int extend= RNA_boolean_get(op->ptr, "extend"); UI_view2d_region_to_view(v2d, xmin, ymin, &xminf, &yminf); UI_view2d_region_to_view(v2d, xmax, ymax, &xmaxf, &ymaxf); @@ -1166,6 +1167,9 @@ static int ed_marker_border_select_exec(bContext *C, wmOperator *op) break; } } + else if (!extend) { + marker->flag &= ~SELECT; + } } WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); @@ -1198,7 +1202,7 @@ static void MARKER_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); } /* *********************** (de)select all ***************** */ diff --git a/source/blender/editors/mesh/knifetool.c b/source/blender/editors/mesh/knifetool.c index 55f6c9d0a6e..f9c0b151a6a 100755 --- a/source/blender/editors/mesh/knifetool.c +++ b/source/blender/editors/mesh/knifetool.c @@ -1760,9 +1760,9 @@ static int knifetool_init(bContext *C, wmOperator *op, int UNUSED(do_cut)) ED_region_tag_redraw(kcd->ar); - kcd->refs = BLI_mempool_create(sizeof(Ref), 1, 2048, 0, 0); - kcd->kverts = BLI_mempool_create(sizeof(KnifeVert), 1, 512, 0, 1); - kcd->kedges = BLI_mempool_create(sizeof(KnifeEdge), 1, 512, 0, 1); + kcd->refs = BLI_mempool_create(sizeof(Ref), 1, 2048, FALSE, FALSE); + kcd->kverts = BLI_mempool_create(sizeof(KnifeVert), 1, 512, FALSE, TRUE); + kcd->kedges = BLI_mempool_create(sizeof(KnifeEdge), 1, 512, FALSE, TRUE); kcd->origedgemap = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "knife origedgemap"); kcd->origvertmap = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "knife origvertmap"); diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index f717b827a7e..1382d58482d 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -269,11 +269,16 @@ static int actkeys_borderselect_exec(bContext *C, wmOperator *op) bAnimContext ac; rcti rect; short mode=0, selectmode=0; - int gesture_mode; + int gesture_mode, extend; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; + + /* clear all selection if not extending selection */ + extend= RNA_boolean_get(op->ptr, "extend"); + if (!extend) + deselect_action_keys(&ac, 1, SELECT_SUBTRACT); /* get settings from operator */ rect.xmin= RNA_int_get(op->ptr, "xmin"); @@ -330,7 +335,7 @@ void ACTION_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); ot->prop= RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); } diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 7791e9f3e57..7ef7e69c143 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -869,7 +869,7 @@ static int border_select_exec(bContext *C, wmOperator *op) MovieTrackingTrack *track; rcti rect; rctf rectf; - int change= 0, mode; + int change= 0, mode, extend; /* get rectangle from operator */ rect.xmin= RNA_int_get(op->ptr, "xmin"); @@ -881,6 +881,7 @@ static int border_select_exec(bContext *C, wmOperator *op) ED_clip_point_stable_pos(C, rect.xmax, rect.ymax, &rectf.xmax, &rectf.ymax); mode= RNA_int_get(op->ptr, "gesture_mode"); + extend= RNA_boolean_get(op->ptr, "extend"); /* do actual selection */ track= clip->tracking.tracks.first; @@ -888,8 +889,13 @@ static int border_select_exec(bContext *C, wmOperator *op) if((track->flag&TRACK_HIDDEN)==0) { MovieTrackingMarker *marker= BKE_tracking_get_marker(track, sc->user.framenr); - if(MARKER_VISIBLE(sc, marker) && BLI_in_rctf(&rectf, marker->pos[0], marker->pos[1])) { - BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, mode!=GESTURE_MODAL_SELECT); + if(MARKER_VISIBLE(sc, marker)) { + if(BLI_in_rctf(&rectf, marker->pos[0], marker->pos[1])) { + BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, mode!=GESTURE_MODAL_SELECT); + } + else if(!extend) { + BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, 1); + } change= 1; } @@ -921,10 +927,10 @@ void CLIP_OT_select_border(wmOperatorType *ot) ot->poll= ED_space_clip_poll; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_UNDO; /* properties */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); } /********************** circle select operator *********************/ diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index d6bab41f719..69c192b077b 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -273,13 +273,20 @@ static int file_border_select_exec(bContext *C, wmOperator *op) ARegion *ar= CTX_wm_region(C); rcti rect; FileSelect ret; - + int extend= RNA_boolean_get(op->ptr, "extend"); short select= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); + rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); + if(!extend) { + SpaceFile *sfile= CTX_wm_space_file(C); + + file_deselect_all(sfile, SELECTED_FILE); + } + BLI_isect_rcti(&(ar->v2d.mask), &rect, &rect); ret = file_select(C, &rect, select ? FILE_SEL_ADD : FILE_SEL_REMOVE, 0); @@ -306,7 +313,7 @@ void FILE_OT_select_border(wmOperatorType *ot) ot->cancel= WM_border_select_cancel; /* rna */ - WM_operator_properties_gesture_border(ot, 0); + WM_operator_properties_gesture_border(ot, 1); } static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 9fb880e0bc6..2ba79ee230a 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -289,11 +289,17 @@ static int graphkeys_borderselect_exec(bContext *C, wmOperator *op) rcti rect; short mode=0, selectmode=0; short incl_handles; + int extend; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - + + /* clear all selection if not extending selection */ + extend= RNA_boolean_get(op->ptr, "extend"); + if (!extend) + deselect_graph_keys(&ac, 1, SELECT_SUBTRACT, TRUE); + /* get select mode * - 'gesture_mode' from the operator specifies how to select * - 'include_handles' from the operator specifies whether to include handles in the selection @@ -354,7 +360,7 @@ void GRAPH_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/; /* rna */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); ot->prop= RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); RNA_def_boolean(ot->srna, "include_handles", 0, "Include Handles", "Are handles tested individually against the selection criteria"); diff --git a/source/blender/editors/space_info/info_report.c b/source/blender/editors/space_info/info_report.c index eab6cb5402f..206639f064a 100644 --- a/source/blender/editors/space_info/info_report.c +++ b/source/blender/editors/space_info/info_report.c @@ -220,6 +220,7 @@ static int borderselect_exec(bContext *C, wmOperator *op) ARegion *ar= CTX_wm_region(C); ReportList *reports= CTX_wm_reports(C); int report_mask= info_report_mask(sinfo); + int extend= RNA_boolean_get(op->ptr, "extend"); Report *report_min, *report_max, *report; //View2D *v2d= UI_view2d_fromcontext(C); @@ -244,6 +245,16 @@ static int borderselect_exec(bContext *C, wmOperator *op) UI_view2d_region_to_view(v2d, mval[0], mval[1], &rectf.xmax, &rectf.ymax); */ + if(!extend) { + for(report= reports->list.first; report; report= report->next) { + + if((report->type & report_mask)==0) + continue; + + report->flag &= ~SELECT; + } + } + report_min= info_text_pick(sinfo, ar, reports, rect.ymax); report_max= info_text_pick(sinfo, ar, reports, rect.ymin); @@ -308,7 +319,7 @@ void INFO_OT_select_border(wmOperatorType *ot) /* ot->flag= OPTYPE_REGISTER; */ /* rna */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); } diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index 49340b31b47..0cb48582bc9 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -282,11 +282,17 @@ static int nlaedit_borderselect_exec(bContext *C, wmOperator *op) bAnimContext ac; rcti rect; short mode=0, selectmode=0; + int extend; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - + + /* clear all selection if not extending selection */ + extend= RNA_boolean_get(op->ptr, "extend"); + if (!extend) + deselect_nla_strips(&ac, DESELECT_STRIPS_TEST, SELECT_SUBTRACT); + /* get settings from operator */ rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); @@ -341,7 +347,7 @@ void NLA_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - WM_operator_properties_gesture_border(ot, 0); + WM_operator_properties_gesture_border(ot, 1); RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); } diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 593beedc765..c863efada9f 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -164,6 +164,7 @@ static int node_borderselect_exec(bContext *C, wmOperator *op) rcti rect; rctf rectf; int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); + int extend= RNA_boolean_get(op->ptr, "extend"); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); @@ -180,6 +181,9 @@ static int node_borderselect_exec(bContext *C, wmOperator *op) else node->flag &= ~SELECT; } + else if(!extend) { + node->flag &= ~SELECT; + } } node_sort(snode->edittree); @@ -228,7 +232,7 @@ void NODE_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); RNA_def_boolean(ot->srna, "tweak", 0, "Tweak", "Only activate when mouse is not over a node - useful for tweak gesture"); } diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index d749371a636..9eb900ed427 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -827,6 +827,7 @@ static int sequencer_borderselect_exec(bContext *C, wmOperator *op) rcti rect; rctf rectf, rq; short selecting = (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); + int extend = RNA_boolean_get(op->ptr, "extend"); int mval[2]; if(ed==NULL) @@ -852,6 +853,10 @@ static int sequencer_borderselect_exec(bContext *C, wmOperator *op) else seq->flag &= ~SEQ_ALLSEL; recurs_sel_seq(seq); } + else if(!extend) { + seq->flag &= ~SEQ_ALLSEL; + recurs_sel_seq(seq); + } } WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER|NA_SELECTED, scene); @@ -880,7 +885,7 @@ void SEQUENCER_OT_select_border(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* rna */ - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); } /* ****** Selected Grouped ****** */ diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index f8dd20dd0d0..c43ff88de7b 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -1705,7 +1705,7 @@ static void UV_OT_stitch(wmOperatorType *ot) /* ******************** (de)select all operator **************** */ -static int select_all_exec(bContext *C, wmOperator *op) +static void select_all_perform(bContext *C, int action) { Scene *scene; ToolSettings *ts; @@ -1717,7 +1717,6 @@ static int select_all_exec(bContext *C, wmOperator *op) Image *ima; MTexPoly *tf; MLoopUV *luv; - int action = RNA_enum_get(op->ptr, "action"); scene= CTX_data_scene(C); ts= CTX_data_tool_settings(C); @@ -1786,6 +1785,14 @@ static int select_all_exec(bContext *C, wmOperator *op) } } } +} + +static int select_all_exec(bContext *C, wmOperator *op) +{ + Object *obedit= CTX_data_edit_object(C); + int action= RNA_enum_get(op->ptr, "action"); + + select_all_perform(C, action); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); @@ -2531,7 +2538,7 @@ static int border_select_exec(bContext *C, wmOperator *op) MLoopUV *luv; rcti rect; rctf rectf; - int change, pinned, select, faces; + int change, pinned, select, faces, extend; /* get rectangle from operator */ rect.xmin= RNA_int_get(op->ptr, "xmin"); @@ -2545,6 +2552,10 @@ static int border_select_exec(bContext *C, wmOperator *op) /* figure out what to select/deselect */ select= (RNA_int_get(op->ptr, "gesture_mode") == GESTURE_MODAL_SELECT); pinned= RNA_boolean_get(op->ptr, "pinned"); + extend= RNA_boolean_get(op->ptr, "extend"); + + if(!extend) + select_all_perform(C, SEL_DESELECT); if(ts->uv_flag & UV_SYNC_SELECTION) faces= (ts->selectmode == SCE_SELECT_FACE); @@ -2644,7 +2655,7 @@ static void UV_OT_select_border(wmOperatorType *ot) /* properties */ RNA_def_boolean(ot->srna, "pinned", 0, "Pinned", "Border select pinned UVs only"); - WM_operator_properties_gesture_border(ot, FALSE); + WM_operator_properties_gesture_border(ot, TRUE); } /* ******************** circle select operator **************** */ diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c index fa40102f89e..b19b88248f4 100644 --- a/source/blender/imbuf/intern/moviecache.c +++ b/source/blender/imbuf/intern/moviecache.c @@ -204,9 +204,9 @@ struct MovieCache *IMB_moviecache_create(int keysize, GHashHashFP hashfp, GHashC MovieCache *cache; cache= MEM_callocN(sizeof(MovieCache), "MovieCache"); - cache->keys_pool= BLI_mempool_create(sizeof(MovieCacheKey), 64, 64, 0, 0); - cache->items_pool= BLI_mempool_create(sizeof(MovieCacheItem), 64, 64, 0, 0); - cache->userkeys_pool= BLI_mempool_create(keysize, 64, 64, 0, 0); + cache->keys_pool= BLI_mempool_create(sizeof(MovieCacheKey), 64, 64, FALSE, FALSE); + cache->items_pool= BLI_mempool_create(sizeof(MovieCacheItem), 64, 64, FALSE, FALSE); + cache->userkeys_pool= BLI_mempool_create(keysize, 64, 64, FALSE, FALSE); cache->hash= BLI_ghash_new(moviecache_hashhash, moviecache_hashcmp, "MovieClip ImBuf cache hash"); cache->keysize= keysize; diff --git a/source/blender/makesdna/DNA_dynamicpaint_types.h b/source/blender/makesdna/DNA_dynamicpaint_types.h index 22a0462985c..fdfd1e2b754 100644 --- a/source/blender/makesdna/DNA_dynamicpaint_types.h +++ b/source/blender/makesdna/DNA_dynamicpaint_types.h @@ -169,6 +169,7 @@ typedef struct DynamicPaintCanvasSettings { #define MOD_DPAINT_WAVEB_DEPTH 0 /* use intersection depth */ #define MOD_DPAINT_WAVEB_FORCE 1 /* act as a force on intersection area */ #define MOD_DPAINT_WAVEB_REFLECT 2 /* obstacle that reflects waves */ +#define MOD_DPAINT_WAVEB_CHANGE 3 /* use change of intersection depth from previous frame */ /* brush ray_dir */ #define MOD_DPAINT_RAY_CANVAS 0 diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c index 10042f5392a..893993794ba 100644 --- a/source/blender/makesrna/intern/rna_dynamicpaint.c +++ b/source/blender/makesrna/intern/rna_dynamicpaint.c @@ -623,8 +623,8 @@ static void rna_def_canvas_surface(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Damping", "Wave damping factor"); prop= RNA_def_property(srna, "wave_speed", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.01, 3.0); - RNA_def_property_ui_range(prop, 0.01, 1.5, 1, 2); + RNA_def_property_range(prop, 0.01, 5.0); + RNA_def_property_ui_range(prop, 0.20, 4.0, 1, 2); RNA_def_property_ui_text(prop, "Speed", "Wave propogation speed"); prop= RNA_def_property(srna, "wave_timescale", PROP_FLOAT, PROP_NONE); @@ -696,6 +696,7 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_dynamicpaint_brush_wave_type[] = { + {MOD_DPAINT_WAVEB_CHANGE, "CHANGE", 0, "Depth Change", ""}, {MOD_DPAINT_WAVEB_DEPTH, "DEPTH", 0, "Obstacle", ""}, {MOD_DPAINT_WAVEB_FORCE, "FORCE", 0, "Force", ""}, {MOD_DPAINT_WAVEB_REFLECT, "REFLECT", 0, "Reflect Only", ""}, @@ -758,7 +759,7 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna) prop= RNA_def_property(srna, "wave_type", PROP_ENUM, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_enum_items(prop, prop_dynamicpaint_brush_wave_type); - RNA_def_property_ui_text(prop, "Brush Effect", ""); + RNA_def_property_ui_text(prop, "Wave Type", ""); prop= RNA_def_property(srna, "wave_factor", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, -2.0, 2.0); |