diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-12-23 04:23:11 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-12-23 04:23:11 +0400 |
commit | 40449b1994301081f96d014df626a5375e020c76 (patch) | |
tree | 20220d8b071310fda8a0ab851c7a8f7bcc3ed8a2 /source/blender/blenkernel/intern | |
parent | fa0211df269a3398dd70467982f9e129c79e501b (diff) | |
parent | 3ca00cbf541d0283e91dc454866a5f24576271be (diff) |
Merged changes in the trunk up to revision 53280.
Diffstat (limited to 'source/blender/blenkernel/intern')
20 files changed, 298 insertions, 103 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 010839764b2..2dc01513149 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -857,30 +857,27 @@ DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob, return dm; } -static float *get_editbmesh_orco_verts(BMEditMesh *em) +static float (*get_editbmesh_orco_verts(BMEditMesh *em))[3] { BMIter iter; BMVert *eve; - float *orco; - int a, totvert; + float (*orco)[3]; + int i; /* these may not really be the orco's, but it's only for preview. * could be solver better once, but isn't simple */ - - totvert = em->bm->totvert; - orco = MEM_mallocN(sizeof(float) * 3 * totvert, "BMEditMesh Orco"); + orco = MEM_mallocN(sizeof(float) * 3 * em->bm->totvert, "BMEditMesh Orco"); - eve = BM_iter_new(&iter, em->bm, BM_VERTS_OF_MESH, NULL); - for (a = 0; eve; eve = BM_iter_step(&iter), a += 3) { - copy_v3_v3(orco + a, eve->co); + BM_ITER_MESH_INDEX (eve, &iter, em->bm, BM_VERTS_OF_MESH, i) { + copy_v3_v3(orco[i], eve->co); } return orco; } /* orco custom data layer */ -static void *get_orco_coords_dm(Object *ob, BMEditMesh *em, int layer, int *free) +static float (*get_orco_coords_dm(Object *ob, BMEditMesh *em, int layer, int *free))[3] { *free = 0; @@ -889,9 +886,9 @@ static void *get_orco_coords_dm(Object *ob, BMEditMesh *em, int layer, int *free *free = 1; if (em) - return (float(*)[3])get_editbmesh_orco_verts(em); + return get_editbmesh_orco_verts(em); else - return (float(*)[3])BKE_mesh_orco_verts_get(ob); + return BKE_mesh_orco_verts_get(ob); } else if (layer == CD_CLOTH_ORCO) { /* apply shape key for cloth, this should really be solved @@ -1815,17 +1812,18 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos BLI_linklist_free((LinkNode *)datamasks, NULL); } -float (*editbmesh_get_vertex_cos(BMEditMesh * em, int *numVerts_r))[3] +float (*editbmesh_get_vertex_cos(BMEditMesh *em, int *numVerts_r))[3] { - int i, numVerts = *numVerts_r = em->bm->totvert; - float (*cos)[3]; BMIter iter; BMVert *eve; + float (*cos)[3]; + int i; + + *numVerts_r = em->bm->totvert; - cos = MEM_mallocN(sizeof(float) * 3 * numVerts, "vertexcos"); + cos = MEM_mallocN(sizeof(float) * 3 * em->bm->totvert, "vertexcos"); - eve = BM_iter_new(&iter, em->bm, BM_VERTS_OF_MESH, NULL); - for (i = 0; eve; eve = BM_iter_step(&iter), i++) { + BM_ITER_MESH_INDEX (eve, &iter, em->bm, BM_VERTS_OF_MESH, i) { copy_v3_v3(cos[i], eve->co); } diff --git a/source/blender/blenkernel/intern/bpath.c b/source/blender/blenkernel/intern/bpath.c index e10a078c2f7..0d44f5cad6f 100644 --- a/source/blender/blenkernel/intern/bpath.c +++ b/source/blender/blenkernel/intern/bpath.c @@ -25,7 +25,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -/** \file blender/blenlib/intern/bpath.c +/** \file blender/blenkernel/intern/bpath.c * \ingroup bli */ diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 34adeb4fefb..61d0936d41d 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1875,7 +1875,7 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, bm->totface); CDDerivedMesh *cddm = (CDDerivedMesh *)dm; - BMIter iter, liter; + BMIter iter; BMVert *eve; BMEdge *eed; BMFace *efa; @@ -1913,7 +1913,7 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, CD_CALLOC, dm->numLoopData); CustomData_merge(&bm->pdata, &dm->polyData, mask, CD_CALLOC, dm->numPolyData); - + /* add tessellation mface layers */ if (use_tessface) { CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em_tottri); @@ -2002,7 +2002,8 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, j = 0; efa = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); for (i = 0; efa; i++, efa = BM_iter_step(&iter), index++) { - BMLoop *l; + BMLoop *l_iter; + BMLoop *l_first; MPoly *mp = &mpoly[i]; BM_elem_index_set(efa, i); /* set_inline */ @@ -2011,15 +2012,16 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, mp->flag = BM_face_flag_to_mflag(efa); mp->loopstart = j; mp->mat_nr = efa->mat_nr; - - BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { - mloop->v = BM_elem_index_get(l->v); - mloop->e = BM_elem_index_get(l->e); - CustomData_from_bmesh_block(&bm->ldata, &dm->loopData, l->head.data, j); + + l_iter = l_first = BM_FACE_FIRST_LOOP(efa); + do { + mloop->v = BM_elem_index_get(l_iter->v); + mloop->e = BM_elem_index_get(l_iter->e); + CustomData_from_bmesh_block(&bm->ldata, &dm->loopData, l_iter->head.data, j); j++; mloop++; - } + } while ((l_iter = l_iter->next) != l_first); CustomData_from_bmesh_block(&bm->pdata, &dm->polyData, efa->head.data, i); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index ffb93139358..7009f1235c9 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -427,11 +427,11 @@ int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListB return ret; } -static void data_dir_add(ListBase *lb, const char *member) +static void data_dir_add(ListBase *lb, const char *member, const short use_all) { LinkData *link; - if (strcmp(member, "scene") == 0) /* exception */ + if ((use_all == FALSE) && strcmp(member, "scene") == 0) /* exception */ return; if (BLI_findstring(lb, member, offsetof(LinkData, data))) @@ -442,7 +442,13 @@ static void data_dir_add(ListBase *lb, const char *member) BLI_addtail(lb, link); } -ListBase CTX_data_dir_get(const bContext *C) +/** + * \param C Context + * \param use_store Use 'C->wm.store' + * \param use_rna Use Include the properties from 'RNA_Context' + * \param use_all Don't skip values (currently only "scene") + */ +ListBase CTX_data_dir_get_ex(const bContext *C, const short use_store, const short use_rna, const short use_all) { bContextDataResult result; ListBase lb; @@ -453,11 +459,33 @@ ListBase CTX_data_dir_get(const bContext *C) memset(&lb, 0, sizeof(lb)); - if (C->wm.store) { + if (use_rna) { + char name[256], *nameptr; + int namelen; + + PropertyRNA *iterprop; + PointerRNA ctx_ptr; + RNA_pointer_create(NULL, &RNA_Context, (void *)C, &ctx_ptr); + + iterprop = RNA_struct_iterator_property(ctx_ptr.type); + + RNA_PROP_BEGIN (&ctx_ptr, itemptr, iterprop) + { + nameptr = RNA_struct_name_get_alloc(&itemptr, name, sizeof(name), &namelen); + data_dir_add(&lb, name, use_all); + if (nameptr) { + if (name != nameptr) { + MEM_freeN(nameptr); + } + } + } + RNA_PROP_END; + } + if (use_store && C->wm.store) { bContextStoreEntry *entry; for (entry = C->wm.store->entries.first; entry; entry = entry->next) - data_dir_add(&lb, entry->name); + data_dir_add(&lb, entry->name, use_all); } if ((ar = CTX_wm_region(C)) && ar->type && ar->type->context) { memset(&result, 0, sizeof(result)); @@ -465,7 +493,7 @@ ListBase CTX_data_dir_get(const bContext *C) if (result.dir) for (a = 0; result.dir[a]; a++) - data_dir_add(&lb, result.dir[a]); + data_dir_add(&lb, result.dir[a], use_all); } if ((sa = CTX_wm_area(C)) && sa->type && sa->type->context) { memset(&result, 0, sizeof(result)); @@ -473,7 +501,7 @@ ListBase CTX_data_dir_get(const bContext *C) if (result.dir) for (a = 0; result.dir[a]; a++) - data_dir_add(&lb, result.dir[a]); + data_dir_add(&lb, result.dir[a], use_all); } if ((sc = CTX_wm_screen(C)) && sc->context) { bContextDataCallback cb = sc->context; @@ -482,12 +510,17 @@ ListBase CTX_data_dir_get(const bContext *C) if (result.dir) for (a = 0; result.dir[a]; a++) - data_dir_add(&lb, result.dir[a]); + data_dir_add(&lb, result.dir[a], use_all); } return lb; } +ListBase CTX_data_dir_get(const bContext *C) +{ + return CTX_data_dir_get_ex(C, TRUE, FALSE, FALSE); +} + int CTX_data_equals(const char *member, const char *str) { return (strcmp(member, str) == 0); diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 56b9db94108..e32f8d53b7d 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -687,7 +687,7 @@ static void boundInsert(Bounds3D *b, float point[3]) static float getSurfaceDimension(PaintSurfaceData *sData) { Bounds3D *mb = &sData->bData->mesh_bounds; - return MAX3((mb->max[0] - mb->min[0]), (mb->max[1] - mb->min[1]), (mb->max[2] - mb->min[2])); + return max_fff((mb->max[0] - mb->min[0]), (mb->max[1] - mb->min[1]), (mb->max[2] - mb->min[2])); } static void freeGrid(PaintSurfaceData *data) @@ -754,14 +754,14 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface) /* get dimensions */ sub_v3_v3v3(dim, grid->grid_bounds.max, grid->grid_bounds.min); copy_v3_v3(td, dim); - min_dim = MAX3(td[0], td[1], td[2]) / 1000.f; + min_dim = max_fff(td[0], td[1], td[2]) / 1000.f; /* deactivate zero axises */ for (i = 0; i < 3; i++) { if (td[i] < min_dim) { td[i] = 1.0f; axis -= 1; } } - if (axis == 0 || MAX3(td[0], td[1], td[2]) < 0.0001f) { + if (axis == 0 || max_fff(td[0], td[1], td[2]) < 0.0001f) { MEM_freeN(grid_bounds); MEM_freeN(bData->grid); bData->grid = NULL; @@ -4260,7 +4260,7 @@ static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *s if (surface->effect & MOD_DPAINT_EFFECT_DO_SHRINK) shrink_speed = surface->shrink_speed; - fastest_effect = MAX3(spread_speed, shrink_speed, average_force); + fastest_effect = max_fff(spread_speed, shrink_speed, average_force); avg_dist = bData->average_dist * CANVAS_REL_SIZE / getSurfaceDimension(sData); steps = (int)ceil(1.5f * EFF_MOVEMENT_PER_FRAME * fastest_effect / avg_dist * timescale); @@ -4444,8 +4444,7 @@ static void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescal 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])); + const float canvas_size = getSurfaceDimension(sData); float wave_scale = CANVAS_REL_SIZE / canvas_size; /* allocate memory */ diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index bb8df834d0f..480ff23f100 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -115,10 +115,10 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *em) BMesh *bm = em->bm; BMLoop *(*looptris)[3] = NULL; BLI_array_declare(looptris); - BMIter iter, liter; + BMIter iter; BMFace *efa; BMLoop *l; - int i = 0, j; + int i = 0; ScanFillContext sf_ctx; @@ -161,16 +161,29 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *em) /* no need to ensure the loop order, we know its ok */ else if (efa->len == 3) { +#if 0 + int j; BLI_array_grow_one(looptris); BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, j) { looptris[i][j] = l; } i += 1; +#else + /* more cryptic but faster */ + BLI_array_grow_one(looptris); + { + BMLoop **l_ptr = looptris[i++]; + l_ptr[0] = l = BM_FACE_FIRST_LOOP(efa); + l_ptr[1] = l = l->next; + l_ptr[2] = l->next; + } +#endif } else if (efa->len == 4) { +#if 0 BMLoop *ltmp[4]; + int j; BLI_array_grow_items(looptris, 2); - BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, j) { ltmp[j] = l; } @@ -184,11 +197,27 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *em) looptris[i][1] = ltmp[2]; looptris[i][2] = ltmp[3]; i += 1; +#else + /* more cryptic but faster */ + BLI_array_grow_items(looptris, 2); + { + BMLoop **l_ptr_a = looptris[i++]; + BMLoop **l_ptr_b = looptris[i++]; + (l_ptr_a[0] = l_ptr_b[0] = l = BM_FACE_FIRST_LOOP(efa)); + (l_ptr_a[1] = l = l->next); + (l_ptr_a[2] = l_ptr_b[1] = l = l->next); + ( l_ptr_b[2] = l->next); + } +#endif } #endif /* USE_TESSFACE_SPEEDUP */ else { + int j; + BMLoop *l_iter; + BMLoop *l_first; + ScanFillVert *sf_vert, *sf_vert_last = NULL, *sf_vert_first = NULL; /* ScanFillEdge *e; */ /* UNUSED */ ScanFillFace *sf_tri; @@ -197,20 +226,25 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *em) BLI_scanfill_begin(&sf_ctx); /* scanfill time */ - BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, j) { - /*mark order */ - BM_elem_index_set(l, j); /* set_loop */ - - sf_vert = BLI_scanfill_vert_add(&sf_ctx, l->v->co); - sf_vert->tmp.p = l; + j = 0; + l_iter = l_first = BM_FACE_FIRST_LOOP(efa); + do { + sf_vert = BLI_scanfill_vert_add(&sf_ctx, l_iter->v->co); + sf_vert->tmp.p = l_iter; if (sf_vert_last) { /* e = */ BLI_scanfill_edge_add(&sf_ctx, sf_vert_last, sf_vert); } sf_vert_last = sf_vert; - if (sf_vert_first == NULL) sf_vert_first = sf_vert; - } + if (sf_vert_first == NULL) { + sf_vert_first = sf_vert; + } + + /*mark order */ + BM_elem_index_set(l_iter, j++); /* set_loop */ + + } while ((l_iter = l_iter->next) != l_first); /* complete the loop */ BLI_scanfill_edge_add(&sf_ctx, sf_vert_first, sf_vert); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index ec61311d89e..5e01773cab9 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -500,8 +500,8 @@ short calc_fcurve_bounds(FCurve *fcu, float *xmin, float *xmax, float *ymin, flo BLI_assert(bezt_last != NULL); if (include_handles) { - xminv = MIN3(xminv, bezt_first->vec[0][0], bezt_first->vec[1][0]); - xmaxv = MAX3(xmaxv, bezt_last->vec[1][0], bezt_last->vec[2][0]); + xminv = min_fff(xminv, bezt_first->vec[0][0], bezt_first->vec[1][0]); + xmaxv = max_fff(xmaxv, bezt_last->vec[1][0], bezt_last->vec[2][0]); } else { xminv = min_ff(xminv, bezt_first->vec[1][0]); @@ -517,8 +517,8 @@ short calc_fcurve_bounds(FCurve *fcu, float *xmin, float *xmax, float *ymin, flo for (bezt = fcu->bezt, i = 0; i < fcu->totvert; bezt++, i++) { if ((do_sel_only == FALSE) || BEZSELECTED(bezt)) { if (include_handles) { - yminv = MIN4(yminv, bezt->vec[1][1], bezt->vec[0][1], bezt->vec[2][1]); - ymaxv = MAX4(ymaxv, bezt->vec[1][1], bezt->vec[0][1], bezt->vec[2][1]); + yminv = min_ffff(yminv, bezt->vec[1][1], bezt->vec[0][1], bezt->vec[2][1]); + ymaxv = max_ffff(ymaxv, bezt->vec[1][1], bezt->vec[0][1], bezt->vec[2][1]); } else { yminv = min_ff(yminv, bezt->vec[1][1]); diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 0c83bb8d39a..755030bd208 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -188,7 +188,7 @@ bGPDlayer *gpencil_layer_addnew(bGPdata *gpd, const char *name, int setactive) /* make this one the active one */ if (setactive) - gpencil_layer_setactive(gpd, gpl); + gpencil_layer_setactive(gpd, gpl); /* return layer */ return gpl; diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 7f0475cf155..f3cdf11d664 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -937,7 +937,7 @@ int BKE_imtype_to_ftype(const char imtype) return RADHDR; #endif else if (imtype == R_IMF_IMTYPE_PNG) - return PNG; + return PNG | 90; #ifdef WITH_DDS else if (imtype == R_IMF_IMTYPE_DDS) return DDS; diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 2192d2862c8..98625807ddc 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -158,8 +158,10 @@ void id_lib_extern(ID *id) /* ensure we have a real user */ void id_us_ensure_real(ID *id) { - if (ID_REAL_USERS(id) <= 0) { - id->us = MAX2(id->us, 0) + 1; + if (id) { + if (ID_REAL_USERS(id) <= 0) { + id->us = MAX2(id->us, 0) + 1; + } } } diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index 5c882fd97d6..b3f71e58e9f 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -1514,7 +1514,7 @@ static void find_first_points(PROCESS *mbproc, MetaBall *mb, int a) float in_v /*, out_v*/; float workp[3]; float dvec[3]; - float tmp_v, workp_v, max_len, len, nx, ny, nz, MAXN; + float tmp_v, workp_v, max_len, nx, ny, nz, max_dim; calc_mballco(ml, in); in_v = mbproc->function(in[0], in[1], in[2]); @@ -1573,17 +1573,17 @@ static void find_first_points(PROCESS *mbproc, MetaBall *mb, int a) ny = abs((out[1] - in[1]) / mbproc->size); nz = abs((out[2] - in[2]) / mbproc->size); - MAXN = MAX3(nx, ny, nz); - if (MAXN != 0.0f) { - dvec[0] = (out[0] - in[0]) / MAXN; - dvec[1] = (out[1] - in[1]) / MAXN; - dvec[2] = (out[2] - in[2]) / MAXN; + max_dim = max_fff(nx, ny, nz); + if (max_dim != 0.0f) { + float len = 0.0f; + + dvec[0] = (out[0] - in[0]) / max_dim; + dvec[1] = (out[1] - in[1]) / max_dim; + dvec[2] = (out[2] - in[2]) / max_dim; - len = 0.0; while (len <= max_len) { - workp[0] += dvec[0]; - workp[1] += dvec[1]; - workp[2] += dvec[2]; + add_v3_v3(workp, dvec); + /* compute value of implicite function */ tmp_v = mbproc->function(workp[0], workp[1], workp[2]); /* add cube to the stack, when value of implicite function crosses zero value */ diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 55cf2743bfa..3eb96f218e4 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -430,7 +430,7 @@ void BKE_mesh_free(Mesh *me, int unlink) if (me->edit_btmesh) MEM_freeN(me->edit_btmesh); } -void copy_dverts(MDeformVert *dst, MDeformVert *src, int copycount) +void copy_dverts(MDeformVert *dst, const MDeformVert *src, int copycount) { /* Assumes dst is already set up */ int i; @@ -442,7 +442,7 @@ void copy_dverts(MDeformVert *dst, MDeformVert *src, int copycount) for (i = 0; i < copycount; i++) { if (src[i].dw) { - dst[i].dw = MEM_callocN(sizeof(MDeformWeight) * src[i].totweight, "copy_deformWeight"); + dst[i].dw = MEM_mallocN(sizeof(MDeformWeight) * src[i].totweight, "copy_deformWeight"); memcpy(dst[i].dw, src[i].dw, sizeof(MDeformWeight) * src[i].totweight); } } @@ -731,7 +731,7 @@ void BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_siz if (r_size) copy_v3_v3(r_size, me->size); } -float *BKE_mesh_orco_verts_get(Object *ob) +float (*BKE_mesh_orco_verts_get(Object *ob))[3] { Mesh *me = ob->data; MVert *mvert = NULL; @@ -748,7 +748,7 @@ float *BKE_mesh_orco_verts_get(Object *ob) copy_v3_v3(vcos[a], mvert->co); } - return (float *)vcos; + return vcos; } void BKE_mesh_orco_verts_transform(Mesh *me, float (*orco)[3], int totvert, int invert) @@ -3107,6 +3107,107 @@ void BKE_mesh_flush_hidden_from_verts(const MVert *mvert, } } +/** + * simple poly -> vert/edge selection. + */ +void BKE_mesh_flush_select_from_polys_ex(MVert *mvert, const int totvert, + MLoop *mloop, + MEdge *medge, const int totedge, + const MPoly *mpoly, const int totpoly) +{ + MVert *mv; + MEdge *med; + const MPoly *mp; + int i; + + i = totvert; + for (mv = mvert; i--; mv++) { + mv->flag &= ~SELECT; + } + + i = totedge; + for (med = medge; i--; med++) { + med->flag &= ~SELECT; + } + + i = totpoly; + for (mp = mpoly; i--; mp++) { + /* assume if its selected its not hidden and none of its verts/edges are hidden + * (a common assumption)*/ + if (mp->flag & ME_FACE_SEL) { + MLoop *ml; + int j; + j = mp->totloop; + for (ml = &mloop[mp->loopstart]; j--; ml++) { + mvert[ml->v].flag |= SELECT; + medge[ml->e].flag |= SELECT; + } + } + } +} +void BKE_mesh_flush_select_from_polys(Mesh *me) +{ + BKE_mesh_flush_select_from_polys_ex(me->mvert, me->totvert, + me->mloop, + me->medge, me->totedge, + me->mpoly, me->totpoly); +} + +void BKE_mesh_flush_select_from_verts_ex(const MVert *mvert, const int UNUSED(totvert), + MLoop *mloop, + MEdge *medge, const int totedge, + MPoly *mpoly, const int totpoly) +{ + MEdge *med; + MPoly *mp; + int i; + + /* edges */ + i = totedge; + for (med = medge; i--; med++) { + if ((med->flag & ME_HIDE) == 0) { + if ((mvert[med->v1].flag & SELECT) && (mvert[med->v2].flag & SELECT)) { + med->flag |= SELECT; + } + else { + med->flag &= ~SELECT; + } + } + } + + /* polys */ + i = totpoly; + for (mp = mpoly; i--; mp++) { + if ((mp->flag & ME_HIDE) == 0) { + int ok = TRUE; + MLoop *ml; + int j; + j = mp->totloop; + for (ml = &mloop[mp->loopstart]; j--; ml++) { + if ((mvert[ml->v].flag & SELECT) == 0) { + ok = FALSE; + break; + } + } + + if (ok) { + mp->flag |= ME_FACE_SEL; + } + else { + mp->flag &= ~ME_FACE_SEL; + } + } + } +} +void BKE_mesh_flush_select_from_verts(Mesh *me) +{ + BKE_mesh_flush_select_from_verts_ex(me->mvert, me->totvert, + me->mloop, + me->medge, me->totedge, + me->mpoly, me->totpoly); +} + + /* basic vertex data functions */ int BKE_mesh_minmax(Mesh *me, float r_min[3], float r_max[3]) { diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 17dcf34b71f..8babdf2402f 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -2162,6 +2162,24 @@ void nodeRegisterType(bNodeTreeType *ttype, bNodeType *ntype) if (found == NULL) BLI_addtail(typelist, ntype); + + /* Associate the RNA struct type with the bNodeType. + * Dynamically registered nodes will create an RNA type at runtime + * and call RNA_struct_blender_type_set, so this only needs to be done for old RNA types + * created in makesrna, which can not be associated to a bNodeType immediately, + * since bNodeTypes are registered afterward ... + */ + #define DefNode(Category, ID, DefFunc, EnumName, StructName, UIName, UIDesc) \ + if (ID == ntype->type) { \ + StructRNA *srna = RNA_struct_find(STRINGIFY_ARG(Category##StructName)); \ + BLI_assert(srna != NULL); \ + RNA_struct_blender_type_set(srna, ntype); \ + } + + /* XXX hack, this file will be moved to the nodes folder in customnodes branch, + * then this stupid include path is not needed any more. + */ + #include "intern/rna_nodetree_types.h" } static void registerCompositNodes(bNodeTreeType *ttype) diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index f0819d426fb..d13d456a183 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1853,12 +1853,19 @@ static void ob_parbone(Object *ob, Object *par, float mat[4][4]) } /* get bone transform */ - copy_m4_m4(mat, pchan->pose_mat); + if (pchan->bone->flag & BONE_RELATIVE_PARENTING) { + /* the new option uses the root - expected bahaviour, but differs from old... */ + /* XXX check on version patching? */ + copy_m4_m4(mat, pchan->chan_mat); + } + else { + copy_m4_m4(mat, pchan->pose_mat); - /* but for backwards compatibility, the child has to move to the tail */ - copy_v3_v3(vec, mat[1]); - mul_v3_fl(vec, pchan->bone->length); - add_v3_v3(mat[3], vec); + /* but for backwards compatibility, the child has to move to the tail */ + copy_v3_v3(vec, mat[1]); + mul_v3_fl(vec, pchan->bone->length); + add_v3_v3(mat[3], vec); + } } static void give_parvert(Object *par, int nr, float vec[3]) @@ -1936,7 +1943,7 @@ static void give_parvert(Object *par, int nr, float vec[3]) } else if (ELEM(par->type, OB_CURVE, OB_SURF)) { Curve *cu = par->data; - ListBase *nurb = BKE_curve_nurbs_get(cu);; + ListBase *nurb = BKE_curve_nurbs_get(cu); BKE_nurbList_index_get_co(nurb, nr, vec); } diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 36f96045ced..fa5268e039e 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -154,7 +154,7 @@ int paint_facesel_test(Object *ob) return ( (ob != NULL) && (ob->type == OB_MESH) && (ob->data != NULL) && - (((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_MASK) && + (((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_FACE_SEL) && (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) ); } @@ -165,7 +165,7 @@ int paint_vertsel_test(Object *ob) return ( (ob != NULL) && (ob->type == OB_MESH) && (ob->data != NULL) && - (((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) && + (((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_VERT_SEL) && (ob->mode & OB_MODE_WEIGHT_PAINT) ); } diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c index 3a4e8afca76..209461bad2f 100644 --- a/source/blender/blenkernel/intern/pbvh.c +++ b/source/blender/blenkernel/intern/pbvh.c @@ -18,7 +18,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -/** \file blender/blenlib/intern/pbvh.c +/** \file blender/blenkernel/intern/pbvh.c * \ingroup bli */ diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 1c98f6c32a2..538f21ce20b 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -446,7 +446,8 @@ static Scene *scene_add(Main *bmain, const char *name) sce->r.bake_osa = 5; sce->r.bake_flag = R_BAKE_CLEAR; sce->r.bake_normal_space = R_BAKE_SPACE_TANGENT; - sce->r.bake_rays_number = 256; + sce->r.bake_samples = 256; + sce->r.bake_biasdist = 0.001; sce->r.scemode = R_DOCOMP | R_DOSEQ | R_EXTENSION; sce->r.stamp = R_STAMP_TIME | R_STAMP_FRAME | R_STAMP_DATE | R_STAMP_CAMERA | R_STAMP_SCENE | R_STAMP_FILENAME | R_STAMP_RENDERTIME; sce->r.stamp_font_id = 12; diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 1467d24f323..5e44f2d6d9e 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -593,8 +593,8 @@ void BKE_sequence_calc(Scene *scene, Sequence *seq) /* XXX These resets should not be necessary, but users used to be able to * edit effect's length, leading to strange results. See [#29190] */ seq->startofs = seq->endofs = seq->startstill = seq->endstill = 0; - seq->start = seq->startdisp = MAX3(seq->seq1->startdisp, seq->seq2->startdisp, seq->seq3->startdisp); - seq->enddisp = MIN3(seq->seq1->enddisp, seq->seq2->enddisp, seq->seq3->enddisp); + seq->start = seq->startdisp = max_iii(seq->seq1->startdisp, seq->seq2->startdisp, seq->seq3->startdisp); + seq->enddisp = min_iii(seq->seq1->enddisp, seq->seq2->enddisp, seq->seq3->enddisp); /* we cant help if strips don't overlap, it wont give useful results. * but at least ensure 'len' is never negative which causes bad bugs elsewhere. */ if (seq->enddisp < seq->startdisp) { diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index c9cf5d561e5..629b2c989d3 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -170,7 +170,7 @@ void smoke_reallocate_fluid(SmokeDomainSettings *sds, float dx, int res[3], int if (free_old && sds->fluid) smoke_free(sds->fluid); - if (!MIN3(res[0], res[1], res[2])) { + if (!min_iii(res[0], res[1], res[2])) { sds->fluid = NULL; return; } @@ -191,7 +191,7 @@ void smoke_reallocate_highres_fluid(SmokeDomainSettings *sds, float dx, int res[ if (free_old && sds->wt) smoke_turbulence_free(sds->wt); - if (!MIN3(res[0], res[1], res[2])) { + if (!min_iii(res[0], res[1], res[2])) { sds->wt = NULL; return; } diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index bb0cfe1a5c6..79356d39235 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -1097,12 +1097,12 @@ static int sb_detect_face_pointCached(float face_v1[3], float face_v2[3], float float facedist, outerfacethickness, tune = 10.f; int a, deflected=0; - aabbmin[0] = MIN3(face_v1[0], face_v2[0], face_v3[0]); - aabbmin[1] = MIN3(face_v1[1], face_v2[1], face_v3[1]); - aabbmin[2] = MIN3(face_v1[2], face_v2[2], face_v3[2]); - aabbmax[0] = MAX3(face_v1[0], face_v2[0], face_v3[0]); - aabbmax[1] = MAX3(face_v1[1], face_v2[1], face_v3[1]); - aabbmax[2] = MAX3(face_v1[2], face_v2[2], face_v3[2]); + aabbmin[0] = min_fff(face_v1[0], face_v2[0], face_v3[0]); + aabbmin[1] = min_fff(face_v1[1], face_v2[1], face_v3[1]); + aabbmin[2] = min_fff(face_v1[2], face_v2[2], face_v3[2]); + aabbmax[0] = max_fff(face_v1[0], face_v2[0], face_v3[0]); + aabbmax[1] = max_fff(face_v1[1], face_v2[1], face_v3[1]); + aabbmax[2] = max_fff(face_v1[2], face_v2[2], face_v3[2]); /* calculate face normal once again SIGH */ sub_v3_v3v3(edge1, face_v1, face_v2); @@ -1196,12 +1196,12 @@ static int sb_detect_face_collisionCached(float face_v1[3], float face_v2[3], fl float t, tune = 10.0f; int a, deflected=0; - aabbmin[0] = MIN3(face_v1[0], face_v2[0], face_v3[0]); - aabbmin[1] = MIN3(face_v1[1], face_v2[1], face_v3[1]); - aabbmin[2] = MIN3(face_v1[2], face_v2[2], face_v3[2]); - aabbmax[0] = MAX3(face_v1[0], face_v2[0], face_v3[0]); - aabbmax[1] = MAX3(face_v1[1], face_v2[1], face_v3[1]); - aabbmax[2] = MAX3(face_v1[2], face_v2[2], face_v3[2]); + aabbmin[0] = min_fff(face_v1[0], face_v2[0], face_v3[0]); + aabbmin[1] = min_fff(face_v1[1], face_v2[1], face_v3[1]); + aabbmin[2] = min_fff(face_v1[2], face_v2[2], face_v3[2]); + aabbmax[0] = max_fff(face_v1[0], face_v2[0], face_v3[0]); + aabbmax[1] = max_fff(face_v1[1], face_v2[1], face_v3[1]); + aabbmax[2] = max_fff(face_v1[2], face_v2[2], face_v3[2]); hash = vertexowner->soft->scratch->colliderhash; ihash = BLI_ghashIterator_new(hash); @@ -1957,7 +1957,7 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], } closest_to_line_segment_v3(ve, opco, nv2, nv3); - sub_v3_v3v3(ve, opco, ve); + sub_v3_v3v3(ve, opco, ve); dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )) { copy_v3_v3(coledge, ve); @@ -1966,7 +1966,7 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], } closest_to_line_segment_v3(ve, opco, nv3, nv1); - sub_v3_v3v3(ve, opco, ve); + sub_v3_v3v3(ve, opco, ve); dist = normalize_v3(ve); if ((dist < outerfacethickness)&&(dist < mindistedge )) { copy_v3_v3(coledge, ve); |