rename Mesh.uv_loop_layers --> uv_layers
add filtering for document generator to support --partial bpy.types.SomeType
This commit is contained in:
		@@ -32,12 +32,11 @@ For an overview of BMesh data types and how they reference each other see:
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   TODO Items Are
 | 
			
		||||
   TODO items are...
 | 
			
		||||
 | 
			
		||||
   * add access to BMesh **walkers**
 | 
			
		||||
   * add a way to re-tessellate an editmode bmesh.
 | 
			
		||||
   * add deform vert custom-data access.
 | 
			
		||||
 | 
			
		||||
   * add api for calling BMesh operators (unrelated to bpy.ops)
 | 
			
		||||
   * add custom-data manipulation functions add/remove/rename.
 | 
			
		||||
 | 
			
		||||
Example Script
 | 
			
		||||
--------------
 | 
			
		||||
 
 | 
			
		||||
@@ -132,6 +132,8 @@ write useful tools in python which are also fast to execute while in edit-mode.
 | 
			
		||||
For the time being this limitation just has to be worked around but we're aware its frustrating needs to be addressed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.. _info_gotcha_mesh_faces:
 | 
			
		||||
 | 
			
		||||
NGons and Tessellation Faces
 | 
			
		||||
============================
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -230,10 +230,10 @@ if not ARGS.partial:
 | 
			
		||||
 | 
			
		||||
