Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-05-16 13:34:59 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-16 13:34:59 +0400
commit6bdf87cd3d3f40a77053cad697782a8815873723 (patch)
tree4f3dec74e700b1c5d34f395dd9236d4fc1c92594 /source
parenta4cf8b377985bcb4d74d7e83082cb0698296c04c (diff)
svn merge ^/trunk/blender -c56537 -c56538 -c56539 -c56572 -c56577 -c56581 -c56601 -c56605 -c56606
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c3
-rw-r--r--source/blender/bmesh/operators/bmo_connect.c108
-rw-r--r--source/blender/collada/ExtraHandler.cpp9
-rw-r--r--source/blender/collada/ExtraHandler.h6
-rw-r--r--source/blender/editors/interface/interface_templates.c7
-rw-r--r--source/blender/editors/interface/interface_widgets.c6
-rw-r--r--source/blender/render/intern/source/convertblender.c2
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp4
8 files changed, 87 insertions, 58 deletions
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
@@ -65,6 +65,15 @@ bool ExtraHandler::textData(const char *text, size_t textLength)
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,
const COLLADAFW::UniqueId& uniqueId,
COLLADAFW::Object* object)
{
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; i<obr->totvlak; 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();