From dbebf4ff5370a5b99899c71d2911c8e0835acdc6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 16 Dec 2011 00:06:01 +0000 Subject: [PATCH 1/4] fix [#29635] Attempts to import the site module are met with a TypeError exception. --- source/blender/python/intern/bpy_app.c | 1 + source/blender/python/intern/bpy_app_handlers.c | 1 + 2 files changed, 2 insertions(+) diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index 1f99503202a..a10be098a61 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -260,6 +260,7 @@ PyObject *BPY_app_struct(void) /* prevent user from creating new instances */ BlenderAppType.tp_init= NULL; BlenderAppType.tp_new= NULL; + BlenderAppType.tp_hash= (hashfunc)_Py_HashPointer; /* without this we can't do set(sys.modules) [#29635] */ /* kindof a hack ontop of PyStructSequence */ py_struct_seq_getset_init(); diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c index edab92b295b..dd512791e85 100644 --- a/source/blender/python/intern/bpy_app_handlers.c +++ b/source/blender/python/intern/bpy_app_handlers.c @@ -210,6 +210,7 @@ PyObject *BPY_app_handlers_struct(void) /* prevent user from creating new instances */ BlenderAppCbType.tp_init= NULL; BlenderAppCbType.tp_new= NULL; + BlenderAppCbType.tp_hash= (hashfunc)_Py_HashPointer; /* without this we can't do set(sys.modules) [#29635] */ /* assign the C callbacks */ if (ret) { From cad9cb563d48bd6787eb7ac8bc773ce625a8ae1a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 16 Dec 2011 03:06:56 +0000 Subject: [PATCH 2/4] fix own error [#29631] frame is lost from driver namespace after reload --- source/blender/python/intern/bpy_driver.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/python/intern/bpy_driver.c b/source/blender/python/intern/bpy_driver.c index db408374b7f..e628cb891d8 100644 --- a/source/blender/python/intern/bpy_driver.c +++ b/source/blender/python/intern/bpy_driver.c @@ -94,13 +94,12 @@ int bpy_pydriver_create_dict(void) /* note, this function should do nothing most runs, only when changing frame */ static PyObject *bpy_pydriver_InternStr__frame= NULL; +/* not thread safe but neither is python */ +static float bpy_pydriver_evaltime_prev= FLT_MAX; static void bpy_pydriver_update_dict(const float evaltime) { - /* not thread safe but neither is python */ - static float evaltime_prev= FLT_MAX; - - if (evaltime_prev != evaltime) { + if (bpy_pydriver_evaltime_prev != evaltime) { /* currently only update the frame */ if (bpy_pydriver_InternStr__frame == NULL) { @@ -111,7 +110,7 @@ static void bpy_pydriver_update_dict(const float evaltime) bpy_pydriver_InternStr__frame, PyFloat_FromDouble(evaltime)); - evaltime_prev= evaltime; + bpy_pydriver_evaltime_prev= evaltime; } } @@ -137,6 +136,7 @@ void BPY_driver_reset(void) if (bpy_pydriver_InternStr__frame) { Py_DECREF(bpy_pydriver_InternStr__frame); bpy_pydriver_InternStr__frame= NULL; + bpy_pydriver_evaltime_prev= FLT_MAX; } if (use_gil) From eb09043411eb5c1b5e08ecc7a7087d8bfdc3d8d6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 16 Dec 2011 03:45:44 +0000 Subject: [PATCH 3/4] fix [#29626] Warp tool: stuck Angle value --- source/blender/editors/transform/transform_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 7951fe0ee02..90f95bea696 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -632,7 +632,7 @@ void TRANSFORM_OT_warp(struct wmOperatorType *ot) ot->cancel = transform_cancel; ot->poll = ED_operator_screenactive; - RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", 0, 1); + RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2); Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); // XXX Warp axis? From 724868b400882c93c83e42f17884426b23a09104 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 16 Dec 2011 04:01:08 +0000 Subject: [PATCH 4/4] fix [#29620] Topology Mirror: not refreshing vertex UUIDs --- source/blender/editors/mesh/meshtools.c | 26 +++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 707936351cf..3ea872a93de 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -873,7 +873,8 @@ static int MirrTopo_item_sort(const void *v1, const void *v2) } static long *mesh_topo_lookup = NULL; -static int mesh_topo_lookup_tot = -1; +static int mesh_topo_lookup_vert_tot = -1; +static int mesh_topo_lookup_edge_tot = -1; static int mesh_topo_lookup_mode = -1; /* mode is 's' start, or 'e' end, or 'u' use */ @@ -884,8 +885,10 @@ long mesh_mirrtopo_table(Object *ob, char mode) Mesh *me= ob->data; if( (mesh_topo_lookup==NULL) || (mesh_topo_lookup_mode != ob->mode) || - (me->edit_mesh && me->edit_mesh->totvert != mesh_topo_lookup_tot) || - (me->edit_mesh==NULL && me->totvert != mesh_topo_lookup_tot) + (me->edit_mesh && (me->edit_mesh->totvert != mesh_topo_lookup_vert_tot)) || + (me->edit_mesh && (me->edit_mesh->totedge != mesh_topo_lookup_edge_tot)) || + (me->edit_mesh==NULL && me->totvert != mesh_topo_lookup_vert_tot) || + (me->edit_mesh==NULL && me->totedge != mesh_topo_lookup_edge_tot) ) { mesh_mirrtopo_table(ob, 's'); } @@ -899,7 +902,8 @@ long mesh_mirrtopo_table(Object *ob, char mode) /* editmode*/ EditEdge *eed; - int a, last, totvert; + int a, last; + int totvert, totedge; int totUnique= -1, totUniqueOld= -1; MIRRHASH_TYPE *MirrTopoHash = NULL; @@ -930,12 +934,16 @@ long mesh_mirrtopo_table(Object *ob, char mode) /* Initialize the vert-edge-user counts used to detect unique topology */ if(em) { - for(eed=em->edges.first; eed; eed= eed->next) { + totedge= 0; + + for(eed=em->edges.first; eed; eed= eed->next, totedge++) { MirrTopoHash[eed->v1->tmp.l]++; MirrTopoHash[eed->v2->tmp.l]++; } } else { - for(a=0, medge=me->medge; atotedge; a++, medge++) { + totedge= me->totedge; + + for(a=0, medge=me->medge; a < me->totedge; a++, medge++) { MirrTopoHash[medge->v1]++; MirrTopoHash[medge->v2]++; } @@ -1046,14 +1054,16 @@ long mesh_mirrtopo_table(Object *ob, char mode) MEM_freeN( MirrTopoHash ); MEM_freeN( MirrTopoHash_Prev ); - mesh_topo_lookup_tot = totvert; + mesh_topo_lookup_vert_tot = totvert; + mesh_topo_lookup_edge_tot = totedge; } else if(mode=='e') { /* end table */ if (mesh_topo_lookup) { MEM_freeN(mesh_topo_lookup); } mesh_topo_lookup = NULL; - mesh_topo_lookup_tot= -1; + mesh_topo_lookup_vert_tot= -1; + mesh_topo_lookup_edge_tot= -1; } return 0; }