else:
 | 
			
		||||
    # can manually edit this too:
 | 
			
		||||
    FILTER_BPY_OPS = ("import.scene", )  # allow
 | 
			
		||||
    FILTER_BPY_TYPES = ("bpy_struct", "Operator", "ID")  # allow
 | 
			
		||||
    #FILTER_BPY_OPS = ("import.scene", )  # allow
 | 
			
		||||
    #FILTER_BPY_TYPES = ("bpy_struct", "Operator", "ID")  # allow
 | 
			
		||||
    EXCLUDE_INFO_DOCS = True
 | 
			
		||||
    EXCLUDE_MODULES = (
 | 
			
		||||
    EXCLUDE_MODULES = [
 | 
			
		||||
        "aud",
 | 
			
		||||
        "bge",
 | 
			
		||||
        "bge.constraints",
 | 
			
		||||
@@ -261,7 +261,7 @@ else:
 | 
			
		||||
        "mathutils",
 | 
			
		||||
        "mathutils.geometry",
 | 
			
		||||
        "mathutils.noise",
 | 
			
		||||
    )
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
    # ------
 | 
			
		||||
    # Filter
 | 
			
		||||
@@ -269,7 +269,18 @@ else:
 | 
			
		||||
    # TODO, support bpy.ops and bpy.types filtering
 | 
			
		||||
    import fnmatch
 | 
			
		||||
    m = None
 | 
			
		||||
    EXCLUDE_MODULES = tuple([m for m in EXCLUDE_MODULES if not fnmatch.fnmatchcase(m, ARGS.partial)])
 | 
			
		||||
    EXCLUDE_MODULES = [m for m in EXCLUDE_MODULES if not fnmatch.fnmatchcase(m, ARGS.partial)]
 | 
			
		||||
 | 
			
		||||
    # special support for bpy.types.XXX
 | 
			
		||||
    FILTER_BPY_OPS = tuple([m[8:] for m in ARGS.partial.split(":") if m.startswith("bpy.ops.")])
 | 
			
		||||
    if FILTER_BPY_OPS:
 | 
			
		||||
        EXCLUDE_MODULES.remove("bpy.ops")
 | 
			
		||||
 | 
			
		||||
    FILTER_BPY_TYPES = tuple([m[10:] for m in ARGS.partial.split(":") if m.startswith("bpy.types.")])
 | 
			
		||||
    if FILTER_BPY_TYPES:
 | 
			
		||||
        EXCLUDE_MODULES.remove("bpy.types")
 | 
			
		||||
 | 
			
		||||
    print(FILTER_BPY_TYPES)
 | 
			
		||||
 | 
			
		||||
    EXCLUDE_INFO_DOCS = (not fnmatch.fnmatchcase("info", ARGS.partial))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -79,7 +79,7 @@ class MeshMirrorUV(Operator):
 | 
			
		||||
        polys = mesh.polygons
 | 
			
		||||
        loops = mesh.loops
 | 
			
		||||
        verts = mesh.vertices
 | 
			
		||||
        uv_loops = mesh.uv_loop_layers.active.data
 | 
			
		||||
        uv_loops = mesh.uv_layers.active.data
 | 
			
		||||
        nbr_polys = len(polys)
 | 
			
		||||
 | 
			
		||||
        mirror_pm = {}
 | 
			
		||||
 
 | 
			
		||||
@@ -489,7 +489,7 @@ class JoinUVs(Operator):
 | 
			
		||||
 | 
			
		||||
            # seems to be the fastest way to create an array
 | 
			
		||||
            uv_array = array.array('f', [0.0] * 2) * nbr_loops
 | 
			
		||||
            mesh.uv_loop_layers.active.data.foreach_get("uv", uv_array)
 | 
			
		||||
            mesh.uv_layers.active.data.foreach_get("uv", uv_array)
 | 
			
		||||
 | 
			
		||||
            objects = context.selected_editable_objects[:]
 | 
			
		||||
 | 
			
		||||
@@ -516,10 +516,10 @@ class JoinUVs(Operator):
 | 
			
		||||
                                               ),
 | 
			
		||||
                                           )
 | 
			
		||||
                            else:
 | 
			
		||||
                                uv_other = mesh_other.uv_loop_layers.active
 | 
			
		||||
                                uv_other = mesh_other.uv_layers.active
 | 
			
		||||
                                if not uv_other:
 | 
			
		||||
                                    mesh_other.uv_textures.new()
 | 
			
		||||
                                    uv_other = mesh_other.uv_loop_layers.active
 | 
			
		||||
                                    uv_other = mesh_other.uv_layers.active
 | 
			
		||||
                                    if not uv_other:
 | 
			
		||||
                                        self.report({'ERROR'}, "Could not add "
 | 
			
		||||
                                                    "a new UV map tp object "
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ def extend(obj, operator, EXTEND_MODE):
 | 
			
		||||
        vidx_source = face_source.vertices
 | 
			
		||||
        vidx_target = face_target.vertices
 | 
			
		||||
 | 
			
		||||
        uv_layer = me.uv_loop_layers.active.data
 | 
			
		||||
        uv_layer = me.uv_layers.active.data
 | 
			
		||||
        uvs_source = [uv_layer[i].uv for i in face_source.loop_indices]
 | 
			
		||||
        uvs_target = [uv_layer[i].uv for i in face_target.loop_indices]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,7 @@ class prettyface(object):
 | 
			
		||||
            self.children = []
 | 
			
		||||
 | 
			
		||||
        else:  # blender face
 | 
			
		||||
            uv_layer = data.id_data.uv_loop_layers.active.data
 | 
			
		||||
            uv_layer = data.id_data.uv_layers.active.data
 | 
			
		||||
            self.uv = [uv_layer[i].uv for i in data.loop_indices]
 | 
			
		||||
 | 
			
		||||
            # cos = [v.co for v in data]
 | 
			
		||||
@@ -158,7 +158,7 @@ class prettyface(object):
 | 
			
		||||
                I = [i for a, i in angles_co]
 | 
			
		||||
 | 
			
		||||
                #~ fuv = f.uv
 | 
			
		||||
                uv_layer = f.id_data.uv_loop_layers.active.data
 | 
			
		||||
                uv_layer = f.id_data.uv_layers.active.data
 | 
			
		||||
                fuv = [uv_layer[i].uv for i in f.loops]  # XXX25
 | 
			
		||||
 | 
			
		||||
                if self.rot:
 | 
			
		||||
 
 | 
			
		||||
@@ -889,7 +889,7 @@ def main(context,
 | 
			
		||||
        if not me.uv_textures: # Mesh has no UV Coords, don't bother.
 | 
			
		||||
            me.uv_textures.new()
 | 
			
		||||
 | 
			
		||||
        uv_layer = me.uv_loop_layers.active.data
 | 
			
		||||
        uv_layer = me.uv_layers.active.data
 | 
			
		||||
        me_verts = list(me.vertices)
 | 
			
		||||
 | 
			
		||||
        if USER_ONLY_SELECTED_FACES:
 | 
			
		||||
 
 | 
			
		||||
@@ -509,19 +509,19 @@ static void rna_CustomDataLayer_clone_set(PointerRNA *ptr, CustomData *data, int
 | 
			
		||||
	CustomData_set_layer_clone_index(data, type, n);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* uv_loop_layers */
 | 
			
		||||
/* uv_layers */
 | 
			
		||||
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION(uv_loop_layer, ldata, CD_MLOOPUV)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, active, MeshUVLoopLayer)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, clone, MeshUVLoopLayer)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, stencil, MeshUVLoopLayer)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, render, MeshUVLoopLayer)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION(uv_layer, ldata, CD_MLOOPUV)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_layer, ldata, CD_MLOOPUV, active, MeshUVLoopLayer)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_layer, ldata, CD_MLOOPUV, clone, MeshUVLoopLayer)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_layer, ldata, CD_MLOOPUV, stencil, MeshUVLoopLayer)
 | 
			
		||||
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_layer, ldata, CD_MLOOPUV, render, MeshUVLoopLayer)
 | 
			
		||||
 | 
			
		||||
