2012-04-22 11:54:53 +00:00
|
|
|
/*
|
2008-11-07 02:58:25 +00:00
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2009-08-26 10:27:04 +00:00
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
2008-11-07 02:58:25 +00:00
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2008-11-07 02:58:25 +00:00
|
|
|
*
|
|
|
|
* Contributor(s): Blender Foundation (2008).
|
|
|
|
*
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
*/
|
|
|
|
|
2012-04-22 11:54:53 +00:00
|
|
|
/* note: the original vertex color stuff is now just used for
|
|
|
|
* getting info on the layers themselves, accessing the data is
|
|
|
|
* done through the (not yet written) mpoly interfaces.*/
|
2009-07-16 09:17:27 +00:00
|
|
|
|
2011-02-27 20:20:01 +00:00
|
|
|
/** \file blender/makesrna/intern/rna_mesh.c
|
|
|
|
* \ingroup RNA
|
|
|
|
*/
|
|
|
|
|
2008-11-07 02:58:25 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
2008-11-24 12:12:24 +00:00
|
|
|
#include "DNA_material_types.h"
|
2008-11-07 02:58:25 +00:00
|
|
|
#include "DNA_mesh_types.h"
|
|
|
|
#include "DNA_meshdata_types.h"
|
2008-11-24 12:12:24 +00:00
|
|
|
#include "DNA_object_types.h"
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
#include "BLI_array.h"
|
2011-06-09 08:58:27 +00:00
|
|
|
#include "BLI_math_base.h"
|
|
|
|
#include "BLI_math_rotation.h"
|
2013-04-27 12:51:23 +00:00
|
|
|
#include "BLI_utildefines.h"
|
2011-06-09 08:58:27 +00:00
|
|
|
|
2013-06-03 05:07:16 +00:00
|
|
|
#include "BKE_editmesh.h"
|
|
|
|
|
2013-03-07 02:44:55 +00:00
|
|
|
#include "RNA_access.h"
|
|
|
|
#include "RNA_define.h"
|
|
|
|
#include "RNA_types.h"
|
|
|
|
|
|
|
|
#include "rna_internal.h"
|
|
|
|
|
|
|
|
#include "WM_types.h"
|
|
|
|
|
2013-06-03 05:07:16 +00:00
|
|
|
EnumPropertyItem mesh_delimit_mode_items[] = {
|
|
|
|
{BMO_DELIM_NORMAL, "NORMAL", 0, "Normal", "Delimit by face directions"},
|
|
|
|
{BMO_DELIM_MATERIAL, "MATERIAL", 0, "Material", "Delimit by face material"},
|
|
|
|
{BMO_DELIM_SEAM, "SEAM", 0, "Seam", "Delimit by edge seams"},
|
|
|
|
{0, NULL, 0, NULL, NULL},
|
|
|
|
};
|
|
|
|
|
2008-11-07 02:58:25 +00:00
|
|
|
#ifdef RNA_RUNTIME
|
|
|
|
|
2009-07-01 22:25:49 +00:00
|
|
|
#include "DNA_scene_types.h"
|
|
|
|
|
2009-11-10 20:43:45 +00:00
|
|
|
#include "BLI_math.h"
|
2009-07-01 22:25:49 +00:00
|
|
|
|
|
|
|
#include "BKE_customdata.h"
|
|
|
|
#include "BKE_depsgraph.h"
|
|
|
|
#include "BKE_main.h"
|
|
|
|
#include "BKE_mesh.h"
|
2012-03-07 21:58:58 +00:00
|
|
|
#include "BKE_report.h"
|
2009-07-01 22:25:49 +00:00
|
|
|
|
2010-04-12 03:06:49 +00:00
|
|
|
#include "ED_mesh.h" /* XXX Bad level call */
|
|
|
|
|
2009-07-01 22:25:49 +00:00
|
|
|
#include "WM_api.h"
|
|
|
|
#include "WM_types.h"
|
|
|
|
|
2011-11-24 06:55:53 +00:00
|
|
|
#include "rna_mesh_utils.h"
|
|
|
|
|
2013-04-30 17:30:40 +00:00
|
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
/* Generic helpers */
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static Mesh *rna_mesh(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = (Mesh *)ptr->id.data;
|
|
|
|
return me;
|
|
|
|
}
|
|
|
|
|
2012-05-22 15:18:43 +00:00
|
|
|
static CustomData *rna_mesh_vdata_helper(Mesh *me)
|
|
|
|
{
|
|
|
|
return (me->edit_btmesh) ? &me->edit_btmesh->bm->vdata : &me->vdata;
|
|
|
|
}
|
|
|
|
|
2013-04-30 17:30:40 +00:00
|
|
|
static CustomData *rna_mesh_edata_helper(Mesh *me)
|
|
|
|
{
|
|
|
|
return (me->edit_btmesh) ? &me->edit_btmesh->bm->edata : &me->edata;
|
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static CustomData *rna_mesh_pdata_helper(Mesh *me)
|
|
|
|
{
|
|
|
|
return (me->edit_btmesh) ? &me->edit_btmesh->bm->pdata : &me->pdata;
|
|
|
|
}
|
|
|
|
|
|
|
|
static CustomData *rna_mesh_ldata_helper(Mesh *me)
|
|
|
|
{
|
|
|
|
return (me->edit_btmesh) ? &me->edit_btmesh->bm->ldata : &me->ldata;
|
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static CustomData *rna_mesh_fdata_helper(Mesh *me)
|
|
|
|
{
|
|
|
|
return (me->edit_btmesh) ? NULL : &me->fdata;
|
|
|
|
}
|
|
|
|
|
2012-05-22 15:18:43 +00:00
|
|
|
static CustomData *rna_mesh_vdata(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return rna_mesh_vdata_helper(me);
|
|
|
|
}
|
2013-04-30 17:30:40 +00:00
|
|
|
#if 0
|
|
|
|
static CustomData *rna_mesh_edata(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return rna_mesh_edata_helper(me);
|
|
|
|
}
|
|
|
|
#endif
|
2011-11-17 05:03:07 +00:00
|
|
|
static CustomData *rna_mesh_pdata(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return rna_mesh_pdata_helper(me);
|
|
|
|
}
|
|
|
|
|
|
|
|
static CustomData *rna_mesh_ldata(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return rna_mesh_ldata_helper(me);
|
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static CustomData *rna_mesh_fdata(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return rna_mesh_fdata_helper(me);
|
|
|
|
}
|
|
|
|
|
2013-04-30 17:30:40 +00:00
|
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
/* Generic CustomData Layer Functions */
|
|
|
|
|
|
|
|
static void rna_cd_layer_name_set(CustomData *cdata, CustomDataLayer *cdl, const char *value)
|
|
|
|
{
|
|
|
|
BLI_strncpy_utf8(cdl->name, value, sizeof(cdl->name));
|
|
|
|
CustomData_set_layer_unique_name(cdata, cdl - cdata->layers);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* avoid using where possible!, ideally the type is known */
|
|
|
|
static CustomData *rna_cd_from_layer(PointerRNA *ptr, CustomDataLayer *cdl)
|
|
|
|
{
|
|
|
|
/* find out where we come from by */
|
|
|
|
Mesh *me = ptr->id.data;
|
|
|
|
CustomData *cd;
|
|
|
|
|
|
|
|
/* rely on negative values wrapping */
|
2013-05-01 22:39:34 +00:00
|
|
|
#define TEST_CDL(cmd) if ((void)(cd = cmd(me)), ARRAY_HAS_ITEM(cdl, cd->layers, cd->totlayer)) return cd
|
2013-04-30 17:30:40 +00:00
|
|
|
|
|
|
|
TEST_CDL(rna_mesh_vdata_helper);
|
|
|
|
TEST_CDL(rna_mesh_edata_helper);
|
|
|
|
TEST_CDL(rna_mesh_pdata_helper);
|
|
|
|
TEST_CDL(rna_mesh_ldata_helper);
|
|
|
|
TEST_CDL(rna_mesh_fdata_helper);
|
|
|
|
|
|
|
|
#undef TEST_CDL
|
|
|
|
|
|
|
|
/* should _never_ happen */
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshVertexLayer_name_set(PointerRNA *ptr, const char *value)
|
|
|
|
{
|
|
|
|
rna_cd_layer_name_set(rna_mesh_vdata(ptr), (CustomDataLayer *)ptr->data, value);
|
|
|
|
}
|
|
|
|
#if 0
|
|
|
|
static void rna_MeshEdgeLayer_name_set(PointerRNA *ptr, const char *value)
|
|
|
|
{
|
|
|
|
rna_cd_layer_name_set(rna_mesh_edata(ptr), (CustomDataLayer *)ptr->data, value);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
static void rna_MeshPolyLayer_name_set(PointerRNA *ptr, const char *value)
|
|
|
|
{
|
|
|
|
rna_cd_layer_name_set(rna_mesh_pdata(ptr), (CustomDataLayer *)ptr->data, value);
|
|
|
|
}
|
|
|
|
static void rna_MeshLoopLayer_name_set(PointerRNA *ptr, const char *value)
|
|
|
|
{
|
|
|
|
rna_cd_layer_name_set(rna_mesh_ldata(ptr), (CustomDataLayer *)ptr->data, value);
|
|
|
|
}
|
|
|
|
static void rna_MeshTessfaceLayer_name_set(PointerRNA *ptr, const char *value)
|
|
|
|
{
|
|
|
|
rna_cd_layer_name_set(rna_mesh_fdata(ptr), (CustomDataLayer *)ptr->data, value);
|
|
|
|
}
|
|
|
|
/* only for layers shared between types */
|
|
|
|
static void rna_MeshAnyLayer_name_set(PointerRNA *ptr, const char *value)
|
|
|
|
{
|
|
|
|
CustomData *cd = rna_cd_from_layer(ptr, (CustomDataLayer *)ptr->data);
|
|
|
|
rna_cd_layer_name_set(cd, (CustomDataLayer *)ptr->data, value);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
/* Update Callbacks */
|
|
|
|
|
2009-12-08 17:23:48 +00:00
|
|
|
static void rna_Mesh_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
|
2009-07-01 22:25:49 +00:00
|
|
|
{
|
2012-03-05 16:19:16 +00:00
|
|
|
ID *id = ptr->id.data;
|
2009-07-01 22:25:49 +00:00
|
|
|
|
2010-08-13 14:42:45 +00:00
|
|
|
/* cheating way for importers to avoid slow updates */
|
2012-03-05 16:19:16 +00:00
|
|
|
if (id->us > 0) {
|
2011-01-03 12:41:16 +00:00
|
|
|
DAG_id_tag_update(id, 0);
|
2012-05-12 11:01:29 +00:00
|
|
|
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
|
2010-08-13 14:42:45 +00:00
|
|
|
}
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
}
|
|
|
|
|
2013-04-22 06:16:03 +00:00
|
|
|
static void rna_Mesh_update_data_edit_color(Main *bmain, Scene *scene, PointerRNA *ptr)
|
2013-04-18 17:09:56 +00:00
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
rna_Mesh_update_data(bmain, scene, ptr);
|
|
|
|
if (me->edit_btmesh) {
|
|
|
|
BKE_editmesh_color_free(me->edit_btmesh);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-12-08 17:23:48 +00:00
|
|
|
static void rna_Mesh_update_select(Main *bmain, Scene *scene, PointerRNA *ptr)
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
{
|
2012-03-05 16:19:16 +00:00
|
|
|
ID *id = ptr->id.data;
|
2010-08-13 14:42:45 +00:00
|
|
|
/* cheating way for importers to avoid slow updates */
|
2012-03-05 16:19:16 +00:00
|
|
|
if (id->us > 0) {
|
2012-05-12 11:01:29 +00:00
|
|
|
WM_main_add_notifier(NC_GEOM | ND_SELECT, id);
|
2010-08-13 14:42:45 +00:00
|
|
|
}
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
}
|
|
|
|
|
2009-12-08 17:23:48 +00:00
|
|
|
void rna_Mesh_update_draw(Main *bmain, Scene *scene, PointerRNA *ptr)
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
{
|
2012-03-05 16:19:16 +00:00
|
|
|
ID *id = ptr->id.data;
|
2010-08-13 14:42:45 +00:00
|
|
|
/* cheating way for importers to avoid slow updates */
|
2012-03-05 16:19:16 +00:00
|
|
|
if (id->us > 0) {
|
2012-05-12 11:01:29 +00:00
|
|
|
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
|
2010-08-13 14:42:45 +00:00
|
|
|
}
|
2009-07-01 22:25:49 +00:00
|
|
|
}
|
|
|
|
|
2011-09-18 17:10:28 +00:00
|
|
|
|
2012-09-23 18:50:56 +00:00
|
|
|
static void rna_Mesh_update_vertmask(Main *bmain, Scene *scene, PointerRNA *ptr)
|
2011-07-20 15:56:35 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Mesh *me = ptr->data;
|
2012-12-22 14:25:34 +00:00
|
|
|
if ((me->editflag & ME_EDIT_PAINT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_FACE_SEL)) {
|
|
|
|
me->editflag &= ~ME_EDIT_PAINT_FACE_SEL;
|
2011-07-20 15:56:35 +00:00
|
|
|
}
|
|
|
|
rna_Mesh_update_draw(bmain, scene, ptr);
|
|
|
|
}
|
2011-09-18 17:10:28 +00:00
|
|
|
|
2012-09-23 18:50:56 +00:00
|
|
|
static void rna_Mesh_update_facemask(Main *bmain, Scene *scene, PointerRNA *ptr)
|
2011-07-20 15:56:35 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Mesh *me = ptr->data;
|
2012-12-22 14:25:34 +00:00
|
|
|
if ((me->editflag & ME_EDIT_PAINT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_FACE_SEL)) {
|
|
|
|
me->editflag &= ~ME_EDIT_PAINT_VERT_SEL;
|
2011-07-20 15:56:35 +00:00
|
|
|
}
|
|
|
|
rna_Mesh_update_draw(bmain, scene, ptr);
|
|
|
|
}
|
2013-04-30 17:30:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
/* Property get/set Callbacks */
|
|
|
|
|
2009-06-20 15:06:18 +00:00
|
|
|
static void rna_MeshVertex_normal_get(PointerRNA *ptr, float *value)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MVert *mvert = (MVert *)ptr->data;
|
2010-01-04 15:37:22 +00:00
|
|
|
normal_short_to_float_v3(value, mvert->no);
|
2009-06-20 15:06:18 +00:00
|
|
|
}
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2010-01-04 15:37:22 +00:00
|
|
|
static void rna_MeshVertex_normal_set(PointerRNA *ptr, const float *value)
|
2010-01-04 15:25:21 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MVert *mvert = (MVert *)ptr->data;
|
2010-01-04 15:37:22 +00:00
|
|
|
float no[3];
|
2010-01-04 15:25:21 +00:00
|
|
|
|
2010-01-04 15:37:22 +00:00
|
|
|
copy_v3_v3(no, value);
|
|
|
|
normalize_v3(no);
|
|
|
|
normal_float_to_short_v3(mvert->no, no);
|
2010-01-04 15:25:21 +00:00
|
|
|
}
|
|
|
|
|
2009-01-02 14:48:03 +00:00
|
|
|
static float rna_MeshVertex_bevel_weight_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MVert *mvert = (MVert *)ptr->data;
|
|
|
|
return mvert->bweight / 255.0f;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-01-02 14:48:03 +00:00
|
|
|
static void rna_MeshVertex_bevel_weight_set(PointerRNA *ptr, float value)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MVert *mvert = (MVert *)ptr->data;
|
|
|
|
mvert->bweight = (char)(CLAMPIS(value * 255.0f, 0, 255));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static float rna_MEdge_bevel_weight_get(PointerRNA *ptr)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MEdge *medge = (MEdge *)ptr->data;
|
|
|
|
return medge->bweight / 255.0f;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MEdge_bevel_weight_set(PointerRNA *ptr, float value)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MEdge *medge = (MEdge *)ptr->data;
|
|
|
|
medge->bweight = (char)(CLAMPIS(value * 255.0f, 0, 255));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static float rna_MEdge_crease_get(PointerRNA *ptr)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MEdge *medge = (MEdge *)ptr->data;
|
|
|
|
return medge->crease / 255.0f;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MEdge_crease_set(PointerRNA *ptr, float value)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MEdge *medge = (MEdge *)ptr->data;
|
|
|
|
medge->crease = (char)(CLAMPIS(value * 255.0f, 0, 255));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-08-31 05:13:21 +00:00
|
|
|
static void rna_MeshPolygon_normal_get(PointerRNA *ptr, float *values)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MPoly *mp = (MPoly *)ptr->data;
|
2011-08-31 05:13:21 +00:00
|
|
|
|
2012-09-25 00:20:42 +00:00
|
|
|
BKE_mesh_calc_poly_normal(mp, me->mloop + mp->loopstart, me->mvert, values);
|
2011-08-31 05:13:21 +00:00
|
|
|
}
|
|
|
|
|
2013-06-05 03:10:29 +00:00
|
|
|
static void rna_MeshPolygon_center_get(PointerRNA *ptr, float *values)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
MPoly *mp = (MPoly *)ptr->data;
|
|
|
|
|
|
|
|
BKE_mesh_calc_poly_center(mp, me->mloop + mp->loopstart, me->mvert, values);
|
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static float rna_MeshPolygon_area_get(PointerRNA *ptr)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Mesh *me = (Mesh *)ptr->id.data;
|
|
|
|
MPoly *mp = (MPoly *)ptr->data;
|
2011-11-17 05:03:07 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
return BKE_mesh_calc_poly_area(mp, me->mloop + mp->loopstart, me->mvert, NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
}
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
static void rna_MeshTessFace_normal_get(PointerRNA *ptr, float *values)
|
2009-07-27 18:17:21 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MFace *mface = (MFace *)ptr->data;
|
2011-08-31 05:13:21 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (mface->v4)
|
|
|
|
normal_quad_v3(values, me->mvert[mface->v1].co, me->mvert[mface->v2].co,
|
|
|
|
me->mvert[mface->v3].co, me->mvert[mface->v4].co);
|
2009-07-27 18:17:21 +00:00
|
|
|
else
|
2012-03-05 16:19:16 +00:00
|
|
|
normal_tri_v3(values, me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co);
|
2009-07-27 18:17:21 +00:00
|
|
|
}
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
static float rna_MeshTessFace_area_get(PointerRNA *ptr)
|
2009-11-03 17:51:22 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MFace *mface = (MFace *)ptr->data;
|
2009-11-03 17:51:22 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (mface->v4)
|
|
|
|
return area_quad_v3(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co,
|
|
|
|
me->mvert[mface->v4].co);
|
2009-11-03 17:51:22 +00:00
|
|
|
else
|
2009-11-10 20:43:45 +00:00
|
|
|
return area_tri_v3(me->mvert[mface->v1].co, me->mvert[mface->v2].co, me->mvert[mface->v3].co);
|
2009-11-03 17:51:22 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTextureFace_uv1_get(PointerRNA *ptr, float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
values[0] = mtface->uv[0][0];
|
|
|
|
values[1] = mtface->uv[0][1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv1_set(PointerRNA *ptr, const float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
mtface->uv[0][0] = values[0];
|
|
|
|
mtface->uv[0][1] = values[1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv2_get(PointerRNA *ptr, float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
values[0] = mtface->uv[1][0];
|
|
|
|
values[1] = mtface->uv[1][1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv2_set(PointerRNA *ptr, const float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
mtface->uv[1][0] = values[0];
|
|
|
|
mtface->uv[1][1] = values[1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv3_get(PointerRNA *ptr, float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
values[0] = mtface->uv[2][0];
|
|
|
|
values[1] = mtface->uv[2][1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv3_set(PointerRNA *ptr, const float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
mtface->uv[2][0] = values[0];
|
|
|
|
mtface->uv[2][1] = values[1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv4_get(PointerRNA *ptr, float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
values[0] = mtface->uv[3][0];
|
|
|
|
values[1] = mtface->uv[3][1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv4_set(PointerRNA *ptr, const float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
mtface->uv[3][0] = values[0];
|
|
|
|
mtface->uv[3][1] = values[1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int rna_CustomDataData_numverts(PointerRNA *ptr, int type)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
CustomData *fdata = rna_mesh_fdata(ptr);
|
|
|
|
CustomDataLayer *cdl;
|
|
|
|
int a, b;
|
|
|
|
|
|
|
|
for (cdl = fdata->layers, a = 0; a < fdata->totlayer; cdl++, a++) {
|
2012-03-05 16:19:16 +00:00
|
|
|
if (cdl->type == type) {
|
2012-05-12 11:01:29 +00:00
|
|
|
b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
|
2012-03-05 16:19:16 +00:00
|
|
|
if (b >= 0 && b < me->totface) {
|
2011-11-25 13:28:04 +00:00
|
|
|
return (me->mface[b].v4 ? 4 : 3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int rna_MeshTextureFace_uv_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
|
|
|
|
{
|
2012-03-05 16:19:16 +00:00
|
|
|
length[0] = rna_CustomDataData_numverts(ptr, CD_MTFACE);
|
|
|
|
length[1] = 2;
|
2012-05-12 11:01:29 +00:00
|
|
|
return length[0] * length[1];
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv_get(PointerRNA *ptr, float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2012-03-05 16:19:16 +00:00
|
|
|
int totvert = rna_CustomDataData_numverts(ptr, CD_MTFACE);
|
2011-11-25 13:28:04 +00:00
|
|
|
|
|
|
|
memcpy(values, mtface->uv, totvert * 2 * sizeof(float));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshTextureFace_uv_set(PointerRNA *ptr, const float *values)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *mtface = (MTFace *)ptr->data;
|
2012-03-05 16:19:16 +00:00
|
|
|
int totvert = rna_CustomDataData_numverts(ptr, CD_MTFACE);
|
2011-11-25 13:28:04 +00:00
|
|
|
|
|
|
|
memcpy(mtface->uv, values, totvert * 2 * sizeof(float));
|
|
|
|
}
|
|
|
|
|
2009-06-20 13:53:14 +00:00
|
|
|
/* notice red and blue are swapped */
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color1_get(PointerRNA *ptr, float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
values[2] = (&mcol[0].r)[0] / 255.0f;
|
|
|
|
values[1] = (&mcol[0].r)[1] / 255.0f;
|
|
|
|
values[0] = (&mcol[0].r)[2] / 255.0f;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color1_set(PointerRNA *ptr, const float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
(&mcol[0].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
|
|
|
|
(&mcol[0].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
|
|
|
|
(&mcol[0].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color2_get(PointerRNA *ptr, float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
values[2] = (&mcol[1].r)[0] / 255.0f;
|
|
|
|
values[1] = (&mcol[1].r)[1] / 255.0f;
|
|
|
|
values[0] = (&mcol[1].r)[2] / 255.0f;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color2_set(PointerRNA *ptr, const float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
(&mcol[1].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
|
|
|
|
(&mcol[1].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
|
|
|
|
(&mcol[1].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color3_get(PointerRNA *ptr, float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
values[2] = (&mcol[2].r)[0] / 255.0f;
|
|
|
|
values[1] = (&mcol[2].r)[1] / 255.0f;
|
|
|
|
values[0] = (&mcol[2].r)[2] / 255.0f;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color3_set(PointerRNA *ptr, const float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
(&mcol[2].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
|
|
|
|
(&mcol[2].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
|
|
|
|
(&mcol[2].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color4_get(PointerRNA *ptr, float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
values[2] = (&mcol[3].r)[0] / 255.0f;
|
|
|
|
values[1] = (&mcol[3].r)[1] / 255.0f;
|
|
|
|
values[0] = (&mcol[3].r)[2] / 255.0f;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 19:57:57 +00:00
|
|
|
static void rna_MeshColor_color4_set(PointerRNA *ptr, const float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MCol *mcol = (MCol *)ptr->data;
|
2009-02-02 19:57:57 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
(&mcol[3].r)[2] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
|
|
|
|
(&mcol[3].r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
|
|
|
|
(&mcol[3].r)[0] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2012-01-17 05:15:33 +00:00
|
|
|
static void rna_MeshLoopColor_color_get(PointerRNA *ptr, float *values)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-03-05 16:19:16 +00:00
|
|
|
MLoopCol *mcol = (MLoopCol *)ptr->data;
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-17 20:39:28 +00:00
|
|
|
values[0] = (&mcol->r)[0] / 255.0f;
|
|
|
|
values[1] = (&mcol->r)[1] / 255.0f;
|
|
|
|
values[2] = (&mcol->r)[2] / 255.0f;
|
2010-04-12 05:04:49 +00:00
|
|
|
}
|
|
|
|
|
2012-01-17 05:15:33 +00:00
|
|
|
static void rna_MeshLoopColor_color_set(PointerRNA *ptr, const float *values)
|
2010-04-12 05:04:49 +00:00
|
|
|
{
|
2012-03-05 16:19:16 +00:00
|
|
|
MLoopCol *mcol = (MLoopCol *)ptr->data;
|
2010-04-12 05:04:49 +00:00
|
|
|
|
2012-03-17 20:39:28 +00:00
|
|
|
(&mcol->r)[0] = (char)(CLAMPIS(values[0] * 255.0f, 0, 255));
|
|
|
|
(&mcol->r)[1] = (char)(CLAMPIS(values[1] * 255.0f, 0, 255));
|
|
|
|
(&mcol->r)[2] = (char)(CLAMPIS(values[2] * 255.0f, 0, 255));
|
2010-04-12 05:04:49 +00:00
|
|
|
}
|
|
|
|
|
2008-11-24 12:12:24 +00:00
|
|
|
static int rna_Mesh_texspace_editable(PointerRNA *ptr)
|
2010-04-12 05:04:49 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Mesh *me = (Mesh *)ptr->data;
|
|
|
|
return (me->texflag & ME_AUTOSPACE) ? 0 : PROP_EDITABLE;
|
2010-04-12 05:04:49 +00:00
|
|
|
}
|
|
|
|
|
2012-05-08 23:39:31 +00:00
|
|
|
static void rna_Mesh_texspace_size_get(PointerRNA *ptr, float values[3])
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Mesh *me = (Mesh *)ptr->data;
|
2012-05-08 23:39:31 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
if (!me->bb)
|
2012-05-08 23:39:31 +00:00
|
|
|
BKE_mesh_texspace_calc(me);
|
|
|
|
|
|
|
|
copy_v3_v3(values, me->size);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_Mesh_texspace_loc_get(PointerRNA *ptr, float values[3])
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Mesh *me = (Mesh *)ptr->data;
|
2012-05-08 23:39:31 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
if (!me->bb)
|
2012-05-08 23:39:31 +00:00
|
|
|
BKE_mesh_texspace_calc(me);
|
|
|
|
|
|
|
|
copy_v3_v3(values, me->loc);
|
|
|
|
}
|
|
|
|
|
2009-01-02 14:48:03 +00:00
|
|
|
static void rna_MeshVertex_groups_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (me->dvert) {
|
2012-05-12 11:01:29 +00:00
|
|
|
MVert *mvert = (MVert *)ptr->data;
|
|
|
|
MDeformVert *dvert = me->dvert + (mvert - me->mvert);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
rna_iterator_array_begin(iter, (void *)dvert->dw, sizeof(MDeformWeight), dvert->totweight, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
else
|
2009-07-13 19:33:59 +00:00
|
|
|
rna_iterator_array_begin(iter, NULL, 0, 0, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2013-05-05 05:56:41 +00:00
|
|
|
static void rna_MeshVertex_undeformed_co_get(PointerRNA *ptr, float values[3])
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
MVert *mvert = (MVert *)ptr->data;
|
|
|
|
float (*orco)[3] = CustomData_get_layer(&me->vdata, CD_ORCO);
|
|
|
|
|
|
|
|
if (orco) {
|
|
|
|
/* orco is normalized to 0..1, we do inverse to match mvert->co */
|
|
|
|
float loc[3], size[3];
|
|
|
|
|
|
|
|
BKE_mesh_texspace_get(me->texcomesh ? me->texcomesh : me, loc, NULL, size);
|
|
|
|
madd_v3_v3v3v3(values, loc, orco[(mvert - me->mvert)], size);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
copy_v3_v3(values, mvert->co);
|
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static int rna_CustomDataLayer_active_get(PointerRNA *ptr, CustomData *data, int type, int render)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
int n = ((CustomDataLayer *)ptr->data) - data->layers;
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (render) return (n == CustomData_get_render_layer_index(data, type));
|
2011-11-17 05:03:07 +00:00
|
|
|
else return (n == CustomData_get_active_layer_index(data, type));
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static int rna_CustomDataLayer_clone_get(PointerRNA *ptr, CustomData *data, int type, int render)
|
2009-11-24 00:56:52 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
int n = ((CustomDataLayer *)ptr->data) - data->layers;
|
2009-11-24 00:56:52 +00:00
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
return (n == CustomData_get_clone_layer_index(data, type));
|
2009-11-24 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static void rna_CustomDataLayer_active_set(PointerRNA *ptr, CustomData *data, int value, int type, int render)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2012-05-18 15:06:26 +00:00
|
|
|
Mesh *me = ptr->id.data;
|
2012-05-12 11:01:29 +00:00
|
|
|
int n = (((CustomDataLayer *)ptr->data) - data->layers) - CustomData_get_layer_index(data, type);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (value == 0)
|
2008-11-24 12:12:24 +00:00
|
|
|
return;
|
|
|
|
|
2012-03-26 04:23:18 +00:00
|
|
|
if (render) CustomData_set_layer_render(data, type, n);
|
2012-05-12 11:01:29 +00:00
|
|
|
else CustomData_set_layer_active(data, type, n);
|
2012-03-26 04:23:18 +00:00
|
|
|
|
|
|
|
/* sync loop layer */
|
|
|
|
if (type == CD_MTEXPOLY) {
|
|
|
|
CustomData *ldata = rna_mesh_ldata(ptr);
|
|
|
|
if (render) CustomData_set_layer_render(ldata, CD_MLOOPUV, n);
|
2012-05-12 11:01:29 +00:00
|
|
|
else CustomData_set_layer_active(ldata, CD_MLOOPUV, n);
|
2012-03-26 04:23:18 +00:00
|
|
|
}
|
2012-05-18 15:06:26 +00:00
|
|
|
|
2013-03-17 19:55:10 +00:00
|
|
|
BKE_mesh_update_customdata_pointers(me, true);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static void rna_CustomDataLayer_clone_set(PointerRNA *ptr, CustomData *data, int value, int type, int render)
|
2009-11-24 00:56:52 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
int n = ((CustomDataLayer *)ptr->data) - data->layers;
|
2009-11-24 00:56:52 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (value == 0)
|
2009-11-24 00:56:52 +00:00
|
|
|
return;
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
CustomData_set_layer_clone_index(data, type, n);
|
2009-11-24 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2012-04-22 23:51:50 +00:00
|
|
|
/* uv_layers */
|
2009-12-22 10:48:13 +00:00
|
|
|
|
2012-04-22 23:51:50 +00:00
|
|
|
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)
|
2009-06-27 01:10:39 +00:00
|
|
|
|
2011-11-24 06:55:53 +00:00
|
|
|
/* MeshUVLoopLayer */
|
2009-06-27 01:10:39 +00:00
|
|
|
|
2013-03-08 04:00:06 +00:00
|
|
|
static char *rna_MeshUVLoopLayer_path(PointerRNA *ptr)
|
2009-11-24 00:56:52 +00:00
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("uv_layers[\"%s\"]", name_esc);
|
2009-12-22 10:48:13 +00:00
|
|
|
}
|
|
|
|
|
2011-11-24 06:55:53 +00:00
|
|
|
static void rna_MeshUVLoopLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2009-12-22 10:48:13 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2011-11-24 06:55:53 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MLoopUV), (me->edit_btmesh) ? 0 : me->totloop, 0, NULL);
|
2009-11-24 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-11-24 06:55:53 +00:00
|
|
|
static int rna_MeshUVLoopLayer_data_length(PointerRNA *ptr)
|
2009-07-01 22:25:49 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2011-11-24 06:55:53 +00:00
|
|
|
return (me->edit_btmesh) ? 0 : me->totloop;
|
2009-12-22 10:48:13 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
/* face uv_textures */
|
2009-07-01 22:25:49 +00:00
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION(tessface_uv_texture, fdata, CD_MTFACE)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(tessface_uv_texture, fdata, CD_MTFACE, active, MeshTextureFaceLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(tessface_uv_texture, fdata, CD_MTFACE, clone, MeshTextureFaceLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(tessface_uv_texture, fdata, CD_MTFACE, stencil, MeshTextureFaceLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(tessface_uv_texture, fdata, CD_MTFACE, render, MeshTextureFaceLayer)
|
2009-07-01 22:25:49 +00:00
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTextureFaceLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MTFace), (me->edit_btmesh) ? 0 : me->totface, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTextureFaceLayer_data_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
return (me->edit_btmesh) ? 0 : me->totface;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTextureFaceLayer_active_render_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_fdata(ptr), CD_MTFACE, 1);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTextureFaceLayer_active_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_fdata(ptr), CD_MTFACE, 0);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTextureFaceLayer_clone_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_CustomDataLayer_clone_get(ptr, rna_mesh_fdata(ptr), CD_MTFACE, 0);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTextureFaceLayer_active_render_set(PointerRNA *ptr, int value)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_fdata(ptr), value, CD_MTFACE, 1);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTextureFaceLayer_active_set(PointerRNA *ptr, int value)
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_fdata(ptr), value, CD_MTFACE, 0);
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTextureFaceLayer_clone_set(PointerRNA *ptr, int value)
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_CustomDataLayer_clone_set(ptr, rna_mesh_fdata(ptr), value, CD_MTFACE, 0);
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
/* poly uv_textures */
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION(uv_texture, pdata, CD_MTEXPOLY)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, active, MeshTexturePolyLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, clone, MeshTexturePolyLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, stencil, MeshTexturePolyLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, render, MeshTexturePolyLayer)
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTexturePolyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
2011-11-17 05:03:07 +00:00
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MTexPoly), (me->edit_btmesh) ? 0 : me->totpoly, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTexturePolyLayer_data_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return (me->edit_btmesh) ? 0 : me->totpoly;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTexturePolyLayer_active_render_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_pdata(ptr), CD_MTEXPOLY, 1);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTexturePolyLayer_active_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_pdata(ptr), CD_MTEXPOLY, 0);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshTexturePolyLayer_clone_get(PointerRNA *ptr)
|
2009-11-24 00:56:52 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_CustomDataLayer_clone_get(ptr, rna_mesh_pdata(ptr), CD_MTEXPOLY, 0);
|
2009-11-24 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTexturePolyLayer_active_render_set(PointerRNA *ptr, int value)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_pdata(ptr), value, CD_MTEXPOLY, 1);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTexturePolyLayer_active_set(PointerRNA *ptr, int value)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_pdata(ptr), value, CD_MTEXPOLY, 0);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshTexturePolyLayer_clone_set(PointerRNA *ptr, int value)
|
2009-11-24 00:56:52 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
rna_CustomDataLayer_clone_set(ptr, rna_mesh_pdata(ptr), value, CD_MTEXPOLY, 0);
|
2009-11-24 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-11-24 06:55:53 +00:00
|
|
|
/* vertex_color_layers */
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION(tessface_vertex_color, fdata, CD_MCOL)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(tessface_vertex_color, fdata, CD_MCOL, active, MeshColorLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(tessface_vertex_color, fdata, CD_MCOL, render, MeshColorLayer)
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_MeshColorLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-03-07 22:21:28 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
2012-03-15 05:40:33 +00:00
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MCol) * 4, me->totface, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static int rna_MeshColorLayer_data_length(PointerRNA *ptr)
|
2009-06-27 01:10:39 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-03-07 22:21:28 +00:00
|
|
|
return me->totface;
|
2009-06-27 01:10:39 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static int rna_MeshColorLayer_active_render_get(PointerRNA *ptr)
|
2009-06-27 01:10:39 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_fdata(ptr), CD_MCOL, 1);
|
2009-06-27 01:10:39 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static int rna_MeshColorLayer_active_get(PointerRNA *ptr)
|
2009-07-01 22:25:49 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_fdata(ptr), CD_MCOL, 0);
|
2009-07-01 22:25:49 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_MeshColorLayer_active_render_set(PointerRNA *ptr, int value)
|
2009-07-01 22:25:49 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_fdata(ptr), value, CD_MCOL, 1);
|
2009-07-01 22:25:49 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_MeshColorLayer_active_set(PointerRNA *ptr, int value)
|
2009-07-01 22:25:49 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_fdata(ptr), value, CD_MCOL, 0);
|
2009-07-01 22:25:49 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION(vertex_color, ldata, CD_MLOOPCOL)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(vertex_color, ldata, CD_MLOOPCOL, active, MeshLoopColorLayer)
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(vertex_color, ldata, CD_MLOOPCOL, render, MeshLoopColorLayer)
|
|
|
|
|
|
|
|
static void rna_MeshLoopColorLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
2013-03-27 23:48:35 +00:00
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MLoopCol), (me->edit_btmesh) ? 0 : me->totloop, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshLoopColorLayer_data_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2013-03-27 23:48:35 +00:00
|
|
|
return (me->edit_btmesh) ? 0 : me->totloop;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshLoopColorLayer_active_render_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_ldata(ptr), CD_MLOOPCOL, 1);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static int rna_MeshLoopColorLayer_active_get(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_CustomDataLayer_active_get(ptr, rna_mesh_ldata(ptr), CD_MLOOPCOL, 0);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshLoopColorLayer_active_render_set(PointerRNA *ptr, int value)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_ldata(ptr), value, CD_MLOOPCOL, 1);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_MeshLoopColorLayer_active_set(PointerRNA *ptr, int value)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
rna_CustomDataLayer_active_set(ptr, rna_mesh_ldata(ptr), value, CD_MLOOPCOL, 0);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_MeshFloatPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
2012-04-03 11:19:58 +00:00
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MFloatProperty), me->totpoly, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static int rna_MeshFloatPropertyLayer_data_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-04-03 11:19:58 +00:00
|
|
|
return me->totpoly;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int rna_float_layer_check(CollectionPropertyIterator *iter, void *data)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)data;
|
2008-11-24 12:12:24 +00:00
|
|
|
return (layer->type != CD_PROP_FLT);
|
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static void rna_Mesh_polygon_float_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
CustomData *pdata = rna_mesh_pdata(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
rna_iterator_array_begin(iter, (void *)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
|
2012-03-05 16:19:16 +00:00
|
|
|
rna_float_layer_check);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static int rna_Mesh_polygon_float_layers_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-20 16:21:13 +00:00
|
|
|
return CustomData_number_of_layers(rna_mesh_pdata(ptr), CD_PROP_FLT);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int rna_int_layer_check(CollectionPropertyIterator *iter, void *data)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)data;
|
2008-11-24 12:12:24 +00:00
|
|
|
return (layer->type != CD_PROP_INT);
|
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_MeshIntPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
2012-04-03 11:19:58 +00:00
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MIntProperty), me->totpoly, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static int rna_MeshIntPropertyLayer_data_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-04-03 11:19:58 +00:00
|
|
|
return me->totpoly;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static void rna_Mesh_polygon_int_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
CustomData *pdata = rna_mesh_pdata(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
rna_iterator_array_begin(iter, (void *)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
|
2012-03-05 16:19:16 +00:00
|
|
|
rna_int_layer_check);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static int rna_Mesh_polygon_int_layers_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-20 16:21:13 +00:00
|
|
|
return CustomData_number_of_layers(rna_mesh_pdata(ptr), CD_PROP_INT);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int rna_string_layer_check(CollectionPropertyIterator *iter, void *data)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)data;
|
2008-11-24 12:12:24 +00:00
|
|
|
return (layer->type != CD_PROP_STR);
|
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_MeshStringPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
2012-04-03 11:19:58 +00:00
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MStringProperty), me->totpoly, 0, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static int rna_MeshStringPropertyLayer_data_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-04-03 11:19:58 +00:00
|
|
|
return me->totpoly;
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static void rna_Mesh_polygon_string_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
CustomData *pdata = rna_mesh_pdata(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
rna_iterator_array_begin(iter, (void *)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0,
|
2012-03-05 16:19:16 +00:00
|
|
|
rna_string_layer_check);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static int rna_Mesh_polygon_string_layers_length(PointerRNA *ptr)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
2011-11-20 16:21:13 +00:00
|
|
|
return CustomData_number_of_layers(rna_mesh_pdata(ptr), CD_PROP_STR);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2012-05-22 15:18:43 +00:00
|
|
|
/* Skin vertices */
|
|
|
|
DEFINE_CUSTOMDATA_LAYER_COLLECTION(skin_vertice, vdata, CD_MVERT_SKIN);
|
|
|
|
|
|
|
|
static char *rna_MeshSkinVertexLayer_path(PointerRNA *ptr)
|
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("skin_vertices[\"%s\"]", name_esc);
|
2012-05-22 15:18:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_VertCustomData_data_path(PointerRNA *ptr, char *collection, int type);
|
|
|
|
static char *rna_MeshSkinVertex_path(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
return rna_VertCustomData_data_path(ptr, "skin_vertices", CD_MVERT_SKIN);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshSkinVertexLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
|
|
|
|
rna_iterator_array_begin(iter, layer->data, sizeof(MVertSkin), me->totvert, 0, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int rna_MeshSkinVertexLayer_data_length(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return me->totvert;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* End skin vertices */
|
|
|
|
|
2012-03-07 21:58:58 +00:00
|
|
|
static void rna_TexturePoly_image_set(PointerRNA *ptr, PointerRNA value)
|
2009-05-29 15:12:31 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTexPoly *tf = (MTexPoly *)ptr->data;
|
2012-03-05 16:19:16 +00:00
|
|
|
ID *id = value.data;
|
2009-05-29 15:12:31 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (id) {
|
2009-05-29 15:12:31 +00:00
|
|
|
/* special exception here, individual faces don't count
|
|
|
|
* as reference, but we do ensure the refcount is not zero */
|
2012-03-05 16:19:16 +00:00
|
|
|
if (id->us == 0)
|
2009-05-29 15:12:31 +00:00
|
|
|
id_us_plus(id);
|
|
|
|
else
|
|
|
|
id_lib_extern(id);
|
|
|
|
}
|
|
|
|
|
2012-03-07 21:58:58 +00:00
|
|
|
tf->tpage = (struct Image *)id;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* while this is supposed to be readonly,
|
|
|
|
* keep it to support importers that only make tessfaces */
|
2009-05-29 15:12:31 +00:00
|
|
|
static void rna_TextureFace_image_set(PointerRNA *ptr, PointerRNA value)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MTFace *tf = (MTFace *)ptr->data;
|
2012-03-07 21:58:58 +00:00
|
|
|
ID *id = value.data;
|
2009-05-29 15:12:31 +00:00
|
|
|
|
2012-03-07 21:58:58 +00:00
|
|
|
if (id) {
|
2009-05-29 15:12:31 +00:00
|
|
|
/* special exception here, individual faces don't count
|
|
|
|
* as reference, but we do ensure the refcount is not zero */
|
2012-03-18 09:27:36 +00:00
|
|
|
if (id->us == 0)
|
2009-05-29 15:12:31 +00:00
|
|
|
id_us_plus(id);
|
|
|
|
else
|
|
|
|
id_lib_extern(id);
|
|
|
|
}
|
|
|
|
|
2012-03-07 21:58:58 +00:00
|
|
|
tf->tpage = (struct Image *)id;
|
2009-05-29 15:12:31 +00:00
|
|
|
}
|
|
|
|
|
2011-06-09 08:58:27 +00:00
|
|
|
static void rna_Mesh_auto_smooth_angle_set(PointerRNA *ptr, float value)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-03-05 16:19:16 +00:00
|
|
|
value = RAD2DEGF(value);
|
2011-06-09 08:58:27 +00:00
|
|
|
CLAMP(value, 1.0f, 80.0f);
|
2012-03-05 16:19:16 +00:00
|
|
|
me->smoothresh = (int)value;
|
2011-06-09 08:58:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static float rna_Mesh_auto_smooth_angle_get(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2011-06-09 08:58:27 +00:00
|
|
|
return DEG2RADF((float)me->smoothresh);
|
|
|
|
}
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
static int rna_MeshTessFace_verts_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MFace *face = (MFace *)ptr->data;
|
2009-09-09 19:40:46 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (face)
|
2012-05-12 11:01:29 +00:00
|
|
|
length[0] = (face->v4) ? 4 : 3;
|
2009-08-29 23:05:46 +00:00
|
|
|
else
|
2012-05-12 11:01:29 +00:00
|
|
|
length[0] = 4; /* XXX rna_raw_access wants the length of a dummy face. this needs fixing. - Campbell */
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
|
2009-09-09 19:40:46 +00:00
|
|
|
return length[0];
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
}
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
static void rna_MeshTessFace_verts_get(PointerRNA *ptr, int *values)
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MFace *face = (MFace *)ptr->data;
|
2009-09-09 19:40:46 +00:00
|
|
|
memcpy(values, &face->v1, (face->v4 ? 4 : 3) * sizeof(int));
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
}
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
static void rna_MeshTessFace_verts_set(PointerRNA *ptr, const int *values)
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MFace *face = (MFace *)ptr->data;
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
memcpy(&face->v1, values, (face->v4 ? 4 : 3) * sizeof(int));
|
|
|
|
}
|
|
|
|
|
2011-08-31 11:21:54 +00:00
|
|
|
/* poly.vertices - this is faked loop access for convenience */
|
|
|
|
static int rna_MeshPoly_vertices_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
MPoly *mp = (MPoly *)ptr->data;
|
2011-08-31 11:21:54 +00:00
|
|
|
/* note, raw access uses dummy item, this _could_ crash, watch out for this, mface uses it but it cant work here */
|
2012-03-05 16:19:16 +00:00
|
|
|
return (length[0] = mp->totloop);
|
2011-08-31 11:21:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshPoly_vertices_get(PointerRNA *ptr, int *values)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MPoly *mp = (MPoly *)ptr->data;
|
2012-03-05 16:19:16 +00:00
|
|
|
MLoop *ml = &me->mloop[mp->loopstart];
|
2011-08-31 11:21:54 +00:00
|
|
|
unsigned int i;
|
2012-03-05 16:19:16 +00:00
|
|
|
for (i = mp->totloop; i > 0; i--, values++, ml++) {
|
2011-08-31 11:21:54 +00:00
|
|
|
*values = ml->v;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_MeshPoly_vertices_set(PointerRNA *ptr, const int *values)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MPoly *mp = (MPoly *)ptr->data;
|
2012-03-05 16:19:16 +00:00
|
|
|
MLoop *ml = &me->mloop[mp->loopstart];
|
2011-08-31 11:21:54 +00:00
|
|
|
unsigned int i;
|
2012-03-05 16:19:16 +00:00
|
|
|
for (i = mp->totloop; i > 0; i--, values++, ml++) {
|
2011-08-31 11:21:54 +00:00
|
|
|
ml->v = *values;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-03-30 16:09:05 +00:00
|
|
|
static void rna_MeshPoly_material_index_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
|
2012-03-23 00:28:29 +00:00
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
*min = 0;
|
2012-11-07 12:31:05 +00:00
|
|
|
*max = max_ii(0, me->totcol - 1);
|
2012-03-23 00:28:29 +00:00
|
|
|
}
|
2011-08-31 11:21:54 +00:00
|
|
|
|
2009-10-12 19:34:58 +00:00
|
|
|
static int rna_MeshVertex_index_get(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MVert *vert = (MVert *)ptr->data;
|
2009-10-12 19:34:58 +00:00
|
|
|
return (int)(vert - me->mvert);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int rna_MeshEdge_index_get(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MEdge *edge = (MEdge *)ptr->data;
|
2009-10-12 19:34:58 +00:00
|
|
|
return (int)(edge - me->medge);
|
|
|
|
}
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
static int rna_MeshTessFace_index_get(PointerRNA *ptr)
|
2009-10-12 19:34:58 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MFace *face = (MFace *)ptr->data;
|
2009-10-12 19:34:58 +00:00
|
|
|
return (int)(face - me->mface);
|
|
|
|
}
|
|
|
|
|
2011-08-31 05:13:21 +00:00
|
|
|
static int rna_MeshPolygon_index_get(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MPoly *mpoly = (MPoly *)ptr->data;
|
2011-08-31 05:13:21 +00:00
|
|
|
return (int)(mpoly - me->mpoly);
|
|
|
|
}
|
|
|
|
|
2012-02-24 15:53:26 +00:00
|
|
|
static int rna_MeshLoop_index_get(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
MLoop *mloop = (MLoop *)ptr->data;
|
2012-02-24 15:53:26 +00:00
|
|
|
return (int)(mloop - me->mloop);
|
|
|
|
}
|
|
|
|
|
2009-03-25 20:29:01 +00:00
|
|
|
/* path construction */
|
|
|
|
|
|
|
|
static char *rna_VertexGroupElement_path(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr); /* XXX not always! */
|
2012-05-12 11:01:29 +00:00
|
|
|
MDeformWeight *dw = (MDeformWeight *)ptr->data;
|
2009-03-25 20:29:01 +00:00
|
|
|
MDeformVert *dvert;
|
|
|
|
int a, b;
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
for (a = 0, dvert = me->dvert; a < me->totvert; a++, dvert++)
|
|
|
|
for (b = 0; b < dvert->totweight; b++)
|
|
|
|
if (dw == &dvert->dw[b])
|
2012-05-29 11:00:12 +00:00
|
|
|
return BLI_sprintfN("vertices[%d].groups[%d]", a, b);
|
2009-03-25 20:29:01 +00:00
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2011-08-31 05:13:21 +00:00
|
|
|
static char *rna_MeshPolygon_path(PointerRNA *ptr)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
return BLI_sprintfN("polygons[%d]", (int)((MPoly *)ptr->data - rna_mesh(ptr)->mpoly));
|
2011-08-31 05:13:21 +00:00
|
|
|
}
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
static char *rna_MeshTessFace_path(PointerRNA *ptr)
|
2009-03-25 20:29:01 +00:00
|
|
|
{
|
2012-03-23 00:28:29 +00:00
|
|
|
return BLI_sprintfN("tessfaces[%d]", (int)((MFace *)ptr->data - rna_mesh(ptr)->mface));
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshEdge_path(PointerRNA *ptr)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
return BLI_sprintfN("edges[%d]", (int)((MEdge *)ptr->data - rna_mesh(ptr)->medge));
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
2011-08-31 11:21:54 +00:00
|
|
|
static char *rna_MeshLoop_path(PointerRNA *ptr)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
return BLI_sprintfN("loops[%d]", (int)((MLoop *)ptr->data - rna_mesh(ptr)->mloop));
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
2011-08-31 11:21:54 +00:00
|
|
|
|
2009-03-25 20:29:01 +00:00
|
|
|
static char *rna_MeshVertex_path(PointerRNA *ptr)
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
return BLI_sprintfN("vertices[%d]", (int)((MVert *)ptr->data - rna_mesh(ptr)->mvert));
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshTextureFaceLayer_path(PointerRNA *ptr)
|
2011-11-25 13:28:04 +00:00
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("tessface_uv_textures[\"%s\"]", name_esc);
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshTexturePolyLayer_path(PointerRNA *ptr)
|
2009-03-25 20:29:01 +00:00
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("uv_textures[\"%s\"]", name_esc);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
2012-05-22 15:18:43 +00:00
|
|
|
static char *rna_VertCustomData_data_path(PointerRNA *ptr, char *collection, int type)
|
|
|
|
{
|
|
|
|
CustomDataLayer *cdl;
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
CustomData *vdata = rna_mesh_vdata(ptr);
|
|
|
|
int a, b, totvert = (me->edit_btmesh) ? 0 : me->totvert;
|
|
|
|
|
|
|
|
for (cdl = vdata->layers, a = 0; a < vdata->totlayer; cdl++, a++) {
|
|
|
|
if (cdl->type == type) {
|
|
|
|
b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
|
2013-04-23 20:10:22 +00:00
|
|
|
if (b >= 0 && b < totvert) {
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b);
|
|
|
|
}
|
2012-05-22 15:18:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static char *rna_PolyCustomData_data_path(PointerRNA *ptr, char *collection, int type)
|
2009-03-25 20:29:01 +00:00
|
|
|
{
|
|
|
|
CustomDataLayer *cdl;
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
CustomData *pdata = rna_mesh_pdata(ptr);
|
|
|
|
int a, b, totpoly = (me->edit_btmesh) ? 0 : me->totpoly;
|
2009-03-25 20:29:01 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
for (cdl = pdata->layers, a = 0; a < pdata->totlayer; cdl++, a++) {
|
|
|
|
if (cdl->type == type) {
|
2012-05-12 11:01:29 +00:00
|
|
|
b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
|
2013-04-23 20:10:22 +00:00
|
|
|
if (b >= 0 && b < totpoly) {
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b);
|
|
|
|
}
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static char *rna_LoopCustomData_data_path(PointerRNA *ptr, char *collection, int type)
|
|
|
|
{
|
|
|
|
CustomDataLayer *cdl;
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
CustomData *ldata = rna_mesh_ldata(ptr);
|
|
|
|
int a, b, totloop = (me->edit_btmesh) ? 0 : me->totloop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
for (cdl = ldata->layers, a = 0; a < ldata->totlayer; cdl++, a++) {
|
|
|
|
if (cdl->type == type) {
|
2012-05-12 11:01:29 +00:00
|
|
|
b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
|
2013-04-23 20:10:22 +00:00
|
|
|
if (b >= 0 && b < totloop) {
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b);
|
|
|
|
}
|
2011-11-17 05:03:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static char *rna_FaceCustomData_data_path(PointerRNA *ptr, char *collection, int type)
|
|
|
|
{
|
|
|
|
CustomDataLayer *cdl;
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
CustomData *fdata = rna_mesh_fdata(ptr);
|
|
|
|
int a, b, totloop = (me->edit_btmesh) ? 0 : me->totloop;
|
2009-03-25 20:29:01 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
for (cdl = fdata->layers, a = 0; a < fdata->totlayer; cdl++, a++) {
|
|
|
|
if (cdl->type == type) {
|
2012-05-12 11:01:29 +00:00
|
|
|
b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type);
|
2013-04-23 20:10:22 +00:00
|
|
|
if (b >= 0 && b < totloop) {
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b);
|
|
|
|
}
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2013-04-30 17:30:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
static char *rna_MeshUVLoop_path(PointerRNA *ptr)
|
|
|
|
{
|
2012-04-22 23:51:50 +00:00
|
|
|
return rna_LoopCustomData_data_path(ptr, "uv_layers", CD_MLOOPUV);
|
2011-11-17 05:03:07 +00:00
|
|
|
}
|
|
|
|
|
2009-03-25 20:29:01 +00:00
|
|
|
static char *rna_MeshTextureFace_path(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-25 13:28:04 +00:00
|
|
|
return rna_FaceCustomData_data_path(ptr, "tessface_uv_textures", CD_MTFACE);
|
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshTexturePoly_path(PointerRNA *ptr)
|
2009-03-25 20:29:01 +00:00
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_PolyCustomData_data_path(ptr, "uv_textures", CD_MTEXPOLY);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshColorLayer_path(PointerRNA *ptr)
|
2011-11-25 13:28:04 +00:00
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("tessface_vertex_colors[\"%s\"]", name_esc);
|
2011-11-25 13:28:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshLoopColorLayer_path(PointerRNA *ptr)
|
2009-03-25 20:29:01 +00:00
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("vertex_colors[\"%s\"]", name_esc);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshColor_path(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_LoopCustomData_data_path(ptr, "vertex_colors", CD_MLOOPCOL);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshIntPropertyLayer_path(PointerRNA *ptr)
|
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("int_layers[\"%s\"]", name_esc);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshIntProperty_path(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_PolyCustomData_data_path(ptr, "layers_int", CD_PROP_INT);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshFloatPropertyLayer_path(PointerRNA *ptr)
|
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("float_layers[\"%s\"]", name_esc);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshFloatProperty_path(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_PolyCustomData_data_path(ptr, "layers_float", CD_PROP_FLT);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshStringPropertyLayer_path(PointerRNA *ptr)
|
|
|
|
{
|
2013-04-23 20:10:22 +00:00
|
|
|
CustomDataLayer *cdl = ptr->data;
|
|
|
|
char name_esc[sizeof(cdl->name) * 2];
|
|
|
|
BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
|
|
|
|
return BLI_sprintfN("string_layers[\"%s\"]", name_esc);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *rna_MeshStringProperty_path(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
return rna_PolyCustomData_data_path(ptr, "layers_string", CD_PROP_STR);
|
2009-03-25 20:29:01 +00:00
|
|
|
}
|
|
|
|
|
2013-01-09 13:25:46 +00:00
|
|
|
/* XXX, we dont have propper byte string support yet, so for now use the (bytes + 1)
|
|
|
|
* bmesh API exposes correct python/bytestring access */
|
|
|
|
void rna_MeshStringProperty_s_get(PointerRNA *ptr, char *value)
|
|
|
|
{
|
|
|
|
MStringProperty *ms = (MStringProperty *)ptr->data;
|
|
|
|
BLI_strncpy(value, ms->s, (int)ms->s_len + 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
int rna_MeshStringProperty_s_length(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
MStringProperty *ms = (MStringProperty *)ptr->data;
|
|
|
|
return (int)ms->s_len + 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void rna_MeshStringProperty_s_set(PointerRNA *ptr, const char *value)
|
|
|
|
{
|
|
|
|
MStringProperty *ms = (MStringProperty *)ptr->data;
|
|
|
|
BLI_strncpy(ms->s, value, sizeof(ms->s));
|
|
|
|
}
|
|
|
|
|
2010-02-12 22:03:23 +00:00
|
|
|
static int rna_Mesh_tot_vert_get(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2010-03-09 04:32:40 +00:00
|
|
|
return me->edit_btmesh ? me->edit_btmesh->bm->totvertsel : 0;
|
2010-02-12 22:03:23 +00:00
|
|
|
}
|
|
|
|
static int rna_Mesh_tot_edge_get(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2012-05-12 11:01:29 +00:00
|
|
|
return me->edit_btmesh ? me->edit_btmesh->bm->totedgesel : 0;
|
2010-02-12 22:03:23 +00:00
|
|
|
}
|
|
|
|
static int rna_Mesh_tot_face_get(PointerRNA *ptr)
|
|
|
|
{
|
2011-11-17 05:03:07 +00:00
|
|
|
Mesh *me = rna_mesh(ptr);
|
2010-03-09 04:32:40 +00:00
|
|
|
return me->edit_btmesh ? me->edit_btmesh->bm->totfacesel : 0;
|
2010-02-12 22:03:23 +00:00
|
|
|
}
|
|
|
|
|
2013-03-24 12:13:13 +00:00
|
|
|
static PointerRNA rna_Mesh_vertex_color_new(struct Mesh *me, const char *name)
|
2010-08-23 22:16:45 +00:00
|
|
|
{
|
2012-02-01 18:25:13 +00:00
|
|
|
PointerRNA ptr;
|
2012-02-02 00:04:47 +00:00
|
|
|
CustomData *ldata;
|
2012-03-05 16:19:16 +00:00
|
|
|
CustomDataLayer *cdl = NULL;
|
2013-03-24 12:13:13 +00:00
|
|
|
int index = ED_mesh_color_add(me, name, false);
|
2010-08-23 22:16:45 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (index != -1) {
|
|
|
|
ldata = rna_mesh_ldata_helper(me);
|
|
|
|
cdl = &ldata->layers[CustomData_get_layer_index_n(ldata, CD_MLOOPCOL, index)];
|
2010-08-27 00:35:59 +00:00
|
|
|
}
|
2012-02-01 18:25:13 +00:00
|
|
|
|
2012-02-02 00:04:47 +00:00
|
|
|
RNA_pointer_create(&me->id, &RNA_MeshLoopColorLayer, cdl, &ptr);
|
2012-02-01 18:25:13 +00:00
|
|
|
return ptr;
|
2010-08-23 22:16:45 +00:00
|
|
|
}
|
|
|
|
|
2013-03-24 12:13:13 +00:00
|
|
|
static void rna_Mesh_vertex_color_remove(struct Mesh *me, ReportList *reports, CustomDataLayer *layer)
|
|
|
|
{
|
|
|
|
if (ED_mesh_color_remove_named(me, layer->name) == false) {
|
2013-03-25 08:29:06 +00:00
|
|
|
BKE_reportf(reports, RPT_ERROR, "Vertex color '%s' not found", layer->name);
|
2013-03-24 12:13:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static PointerRNA rna_Mesh_tessface_vertex_color_new(struct Mesh *me, ReportList *reports, const char *name)
|
2012-03-15 05:40:33 +00:00
|
|
|
{
|
|
|
|
PointerRNA ptr;
|
|
|
|
CustomData *fdata;
|
2012-03-18 09:27:36 +00:00
|
|
|
CustomDataLayer *cdl = NULL;
|
2012-03-15 05:40:33 +00:00
|
|
|
int index;
|
|
|
|
|
|
|
|
if (me->edit_btmesh) {
|
2012-10-20 10:28:34 +00:00
|
|
|
BKE_report(reports, RPT_ERROR, "Cannot add tessface colors in edit mode");
|
2012-03-15 05:40:33 +00:00
|
|
|
return PointerRNA_NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (me->mpoly) {
|
2012-10-20 10:28:34 +00:00
|
|
|
BKE_report(reports, RPT_ERROR, "Cannot add tessface colors when MPoly's exist");
|
2012-03-15 05:40:33 +00:00
|
|
|
return PointerRNA_NULL;
|
|
|
|
}
|
|
|
|
|
2013-03-24 12:13:13 +00:00
|
|
|
index = ED_mesh_color_add(me, name, false);
|
2012-03-15 05:40:33 +00:00
|
|
|
|
2012-03-18 09:27:36 +00:00
|
|
|
if (index != -1) {
|
2012-03-15 05:40:33 +00:00
|
|
|
fdata = rna_mesh_fdata_helper(me);
|
|
|
|
cdl = &fdata->layers[CustomData_get_layer_index_n(fdata, CD_MCOL, index)];
|
|
|
|
}
|
|
|
|
|
|
|
|
RNA_pointer_create(&me->id, &RNA_MeshColorLayer, cdl, &ptr);
|
|
|
|
return ptr;
|
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static PointerRNA rna_Mesh_polygon_int_property_new(struct Mesh *me, struct bContext *C, const char *name)
|
2011-11-15 12:28:13 +00:00
|
|
|
{
|
2012-02-01 18:25:13 +00:00
|
|
|
PointerRNA ptr;
|
2011-11-15 12:28:13 +00:00
|
|
|
CustomDataLayer *cdl = NULL;
|
|
|
|
int index;
|
|
|
|
|
2012-04-03 11:19:58 +00:00
|
|
|
CustomData_add_layer_named(&me->pdata, CD_PROP_INT, CD_DEFAULT, NULL, me->totpoly, name);
|
|
|
|
index = CustomData_get_named_layer_index(&me->pdata, CD_PROP_INT, name);
|
2011-11-15 12:28:13 +00:00
|
|
|
|
2012-04-03 11:19:58 +00:00
|
|
|
cdl = (index == -1) ? NULL : &(me->pdata.layers[index]);
|
2011-11-15 12:28:13 +00:00
|
|
|
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_pointer_create(&me->id, &RNA_MeshIntPropertyLayer, cdl, &ptr);
|
|
|
|
return ptr;
|
2011-11-15 12:28:13 +00:00
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static PointerRNA rna_Mesh_polygon_float_property_new(struct Mesh *me, struct bContext *C, const char *name)
|
2011-11-15 12:28:13 +00:00
|
|
|
{
|
2012-02-01 18:25:13 +00:00
|
|
|
PointerRNA ptr;
|
2011-11-15 12:28:13 +00:00
|
|
|
CustomDataLayer *cdl = NULL;
|
|
|
|
int index;
|
|
|
|
|
2012-04-03 11:19:58 +00:00
|
|
|
CustomData_add_layer_named(&me->pdata, CD_PROP_FLT, CD_DEFAULT, NULL, me->totpoly, name);
|
|
|
|
index = CustomData_get_named_layer_index(&me->pdata, CD_PROP_FLT, name);
|
2011-11-15 12:28:13 +00:00
|
|
|
|
2012-04-03 11:19:58 +00:00
|
|
|
cdl = (index == -1) ? NULL : &(me->pdata.layers[index]);
|
2011-11-15 12:28:13 +00:00
|
|
|
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_pointer_create(&me->id, &RNA_MeshFloatPropertyLayer, cdl, &ptr);
|
|
|
|
return ptr;
|
2011-11-15 12:28:13 +00:00
|
|
|
}
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
static PointerRNA rna_Mesh_polygon_string_property_new(struct Mesh *me, struct bContext *C, const char *name)
|
2011-11-15 12:28:13 +00:00
|
|
|
{
|
2012-02-01 18:25:13 +00:00
|
|
|
PointerRNA ptr;
|
2011-11-15 12:28:13 +00:00
|
|
|
CustomDataLayer *cdl = NULL;
|
|
|
|
int index;
|
|
|
|
|
2012-04-03 11:19:58 +00:00
|
|
|
CustomData_add_layer_named(&me->pdata, CD_PROP_STR, CD_DEFAULT, NULL, me->totpoly, name);
|
|
|
|
index = CustomData_get_named_layer_index(&me->pdata, CD_PROP_STR, name);
|
2011-11-15 12:28:13 +00:00
|
|
|
|
2012-04-03 11:19:58 +00:00
|
|
|
cdl = (index == -1) ? NULL : &(me->pdata.layers[index]);
|
2011-11-15 12:28:13 +00:00
|
|
|
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_pointer_create(&me->id, &RNA_MeshStringPropertyLayer, cdl, &ptr);
|
|
|
|
return ptr;
|
2011-11-15 12:28:13 +00:00
|
|
|
}
|
|
|
|
|
2013-03-24 12:13:13 +00:00
|
|
|
static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, const char *name)
|
2010-08-23 22:16:45 +00:00
|
|
|
{
|
2012-02-01 18:25:13 +00:00
|
|
|
PointerRNA ptr;
|
2012-02-02 00:04:47 +00:00
|
|
|
CustomData *pdata;
|
2012-03-05 16:19:16 +00:00
|
|
|
CustomDataLayer *cdl = NULL;
|
2013-03-24 12:13:13 +00:00
|
|
|
int index = ED_mesh_uv_texture_add(me, name, false);
|
2010-08-23 22:16:45 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
if (index != -1) {
|
|
|
|
pdata = rna_mesh_pdata_helper(me);
|
|
|
|
cdl = &pdata->layers[CustomData_get_layer_index_n(pdata, CD_MTEXPOLY, index)];
|
2010-08-27 00:35:59 +00:00
|
|
|
}
|
2012-02-01 18:25:13 +00:00
|
|
|
|
2012-02-02 00:04:47 +00:00
|
|
|
RNA_pointer_create(&me->id, &RNA_MeshTexturePolyLayer, cdl, &ptr);
|
2012-02-01 18:25:13 +00:00
|
|
|
return ptr;
|
2010-08-23 22:16:45 +00:00
|
|
|
}
|
|
|
|
|
2013-03-24 12:13:13 +00:00
|
|
|
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) {
|
2013-03-25 08:29:06 +00:00
|
|
|
BKE_reportf(reports, RPT_ERROR, "Texture layer '%s' not found", layer->name);
|
2013-03-24 12:13:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-03-07 21:58:58 +00:00
|
|
|
/* while this is supposed to be readonly,
|
|
|
|
* keep it to support importers that only make tessfaces */
|
|
|
|
|
2013-03-24 12:13:13 +00:00
|
|
|
static PointerRNA rna_Mesh_tessface_uv_texture_new(struct Mesh *me, ReportList *reports, const char *name)
|
2012-03-07 21:58:58 +00:00
|
|
|
{
|
|
|
|
PointerRNA ptr;
|
|
|
|
CustomData *fdata;
|
2012-03-18 09:27:36 +00:00
|
|
|
CustomDataLayer *cdl = NULL;
|
2012-03-07 21:58:58 +00:00
|
|
|
int index;
|
|
|
|
|
|
|
|
if (me->edit_btmesh) {
|
2012-10-20 10:28:34 +00:00
|
|
|
BKE_report(reports, RPT_ERROR, "Cannot add tessface uv's in edit mode");
|
2012-03-07 21:58:58 +00:00
|
|
|
return PointerRNA_NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (me->mpoly) {
|
2012-10-20 10:28:34 +00:00
|
|
|
BKE_report(reports, RPT_ERROR, "Cannot add tessface uv's when MPoly's exist");
|
2012-03-07 21:58:58 +00:00
|
|
|
return PointerRNA_NULL;
|
|
|
|
}
|
|
|
|
|
2013-03-24 12:13:13 +00:00
|
|
|
index = ED_mesh_uv_texture_add(me, name, false);
|
2012-03-07 21:58:58 +00:00
|
|
|
|
2012-03-18 09:27:36 +00:00
|
|
|
if (index != -1) {
|
2012-03-15 05:40:33 +00:00
|
|
|
fdata = rna_mesh_fdata_helper(me);
|
|
|
|
cdl = &fdata->layers[CustomData_get_layer_index_n(fdata, CD_MTFACE, index)];
|
2012-03-07 21:58:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
RNA_pointer_create(&me->id, &RNA_MeshTextureFaceLayer, cdl, &ptr);
|
|
|
|
return ptr;
|
|
|
|
}
|
|
|
|
|
2013-07-03 22:57:00 +00:00
|
|
|
|
|
|
|
static int rna_Mesh_is_editmode_get(PointerRNA *ptr)
|
|
|
|
{
|
|
|
|
Mesh *me = rna_mesh(ptr);
|
|
|
|
return (me->edit_btmesh != NULL);
|
|
|
|
}
|
|
|
|
|
2012-08-20 07:29:11 +00:00
|
|
|
/* only to quiet warnings */
|
|
|
|
static void UNUSED_FUNCTION(rna_mesh_unused)(void)
|
|
|
|
{
|
|
|
|
/* unused functions made by macros */
|
|
|
|
(void)rna_Mesh_skin_vertice_index_range;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_active_set;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_clone_get;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_clone_index_get;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_clone_index_set;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_clone_set;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_index_range;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_render_get;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_render_index_get;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_render_index_set;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_render_set;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_stencil_get;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_stencil_index_get;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_stencil_index_set;
|
|
|
|
(void)rna_Mesh_tessface_uv_texture_stencil_set;
|
|
|
|
(void)rna_Mesh_tessface_vertex_color_active_set;
|
|
|
|
(void)rna_Mesh_tessface_vertex_color_index_range;
|
|
|
|
(void)rna_Mesh_tessface_vertex_color_render_get;
|
|
|
|
(void)rna_Mesh_tessface_vertex_color_render_index_get;
|
|
|
|
(void)rna_Mesh_tessface_vertex_color_render_index_set;
|
|
|
|
(void)rna_Mesh_tessface_vertex_color_render_set;
|
|
|
|
(void)rna_Mesh_uv_layer_render_get;
|
|
|
|
(void)rna_Mesh_uv_layer_render_index_get;
|
|
|
|
(void)rna_Mesh_uv_layer_render_index_set;
|
|
|
|
(void)rna_Mesh_uv_layer_render_set;
|
|
|
|
(void)rna_Mesh_uv_texture_render_get;
|
|
|
|
(void)rna_Mesh_uv_texture_render_index_get;
|
|
|
|
(void)rna_Mesh_uv_texture_render_index_set;
|
|
|
|
(void)rna_Mesh_uv_texture_render_set;
|
|
|
|
(void)rna_Mesh_vertex_color_render_get;
|
|
|
|
(void)rna_Mesh_vertex_color_render_index_get;
|
|
|
|
(void)rna_Mesh_vertex_color_render_index_set;
|
|
|
|
(void)rna_Mesh_vertex_color_render_set;
|
|
|
|
/* end unused function block */
|
|
|
|
}
|
|
|
|
|
2008-11-07 02:58:25 +00:00
|
|
|
#else
|
|
|
|
|
2008-11-24 12:12:24 +00:00
|
|
|
static void rna_def_mvert_group(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "VertexGroupElement", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MDeformWeight");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_VertexGroupElement_path");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Vertex Group Element", "Weight value of a vertex in a vertex group");
|
2009-06-03 23:16:51 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_GROUP_VERTEX);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2008-11-29 14:35:50 +00:00
|
|
|
/* we can't point to actual group, it is in the object and so
|
|
|
|
* there is no unique group to point to, hence the index */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "group", PROP_INT, PROP_UNSIGNED);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "def_nr");
|
2009-03-23 13:24:48 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Group Index", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
|
|
|
RNA_def_property_ui_text(prop, "Weight", "Vertex Weight");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_def_mvert(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshVertex", NULL);
|
2009-01-02 14:48:03 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MVert");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Vertex", "Vertex in a Mesh datablock");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshVertex_path");
|
2009-06-03 23:16:51 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_VERTEXSEL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
|
2008-11-29 14:35:50 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Location", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "normal", PROP_FLOAT, PROP_DIRECTION);
|
|
|
|
/* RNA_def_property_float_sdna(prop, NULL, "no"); */
|
2010-12-31 04:12:20 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
|
|
|
RNA_def_property_range(prop, -1.0f, 1.0f);
|
2010-01-04 15:25:21 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshVertex_normal_get", "rna_MeshVertex_normal_set", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Normal", "Vertex Normal");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
|
2010-07-15 16:56:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Select", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
|
2010-07-15 16:56:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Hide", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "bevel_weight", PROP_FLOAT, PROP_NONE);
|
2009-01-02 14:48:03 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshVertex_bevel_weight_get", "rna_MeshVertex_bevel_weight_set", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Bevel Weight", "Weight used by the Bevel modifier 'Only Vertices' option");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "groups", PROP_COLLECTION, PROP_NONE);
|
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshVertex_groups_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get", NULL, NULL, NULL, NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "VertexGroupElement");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Groups", "Weights for the vertex groups this vertex is member of");
|
2009-10-12 19:34:58 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
|
2009-10-12 19:34:58 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_MeshVertex_index_get", NULL, NULL);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Index", "Index number of the vertex");
|
2013-05-05 05:56:41 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "undeformed_co", PROP_FLOAT, PROP_TRANSLATION);
|
|
|
|
RNA_def_property_array(prop, 3);
|
2013-05-13 07:32:48 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Undeformed Location",
|
|
|
|
"For meshes with modifiers applied, the coordinate of the vertex with no deforming "
|
|
|
|
"modifiers applied, as used for generated texture coordinates");
|
2013-05-05 05:56:41 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshVertex_undeformed_co_get", NULL, NULL);
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_def_medge(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshEdge", NULL);
|
2009-01-02 14:48:03 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MEdge");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Edge", "Edge in a Mesh datablock");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshEdge_path");
|
2009-06-03 23:16:51 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_EDGESEL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "vertices", PROP_INT, PROP_UNSIGNED);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "v1");
|
|
|
|
RNA_def_property_array(prop, 2);
|
|
|
|
RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
|
2012-03-05 16:19:16 +00:00
|
|
|
/* XXX allows creating invalid meshes */
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "crease", PROP_FLOAT, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MEdge_crease_get", "rna_MEdge_crease_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Crease", "Weight used by the Subsurf modifier for creasing");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "bevel_weight", PROP_FLOAT, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MEdge_bevel_weight_get", "rna_MEdge_bevel_weight_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Bevel Weight", "Weight used by the Bevel modifier");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
|
2010-07-15 16:56:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Select", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
|
2010-07-15 16:56:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Hide", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_seam", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SEAM);
|
|
|
|
RNA_def_property_ui_text(prop, "Seam", "Seam edge for UV unwrapping");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SHARP);
|
|
|
|
RNA_def_property_ui_text(prop, "Sharp", "Sharp edge for the EdgeSplit modifier");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-06-26 12:33:07 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "is_loose", PROP_BOOLEAN, PROP_NONE);
|
2009-06-26 12:33:07 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_LOOSEEDGE);
|
|
|
|
RNA_def_property_ui_text(prop, "Loose", "Loose edge");
|
2009-08-06 12:22:50 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
|
2009-10-12 19:34:58 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_MeshEdge_index_get", NULL, NULL);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Index", "Index number of the vertex");
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_def_mface(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshTessFace", NULL);
|
2009-01-02 14:48:03 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MFace");
|
2012-03-23 01:55:38 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh TessFace", "TessFace in a Mesh datablock");
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshTessFace_path");
|
2009-06-03 23:16:51 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_FACESEL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
/* XXX allows creating invalid meshes */
|
|
|
|
prop = RNA_def_property(srna, "vertices", PROP_INT, PROP_UNSIGNED);
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
RNA_def_property_array(prop, 4);
|
|
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_MeshTessFace_verts_get_length");
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_MeshTessFace_verts_get", "rna_MeshTessFace_verts_set", NULL);
|
Implemented dynamic and multidimensional array support in RNA.
Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.
Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.
What this means for ID property access:
* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array
What this means for functions:
* more intuitive API possibility, for example:
Mesh.add_vertices([(x, y, z), (x, y, z), ...])
Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])
Python part is not complete yet, e.g. it is possible to:
MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad
but the following won't work:
MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]
2009-08-25 17:06:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2009-09-29 12:34:05 +00:00
|
|
|
/* leaving this fixed size array for foreach_set used in import scripts */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "vertices_raw", PROP_INT, PROP_UNSIGNED);
|
2009-09-29 12:34:05 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "v1");
|
|
|
|
RNA_def_property_array(prop, 4);
|
|
|
|
RNA_def_property_ui_text(prop, "Vertices", "Fixed size vertex indices array");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "material_index", PROP_INT, PROP_UNSIGNED);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "mat_nr");
|
|
|
|
RNA_def_property_ui_text(prop, "Material Index", "");
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshPoly_material_index_range"); /* reuse for tessface is ok */
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_FACE_SEL);
|
2010-07-15 16:56:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Select", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
|
2010-07-15 16:56:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Hide", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SMOOTH);
|
|
|
|
RNA_def_property_ui_text(prop, "Smooth", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2011-10-06 02:04:43 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "normal", PROP_FLOAT, PROP_DIRECTION);
|
2009-07-27 18:17:21 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
|
|
|
RNA_def_property_range(prop, -1.0f, 1.0f);
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshTessFace_normal_get", NULL, NULL);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Face normal", "Local space unit length normal vector for this face");
|
2009-10-12 19:34:58 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "area", PROP_FLOAT, PROP_UNSIGNED);
|
2009-11-03 17:51:22 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshTessFace_area_get", NULL, NULL);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Face area", "Read only area of the face");
|
2009-11-03 17:51:22 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
|
2009-10-22 23:22:05 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_property_int_funcs(prop, "rna_MeshTessFace_index_get", NULL, NULL);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Index", "Index number of the vertex");
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-08-31 05:13:21 +00:00
|
|
|
|
2011-08-31 11:21:54 +00:00
|
|
|
static void rna_def_mloop(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshLoop", NULL);
|
2011-08-31 11:21:54 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MLoop");
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Loop", "Loop in a Mesh datablock");
|
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshLoop_path");
|
|
|
|
RNA_def_struct_ui_icon(srna, ICON_EDGESEL);
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "vertex_index", PROP_INT, PROP_UNSIGNED);
|
2011-08-31 11:21:54 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "v");
|
|
|
|
RNA_def_property_ui_text(prop, "Vertex", "Vertex index");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "edge_index", PROP_INT, PROP_UNSIGNED);
|
2011-08-31 11:21:54 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "e");
|
|
|
|
RNA_def_property_ui_text(prop, "Edge", "Edge index");
|
2012-02-24 15:53:26 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
|
2012-02-24 15:53:26 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_MeshLoop_index_get", NULL, NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Index", "Index number of the loop");
|
2011-08-31 11:21:54 +00:00
|
|
|
}
|
|
|
|
|
2011-08-31 05:13:21 +00:00
|
|
|
static void rna_def_mpolygon(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshPolygon", NULL);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MPoly");
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Polygon", "Polygon in a Mesh datablock");
|
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshPolygon_path");
|
|
|
|
RNA_def_struct_ui_icon(srna, ICON_FACESEL);
|
|
|
|
|
2012-03-18 07:38:51 +00:00
|
|
|
/* Faked, actually access to loop vertex values, don't this way because manually setting up
|
2012-03-05 16:19:16 +00:00
|
|
|
* vertex/edge per loop is very low level.
|
|
|
|
* Instead we setup poly sizes, assign indices, then calc edges automatic when creating
|
|
|
|
* meshes from rna/py. */
|
|
|
|
prop = RNA_def_property(srna, "vertices", PROP_INT, PROP_UNSIGNED);
|
|
|
|
/* Eek, this is still used in some cases but in fact we don't want to use it at all here. */
|
|
|
|
RNA_def_property_array(prop, 3);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
2011-08-31 11:21:54 +00:00
|
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_MeshPoly_vertices_get_length");
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_MeshPoly_vertices_get", "rna_MeshPoly_vertices_set", NULL);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
|
|
|
|
|
2011-09-01 09:11:00 +00:00
|
|
|
/* these are both very low level access */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "loop_start", PROP_INT, PROP_UNSIGNED);
|
2011-09-01 09:11:00 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "loopstart");
|
|
|
|
RNA_def_property_ui_text(prop, "Loop Start", "");
|
|
|
|
/* also low level */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "loop_total", PROP_INT, PROP_UNSIGNED);
|
2011-09-01 09:11:00 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "totloop");
|
|
|
|
RNA_def_property_ui_text(prop, "Loop Total", "");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "material_index", PROP_INT, PROP_UNSIGNED);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "mat_nr");
|
|
|
|
RNA_def_property_ui_text(prop, "Material Index", "");
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshPoly_material_index_range");
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_FACE_SEL);
|
|
|
|
RNA_def_property_ui_text(prop, "Select", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
|
|
|
|
RNA_def_property_ui_text(prop, "Hide", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SMOOTH);
|
|
|
|
RNA_def_property_ui_text(prop, "Smooth", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "normal", PROP_FLOAT, PROP_DIRECTION);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
|
|
|
RNA_def_property_range(prop, -1.0f, 1.0f);
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshPolygon_normal_get", NULL, NULL);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Face normal", "Local space unit length normal vector for this polygon");
|
2011-08-31 05:13:21 +00:00
|
|
|
|
2013-06-05 03:10:29 +00:00
|
|
|
prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
|
|
|
|
RNA_def_property_array(prop, 3);
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshPolygon_center_get", NULL, NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Face center", "Center of the polygon");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "area", PROP_FLOAT, PROP_UNSIGNED);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshPolygon_area_get", NULL, NULL);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Face area", "Read only area of the face");
|
2011-08-31 05:13:21 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_MeshPolygon_index_get", NULL, NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Index", "Index number of the vertex");
|
|
|
|
}
|
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
/* mesh.loop_uvs */
|
|
|
|
static void rna_def_mloopuv(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshUVLoopLayer", NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshUVLoopLayer_path");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshUVLoop");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshUVLoopLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshUVLoopLayer_data_length", NULL, NULL, NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
|
2012-05-29 11:19:46 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshLoopLayer_name_set");
|
2012-05-29 11:19:46 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "Name of UV map");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshUVLoop", NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MLoopUV");
|
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshUVLoop_path");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv", PROP_FLOAT, PROP_XYZ);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "pin_uv", PROP_BOOLEAN, PROP_NONE);
|
2011-12-08 00:18:57 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", MLOOPUV_PINNED);
|
|
|
|
RNA_def_property_ui_text(prop, "UV Pinned", "");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
|
2011-12-08 00:18:57 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", MLOOPUV_VERTSEL);
|
2011-12-08 00:28:42 +00:00
|
|
|
RNA_def_property_ui_text(prop, "UV Select", "");
|
2011-12-08 00:18:57 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select_edge", PROP_BOOLEAN, PROP_NONE);
|
2011-12-08 00:18:57 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", MLOOPUV_EDGESEL);
|
2011-12-08 00:28:42 +00:00
|
|
|
RNA_def_property_ui_text(prop, "UV Edge Select", "");
|
2011-11-17 05:03:07 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_def_mtface(BlenderRNA *brna)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
2012-03-05 16:19:16 +00:00
|
|
|
const int uv_dim[] = {4, 2};
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshTextureFaceLayer", NULL);
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh UV Map", "UV map with assigned image textures in a Mesh datablock");
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshTextureFaceLayer_path");
|
2009-09-16 17:43:09 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_GROUP_UVS);
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshTessfaceLayer_name_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "Name of UV map");
|
2009-09-16 17:43:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshTextureFaceLayer_active_get", "rna_MeshTextureFaceLayer_active_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active", "Set the map as active for display and editing");
|
2009-09-16 17:43:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshTextureFaceLayer_active_render_get",
|
|
|
|
"rna_MeshTextureFaceLayer_active_render_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Render", "Set the map as active for rendering");
|
2009-09-16 17:43:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_clone", PROP_BOOLEAN, PROP_NONE);
|
2009-11-24 00:56:52 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "active_clone", 0);
|
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshTextureFaceLayer_clone_get", "rna_MeshTextureFaceLayer_clone_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Clone", "Set the map as active for cloning");
|
2009-11-24 00:56:52 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTextureFace");
|
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshTextureFaceLayer_data_begin", "rna_iterator_array_next",
|
2012-05-12 11:01:29 +00:00
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshTextureFaceLayer_data_length", NULL, NULL, NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshTextureFace", NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MTFace");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh UV Map Face", "UV map and image texture for a face");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshTextureFace_path");
|
2009-06-03 23:16:51 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_FACESEL_HLT);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tpage");
|
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, "rna_TextureFace_image_set", NULL, NULL);
|
2012-03-07 21:58:58 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Image", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-04-23 11:36:40 +00:00
|
|
|
/* these are for editing only, access at loops now */
|
|
|
|
#if 0
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select_uv", PROP_BOOLEAN, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", TF_SEL1);
|
|
|
|
RNA_def_property_array(prop, 4);
|
|
|
|
RNA_def_property_ui_text(prop, "UV Selected", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "pin_uv", PROP_BOOLEAN, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "unwrap", TF_PIN1);
|
|
|
|
RNA_def_property_array(prop, 4);
|
|
|
|
RNA_def_property_ui_text(prop, "UV Pinned", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2012-04-23 11:36:40 +00:00
|
|
|
#endif
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv1", PROP_FLOAT, PROP_XYZ);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_array(prop, 2);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv1_get", "rna_MeshTextureFace_uv1_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "UV 1", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv2", PROP_FLOAT, PROP_XYZ);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_array(prop, 2);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv2_get", "rna_MeshTextureFace_uv2_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "UV 2", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv3", PROP_FLOAT, PROP_XYZ);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_array(prop, 2);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv3_get", "rna_MeshTextureFace_uv3_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "UV 3", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv4", PROP_FLOAT, PROP_XYZ);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_array(prop, 2);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv4_get", "rna_MeshTextureFace_uv4_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "UV 4", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv", PROP_FLOAT, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_multi_array(prop, 2, uv_dim);
|
|
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_MeshTextureFace_uv_get_length");
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv_get", "rna_MeshTextureFace_uv_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "UV", "");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_raw", PROP_FLOAT, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_multi_array(prop, 2, uv_dim);
|
|
|
|
RNA_def_property_float_sdna(prop, NULL, "uv");
|
|
|
|
RNA_def_property_ui_text(prop, "UV", "Fixed size UV coordinates array");
|
2009-11-03 17:51:22 +00:00
|
|
|
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_def_mtexpoly(BlenderRNA *brna)
|
2008-11-24 12:12:24 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
2011-11-25 13:28:04 +00:00
|
|
|
#if 0 /* BMESH_TODO: needed later when do another todo */
|
2012-03-05 16:19:16 +00:00
|
|
|
int uv_dim[] = {4, 2};
|
2011-11-25 13:28:04 +00:00
|
|
|
#endif
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshTexturePolyLayer", NULL);
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh UV Map", "UV map with assigned image textures in a Mesh datablock");
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshTexturePolyLayer_path");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_GROUP_UVS);
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshPolyLayer_name_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "Name of UV map");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshTexturePolyLayer_active_get", "rna_MeshTexturePolyLayer_active_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active", "Set the map as active for display and editing");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshTexturePolyLayer_active_render_get",
|
|
|
|
"rna_MeshTexturePolyLayer_active_render_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Render", "Set the map as active for rendering");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_clone", PROP_BOOLEAN, PROP_NONE);
|
2009-11-24 00:56:52 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "active_clone", 0);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshTexturePolyLayer_clone_get", "rna_MeshTexturePolyLayer_clone_set");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Clone", "Set the map as active for cloning");
|
2009-11-24 00:56:52 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTexturePoly");
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshTexturePolyLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshTexturePolyLayer_data_length", NULL, NULL, NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshTexturePoly", NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MTexPoly");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh UV Map Face", "UV map and image texture for a face");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshTexturePoly_path");
|
2009-06-03 23:16:51 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_FACESEL_HLT);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tpage");
|
2012-03-07 21:58:58 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, "rna_TexturePoly_image_set", NULL, NULL);
|
2009-05-29 15:12:31 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_ui_text(prop, "Image", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-04-23 11:36:40 +00:00
|
|
|
#if 0 /* moved to MeshUVLoopLayer */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "select_uv", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", TF_SEL1);
|
|
|
|
RNA_def_property_array(prop, 4);
|
|
|
|
RNA_def_property_ui_text(prop, "UV Selected", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "pin_uv", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "unwrap", TF_PIN1);
|
|
|
|
RNA_def_property_array(prop, 4);
|
|
|
|
RNA_def_property_ui_text(prop, "UV Pinned", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_raw", PROP_FLOAT, PROP_NONE);
|
2010-01-04 22:30:09 +00:00
|
|
|
RNA_def_property_multi_array(prop, 2, uv_dim);
|
|
|
|
RNA_def_property_float_sdna(prop, NULL, "uv");
|
|
|
|
RNA_def_property_ui_text(prop, "UV", "Fixed size UV coordinates array");
|
2010-01-13 07:26:11 +00:00
|
|
|
#endif
|
2009-01-10 22:57:33 +00:00
|
|
|
}
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_def_mcol(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshColorLayer", NULL);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Vertex Color Layer", "Layer of vertex colors in a Mesh datablock");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshColorLayer_path");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_GROUP_VCOL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, NULL);
|
2011-05-15 17:59:48 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "Name of Vertex color layer");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshColorLayer_active_get", "rna_MeshColorLayer_active_set");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active", "Sets the layer as active for display and editing");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshColorLayer_active_render_get",
|
|
|
|
"rna_MeshColorLayer_active_render_set");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Render", "Sets the layer as active for rendering");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshColor");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshColorLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshColorLayer_data_length", NULL, NULL, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshColor", NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MCol");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Vertex Color", "Vertex colors for a face in a Mesh");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshColor_path");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "color1", PROP_FLOAT, PROP_COLOR);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
2009-06-20 13:53:14 +00:00
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshColor_color1_get", "rna_MeshColor_color1_set", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Color 1", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "color2", PROP_FLOAT, PROP_COLOR);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
2009-06-20 13:53:14 +00:00
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshColor_color2_get", "rna_MeshColor_color2_set", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Color 2", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "color3", PROP_FLOAT, PROP_COLOR);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
2009-06-20 13:53:14 +00:00
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshColor_color3_get", "rna_MeshColor_color3_set", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Color 3", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "color4", PROP_FLOAT, PROP_COLOR);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
2009-06-20 13:53:14 +00:00
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshColor_color4_get", "rna_MeshColor_color4_set", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Color 4", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
}
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_def_mloopcol(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshLoopColorLayer", NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Vertex Color Layer", "Layer of vertex colors in a Mesh datablock");
|
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshLoopColorLayer_path");
|
|
|
|
RNA_def_struct_ui_icon(srna, ICON_GROUP_VCOL);
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshLoopLayer_name_set");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "Name of Vertex color layer");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshLoopColorLayer_active_get", "rna_MeshLoopColorLayer_active_set");
|
|
|
|
RNA_def_property_ui_text(prop, "Active", "Sets the layer as active for display and editing");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_MeshLoopColorLayer_active_render_get",
|
|
|
|
"rna_MeshLoopColorLayer_active_render_set");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Render", "Sets the layer as active for rendering");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2012-01-17 05:15:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshLoopColor");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshLoopColorLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshLoopColorLayer_data_length", NULL, NULL, NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-01-17 05:15:33 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshLoopColor", NULL);
|
2012-01-17 05:15:33 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MLoopCol");
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Vertex Color", "Vertex loop colors in a Mesh");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshColor_path");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
|
2012-01-17 05:15:33 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
|
|
|
RNA_def_property_float_funcs(prop, "rna_MeshLoopColor_color_get", "rna_MeshLoopColor_color_set", NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Color", "");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2009-01-10 22:57:33 +00:00
|
|
|
}
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
static void rna_def_mproperties(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
/* Float */
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshFloatPropertyLayer", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
2012-03-17 14:27:46 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Float Property Layer", "User defined layer of floating point number values");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshFloatPropertyLayer_path");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshAnyLayer_name_set");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshFloatProperty");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshFloatPropertyLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshFloatPropertyLayer_data_length", NULL, NULL, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshFloatProperty", NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MFloatProperty");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Float Property",
|
|
|
|
"User defined floating point number value in a float properties layer");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshFloatProperty_path");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "f");
|
|
|
|
RNA_def_property_ui_text(prop, "Value", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
/* Int */
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshIntPropertyLayer", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Int Property Layer", "User defined layer of integer number values");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshIntPropertyLayer_path");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshAnyLayer_name_set");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshIntProperty");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshIntPropertyLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshIntPropertyLayer_data_length", NULL, NULL, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshIntProperty", NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MIntProperty");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Int Property",
|
|
|
|
"User defined integer number value in an integer properties layer");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshIntProperty_path");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "value", PROP_INT, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "i");
|
|
|
|
RNA_def_property_ui_text(prop, "Value", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2009-01-10 22:57:33 +00:00
|
|
|
/* String */
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshStringPropertyLayer", NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh String Property Layer", "User defined layer of string text values");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshStringPropertyLayer_path");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshAnyLayer_name_set");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshStringProperty");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshStringPropertyLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshStringPropertyLayer_data_length", NULL, NULL, NULL);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshStringProperty", NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_struct_sdna(srna, "MStringProperty");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh String Property",
|
|
|
|
"User defined string text value in a string properties layer");
|
2009-03-25 20:29:01 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshStringProperty_path");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2011-11-15 14:01:24 +00:00
|
|
|
/* low level mesh data access, treat as bytes */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "value", PROP_STRING, PROP_BYTESTRING);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "s");
|
2013-01-09 13:25:46 +00:00
|
|
|
RNA_def_property_string_funcs(prop, "rna_MeshStringProperty_s_get", "rna_MeshStringProperty_s_length", "rna_MeshStringProperty_s_set");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Value", "");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
2008-12-02 23:45:11 +00:00
|
|
|
void rna_def_texmat_common(StructRNA *srna, const char *texspace_editable)
|
|
|
|
{
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
/* texture space */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "auto_texspace", PROP_BOOLEAN, PROP_NONE);
|
2012-02-19 22:17:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "texflag", ME_AUTOSPACE);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Auto Texture Space",
|
|
|
|
"Adjust active object's texture space automatically when transforming object");
|
2008-12-02 23:45:11 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
|
2008-12-02 23:45:11 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "loc");
|
2012-05-29 05:46:54 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Texture Space Location", "Texture space location");
|
2012-05-08 23:39:31 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_Mesh_texspace_loc_get", NULL, NULL);
|
2009-01-01 15:52:51 +00:00
|
|
|
RNA_def_property_editable_func(prop, texspace_editable);
|
2009-09-16 17:43:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2008-12-02 23:45:11 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "texspace_size", PROP_FLOAT, PROP_XYZ);
|
2008-12-02 23:45:11 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "size");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Texture Space Size", "Texture space size");
|
2012-05-08 23:39:31 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_Mesh_texspace_size_get", NULL, NULL);
|
2009-01-01 15:52:51 +00:00
|
|
|
RNA_def_property_editable_func(prop, texspace_editable);
|
2009-09-16 17:43:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2008-12-02 23:45:11 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
/* not supported yet */
|
|
|
|
#if 0
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
|
2008-12-02 23:45:11 +00:00
|
|
|
RNA_def_property_float(prop, NULL, "rot");
|
|
|
|
RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
|
2009-09-16 17:43:09 +00:00
|
|
|
RNA_def_property_editable_func(prop, texspace_editable);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
|
|
|
#endif
|
2008-12-02 23:45:11 +00:00
|
|
|
|
|
|
|
/* materials */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "materials", PROP_COLLECTION, PROP_NONE);
|
2008-12-02 23:45:11 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
|
|
|
|
RNA_def_property_struct_type(prop, "Material");
|
|
|
|
RNA_def_property_ui_text(prop, "Materials", "");
|
2011-08-26 14:36:30 +00:00
|
|
|
RNA_def_property_srna(prop, "IDMaterials"); /* see rna_ID.c */
|
2011-10-09 07:31:15 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, 0, NULL, NULL, NULL, NULL, NULL, NULL, "rna_IDMaterials_assign_int");
|
2008-12-02 23:45:11 +00:00
|
|
|
}
|
|
|
|
|
2009-12-13 14:13:25 +00:00
|
|
|
|
|
|
|
/* scene.objects */
|
2010-08-26 22:44:05 +00:00
|
|
|
/* mesh.vertices */
|
|
|
|
static void rna_def_mesh_vertices(BlenderRNA *brna, PropertyRNA *cprop)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
2012-03-05 16:19:16 +00:00
|
|
|
/* PropertyRNA *prop; */
|
2010-08-26 22:44:05 +00:00
|
|
|
|
|
|
|
FunctionRNA *func;
|
2012-03-05 16:19:16 +00:00
|
|
|
/* PropertyRNA *parm; */
|
2010-08-26 22:44:05 +00:00
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "MeshVertices");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshVertices", NULL);
|
2010-08-26 22:44:05 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Vertices", "Collection of mesh vertices");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
func = RNA_def_function(srna, "add", "ED_mesh_vertices_add");
|
2010-08-26 22:44:05 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2011-09-19 13:23:58 +00:00
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to add", 0, INT_MAX);
|
2012-03-05 16:19:16 +00:00
|
|
|
#if 0 /* BMESH_TODO Remove until BMesh merge */
|
|
|
|
func = RNA_def_function(srna, "remove", "ED_mesh_vertices_remove");
|
2012-01-20 02:10:09 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to remove", 0, INT_MAX);
|
2012-01-23 13:29:29 +00:00
|
|
|
#endif
|
2010-08-26 22:44:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* mesh.edges */
|
|
|
|
static void rna_def_mesh_edges(BlenderRNA *brna, PropertyRNA *cprop)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
2012-03-05 16:19:16 +00:00
|
|
|
/* PropertyRNA *prop; */
|
2010-08-26 22:44:05 +00:00
|
|
|
|
|
|
|
FunctionRNA *func;
|
2012-03-05 16:19:16 +00:00
|
|
|
/* PropertyRNA *parm; */
|
2010-08-26 22:44:05 +00:00
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "MeshEdges");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshEdges", NULL);
|
2010-08-26 22:44:05 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Edges", "Collection of mesh edges");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
func = RNA_def_function(srna, "add", "ED_mesh_edges_add");
|
2010-08-26 22:44:05 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2012-01-20 02:10:09 +00:00
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of edges to add", 0, INT_MAX);
|
2012-03-05 16:19:16 +00:00
|
|
|
#if 0 /* BMESH_TODO Remove until BMesh merge */
|
|
|
|
func = RNA_def_function(srna, "remove", "ED_mesh_edges_remove");
|
2012-01-20 02:10:09 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of edges to remove", 0, INT_MAX);
|
2012-01-23 13:29:29 +00:00
|
|
|
#endif
|
2010-08-26 22:44:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* mesh.faces */
|
2012-03-26 04:32:04 +00:00
|
|
|
static void rna_def_mesh_tessfaces(BlenderRNA *brna, PropertyRNA *cprop)
|
2009-12-13 14:13:25 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2010-08-26 22:44:05 +00:00
|
|
|
FunctionRNA *func;
|
2012-03-05 16:19:16 +00:00
|
|
|
/* PropertyRNA *parm; */
|
2009-12-13 14:13:25 +00:00
|
|
|
|
2012-03-26 04:32:04 +00:00
|
|
|
RNA_def_property_srna(cprop, "MeshTessFaces");
|
|
|
|
srna = RNA_def_struct(brna, "MeshTessFaces", NULL);
|
2009-12-13 14:13:25 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Faces", "Collection of mesh faces");
|
2009-12-13 14:13:25 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_INT, PROP_NONE);
|
2009-12-13 14:13:25 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "act_face");
|
|
|
|
RNA_def_property_ui_text(prop, "Active Face", "The active face for this mesh");
|
2010-04-12 03:06:49 +00:00
|
|
|
|
2012-03-26 04:32:04 +00:00
|
|
|
func = RNA_def_function(srna, "add", "ED_mesh_tessfaces_add");
|
2010-08-26 22:44:05 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2012-01-20 02:10:09 +00:00
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of faces to add", 0, INT_MAX);
|
2012-03-05 16:19:16 +00:00
|
|
|
#if 0 /* BMESH_TODO Remove until BMesh merge */
|
|
|
|
func = RNA_def_function(srna, "remove", "ED_mesh_faces_remove");
|
2012-01-20 02:10:09 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of faces to remove", 0, INT_MAX);
|
2012-01-23 13:29:29 +00:00
|
|
|
#endif
|
2010-08-26 22:44:05 +00:00
|
|
|
}
|
2009-12-13 14:13:25 +00:00
|
|
|
|
2011-08-31 11:21:54 +00:00
|
|
|
/* mesh.loops */
|
|
|
|
static void rna_def_mesh_loops(BlenderRNA *brna, PropertyRNA *cprop)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
|
2011-09-26 05:35:57 +00:00
|
|
|
/*PropertyRNA *prop;*/
|
2011-08-31 11:21:54 +00:00
|
|
|
|
|
|
|
FunctionRNA *func;
|
2011-09-26 05:35:57 +00:00
|
|
|
/*PropertyRNA *parm;*/
|
2011-08-31 11:21:54 +00:00
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "MeshLoops");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshLoops", NULL);
|
2011-08-31 11:21:54 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Loops", "Collection of mesh loops");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
func = RNA_def_function(srna, "add", "ED_mesh_loops_add");
|
2011-08-31 11:21:54 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2011-09-23 13:31:48 +00:00
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of loops to add", 0, INT_MAX);
|
2011-08-31 11:21:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* mesh.polygons */
|
2011-08-31 05:13:21 +00:00
|
|
|
static void rna_def_mesh_polygons(BlenderRNA *brna, PropertyRNA *cprop)
|
2010-08-23 22:16:45 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
2011-08-31 05:13:21 +00:00
|
|
|
|
2010-08-23 22:16:45 +00:00
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
FunctionRNA *func;
|
2012-03-05 16:19:16 +00:00
|
|
|
/* PropertyRNA *parm; */
|
2010-08-23 22:16:45 +00:00
|
|
|
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_srna(cprop, "MeshPolygons");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "MeshPolygons", NULL);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Polygons", "Collection of mesh polygons");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_INT, PROP_NONE);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "act_face");
|
|
|
|
RNA_def_property_ui_text(prop, "Active Polygon", "The active polygon for this mesh");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
func = RNA_def_function(srna, "add", "ED_mesh_polys_add");
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2012-02-20 00:18:35 +00:00
|
|
|
RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of polygons to add", 0, INT_MAX);
|
2011-08-31 05:13:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-09-07 05:47:34 +00:00
|
|
|
/* mesh.vertex_colors */
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_def_tessface_vertex_colors(BlenderRNA *brna, PropertyRNA *cprop)
|
2010-09-07 05:47:34 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-15 05:40:33 +00:00
|
|
|
FunctionRNA *func;
|
|
|
|
PropertyRNA *parm;
|
2010-09-07 05:47:34 +00:00
|
|
|
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_property_srna(cprop, "VertexColors");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "VertexColors", NULL);
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Vertex Colors", "Collection of vertex colors");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
2012-03-15 05:40:33 +00:00
|
|
|
/* eventually deprecate this */
|
|
|
|
func = RNA_def_function(srna, "new", "rna_Mesh_tessface_vertex_color_new");
|
2013-03-24 12:13:13 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2012-03-15 05:40:33 +00:00
|
|
|
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");
|
|
|
|
RNA_def_property_flag(parm, PROP_RNAPTR);
|
|
|
|
RNA_def_function_return(func, parm);
|
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshColorLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_tessface_vertex_color_active_get",
|
|
|
|
"rna_Mesh_tessface_vertex_color_active_set", NULL, NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Vertex Color Layer", "Active vertex color layer");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_tessface_vertex_color_active_index_get",
|
|
|
|
"rna_Mesh_tessface_vertex_color_active_index_set", "rna_Mesh_vertex_color_index_range");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Vertex Color Index", "Active vertex color index");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void rna_def_loop_colors(BlenderRNA *brna, PropertyRNA *cprop)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
FunctionRNA *func;
|
|
|
|
PropertyRNA *parm;
|
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "LoopColors");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "LoopColors", NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Loop Colors", "Collection of vertex colors");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
func = RNA_def_function(srna, "new", "rna_Mesh_vertex_color_new");
|
2011-09-19 13:23:58 +00:00
|
|
|
RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh");
|
|
|
|
RNA_def_string(func, "name", "Col", 0, "", "Vertex color name");
|
2012-03-05 16:19:16 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshLoopColorLayer", "", "The newly created layer");
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_def_property_flag(parm, PROP_RNAPTR);
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_function_return(func, parm);
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
func = RNA_def_function(srna, "remove", "rna_Mesh_vertex_color_remove");
|
2011-09-19 13:23:58 +00:00
|
|
|
RNA_def_function_ui_description(func, "Remove a vertex color layer");
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2013-03-24 12:13:13 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshLoopColorLayer", "", "The layer to remove");
|
|
|
|
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
2012-11-02 09:41:26 +00:00
|
|
|
RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
|
2012-05-12 11:01:29 +00:00
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshLoopColorLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_vertex_color_active_get",
|
|
|
|
"rna_Mesh_vertex_color_active_set", NULL, NULL);
|
2013-01-31 13:44:13 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Vertex Color Layer", "Active vertex color layer");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_vertex_color_active_index_get",
|
|
|
|
"rna_Mesh_vertex_color_active_index_set", "rna_Mesh_vertex_color_index_range");
|
2010-08-24 04:02:50 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active Vertex Color Index", "Active vertex color index");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2010-08-23 22:16:45 +00:00
|
|
|
}
|
|
|
|
|
2012-04-22 23:51:50 +00:00
|
|
|
static void rna_def_uv_layers(BlenderRNA *brna, PropertyRNA *cprop)
|
2011-11-17 05:03:07 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
/* FunctionRNA *func; */
|
|
|
|
/* PropertyRNA *parm; */
|
2011-11-17 05:03:07 +00:00
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "UVLoopLayers");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "UVLoopLayers", NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "UV Loop Layers", "Collection of uv loop layers");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
|
2012-04-22 23:51:50 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_layer_active_get",
|
|
|
|
"rna_Mesh_uv_layer_active_set", NULL, NULL);
|
2013-01-31 13:44:13 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active UV loop layer", "Active UV loop layer");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
|
2012-04-22 23:51:50 +00:00
|
|
|
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");
|
2011-11-17 05:03:07 +00:00
|
|
|
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");
|
|
|
|
}
|
|
|
|
|
2011-11-15 12:28:13 +00:00
|
|
|
/* mesh int layers */
|
2012-04-03 11:10:26 +00:00
|
|
|
static void rna_def_polygon_int_layers(BlenderRNA *brna, PropertyRNA *cprop)
|
2011-11-15 12:28:13 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
|
|
|
|
FunctionRNA *func;
|
|
|
|
PropertyRNA *parm;
|
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "IntProperties");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "IntProperties", NULL);
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Int Properties", "Collection of int properties");
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
func = RNA_def_function(srna, "new", "rna_Mesh_polygon_int_property_new");
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
|
|
|
RNA_def_function_ui_description(func, "Add a integer property layer to Mesh");
|
|
|
|
RNA_def_string(func, "name", "Int Prop", 0, "", "Int property name");
|
2012-03-05 16:19:16 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshIntPropertyLayer", "", "The newly created layer");
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_def_property_flag(parm, PROP_RNAPTR);
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_function_return(func, parm);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* mesh float layers */
|
2012-04-03 11:10:26 +00:00
|
|
|
static void rna_def_polygon_float_layers(BlenderRNA *brna, PropertyRNA *cprop)
|
2011-11-15 12:28:13 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
|
|
|
|
FunctionRNA *func;
|
|
|
|
PropertyRNA *parm;
|
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "FloatProperties");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "FloatProperties", NULL);
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "Float Properties", "Collection of float properties");
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
func = RNA_def_function(srna, "new", "rna_Mesh_polygon_float_property_new");
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
|
|
|
RNA_def_function_ui_description(func, "Add a float property layer to Mesh");
|
|
|
|
RNA_def_string(func, "name", "Float Prop", 0, "", "Float property name");
|
2012-03-05 16:19:16 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshFloatPropertyLayer", "", "The newly created layer");
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_def_property_flag(parm, PROP_RNAPTR);
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_function_return(func, parm);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* mesh string layers */
|
2012-04-03 11:10:26 +00:00
|
|
|
static void rna_def_polygon_string_layers(BlenderRNA *brna, PropertyRNA *cprop)
|
2011-11-15 12:28:13 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
|
|
|
|
FunctionRNA *func;
|
|
|
|
PropertyRNA *parm;
|
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "StringProperties");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "StringProperties", NULL);
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
|
|
|
RNA_def_struct_ui_text(srna, "String Properties", "Collection of string properties");
|
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
func = RNA_def_function(srna, "new", "rna_Mesh_polygon_string_property_new");
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
|
|
|
RNA_def_function_ui_description(func, "Add a string property layer to Mesh");
|
|
|
|
RNA_def_string(func, "name", "String Prop", 0, "", "String property name");
|
2012-03-05 16:19:16 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshStringPropertyLayer", "", "The newly created layer");
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_def_property_flag(parm, PROP_RNAPTR);
|
2011-11-15 12:28:13 +00:00
|
|
|
RNA_def_function_return(func, parm);
|
|
|
|
}
|
|
|
|
|
2012-04-22 23:51:50 +00:00
|
|
|
/* mesh.tessface_uv_layers */
|
2011-11-25 13:28:04 +00:00
|
|
|
static void rna_def_tessface_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-07 21:58:58 +00:00
|
|
|
FunctionRNA *func;
|
|
|
|
PropertyRNA *parm;
|
2011-11-25 13:28:04 +00:00
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "TessfaceUVTextures");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "TessfaceUVTextures", NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "UV Maps", "Collection of UV maps for tessellated faces");
|
|
|
|
|
2012-03-07 21:58:58 +00:00
|
|
|
/* eventually deprecate this */
|
2012-03-18 09:27:36 +00:00
|
|
|
func = RNA_def_function(srna, "new", "rna_Mesh_tessface_uv_texture_new");
|
2013-03-24 12:13:13 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2012-03-07 21:58:58 +00:00
|
|
|
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");
|
2012-03-18 09:27:36 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshTextureFaceLayer", "", "The newly created layer");
|
2012-03-07 21:58:58 +00:00
|
|
|
RNA_def_property_flag(parm, PROP_RNAPTR);
|
|
|
|
RNA_def_function_return(func, parm);
|
|
|
|
|
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_tessface_uv_texture_active_get",
|
|
|
|
"rna_Mesh_tessface_uv_texture_active_set", NULL, NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active UV Map", "Active UV Map");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_tessface_uv_texture_active_index_get",
|
|
|
|
"rna_Mesh_tessface_uv_texture_active_index_set", "rna_Mesh_uv_texture_index_range");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active UV Map Index", "Active UV Map index");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-08-23 22:16:45 +00:00
|
|
|
static void rna_def_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
|
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
FunctionRNA *func;
|
|
|
|
PropertyRNA *parm;
|
|
|
|
|
|
|
|
RNA_def_property_srna(cprop, "UVTextures");
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "UVTextures", NULL);
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_struct_sdna(srna, "Mesh");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "UV Maps", "Collection of UV maps");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
func = RNA_def_function(srna, "new", "rna_Mesh_uv_texture_new");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_function_ui_description(func, "Add a UV map layer to Mesh");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_string(func, "name", "UVMap", 0, "", "UV map name");
|
2012-03-05 16:19:16 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshTexturePolyLayer", "", "The newly created layer");
|
2012-02-01 18:25:13 +00:00
|
|
|
RNA_def_property_flag(parm, PROP_RNAPTR);
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_function_return(func, parm);
|
|
|
|
|
2012-04-22 23:51:50 +00:00
|
|
|
func = RNA_def_function(srna, "remove", "rna_Mesh_uv_texture_layers_remove");
|
2011-09-19 13:23:58 +00:00
|
|
|
RNA_def_function_ui_description(func, "Remove a vertex color layer");
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
2013-03-24 12:13:13 +00:00
|
|
|
parm = RNA_def_pointer(func, "layer", "MeshTexturePolyLayer", "", "The layer to remove");
|
|
|
|
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
|
2012-05-12 11:01:29 +00:00
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_active_get",
|
|
|
|
"rna_Mesh_uv_texture_active_set", NULL, NULL);
|
2013-01-31 13:44:13 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active UV Map", "Active UV Map");
|
2010-08-23 22:16:45 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2010-08-24 04:02:50 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_uv_texture_active_index_get",
|
|
|
|
"rna_Mesh_uv_texture_active_index_set", "rna_Mesh_uv_texture_index_range");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Active UV Map Index", "Active UV Map index");
|
2010-08-24 04:02:50 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2010-08-23 22:16:45 +00:00
|
|
|
}
|
|
|
|
|
2012-09-23 18:50:56 +00:00
|
|
|
static void rna_def_skin_vertices(BlenderRNA *brna, PropertyRNA *UNUSED(cprop))
|
2012-05-22 15:18:43 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
srna = RNA_def_struct(brna, "MeshSkinVertexLayer", NULL);
|
|
|
|
RNA_def_struct_ui_text(srna, "Mesh Skin Vertex Layer", "Per-vertex skin data for use with the Skin modifier");
|
|
|
|
RNA_def_struct_sdna(srna, "CustomDataLayer");
|
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshSkinVertexLayer_path");
|
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2013-04-30 17:30:40 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshVertexLayer_name_set");
|
2012-05-22 15:18:43 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "Name of skin layer");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
|
|
|
|
RNA_def_property_struct_type(prop, "MeshSkinVertex");
|
|
|
|
RNA_def_property_ui_text(prop, "Data", "");
|
|
|
|
RNA_def_property_collection_funcs(prop, "rna_MeshSkinVertexLayer_data_begin", "rna_iterator_array_next",
|
|
|
|
"rna_iterator_array_end", "rna_iterator_array_get",
|
|
|
|
"rna_MeshSkinVertexLayer_data_length", NULL, NULL, NULL);
|
|
|
|
|
|
|
|
/* SkinVertex struct */
|
|
|
|
srna = RNA_def_struct(brna, "MeshSkinVertex", NULL);
|
|
|
|
RNA_def_struct_sdna(srna, "MVertSkin");
|
|
|
|
RNA_def_struct_ui_text(srna, "Skin Vertex", "Per-vertex skin data for use with the Skin modifier");
|
|
|
|
RNA_def_struct_path_func(srna, "rna_MeshSkinVertex_path");
|
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_NONE);
|
|
|
|
RNA_def_property_array(prop, 2);
|
|
|
|
RNA_def_property_ui_range(prop, 0.001, 100, 1, 3);
|
|
|
|
RNA_def_property_ui_text(prop, "Radius", "Radius of the skin");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
|
|
|
/* Flags */
|
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "use_root", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", MVERT_SKIN_ROOT);
|
|
|
|
RNA_def_property_ui_text(prop, "Root", "Vertex is a root for rotation calculations and armature generation");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "use_loose", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", MVERT_SKIN_LOOSE);
|
|
|
|
RNA_def_property_ui_text(prop, "Loose", "If vertex has multiple adjacent edges, it is hulled to them directly");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
|
|
|
}
|
|
|
|
|
2008-11-24 12:12:24 +00:00
|
|
|
static void rna_def_mesh(BlenderRNA *brna)
|
2008-11-07 02:58:25 +00:00
|
|
|
{
|
|
|
|
StructRNA *srna;
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
srna = RNA_def_struct(brna, "Mesh", "ID");
|
2010-02-21 20:27:13 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Mesh", "Mesh datablock defining geometric surfaces");
|
2009-06-03 23:16:51 +00:00
|
|
|
RNA_def_struct_ui_icon(srna, ICON_MESH_DATA);
|
2008-11-07 02:58:25 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "vertices", PROP_COLLECTION, PROP_NONE);
|
2008-11-07 02:58:25 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "mvert", "totvert");
|
2009-01-02 14:48:03 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshVertex");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Vertices", "Vertices of the mesh");
|
2010-08-26 22:44:05 +00:00
|
|
|
rna_def_mesh_vertices(brna, prop);
|
2008-11-07 02:58:25 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "edges", PROP_COLLECTION, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "medge", "totedge");
|
2009-01-02 14:48:03 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshEdge");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Edges", "Edges of the mesh");
|
2010-08-26 22:44:05 +00:00
|
|
|
rna_def_mesh_edges(brna, prop);
|
2008-11-07 02:58:25 +00:00
|
|
|
|
2012-03-23 00:28:29 +00:00
|
|
|
prop = RNA_def_property(srna, "tessfaces", PROP_COLLECTION, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "mface", "totface");
|
2012-03-23 00:28:29 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTessFace");
|
2012-03-23 01:55:38 +00:00
|
|
|
RNA_def_property_ui_text(prop, "TessFaces", "Tessellation faces of the mesh (derived from polygons)");
|
2012-03-26 04:32:04 +00:00
|
|
|
rna_def_mesh_tessfaces(brna, prop);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "loops", PROP_COLLECTION, PROP_NONE);
|
2011-08-31 11:21:54 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "mloop", "totloop");
|
|
|
|
RNA_def_property_struct_type(prop, "MeshLoop");
|
2012-03-23 01:55:38 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Loops", "Loops of the mesh (polygon corners)");
|
2011-08-31 11:21:54 +00:00
|
|
|
rna_def_mesh_loops(brna, prop);
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "polygons", PROP_COLLECTION, PROP_NONE);
|
2011-08-31 05:13:21 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "mpoly", "totpoly");
|
|
|
|
RNA_def_property_struct_type(prop, "MeshPolygon");
|
|
|
|
RNA_def_property_ui_text(prop, "Polygons", "Polygons of the mesh");
|
|
|
|
rna_def_mesh_polygons(brna, prop);
|
|
|
|
|
2009-10-07 09:23:29 +00:00
|
|
|
/* TODO, should this be allowed to be its self? */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "texture_mesh", PROP_POINTER, PROP_NONE);
|
2009-10-07 09:23:29 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "texcomesh");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Texture Mesh",
|
|
|
|
"Use another mesh for texture indices (vertex indices must be aligned)");
|
2009-06-27 01:10:39 +00:00
|
|
|
|
2011-11-17 05:03:07 +00:00
|
|
|
/* UV loop layers */
|
2012-04-22 23:51:50 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_layers", PROP_COLLECTION, PROP_NONE);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "ldata.layers", "ldata.totlayer");
|
2012-04-22 23:51:50 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_layers_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_uv_layers_length", NULL, NULL, NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
|
|
|
|
RNA_def_property_ui_text(prop, "UV Loop Layers", "All UV loop layers");
|
2012-04-22 23:51:50 +00:00
|
|
|
rna_def_uv_layers(brna, prop);
|
2011-11-17 05:03:07 +00:00
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_layer_clone", PROP_POINTER, PROP_NONE);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
|
2012-04-22 23:51:50 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_layer_clone_get",
|
|
|
|
"rna_Mesh_uv_layer_clone_set", NULL, NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
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");
|
2009-06-27 01:10:39 +00:00
|
|
|
|
2012-04-22 23:51:50 +00:00
|
|
|
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");
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Clone UV loop layer Index", "Clone UV loop layer index");
|
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_layer_stencil", PROP_POINTER, PROP_NONE);
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
|
2012-04-22 23:51:50 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_layer_stencil_get",
|
|
|
|
"rna_Mesh_uv_layer_stencil_set", NULL, NULL);
|
2011-11-17 05:03:07 +00:00
|
|
|
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");
|
|
|
|
|
2012-04-22 23:51:50 +00:00
|
|
|
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");
|
2011-11-17 05:03:07 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Mask UV loop layer Index", "Mask UV loop layer index");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
/* Tessellated face UV maps - used by renderers */
|
|
|
|
prop = RNA_def_property(srna, "tessface_uv_textures", PROP_COLLECTION, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_tessface_uv_textures_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_tessface_uv_textures_length", NULL, NULL, NULL);
|
|
|
|
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Tessellated Face UV Maps",
|
|
|
|
"All UV maps for tessellated faces (read-only, for use by renderers)");
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_def_tessface_uv_textures(brna, prop);
|
|
|
|
|
|
|
|
/* UV maps */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_textures", PROP_COLLECTION, PROP_NONE);
|
2009-07-16 09:17:27 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
|
2011-10-20 07:56:04 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_textures_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_uv_textures_length", NULL, NULL, NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
|
|
|
|
RNA_def_property_ui_text(prop, "UV Maps", "All UV maps");
|
2010-08-23 22:16:45 +00:00
|
|
|
rna_def_uv_textures(brna, prop);
|
2009-07-01 22:25:49 +00:00
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_texture_clone", PROP_POINTER, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_clone_get",
|
|
|
|
"rna_Mesh_uv_texture_clone_set", NULL, NULL);
|
2009-11-24 00:56:52 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Clone UV Map", "UV map to be used as cloning source");
|
2009-11-24 00:56:52 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_texture_clone_index", PROP_INT, PROP_UNSIGNED);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_uv_texture_clone_index_get",
|
|
|
|
"rna_Mesh_uv_texture_clone_index_set", "rna_Mesh_uv_texture_index_range");
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Clone UV Map Index", "Clone UV map index");
|
2009-12-22 10:48:13 +00:00
|
|
|
|
2012-12-11 14:11:46 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_texture_stencil", PROP_POINTER, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_stencil_get",
|
|
|
|
"rna_Mesh_uv_texture_stencil_set", NULL, NULL);
|
2009-12-22 10:48:13 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Mask UV Map", "UV map to mask the painted area");
|
2009-12-22 10:48:13 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "uv_texture_stencil_index", PROP_INT, PROP_UNSIGNED);
|
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_uv_texture_stencil_index_get",
|
|
|
|
"rna_Mesh_uv_texture_stencil_index_set", "rna_Mesh_uv_texture_index_range");
|
2011-11-23 17:25:25 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Mask UV Map Index", "Mask UV map index");
|
2009-11-24 00:56:52 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
/* Tessellated face colors - used by renderers */
|
2011-11-25 13:28:04 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "tessface_vertex_colors", PROP_COLLECTION, PROP_NONE);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
|
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_tessface_vertex_colors_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_tessface_vertex_colors_length", NULL, NULL, NULL);
|
|
|
|
RNA_def_property_struct_type(prop, "MeshColorLayer");
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Tessellated Face Colors",
|
|
|
|
"All tessellated face colors (read-only, for use by renderers)");
|
2011-11-25 13:28:04 +00:00
|
|
|
rna_def_tessface_vertex_colors(brna, prop);
|
|
|
|
|
2009-07-01 22:25:49 +00:00
|
|
|
/* Vertex colors */
|
2009-06-27 01:10:39 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "vertex_colors", PROP_COLLECTION, PROP_NONE);
|
2009-07-16 09:17:27 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "ldata.layers", "ldata.totlayer");
|
2011-10-20 07:56:04 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_vertex_colors_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_vertex_colors_length", NULL, NULL, NULL);
|
2011-11-25 13:28:04 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshLoopColorLayer");
|
|
|
|
RNA_def_property_ui_text(prop, "Vertex Colors", "All vertex colors");
|
|
|
|
rna_def_loop_colors(brna, prop);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2013-04-30 17:30:40 +00:00
|
|
|
/* TODO, vertex, edge customdata layers (bmesh py api can access already) */
|
2012-04-03 11:10:26 +00:00
|
|
|
prop = RNA_def_property(srna, "polygon_layers_float", PROP_COLLECTION, PROP_NONE);
|
2009-07-16 09:17:27 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
|
2012-04-03 11:10:26 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_polygon_float_layers_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_polygon_float_layers_length", NULL, NULL, NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshFloatPropertyLayer");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Float Property Layers", "");
|
2012-04-03 11:10:26 +00:00
|
|
|
rna_def_polygon_float_layers(brna, prop);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
prop = RNA_def_property(srna, "polygon_layers_int", PROP_COLLECTION, PROP_NONE);
|
2009-07-16 09:17:27 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
|
2012-04-03 11:10:26 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_polygon_int_layers_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_polygon_int_layers_length", NULL, NULL, NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshIntPropertyLayer");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Int Property Layers", "");
|
2012-04-03 11:10:26 +00:00
|
|
|
rna_def_polygon_int_layers(brna, prop);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-04-03 11:10:26 +00:00
|
|
|
prop = RNA_def_property(srna, "polygon_layers_string", PROP_COLLECTION, PROP_NONE);
|
2009-07-16 09:17:27 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
|
2012-04-03 11:10:26 +00:00
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_polygon_string_layers_begin", NULL, NULL, NULL,
|
|
|
|
"rna_Mesh_polygon_string_layers_length", NULL, NULL, NULL);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshStringPropertyLayer");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "String Property Layers", "");
|
2012-04-03 11:10:26 +00:00
|
|
|
rna_def_polygon_string_layers(brna, prop);
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-05-22 15:18:43 +00:00
|
|
|
/* Skin vertices */
|
|
|
|
prop = RNA_def_property(srna, "skin_vertices", PROP_COLLECTION, PROP_NONE);
|
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "vdata.layers", "vdata.totlayer");
|
|
|
|
RNA_def_property_collection_funcs(prop, "rna_Mesh_skin_vertices_begin", NULL, NULL, NULL,
|
2012-11-09 09:33:28 +00:00
|
|
|
"rna_Mesh_skin_vertices_length", NULL, NULL, NULL);
|
2012-05-22 15:18:43 +00:00
|
|
|
RNA_def_property_struct_type(prop, "MeshSkinVertexLayer");
|
|
|
|
RNA_def_property_ui_text(prop, "Skin Vertices", "All skin vertices");
|
|
|
|
rna_def_skin_vertices(brna, prop);
|
|
|
|
/* End skin vertices */
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_auto_smooth", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_AUTOSMOOTH);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Auto Smooth",
|
|
|
|
"Treat all set-smoothed faces with angles less than the specified angle "
|
|
|
|
"as 'smooth' during render");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2011-06-09 08:58:27 +00:00
|
|
|
#if 1 /* expose as radians */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "auto_smooth_angle", PROP_FLOAT, PROP_ANGLE);
|
2011-06-09 08:58:27 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_Mesh_auto_smooth_angle_get", "rna_Mesh_auto_smooth_angle_set", NULL);
|
|
|
|
RNA_def_property_ui_range(prop, DEG2RAD(1.0), DEG2RAD(80), 1.0, 1);
|
|
|
|
#else
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "auto_smooth_angle", PROP_INT, PROP_NONE);
|
2008-12-26 02:02:06 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "smoothresh");
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_range(prop, 1, 80);
|
2011-06-09 08:58:27 +00:00
|
|
|
#endif
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Auto Smooth Angle",
|
|
|
|
"Maximum angle between face normals that 'Auto Smooth' will operate on");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "show_double_sided", PROP_BOOLEAN, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_TWOSIDED);
|
|
|
|
RNA_def_property_ui_text(prop, "Double Sided", "Render/display the mesh with double or single sided lighting");
|
2009-07-01 22:25:49 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
|
2008-11-24 12:12:24 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "texco_mesh", PROP_POINTER, PROP_NONE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "texcomesh");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2008-11-24 12:12:24 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Texture Space Mesh", "Derive texture coordinates from another mesh");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "shape_keys", PROP_POINTER, PROP_NONE);
|
2009-01-10 22:57:33 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "key");
|
2008-12-04 00:07:47 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Shape Keys", "");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
2010-04-12 05:04:49 +00:00
|
|
|
/* texture space */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
|
2012-02-19 22:17:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "texflag", ME_AUTOSPACE);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Auto Texture Space",
|
|
|
|
"Adjust active object's texture space automatically when transforming object");
|
2011-11-18 16:06:20 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
#if 0
|
|
|
|
prop = RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
|
2010-04-12 05:04:49 +00:00
|
|
|
RNA_def_property_array(prop, 3);
|
2010-05-04 05:15:53 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Texture Space Location", "Texture space location");
|
2010-04-12 05:04:49 +00:00
|
|
|
RNA_def_property_editable_func(prop, "rna_Mesh_texspace_editable");
|
2011-11-18 16:06:20 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_Mesh_texspace_loc_get", "rna_Mesh_texspace_loc_set", NULL);
|
2010-04-12 05:04:49 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-05-12 11:01:29 +00:00
|
|
|
#endif
|
2011-11-18 16:06:20 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
/* not supported yet */
|
|
|
|
#if 0
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
|
2011-11-11 13:09:14 +00:00
|
|
|
RNA_def_property_float(prop, NULL, "rot");
|
|
|
|
RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
|
|
|
|
RNA_def_property_editable_func(prop, texspace_editable);
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-05-12 11:01:29 +00:00
|
|
|
#endif
|
2010-08-26 22:44:05 +00:00
|
|
|
|
2009-08-06 23:34:14 +00:00
|
|
|
/* Mesh Draw Options for Edit Mode*/
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_edges", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEDGES);
|
2012-07-04 15:04:38 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Edges",
|
|
|
|
"Display selected edges using highlights in the 3D view and UV editor");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWFACES);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Faces", "Display all faces as shades in the 3D view and UV editor");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_normal_face", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWNORMALS);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Normals", "Display face normals as lines");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_normal_vertex", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_VNORMALS);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Vertex Normals", "Display vertex normals as lines");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
2013-04-13 20:20:21 +00:00
|
|
|
prop = RNA_def_property(srna, "show_weight", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEIGHT);
|
|
|
|
RNA_def_property_ui_text(prop, "Show Weights", "Draw weights in editmode");
|
2013-04-22 06:16:03 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data_edit_color"); /* needs to rebuild 'dm' */
|
2013-04-13 20:20:21 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "show_edge_crease", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWCREASES);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Creases", "Display creases created for subsurf weighting");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_edge_bevel_weight", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWBWEIGHTS);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Bevel Weights", "Display weights created for the Bevel modifier");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_edge_seams", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWSEAMS);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Seams", "Display UV unwrapping seams");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_edge_sharp", PROP_BOOLEAN, PROP_NONE);
|
2009-08-06 23:34:14 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWSHARP);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Draw Sharp", "Display sharp edges, used with the EdgeSplit modifier");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2009-10-13 17:49:05 +00:00
|
|
|
|
2012-03-10 21:56:23 +00:00
|
|
|
prop = RNA_def_property(srna, "show_freestyle_edge_marks", PROP_BOOLEAN, PROP_NONE);
|
2011-10-06 02:04:43 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_FREESTYLE_EDGE);
|
|
|
|
RNA_def_property_ui_text(prop, "Draw Freestyle Edge Marks", "Display Freestyle edge marks, used with the Freestyle renderer");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
|
|
|
|
2012-03-10 21:56:23 +00:00
|
|
|
prop = RNA_def_property(srna, "show_freestyle_face_marks", PROP_BOOLEAN, PROP_NONE);
|
2011-10-06 02:04:43 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_FREESTYLE_FACE);
|
|
|
|
RNA_def_property_ui_text(prop, "Draw Freestyle Face Marks", "Display Freestyle face marks, used with the Freestyle renderer");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
|
|
|
|
2013-04-17 09:27:23 +00:00
|
|
|
prop = RNA_def_property(srna, "show_statvis", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_STATVIS);
|
|
|
|
RNA_def_property_ui_text(prop, "Stat Vis", "Display statistical information about the mesh");
|
2013-04-22 06:16:03 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_data_edit_color");
|
2013-04-17 09:27:23 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "show_extra_edge_length", PROP_BOOLEAN, PROP_NONE);
|
2010-12-20 03:59:22 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEXTRA_EDGELEN);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Edge Length",
|
|
|
|
"Display selected edge lengths, using global values when set in the transform panel");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
2013-03-29 04:01:52 +00:00
|
|
|
prop = RNA_def_property(srna, "show_extra_edge_angle", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEXTRA_EDGEANG);
|
|
|
|
RNA_def_property_ui_text(prop, "Edge Angle",
|
|
|
|
"Display selected edge angle, using global values when set in the transform panel");
|
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "show_extra_face_angle", PROP_BOOLEAN, PROP_NONE);
|
2010-12-20 03:59:22 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEXTRA_FACEANG);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Face Angles",
|
2012-12-31 15:54:44 +00:00
|
|
|
"Display the angles in the selected edges, "
|
2012-03-05 16:19:16 +00:00
|
|
|
"using global values when set in the transform panel");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "show_extra_face_area", PROP_BOOLEAN, PROP_NONE);
|
2010-12-20 03:59:22 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEXTRA_FACEAREA);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Face Area",
|
|
|
|
"Display the area of selected faces, "
|
|
|
|
"using global values when set in the transform panel");
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
2008-12-02 23:45:11 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "show_extra_indices", PROP_BOOLEAN, PROP_NONE);
|
2011-12-22 05:39:23 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEXTRA_INDICES);
|
2012-02-27 18:14:56 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Indices", "Display the index numbers of selected vertices, edges, and faces");
|
2011-12-22 05:39:23 +00:00
|
|
|
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
|
|
|
|
|
2009-10-14 14:28:05 +00:00
|
|
|
/* editflag */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_mirror_x", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 14:28:05 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_X);
|
|
|
|
RNA_def_property_ui_text(prop, "X Mirror", "X Axis mirror editing");
|
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
#if 0
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_mirror_y", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 14:28:05 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_Y);
|
|
|
|
RNA_def_property_ui_text(prop, "Y Mirror", "Y Axis mirror editing");
|
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
prop = RNA_def_property(srna, "use_mirror_z", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 14:28:05 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_Z);
|
|
|
|
RNA_def_property_ui_text(prop, "Z Mirror", "Z Axis mirror editing");
|
2012-05-12 11:01:29 +00:00
|
|
|
#endif
|
2009-10-14 14:28:05 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_mirror_topology", PROP_BOOLEAN, PROP_NONE);
|
2010-02-17 19:50:42 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_TOPO);
|
2012-03-05 16:19:16 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Topology Mirror",
|
|
|
|
"Use topology based mirroring "
|
|
|
|
"(for when both sides of mesh have matching, unique topology)");
|
2010-02-17 19:50:42 +00:00
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "use_paint_mask", PROP_BOOLEAN, PROP_NONE);
|
2012-12-22 14:25:34 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_PAINT_FACE_SEL);
|
2009-10-20 19:27:27 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Paint Mask", "Face selection masking for painting");
|
2009-11-28 21:27:28 +00:00
|
|
|
RNA_def_property_ui_icon(prop, ICON_FACESEL_HLT, 0);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Mesh_update_facemask");
|
2012-03-05 16:19:16 +00:00
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "use_paint_mask_vertex", PROP_BOOLEAN, PROP_NONE);
|
2012-12-22 14:25:34 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_PAINT_VERT_SEL);
|
2011-09-14 08:45:12 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Vertex Selection", "Vertex selection masking for painting (weight paint only)");
|
2011-07-13 20:45:09 +00:00
|
|
|
RNA_def_property_ui_icon(prop, ICON_VERTEXSEL, 0);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Mesh_update_vertmask");
|
2010-02-12 22:03:23 +00:00
|
|
|
|
2013-01-10 04:43:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* customdata flags */
|
|
|
|
prop = RNA_def_property(srna, "use_customdata_vertex_bevel", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cd_flag", ME_CDFLAG_VERT_BWEIGHT);
|
|
|
|
RNA_def_property_ui_text(prop, "Store Vertex Bevel Weight", "");
|
|
|
|
|
|
|
|
prop = RNA_def_property(srna, "use_customdata_edge_bevel", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "cd_flag", ME_CDFLAG_EDGE_BWEIGHT);
|
|
|
|
RNA_def_property_ui_text(prop, "Store Edge Bevel Weight", "");
|
|
|
|
|
|
|
|
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", "");
|
|
|
|
|
|
|
|
|
2010-02-12 22:03:23 +00:00
|
|
|
/* readonly editmesh info - use for extrude menu */
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "total_vert_sel", PROP_INT, PROP_UNSIGNED);
|
2010-02-12 22:03:23 +00:00
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_tot_vert_get", NULL, NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Selected Vert Total", "Selected vertex count in editmode");
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "total_edge_sel", PROP_INT, PROP_UNSIGNED);
|
2010-02-12 22:03:23 +00:00
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_tot_edge_get", NULL, NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Selected Edge Total", "Selected edge count in editmode");
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
|
2012-03-05 16:19:16 +00:00
|
|
|
prop = RNA_def_property(srna, "total_face_sel", PROP_INT, PROP_UNSIGNED);
|
2010-02-12 22:03:23 +00:00
|
|
|
RNA_def_property_int_funcs(prop, "rna_Mesh_tot_face_get", NULL, NULL);
|
|
|
|
RNA_def_property_ui_text(prop, "Selected Face Total", "Selected face count in editmode");
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
|
2013-07-03 22:57:00 +00:00
|
|
|
prop = RNA_def_property(srna, "is_editmode", PROP_BOOLEAN, PROP_NONE);
|
|
|
|
RNA_def_property_boolean_funcs(prop, "rna_Mesh_is_editmode_get", NULL);
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
|
|
|
RNA_def_property_ui_text(prop, "Is Editmode", "True when used in editmode");
|
|
|
|
|
2009-12-28 00:52:31 +00:00
|
|
|
/* pointers */
|
|
|
|
rna_def_animdata_common(srna);
|
2008-12-02 23:45:11 +00:00
|
|
|
rna_def_texmat_common(srna, "rna_Mesh_texspace_editable");
|
2009-06-18 19:48:55 +00:00
|
|
|
|
|
|
|
RNA_api_mesh(srna);
|
2008-11-24 12:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void RNA_def_mesh(BlenderRNA *brna)
|
|
|
|
{
|
|
|
|
rna_def_mesh(brna);
|
|
|
|
rna_def_mvert(brna);
|
|
|
|
rna_def_mvert_group(brna);
|
|
|
|
rna_def_medge(brna);
|
|
|
|
rna_def_mface(brna);
|
2011-08-31 11:21:54 +00:00
|
|
|
rna_def_mloop(brna);
|
2011-08-31 05:13:21 +00:00
|
|
|
rna_def_mpolygon(brna);
|
2011-11-17 05:03:07 +00:00
|
|
|
rna_def_mloopuv(brna);
|
2008-11-24 12:12:24 +00:00
|
|
|
rna_def_mtface(brna);
|
2009-07-16 09:17:27 +00:00
|
|
|
rna_def_mtexpoly(brna);
|
2008-11-24 12:12:24 +00:00
|
|
|
rna_def_mcol(brna);
|
2009-07-16 09:17:27 +00:00
|
|
|
rna_def_mloopcol(brna);
|
2008-11-24 12:12:24 +00:00
|
|
|
rna_def_mproperties(brna);
|
2008-11-07 02:58:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|