From 6bdf87cd3d3f40a77053cad697782a8815873723 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 May 2013 09:34:59 +0000 Subject: svn merge ^/trunk/blender -c56537 -c56538 -c56539 -c56572 -c56577 -c56581 -c56601 -c56605 -c56606 --- source/blender/blenkernel/intern/editderivedmesh.c | 3 + source/blender/bmesh/operators/bmo_connect.c | 108 +++++++++++---------- source/blender/collada/ExtraHandler.cpp | 9 ++ source/blender/collada/ExtraHandler.h | 6 ++ .../editors/interface/interface_templates.c | 7 +- .../blender/editors/interface/interface_widgets.c | 6 +- .../blender/render/intern/source/convertblender.c | 2 +- source/gameengine/Ketsji/KX_PythonInit.cpp | 4 + 8 files changed, 87 insertions(+), 58 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index f7782b36c2f..75b31605105 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -1766,6 +1766,9 @@ static void statvis_calc_intersect( float cos_mid[3]; float ray_no[3]; + if (e->l == NULL) + continue; + if (vertexCos) { copy_v3_v3(cos[0], vertexCos[BM_elem_index_get(e->v1)]); copy_v3_v3(cos[1], vertexCos[BM_elem_index_get(e->v2)]); diff --git a/source/blender/bmesh/operators/bmo_connect.c b/source/blender/bmesh/operators/bmo_connect.c index 2e9cb11569d..f19d4c06931 100644 --- a/source/blender/bmesh/operators/bmo_connect.c +++ b/source/blender/bmesh/operators/bmo_connect.c @@ -419,63 +419,69 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) } } - /* Vert rough attempt to determine proper winding for the bridge quads: - * just uses the first loop it finds for any of the edges of ee2 or ee1 */ - if (wdir == 0) { - for (i = 0; i < BLI_array_count(ee2); i++) { - if (ee2[i]->l) { - wdir = (ee2[i]->l->v == vv2[i]) ? (-1) : (1); - break; + if (use_merge == false) { + /* Vert rough attempt to determine proper winding for the bridge quads: + * just uses the first loop it finds for any of the edges of ee2 or ee1 */ + if (wdir == 0) { + for (i = 0; i < BLI_array_count(ee2); i++) { + if (ee2[i]->l) { + wdir = (ee2[i]->l->v == vv2[i]) ? (-1) : (1); + break; + } } } - } - if (wdir == 0) { - for (i = 0; i < BLI_array_count(ee1); i++) { - j = clamp_index((i * dir1) + starti, BLI_array_count(ee1)); - if (ee1[j]->l && ee2[j]->l) { - wdir = (ee2[j]->l->v == vv2[j]) ? (1) : (-1); - break; + if (wdir == 0) { + for (i = 0; i < BLI_array_count(ee1); i++) { + j = clamp_index((i * dir1) + starti, BLI_array_count(ee1)); + if (ee1[j]->l && ee2[j]->l) { + wdir = (ee2[j]->l->v == vv2[j]) ? (1) : (-1); + break; + } } } } - + +#define EDGE_ORD_VERTS_NEXT { \ + i1 = clamp_index(i * dir1 + starti, lenv1); \ + i1next = clamp_index((i + 1) * dir1 + starti, lenv1); \ + i2 = i; \ + i2next = clamp_index(i + 1, lenv2); \ + if (vv1[i1] == vv1[i1next]) continue; \ + } (void)0 + +#define EDGE_ORD_VERTS { \ + i1 = clamp_index(i * dir1 + starti, lenv1); \ + i2 = i; \ + } (void)0 + /* merge loops of bridge faces */ if (use_merge) { const int vert_len = min_ii(BLI_array_count(vv1), BLI_array_count(vv2)) - ((cl1 || cl2) ? 1 : 0); const int edge_len = min_ii(BLI_array_count(ee1), BLI_array_count(ee2)); - if (merge_factor <= 0.0f) { - /* 2 --> 1 */ - for (i = 0; i < vert_len; i++) { - BM_vert_splice(bm, vv2[i], vv1[i]); - } - for (i = 0; i < edge_len; i++) { - BM_edge_splice(bm, ee2[i], ee1[i]); - } + /* first get the edges in order (before splicing verts) */ + for (i = 0; i < vert_len; i++) { + int i1, i1next, i2, i2next; + EDGE_ORD_VERTS_NEXT; + + ee1[i] = BM_edge_exists(vv1[i1], vv1[i1next]); + ee2[i] = BM_edge_exists(vv2[i2], vv2[i2next]); } - else if (merge_factor >= 1.0f) { - /* 1 --> 2 */ - for (i = 0; i < vert_len; i++) { - BM_vert_splice(bm, vv1[i], vv2[i]); - } - for (i = 0; i < edge_len; i++) { - BM_edge_splice(bm, ee1[i], ee2[i]); - } + for (i = 0; i < vert_len; i++) { + int i1, i2; + EDGE_ORD_VERTS; + + BM_data_interp_from_verts(bm, vv1[i1], vv2[i2], vv2[i2], merge_factor); + interp_v3_v3v3(vv2[i2]->co, vv1[i1]->co, vv2[i2]->co, merge_factor); + BM_elem_flag_merge(vv1[i1], vv2[i2]); + BM_vert_splice(bm, vv1[i1], vv2[i2]); } - else { - /* mid factor, be tricky */ - /* 1 --> 2 */ - for (i = 0; i < vert_len; i++) { - BM_data_interp_from_verts(bm, vv1[i], vv2[i], vv2[i], merge_factor); - interp_v3_v3v3(vv2[i]->co, vv1[i]->co, vv2[i]->co, merge_factor); - BM_elem_flag_merge(vv1[i], vv2[i]); - BM_vert_splice(bm, vv1[i], vv2[i]); - } - for (i = 0; i < edge_len; i++) { - BM_data_interp_from_edges(bm, ee1[i], ee2[i], ee2[i], merge_factor); - BM_elem_flag_merge(ee1[i], ee2[i]); - BM_edge_splice(bm, ee1[i], ee2[i]); - } + for (i = 0; i < edge_len; i++) { + BMEdge *e1 = ee1[i]; + BMEdge *e2 = ee2[i]; + BM_data_interp_from_edges(bm, e1, e2, e2, merge_factor); + BM_elem_flag_merge(e1, e2); + BM_edge_splice(bm, e1, e2); } } else { @@ -492,14 +498,7 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) int i1, i1next, i2, i2next; - i1 = clamp_index(i * dir1 + starti, lenv1); - i1next = clamp_index((i + 1) * dir1 + starti, lenv1); - i2 = i; - i2next = clamp_index(i + 1, lenv2); - - if (vv1[i1] == vv1[i1next]) { - continue; - } + EDGE_ORD_VERTS_NEXT; if (wdir < 0) { SWAP(int, i1, i1next); @@ -539,6 +538,9 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op) } } +#undef EDGE_ORD_VERTS_NEXT +#undef EDGE_ORD_VERTS + BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "faces.out", BM_FACE, FACE_OUT); cleanup: diff --git a/source/blender/collada/ExtraHandler.cpp b/source/blender/collada/ExtraHandler.cpp index c72fdd9766b..bef7accd9f7 100644 --- a/source/blender/collada/ExtraHandler.cpp +++ b/source/blender/collada/ExtraHandler.cpp @@ -62,6 +62,15 @@ bool ExtraHandler::textData(const char *text, size_t textLength) return true; } +bool ExtraHandler::parseElement( + const char *profileName, + const unsigned long& elementHash, + const COLLADAFW::UniqueId& uniqueId) +{ + /* implement for backwards compatibility, new version added object parameter */ + return parseElement(profileName, elementHash, uniqueId, NULL); +} + bool ExtraHandler::parseElement( const char *profileName, const unsigned long& elementHash, diff --git a/source/blender/collada/ExtraHandler.h b/source/blender/collada/ExtraHandler.h index d2da19acb78..f380c3d6871 100644 --- a/source/blender/collada/ExtraHandler.h +++ b/source/blender/collada/ExtraHandler.h @@ -63,6 +63,12 @@ public: const unsigned long& elementHash, const COLLADAFW::UniqueId& uniqueId, COLLADAFW::Object* object); + + /** For backwards compatibility with older OpenCollada, new version added object parameter */ + bool parseElement ( + const char* profileName, + const unsigned long& elementHash, + const COLLADAFW::UniqueId& uniqueId); private: /** Disable default copy constructor. */ ExtraHandler(const ExtraHandler& pre); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 4bb4fe6b532..7b4d5bf9f6d 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -3115,6 +3115,7 @@ void uiTemplateComponentMenu(uiLayout *layout, PointerRNA *ptr, const char *prop { ComponentMenuArgs *args = MEM_callocN(sizeof(ComponentMenuArgs), "component menu template args"); uiBlock *block; + uiBut *but; args->ptr = *ptr; BLI_strncpy(args->propname, propname, sizeof(args->propname)); @@ -3122,7 +3123,11 @@ void uiTemplateComponentMenu(uiLayout *layout, PointerRNA *ptr, const char *prop block = uiLayoutGetBlock(layout); uiBlockBeginAlign(block); - uiDefBlockButN(block, component_menu, args, name, 0, 0, UI_UNIT_X * 6, UI_UNIT_Y, ""); + but = uiDefBlockButN(block, component_menu, args, name, 0, 0, UI_UNIT_X * 6, UI_UNIT_Y, ""); + /* set rna directly, uiDefBlockButN doesn't do this */ + but->rnapoin = *ptr; + but->rnaprop = RNA_struct_find_property(ptr, propname); + but->rnaindex = 0; uiBlockEndAlign(block); } diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index a8ad15b863e..a7370b6254e 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -968,7 +968,7 @@ static void ui_text_clip_give_next_off(uiBut *but) static void ui_text_clip_left(uiFontStyle *fstyle, uiBut *but, const rcti *rect) { int border = (but->flag & UI_BUT_ALIGN_RIGHT) ? 8 : 10; - int okwidth = BLI_rcti_size_x(rect) - border; + int okwidth = max_ii(BLI_rcti_size_x(rect) - border, 0); if (but->flag & UI_HAS_ICON) okwidth -= UI_DPI_ICON_SIZE; /* need to set this first */ @@ -997,7 +997,7 @@ static void ui_text_clip_left(uiFontStyle *fstyle, uiBut *but, const rcti *rect) static void ui_text_clip_cursor(uiFontStyle *fstyle, uiBut *but, const rcti *rect) { int border = (but->flag & UI_BUT_ALIGN_RIGHT) ? 8 : 10; - int okwidth = BLI_rcti_size_x(rect) - border; + int okwidth = max_ii(BLI_rcti_size_x(rect) - border, 0); if (but->flag & UI_HAS_ICON) okwidth -= UI_DPI_ICON_SIZE; BLI_assert(but->editstr && but->pos >= 0); @@ -1061,7 +1061,7 @@ static void ui_text_clip_cursor(uiFontStyle *fstyle, uiBut *but, const rcti *rec static void ui_text_clip_right_label(uiFontStyle *fstyle, uiBut *but, const rcti *rect) { int border = (but->flag & UI_BUT_ALIGN_RIGHT) ? 8 : 10; - int okwidth = BLI_rcti_size_x(rect) - border; + int okwidth = max_ii(BLI_rcti_size_x(rect) - border, 0); char *cpoin = NULL; int drawstr_len = strlen(but->drawstr); char *cpend = but->drawstr + drawstr_len; diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 6accbe2e122..1cf6bc820ea 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -4194,7 +4194,7 @@ static void set_phong_threshold(ObjectRen *obr) for (i=0; itotvlak; i++) { vlr= RE_findOrAddVlak(obr, i); - if (vlr->flag & R_SMOOTH) { + if ((vlr->flag & R_SMOOTH) && (vlr->flag & R_STRAND)==0) { dot= dot_v3v3(vlr->n, vlr->v1->n); dot= ABS(dot); if (dot>0.9f) { diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index da605508762..69b37ceae7a 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -1183,6 +1183,10 @@ static PyObject *gPySetGLSLMaterialSetting(PyObject *, else gs->glslflag |= flag; + /* temporarily store the glsl settings in the scene for the GLSL materials */ + GameData *gm= &(gp_KetsjiScene->GetBlenderScene()->gm); + gm->flag = gs->glslflag; + /* display lists and GLSL materials need to be remade */ if (sceneflag != gs->glslflag) { GPU_materials_free(); -- cgit v1.2.3