/* MeshUVLoopLayer */
 | 
			
		||||
 | 
			
		||||
static char *rna_MeshUVLoopLayer_path(PointerRNA *ptr)
 | 
			
		||||
{
 | 
			
		||||
	return BLI_sprintfN("uv_loop_layer[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
 | 
			
		||||
	return BLI_sprintfN("uv_layers[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void rna_MeshUVLoopLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 | 
			
		||||
@@ -1089,7 +1089,7 @@ static char *rna_FaceCustomData_data_path(PointerRNA *ptr, char *collection, int
 | 
			
		||||
 | 
			
		||||
static char *rna_MeshUVLoop_path(PointerRNA *ptr)
 | 
			
		||||
{
 | 
			
		||||
	return rna_LoopCustomData_data_path(ptr, "uv_loop_layers", CD_MLOOPUV);
 | 
			
		||||
	return rna_LoopCustomData_data_path(ptr, "uv_layers", CD_MLOOPUV);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *rna_MeshTextureFace_path(PointerRNA *ptr)
 | 
			
		||||
@@ -2291,7 +2291,7 @@ static void rna_def_loop_colors(BlenderRNA *brna, PropertyRNA *cprop)
 | 
			
		||||
	RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void rna_def_uv_loop_layers(BlenderRNA *brna, PropertyRNA *cprop)
 | 
			
		||||
static void rna_def_uv_layers(BlenderRNA *brna, PropertyRNA *cprop)
 | 
			
		||||
{
 | 
			
		||||
	StructRNA *srna;
 | 
			
		||||
	PropertyRNA *prop;
 | 
			
		||||
@@ -2306,15 +2306,15 @@ static void rna_def_uv_loop_layers(BlenderRNA *brna, PropertyRNA *cprop)
 | 
			
		||||
 | 
			
		||||
	prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
 | 
			
		||||
	RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_loop_layer_active_get",
 | 
			
		||||
	                               "rna_Mesh_uv_loop_layer_active_set", NULL, NULL);
 | 
			
		||||
	RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_layer_active_get",
 | 
			
		||||
	                               "rna_Mesh_uv_layer_active_set", NULL, NULL);
 | 
			
		||||
	RNA_def_property_flag(prop, PROP_EDITABLE);
 | 
			
		||||
	RNA_def_property_ui_text(prop, "Active UV loop layer", "Active UV loop layer");
 | 
			
		||||
	RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
 | 
			
		||||
 | 
			
		||||
	prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_int_funcs(prop, "rna_Mesh_uv_loop_layer_active_index_get",
 | 
			
		||||
	                           "rna_Mesh_uv_loop_layer_active_index_set", "rna_Mesh_uv_loop_layer_index_range");
 | 
			
		||||
	RNA_def_property_int_funcs(prop, "rna_Mesh_uv_layer_active_index_get",
 | 
			
		||||
	                           "rna_Mesh_uv_layer_active_index_set", "rna_Mesh_uv_layer_index_range");
 | 
			
		||||
	RNA_def_property_ui_text(prop, "Active UV loop layer Index", "Active UV loop layer index");
 | 
			
		||||
	RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
 | 
			
		||||
}
 | 
			
		||||
@@ -2385,7 +2385,7 @@ static void rna_def_polygon_string_layers(BlenderRNA *brna, PropertyRNA *cprop)
 | 
			
		||||
	RNA_def_function_return(func, parm);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* mesh.uv_layers */
 | 
			
		||||
/* mesh.tessface_uv_layers */
 | 
			
		||||
static void rna_def_tessface_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
 | 
			
		||||
{
 | 
			
		||||
	StructRNA *srna;
 | 
			
		||||
@@ -2446,7 +2446,7 @@ static void rna_def_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
 | 
			
		||||
	RNA_def_function_return(func, parm);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	func = RNA_def_function(srna, "remove", "rna_Mesh_uv_layers_remove");
 | 
			
		||||
	func = RNA_def_function(srna, "remove", "rna_Mesh_uv_texture_layers_remove");
 | 
			
		||||
	RNA_def_function_ui_description(func, "Remove a vertex color layer");
 | 
			
		||||
	RNA_def_function_flag(func, FUNC_USE_REPORTS);
 | 
			
		||||
	parm = RNA_def_pointer(func, "layer", "Layer", "", "The layer to remove");
 | 
			
		||||
@@ -2519,36 +2519,36 @@ static void rna_def_mesh(BlenderRNA *brna)
 | 
			
		||||
	                         "Use another mesh for texture indices (vertex indices must be aligned)");
 | 
			
		||||
 | 
			
		||||
	/* UV loop layers */
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_loop_layers", PROP_COLLECTION, PROP_NONE);
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_layers", PROP_COLLECTION, PROP_NONE);
 | 
			
		||||
	RNA_def_property_collection_sdna(prop, NULL, "ldata.layers", "ldata.totlayer");
 | 
			
		||||
	RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_loop_layers_begin", NULL, NULL, NULL,
 | 
			
		||||
	                                  "rna_Mesh_uv_loop_layers_length", NULL, NULL, NULL);
 | 
			
		||||
	RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_layers_begin", NULL, NULL, NULL,
 | 
			
		||||
	                                  "rna_Mesh_uv_layers_length", NULL, NULL, NULL);
 | 
			
		||||
	RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
 | 
			
		||||
	RNA_def_property_ui_text(prop, "UV Loop Layers", "All UV loop layers");
 | 
			
		||||
	rna_def_uv_loop_layers(brna, prop);
 | 
			
		||||
	rna_def_uv_layers(brna, prop);
 | 
			
		||||
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_loop_layer_clone", PROP_POINTER, PROP_UNSIGNED);
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_layer_clone", PROP_POINTER, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
 | 
			
		||||
	RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_loop_layer_clone_get",
 | 
			
		||||
	                               "rna_Mesh_uv_loop_layer_clone_set", NULL, NULL);
 | 
			
		||||
	RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_layer_clone_get",
 | 
			
		||||
	                               "rna_Mesh_uv_layer_clone_set", NULL, NULL);
 | 
			
		||||
	RNA_def_property_flag(prop, PROP_EDITABLE);
 | 
			
		||||
	RNA_def_property_ui_text(prop, "Clone UV loop layer", "UV loop layer to be used as cloning source");
 | 
			
		||||
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_loop_layer_clone_index", PROP_INT, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_int_funcs(prop, "rna_Mesh_uv_loop_layer_clone_index_get",
 | 
			
		||||
	                           "rna_Mesh_uv_loop_layer_clone_index_set", "rna_Mesh_uv_loop_layer_index_range");
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_layer_clone_index", PROP_INT, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_int_funcs(prop, "rna_Mesh_uv_layer_clone_index_get",
 | 
			
		||||
	                           "rna_Mesh_uv_layer_clone_index_set", "rna_Mesh_uv_layer_index_range");
 | 
			
		||||
	RNA_def_property_ui_text(prop, "Clone UV loop layer Index", "Clone UV loop layer index");
 | 
			
		||||
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_loop_layer_stencil", PROP_POINTER, PROP_UNSIGNED);
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_layer_stencil", PROP_POINTER, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
 | 
			
		||||
	RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_loop_layer_stencil_get",
 | 
			
		||||
	                               "rna_Mesh_uv_loop_layer_stencil_set", NULL, NULL);
 | 
			
		||||
	RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_layer_stencil_get",
 | 
			
		||||
	                               "rna_Mesh_uv_layer_stencil_set", NULL, NULL);
 | 
			
		||||
	RNA_def_property_flag(prop, PROP_EDITABLE);
 | 
			
		||||
	RNA_def_property_ui_text(prop, "Mask UV loop layer", "UV loop layer to mask the painted area");
 | 
			
		||||
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_loop_layer_stencil_index", PROP_INT, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_int_funcs(prop, "rna_Mesh_uv_loop_layer_stencil_index_get",
 | 
			
		||||
	                           "rna_Mesh_uv_loop_layer_stencil_index_set", "rna_Mesh_uv_loop_layer_index_range");
 | 
			
		||||
	prop = RNA_def_property(srna, "uv_layer_stencil_index", PROP_INT, PROP_UNSIGNED);
 | 
			
		||||
	RNA_def_property_int_funcs(prop, "rna_Mesh_uv_layer_stencil_index_get",
 | 
			
		||||
	                           "rna_Mesh_uv_layer_stencil_index_set", "rna_Mesh_uv_layer_index_range");
 | 
			
		||||
	RNA_def_property_ui_text(prop, "Mask UV loop layer Index", "Mask UV loop layer index");
 | 
			
		||||
 | 
			
		||||
	/* Tessellated face UV maps - used by renderers */
 | 
			
		||||
 
 | 
			
		||||
@@ -260,7 +260,7 @@ def mesh_uv_add(obj):
 | 
			
		||||
    if IS_BMESH:
 | 
			
		||||
        # XXX, odd that we need to do this. until uvs and texface
 | 
			
		||||
        # are separated we will need to keep it
 | 
			
		||||
        uv_loops = obj.data.uv_loop_layers[-1]
 | 
			
		||||
        uv_loops = obj.data.uv_layers[-1]
 | 
			
		||||
        uv_list = uv_loops.data[:]
 | 
			
		||||
        for poly in obj.data.polygons:
 | 
			
		||||
            poly_uvs = mesh_bmesh_poly_elems(poly, uv_list)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user