@ -108,7 +108,7 @@ static CustomData *rna_mesh_vdata(const PointerRNA *ptr)
Mesh * me = rna_mesh ( ptr ) ;
return rna_mesh_vdata_helper ( me ) ;
}
static CustomData * rna_mesh_edata ( PointerRNA * ptr )
static CustomData * rna_mesh_edata ( const PointerRNA * ptr )
{
Mesh * me = rna_mesh ( ptr ) ;
return rna_mesh_edata_helper ( me ) ;
@ -239,6 +239,16 @@ static bool rna_Mesh_has_vertex_bevel_weight_get(PointerRNA *ptr)
return CustomData_has_layer ( rna_mesh_vdata ( ptr ) , CD_BWEIGHT ) ;
}
static bool rna_Mesh_has_edge_crease_get ( PointerRNA * ptr )
{
return CustomData_has_layer ( rna_mesh_edata ( ptr ) , CD_CREASE ) ;
}
static bool rna_Mesh_has_vertex_crease_get ( PointerRNA * ptr )
{
return CustomData_has_layer ( rna_mesh_vdata ( ptr ) , CD_CREASE ) ;
}
/** \} */
/* -------------------------------------------------------------------- */
@ -472,14 +482,19 @@ static void rna_MEdge_bevel_weight_set(PointerRNA *ptr, float value)
static float rna_MEdge_crease_get ( PointerRNA * ptr )
{
MEdge * medge = ( MEdge * ) ptr - > data ;
return medge - > crease / 255.0f ;
const Mesh * mesh = rna_mesh ( ptr ) ;
const int index = rna_MeshEdge_index_get ( ptr ) ;
const float * values = ( const float * ) CustomData_get_layer ( & mesh - > edata , CD_CREASE ) ;
return values = = NULL ? 0.0f : values [ index ] ;
}
static void rna_MEdge_crease_set ( PointerRNA * ptr , float value )
{
MEdge * medge = ( MEdge * ) ptr - > data ;
medge - > crease = round_fl_to_uchar_clamp ( value * 255.0f ) ;
Mesh * mesh = rna_mesh ( ptr ) ;
const int index = rna_MeshEdge_index_get ( ptr ) ;
float * values = ( float * ) CustomData_add_layer (
& mesh - > edata , CD_CREASE , CD_SET_DEFAULT , NULL , mesh - > totedge ) ;
values [ index ] = clamp_f ( value , 0.0f , 1.0f ) ;
}
static void rna_MeshLoop_normal_get ( PointerRNA * ptr , float * values )
@ -1165,6 +1180,31 @@ static int rna_MeshVertexCreaseLayer_data_length(PointerRNA *ptr)
/* End vertex creases */
/* Edge creases */
DEFINE_CUSTOMDATA_LAYER_COLLECTION ( edge_crease , edata , CD_CREASE )
static char * rna_EdgeCustomData_data_path ( const PointerRNA * ptr , const char * collection , int type ) ;
static char * rna_MeshEdgeCreaseLayer_path ( const PointerRNA * ptr )
{
return rna_EdgeCustomData_data_path ( ptr , " edge_creases " , CD_CREASE ) ;
}
static void rna_MeshEdgeCreaseLayer_data_begin ( CollectionPropertyIterator * iter , PointerRNA * ptr )
{
Mesh * me = rna_mesh ( ptr ) ;
CustomDataLayer * layer = ( CustomDataLayer * ) ptr - > data ;
rna_iterator_array_begin ( iter , layer - > data , sizeof ( float ) , me - > totedge , 0 , NULL ) ;
}
static int rna_MeshEdgeCreaseLayer_data_length ( PointerRNA * ptr )
{
Mesh * me = rna_mesh ( ptr ) ;
return me - > totedge ;
}
/* End edge creases */
/* Paint mask */
DEFINE_CUSTOMDATA_LAYER_COLLECTION ( vertex_paint_mask , vdata , CD_PAINT_MASK )
@ -1424,6 +1464,27 @@ static char *rna_VertCustomData_data_path(const PointerRNA *ptr, const char *col
return NULL ;
}
static char * rna_EdgeCustomData_data_path ( const PointerRNA * ptr , const char * collection , int type )
{
const CustomDataLayer * cdl ;
const Mesh * me = rna_mesh ( ptr ) ;
const CustomData * edata = rna_mesh_edata ( ptr ) ;
int a , b , totedge = ( me - > edit_mesh ) ? 0 : me - > totedge ;
for ( cdl = edata - > layers , a = 0 ; a < edata - > totlayer ; cdl + + , a + + ) {
if ( cdl - > type = = type ) {
b = ( ( char * ) ptr - > data - ( ( char * ) cdl - > data ) ) / CustomData_sizeof ( type ) ;
if ( b > = 0 & & b < totedge ) {
char name_esc [ sizeof ( cdl - > name ) * 2 ] ;
BLI_str_escape ( name_esc , cdl - > name , sizeof ( name_esc ) ) ;
return BLI_sprintfN ( " %s[ \" %s \" ].data[%d] " , collection , name_esc , b ) ;
}
}
}
return NULL ;
}
static char * rna_PolyCustomData_data_path ( const PointerRNA * ptr , const char * collection , int type )
{
const CustomDataLayer * cdl ;
@ -1969,6 +2030,7 @@ static void UNUSED_FUNCTION(rna_mesh_unused)(void)
( void ) rna_Mesh_face_map_active_index_get ;
( void ) rna_Mesh_face_map_active_set ;
( void ) rna_Mesh_vertex_crease_index_range ;
( void ) rna_Mesh_edge_crease_index_range ;
/* end unused function block */
}
@ -3291,6 +3353,40 @@ static void rna_def_vertex_creases(BlenderRNA *brna)
RNA_def_property_update ( prop , 0 , " rna_Mesh_update_data_legacy_deg_tag_all " ) ;
}
static void rna_def_edge_creases ( BlenderRNA * brna )
{
StructRNA * srna ;
PropertyRNA * prop ;
srna = RNA_def_struct ( brna , " MeshEdgeCreaseLayer " , NULL ) ;
RNA_def_struct_ui_text ( srna , " Mesh Edge Crease Layer " , " Per-edge crease " ) ;
RNA_def_struct_sdna ( srna , " CustomDataLayer " ) ;
RNA_def_struct_path_func ( srna , " rna_MeshEdgeCreaseLayer_path " ) ;
prop = RNA_def_property ( srna , " data " , PROP_COLLECTION , PROP_NONE ) ;
RNA_def_property_struct_type ( prop , " MeshEdgeCrease " ) ;
RNA_def_property_ui_text ( prop , " Data " , " " ) ;
RNA_def_property_collection_funcs ( prop ,
" rna_MeshEdgeCreaseLayer_data_begin " ,
" rna_iterator_array_next " ,
" rna_iterator_array_end " ,
" rna_iterator_array_get " ,
" rna_MeshEdgeCreaseLayer_data_length " ,
NULL ,
NULL ,
NULL ) ;
/* EdgeCrease struct */
srna = RNA_def_struct ( brna , " MeshEdgeCrease " , NULL ) ;
RNA_def_struct_sdna ( srna , " MFloatProperty " ) ;
RNA_def_struct_ui_text ( srna , " Float Property " , " " ) ;
prop = RNA_def_property ( srna , " value " , PROP_FLOAT , PROP_NONE ) ;
RNA_def_property_float_sdna ( prop , NULL , " f " ) ;
RNA_def_property_ui_text ( prop , " Value " , " " ) ;
RNA_def_property_update ( prop , 0 , " rna_Mesh_update_data_legacy_deg_tag_all " ) ;
}
static void rna_def_paint_mask ( BlenderRNA * brna , PropertyRNA * UNUSED ( cprop ) )
{
StructRNA * srna ;
@ -3765,6 +3861,24 @@ static void rna_def_mesh(BlenderRNA *brna)
rna_def_vertex_creases ( brna ) ;
/* End vertex crease */
/* Vertex Crease */
prop = RNA_def_property ( srna , " edge_creases " , PROP_COLLECTION , PROP_NONE ) ;
RNA_def_property_struct_type ( prop , " MeshEdgeCreaseLayer " ) ;
RNA_def_property_collection_sdna ( prop , NULL , " edata.layers " , " edata.totlayer " ) ;
RNA_def_property_collection_funcs ( prop ,
" rna_Mesh_edge_creases_begin " ,
NULL ,
NULL ,
NULL ,
" rna_Mesh_edge_creases_length " ,
NULL ,
NULL ,
NULL ) ;
RNA_def_property_override_flag ( prop , PROPOVERRIDE_IGNORE ) ;
RNA_def_property_ui_text ( prop , " Edge Creases " , " Sharpness of the edges for subdivision " ) ;
rna_def_edge_creases ( brna ) ;
/* End edge crease */
/* Paint mask */
prop = RNA_def_property ( srna , " vertex_paint_masks " , PROP_COLLECTION , PROP_NONE ) ;
RNA_def_property_collection_sdna ( prop , NULL , " vdata.layers " , " vdata.totlayer " ) ;
@ -3910,6 +4024,17 @@ static void rna_def_mesh(BlenderRNA *brna)
prop , " Has Vertex Bevel Weight " , " True if the mesh has an vertex bevel weight layer " ) ;
RNA_def_property_boolean_funcs ( prop , " rna_Mesh_has_vertex_bevel_weight_get " , NULL ) ;
prop = RNA_def_property ( srna , " has_crease_edge " , PROP_BOOLEAN , PROP_NONE ) ;
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ;
RNA_def_property_ui_text ( prop , " Has Edge Crease " , " True if the mesh has an edge crease layer " ) ;
RNA_def_property_boolean_funcs ( prop , " rna_Mesh_has_edge_crease_get " , NULL ) ;
prop = RNA_def_property ( srna , " has_crease_vertex " , PROP_BOOLEAN , PROP_NONE ) ;
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ;
RNA_def_property_ui_text (
prop , " Has Vertex Crease " , " True if the mesh has an vertex crease layer " ) ;
RNA_def_property_boolean_funcs ( prop , " rna_Mesh_has_vertex_crease_get " , NULL ) ;
prop = RNA_def_property ( srna , " texco_mesh " , PROP_POINTER , PROP_NONE ) ;
RNA_def_property_pointer_sdna ( prop , NULL , " texcomesh " ) ;
RNA_def_property_flag ( prop , PROP_EDITABLE ) ;
@ -3962,16 +4087,6 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_ui_icon ( prop , ICON_VERTEXSEL , 0 ) ;
RNA_def_property_update ( prop , NC_SPACE | ND_SPACE_VIEW3D , " rna_Mesh_update_vertmask " ) ;
/* customdata flags */
prop = RNA_def_property ( srna , " use_customdata_vertex_crease " , PROP_BOOLEAN , PROP_NONE ) ;
RNA_def_property_boolean_sdna ( prop , NULL , " cd_flag " , ME_CDFLAG_VERT_CREASE ) ;
RNA_def_property_ui_text ( prop , " Store Vertex Crease " , " " ) ;
prop = RNA_def_property ( srna , " use_customdata_edge_crease " , PROP_BOOLEAN , PROP_NONE ) ;
RNA_def_property_boolean_sdna ( prop , NULL , " cd_flag " , ME_CDFLAG_EDGE_CREASE ) ;
RNA_def_property_ui_text ( prop , " Store Edge Crease " , " " ) ;
/* readonly editmesh info - use for extrude menu */
prop = RNA_def_property ( srna , " total_vert_sel " , PROP_INT , PROP_UNSIGNED ) ;
RNA_def_property_int_funcs ( prop , " rna_Mesh_tot_vert_get " , NULL , NULL ) ;