diff --git a/release/scripts/bpymodules/BPyMesh_redux.py b/release/scripts/bpymodules/BPyMesh_redux.py index 27c90454640..a758eeca99b 100644 --- a/release/scripts/bpymodules/BPyMesh_redux.py +++ b/release/scripts/bpymodules/BPyMesh_redux.py @@ -5,6 +5,9 @@ LineIntersect= Blender.Mathutils.LineIntersect import BPyMesh +#import psyco +#psyco.full() + def uv_key(uv): return round(uv.x, 5), round(uv.y, 5) @@ -27,6 +30,10 @@ def redux(ob, factor=0.5): # % of the collapseable faces to collapse per pass. collapse_per_pass= 0.333 # between 0.1 - lots of small nibbles, slow but high q. and 0.9 - big passes and faster. + + for v in me.verts: + v.hide=0 + while target_face_count <= len(me.faces): BPyMesh.meshCalcNormals(me) @@ -269,11 +276,14 @@ def redux(ob, factor=0.5): v2= ed.v2 v1.co= v2.co= loc - me.remDoubles(0.0001) + doubles= me.remDoubles(0.0001) + # print 'doubles', doubles me= ob.getData(mesh=1) + if doubles==0: + break # Cleanup. - + ''' vert_face_user_count= [0]*len(me.verts) for f in me.faces: for v in f.v: @@ -281,6 +291,7 @@ def redux(ob, factor=0.5): del_verts= [i for i in xrange(len(me.verts)) if not vert_face_user_count[i]] me.verts.delete( del_verts ) + ''' me.update() Blender.Mesh.Mode(OLD_MESH_MODE) diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c index a952fc3587d..c4805f04549 100644 --- a/source/blender/python/api2_2x/Mesh.c +++ b/source/blender/python/api2_2x/Mesh.c @@ -1079,6 +1079,45 @@ static PyObject *MVert_getIndex( BPy_MVert * self ) "PyInt_FromLong() failed" ); } + +/* + * get a verts's hidden state + */ + +static PyObject *MVert_getMFlagBits( BPy_MVert * self, void * type ) +{ + MVert *v; + + v = MVert_get_pointer( self ); + + if( self->index >= ((Mesh *)self->data)->totvert ) + return EXPP_ReturnPyObjError( PyExc_RuntimeError, + "MVert is no longer valid" ); + + return EXPP_getBitfield( &v->flag, (int)((long)type & 0xff), 'b' ); +} + + +/* + * set a verts's hidden state + */ + +static int MVert_setMFlagBits( BPy_MVert * self, PyObject * value, + void * type ) +{ + MVert *v; + + v = MVert_get_pointer( self ); + + if( self->index >= ((Mesh *)self->data)->totvert ) + return EXPP_ReturnPyObjError( PyExc_RuntimeError, + "MVert is no longer valid" ); + + return EXPP_setBitfield( value, &v->flag, + (int)((long)type & 0xff), 'b' ); +} + + /* * get a vertex's normal */ @@ -1256,6 +1295,10 @@ static PyGetSetDef BPy_MVert_getseters[] = { (getter)MVert_getSel, (setter)MVert_setSel, "vertex's select status", NULL}, + {"hide", + (getter)MVert_getMFlagBits, (setter)MVert_setMFlagBits, + "vert hidden in edit mode", + (void *)ME_HIDE}, {"uvco", (getter)MVert_getUVco, (setter)MVert_setUVco, "vertex's UV coordinates", diff --git a/source/blender/python/api2_2x/doc/Mesh.py b/source/blender/python/api2_2x/doc/Mesh.py index cae7df6e641..7c3f3ecca4b 100644 --- a/source/blender/python/api2_2x/doc/Mesh.py +++ b/source/blender/python/api2_2x/doc/Mesh.py @@ -201,6 +201,8 @@ class MVert: was last exited. A Python script operating in EditMode must exit EditMode before getting the current selection state of the mesh. @type sel: int + @ivar hide: The face's B{edit mode} visibility state (hidden=1). + @type hide: int @warn: There are two kinds of UV texture coordinates in Blender: per vertex ("sticky") and per face vertex (UV in L{MFace}). In the first, there's only one UV pair of coordinates for each vertex in the mesh. In the