python api: add functionality to remove uv-texture layers.
This commit is contained in:
parent
8ff3fa8ab2
commit
b57fc113aa
@ -254,11 +254,13 @@ void ED_mesh_calc_tessface(struct Mesh *mesh);
|
||||
void ED_mesh_material_link(struct Mesh *me, struct Material *ma);
|
||||
void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface);
|
||||
|
||||
int ED_mesh_uv_texture_add(struct bContext *C, struct Mesh *me, const char *name, int active_set);
|
||||
int ED_mesh_uv_texture_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
|
||||
int ED_mesh_uv_texture_add(struct Mesh *me, const char *name, const bool active_set);
|
||||
bool ED_mesh_uv_texture_remove_index(struct Mesh *me, const int n);
|
||||
bool ED_mesh_uv_texture_remove_active(struct Mesh *me);
|
||||
bool ED_mesh_uv_texture_remove_named(struct Mesh *me, const char *name);
|
||||
int ED_mesh_uv_loop_reset(struct bContext *C, struct Mesh *me);
|
||||
int ED_mesh_uv_loop_reset_ex(struct Mesh *me, const int layernum);
|
||||
int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me, const char *name, int active_set);
|
||||
int ED_mesh_color_add(struct Mesh *me, const char *name, const bool active_set);
|
||||
bool ED_mesh_color_remove_index(struct Mesh *me, const int n);
|
||||
bool ED_mesh_color_remove_active(struct Mesh *me);
|
||||
bool ED_mesh_color_remove_named(struct Mesh *me, const char *name);
|
||||
|
@ -340,7 +340,7 @@ int ED_mesh_uv_loop_reset(struct bContext *C, struct Mesh *me)
|
||||
}
|
||||
|
||||
/* note: keep in sync with ED_mesh_color_add */
|
||||
int ED_mesh_uv_texture_add(bContext *C, Mesh *me, const char *name, int active_set)
|
||||
int ED_mesh_uv_texture_add(Mesh *me, const char *name, const bool active_set)
|
||||
{
|
||||
BMEditMesh *em;
|
||||
int layernum_dst;
|
||||
@ -411,37 +411,68 @@ int ED_mesh_uv_texture_add(bContext *C, Mesh *me, const char *name, int active_s
|
||||
}
|
||||
|
||||
DAG_id_tag_update(&me->id, 0);
|
||||
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
|
||||
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
|
||||
|
||||
return layernum_dst;
|
||||
}
|
||||
|
||||
int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
|
||||
bool ED_mesh_uv_texture_remove_index(Mesh *me, const int n)
|
||||
{
|
||||
CustomData *pdata = GET_CD_DATA(me, pdata), *ldata = GET_CD_DATA(me, ldata);
|
||||
CustomDataLayer *cdlp, *cdlu;
|
||||
int index;
|
||||
|
||||
index = CustomData_get_active_layer_index(pdata, CD_MTEXPOLY);
|
||||
index = CustomData_get_layer_index_n(pdata, CD_MTEXPOLY, n);
|
||||
cdlp = (index == -1) ? NULL : &pdata->layers[index];
|
||||
|
||||
index = CustomData_get_active_layer_index(ldata, CD_MLOOPUV);
|
||||
index = CustomData_get_layer_index_n(ldata, CD_MLOOPUV, n);
|
||||
cdlu = (index == -1) ? NULL : &ldata->layers[index];
|
||||
|
||||
|
||||
if (!cdlp || !cdlu)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
delete_customdata_layer(me, cdlp);
|
||||
delete_customdata_layer(me, cdlu);
|
||||
|
||||
delete_customdata_layer(ob->data, cdlp);
|
||||
delete_customdata_layer(ob->data, cdlu);
|
||||
|
||||
DAG_id_tag_update(&me->id, 0);
|
||||
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
|
||||
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
bool ED_mesh_uv_texture_remove_active(Mesh *me)
|
||||
{
|
||||
/* texpoly/uv are assumed to be in sync */
|
||||
CustomData *pdata = GET_CD_DATA(me, pdata);
|
||||
const int n = CustomData_get_active_layer(pdata, CD_MTEXPOLY);
|
||||
|
||||
/* double check active layers align! */
|
||||
#ifdef DEBUG
|
||||
CustomData *ldata = GET_CD_DATA(me, ldata);
|
||||
BLI_assert(CustomData_get_active_layer(ldata, CD_MLOOPUV) == n);
|
||||
#endif
|
||||
|
||||
if (n != -1) {
|
||||
return ED_mesh_uv_texture_remove_index(me, n);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
bool ED_mesh_uv_texture_remove_named(Mesh *me, const char *name)
|
||||
{
|
||||
/* texpoly/uv are assumed to be in sync */
|
||||
CustomData *pdata = GET_CD_DATA(me, pdata);
|
||||
const int n = CustomData_get_named_layer(pdata, CD_MTEXPOLY, name);
|
||||
if (n != -1) {
|
||||
return ED_mesh_uv_texture_remove_index(me, n);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* note: keep in sync with ED_mesh_uv_texture_add */
|
||||
int ED_mesh_color_add(bContext *C, Scene *UNUSED(scene), Object *UNUSED(ob), Mesh *me, const char *name, int active_set)
|
||||
int ED_mesh_color_add(Mesh *me, const char *name, const bool active_set)
|
||||
{
|
||||
BMEditMesh *em;
|
||||
int layernum;
|
||||
@ -489,7 +520,7 @@ int ED_mesh_color_add(bContext *C, Scene *UNUSED(scene), Object *UNUSED(ob), Mes
|
||||
}
|
||||
|
||||
DAG_id_tag_update(&me->id, 0);
|
||||
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
|
||||
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
|
||||
|
||||
return layernum;
|
||||
}
|
||||
@ -523,7 +554,6 @@ bool ED_mesh_color_remove_active(Mesh *me)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool ED_mesh_color_remove_named(Mesh *me, const char *name)
|
||||
{
|
||||
CustomData *ldata = GET_CD_DATA(me, ldata);
|
||||
@ -550,7 +580,7 @@ static int mesh_uv_texture_add_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
Object *ob = ED_object_context(C);
|
||||
Mesh *me = ob->data;
|
||||
|
||||
if (ED_mesh_uv_texture_add(C, me, NULL, true) == -1)
|
||||
if (ED_mesh_uv_texture_add(me, NULL, true) == -1)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -670,7 +700,7 @@ static int mesh_uv_texture_remove_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
Object *ob = ED_object_context(C);
|
||||
Mesh *me = ob->data;
|
||||
|
||||
if (!ED_mesh_uv_texture_remove(C, ob, me))
|
||||
if (!ED_mesh_uv_texture_remove_active(me))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -695,11 +725,10 @@ void MESH_OT_uv_texture_remove(wmOperatorType *ot)
|
||||
|
||||
static int mesh_vertex_color_add_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Object *ob = ED_object_context(C);
|
||||
Mesh *me = ob->data;
|
||||
|
||||
if (ED_mesh_color_add(C, scene, ob, me, NULL, true) == -1)
|
||||
if (ED_mesh_color_add(me, NULL, true) == -1)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -202,7 +202,6 @@ void DPAINT_OT_type_toggle(wmOperatorType *ot)
|
||||
static int output_toggle_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob = ED_object_context(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
DynamicPaintSurface *surface;
|
||||
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)modifiers_findByType(ob, eModifierType_DynamicPaint);
|
||||
int output = RNA_enum_get(op->ptr, "output"); /* currently only 1/0 */
|
||||
@ -223,7 +222,7 @@ static int output_toggle_exec(bContext *C, wmOperator *op)
|
||||
/* Vertex Color Layer */
|
||||
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
|
||||
if (!exists)
|
||||
ED_mesh_color_add(C, scene, ob, ob->data, name, 1);
|
||||
ED_mesh_color_add(ob->data, name, true);
|
||||
else
|
||||
ED_mesh_color_remove_named(ob->data, name);
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
|
||||
return 1;
|
||||
|
||||
if (em && em->bm->totface && !CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY))
|
||||
ED_mesh_uv_texture_add(C, obedit->data, NULL, TRUE);
|
||||
ED_mesh_uv_texture_add(obedit->data, NULL, true);
|
||||
|
||||
if (!ED_uvedit_test(obedit))
|
||||
return 0;
|
||||
|
@ -1268,12 +1268,12 @@ static int rna_Mesh_tot_face_get(PointerRNA *ptr)
|
||||
return me->edit_btmesh ? me->edit_btmesh->bm->totfacesel : 0;
|
||||
}
|
||||
|
||||
static PointerRNA rna_Mesh_vertex_color_new(struct Mesh *me, struct bContext *C, const char *name)
|
||||
static PointerRNA rna_Mesh_vertex_color_new(struct Mesh *me, const char *name)
|
||||
{
|
||||
PointerRNA ptr;
|
||||
CustomData *ldata;
|
||||
CustomDataLayer *cdl = NULL;
|
||||
int index = ED_mesh_color_add(C, NULL, NULL, me, name, FALSE);
|
||||
int index = ED_mesh_color_add(me, name, false);
|
||||
|
||||
if (index != -1) {
|
||||
ldata = rna_mesh_ldata_helper(me);
|
||||
@ -1291,8 +1291,7 @@ static void rna_Mesh_vertex_color_remove(struct Mesh *me, ReportList *reports, C
|
||||
}
|
||||
}
|
||||
|
||||
static PointerRNA rna_Mesh_tessface_vertex_color_new(struct Mesh *me, struct bContext *C, ReportList *reports,
|
||||
const char *name)
|
||||
static PointerRNA rna_Mesh_tessface_vertex_color_new(struct Mesh *me, ReportList *reports, const char *name)
|
||||
{
|
||||
PointerRNA ptr;
|
||||
CustomData *fdata;
|
||||
@ -1309,7 +1308,7 @@ static PointerRNA rna_Mesh_tessface_vertex_color_new(struct Mesh *me, struct bCo
|
||||
return PointerRNA_NULL;
|
||||
}
|
||||
|
||||
index = ED_mesh_color_add(C, NULL, NULL, me, name, FALSE);
|
||||
index = ED_mesh_color_add(me, name, false);
|
||||
|
||||
if (index != -1) {
|
||||
fdata = rna_mesh_fdata_helper(me);
|
||||
@ -1365,12 +1364,12 @@ static PointerRNA rna_Mesh_polygon_string_property_new(struct Mesh *me, struct b
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, struct bContext *C, const char *name)
|
||||
static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, const char *name)
|
||||
{
|
||||
PointerRNA ptr;
|
||||
CustomData *pdata;
|
||||
CustomDataLayer *cdl = NULL;
|
||||
int index = ED_mesh_uv_texture_add(C, me, name, FALSE);
|
||||
int index = ED_mesh_uv_texture_add(me, name, false);
|
||||
|
||||
if (index != -1) {
|
||||
pdata = rna_mesh_pdata_helper(me);
|
||||
@ -1381,11 +1380,17 @@ static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, struct bContext *C, c
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static void rna_Mesh_uv_texture_layers_remove(struct Mesh *me, ReportList *reports, CustomDataLayer *layer)
|
||||
{
|
||||
if (ED_mesh_uv_texture_remove_named(me, layer->name) == false) {
|
||||
BKE_reportf(reports, RPT_ERROR, "texture layer '%s' not found", layer->name);
|
||||
}
|
||||
}
|
||||
|
||||
/* while this is supposed to be readonly,
|
||||
* keep it to support importers that only make tessfaces */
|
||||
|
||||
static PointerRNA rna_Mesh_tessface_uv_texture_new(struct Mesh *me, struct bContext *C, ReportList *reports,
|
||||
const char *name)
|
||||
static PointerRNA rna_Mesh_tessface_uv_texture_new(struct Mesh *me, ReportList *reports, const char *name)
|
||||
{
|
||||
PointerRNA ptr;
|
||||
CustomData *fdata;
|
||||
@ -1402,7 +1407,7 @@ static PointerRNA rna_Mesh_tessface_uv_texture_new(struct Mesh *me, struct bCont
|
||||
return PointerRNA_NULL;
|
||||
}
|
||||
|
||||
index = ED_mesh_uv_texture_add(C, me, name, FALSE);
|
||||
index = ED_mesh_uv_texture_add(me, name, false);
|
||||
|
||||
if (index != -1) {
|
||||
fdata = rna_mesh_fdata_helper(me);
|
||||
@ -2373,7 +2378,7 @@ static void rna_def_tessface_vertex_colors(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
|
||||
/* eventually deprecate this */
|
||||
func = RNA_def_function(srna, "new", "rna_Mesh_tessface_vertex_color_new");
|
||||
RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
|
||||
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
||||
RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh");
|
||||
RNA_def_string(func, "name", "Col", 0, "", "Vertex color name");
|
||||
parm = RNA_def_pointer(func, "layer", "MeshColorLayer", "", "The newly created layer");
|
||||
@ -2408,7 +2413,6 @@ static void rna_def_loop_colors(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
RNA_def_struct_ui_text(srna, "Loop Colors", "Collection of vertex colors");
|
||||
|
||||
func = RNA_def_function(srna, "new", "rna_Mesh_vertex_color_new");
|
||||
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
||||
RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh");
|
||||
RNA_def_string(func, "name", "Col", 0, "", "Vertex color name");
|
||||
parm = RNA_def_pointer(func, "layer", "MeshLoopColorLayer", "", "The newly created layer");
|
||||
@ -2547,7 +2551,7 @@ static void rna_def_tessface_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
|
||||
/* eventually deprecate this */
|
||||
func = RNA_def_function(srna, "new", "rna_Mesh_tessface_uv_texture_new");
|
||||
RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
|
||||
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
||||
RNA_def_function_ui_description(func, "Add a UV tessface-texture layer to Mesh (only for meshes with no polygons)");
|
||||
RNA_def_string(func, "name", "UVMap", 0, "", "UV map name");
|
||||
parm = RNA_def_pointer(func, "layer", "MeshTextureFaceLayer", "", "The newly created layer");
|
||||
@ -2584,21 +2588,17 @@ static void rna_def_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
RNA_def_struct_ui_text(srna, "UV Maps", "Collection of UV maps");
|
||||
|
||||
func = RNA_def_function(srna, "new", "rna_Mesh_uv_texture_new");
|
||||
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
||||
RNA_def_function_ui_description(func, "Add a UV map layer to Mesh");
|
||||
RNA_def_string(func, "name", "UVMap", 0, "", "UV map name");
|
||||
parm = RNA_def_pointer(func, "layer", "MeshTexturePolyLayer", "", "The newly created layer");
|
||||
RNA_def_property_flag(parm, PROP_RNAPTR);
|
||||
RNA_def_function_return(func, parm);
|
||||
|
||||
#if 0
|
||||
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");
|
||||
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
|
||||
RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
|
||||
#endif
|
||||
parm = RNA_def_pointer(func, "layer", "MeshTexturePolyLayer", "", "The layer to remove");
|
||||
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
|
||||
|
@ -370,9 +370,10 @@ void ED_mesh_vertices_remove(struct Mesh *mesh, struct ReportList *reports, int
|
||||
void ED_mesh_edges_remove(struct Mesh *mesh, struct ReportList *reports, int count) {}
|
||||
void ED_mesh_faces_remove(struct Mesh *mesh, struct ReportList *reports, int count) {}
|
||||
void ED_mesh_material_link(struct Mesh *mesh, struct Material *ma) {}
|
||||
int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me) {return 0;}
|
||||
int ED_mesh_uv_texture_add(struct bContext *C, struct Mesh *me) {return 0;}
|
||||
int ED_mesh_color_add(struct Mesh *me, const char *name, const bool active_set) { return -1; }
|
||||
int ED_mesh_uv_texture_add(struct Mesh *me, const char *name, const bool active_set) { return -1; }
|
||||
bool ED_mesh_color_remove_named(struct Mesh *me, const char *name) { return false; }
|
||||
bool ED_mesh_uv_texture_remove_named(struct Mesh *me, const char *name) { return false; }
|
||||
void ED_object_constraint_dependency_update(struct Scene *scene, struct Object *ob) {}
|
||||
void ED_object_constraint_update(struct Object *ob) {}
|
||||
struct bDeformGroup *ED_vgroup_add_name(struct Object *ob, char *name) {return (struct bDeformGroup *) NULL;}
|
||||
|
Loading…
Reference in New Issue
Block a user